Re: Tom Critchlow’s proposal for a decentralised Goodreads-like system, how about using RSS?

16.51, Thursday 16 Apr 2020

Tom Critchlow is having smart ideas about websites that share lists of books, and an open, decentralised way to do it. So this blog post is a response to his ideas and gets a bit technical.

Lists of books that I like

Whenever I’m thinking about new systems, I like to keep in mind what I’d like to enable. So here are some lists of books:

I would love to be able to subscribe to these, and also have a custom aggregator so that I could read a review about one book, and find out who else has been talking about it.

Like Tom, I am no stranger to projects about books, having built a book vending machine that sent tweets and run a newsletter to share book recommendations because, like I said back in 2015, knowing what books someone loves is to know their perspective and their journey.

It would be neat if I could subscribe to people’s lists and recommendations, like subscribing to blogs or following someone on Twitter, then tap through and browse their bookshelves.

And I agree with Tom when he says that this doesn’t need to be (yet another) competitor to Goodreads. As he says:

Thinking through building some kind of “web of books” I realized that we could use something similar to RSS to build a kind of decentralized GoodReads powered by indie sites and an underlying easy to parse format.

Although where I differ is that Tom says something similar to RSS and my response is: well why not just use RSS? Well, kinda…

RSS is really simple syndication

Tom’s suggestion is library.json which is a machine-readable data format that includes lists of books. Each book object has a title, author, link, date finished, and links.

What I suggest instead is that this is split into two formats:

  1. the library, pointing at lists (like shelves or playlists) like “My favourite books about cybernetics” or “Great holiday reads”, and also smart lists like “Recently finished”.
  2. the book list is a simple list of book objects.

Taking the book list format first: rather than inventing a new format, my suggestion is that this is RSS plus an extension to deal with books.

This is analogous to how the podcast feeds are specified: they are RSS plus custom tags (this is the recommended approach in the RSS2 spec).

Why use RSS instead of a new JSON format? Because…

  • there are lots of existing code libraries to generate and consume RSS feeds, so it will be easier for the indie web to create tools
  • many questions such as versioning are already solved
  • there are existing applications that generate RSS. For example, it should be relatively simple to make a WordPress plugin that adds a few fields in the CMS and can share lists of books in this format
  • there are existing applications that consume RSS. For example, it may be possible to work with an RSS feed reader like Feedbin to get them to add some custom features for books
  • although RSS was originally in XML, it also has a JSON representation.

Playing near existing ecosystems is great. It’s easier to hack together implementations and get going, and it’s more likely that people will get involved.

In terms of the actual tags for the book object, I would suggest:

  • support all the regular RSS tags
  • keep it simple with a user-entered author and title, as Tom has already done
  • allow for multiple “same-as” links where the user can link out to Amazon, Open Library and so on. (It would be down to aggregators to figure out how to display this, but allowing for multiple links gives a good chance for a web of data to emerge.)
  • allow for multiple “also-in” links where the user can show what other lists their book is in (for example, it might appear in “sci-fi” and “top rated”, and it would be neat to have the discoverability)
  • when the spec is first published, have a set of tags that are labeled as “experimental” to see if there is any adoption: categories and rating spring to mind.

Then the question is how to handle library.json

Well there’s already a way to group RSS feeds, and that’s OPML. Yes it’s slightly weird for this purpose, but it’s well-established for sharing subscription lists and with some strong and documented conventions, it could work well. For example there should probably be:

  • a JSON representation of OPML
  • a common way to label a special feeds such as “recently read” or “top rated”
  • a way to link back from the “list of books” RSS feed to the user’s library OPML

Why use OPML? Because RSS readers already support importing feed from OPML, and it’s easier to build an ecosystem from an existing one.

I’m very taken by the use case in Tom’s post where it says “Ribbonfarm has just added a new list…”. This would be implemented by the aggregator monitoring for updates in the OPML file.

Some other things I like about Tom’s approach, in no particular order

I like that

  • this doesn’t require me to put my entire library online. It works for short lists, long lists, ongoing lists, temporary lists, and on-off lists
  • I can use this on an ad hoc basis from my own blog, just by adding a few fields and tagging a post as a “review”
  • as an approach, it’s not overly reliant on Amazon, etc… but by including the relevant links, a library aggregator could do the hard work of grabbing cover images, making “buy now” buttons, showing who else has reviewed the book, etc.

I would definitely like an aggregator that showed me book reviews from everyone I follow explicitly, and also everyone they follow – but no-one else. That would deal with the potential spam problem.

If this was also going to be public, how about a file called following which is exactly like the library but, instead of pointing at my own RSS lists of books, pointing at other people’s library OPML files? It’s what OPML is made for…

What next?

I know that using RSS instead of JSON objects looks more complicated on the face of it… but RSS is already battle-tested and there’s no point reinventing the wheel. And in terms of building an ecosystem, it’s faster to start with RSS rather than doing something bespoke. It worked for podcasting!

The next step would be to bash out a draft spec and put it on a web page so people can point to it. Given something that a few of us agree amongst ourselves, along the lines of the above, I would definitely be up for getting a book feed coming out of my blog in that format, plus a library file, and keeping it all live with a few reviews.

And that, if a few of us did it, we could quickly see what it all feels like by using off-the-shelf RSS readers (I use NetNewsWire on iOS and Mac), and then start playing around with aggregators too. Maybe find someone who is into WordPress to hack on a plugin too.

Anyway, Tom, back to you!

If you enjoyed this post, please consider sharing it by email or on social media. Here’s the link. Thanks, —Matt.