Jeremy W. Sherman

stay a while, and listen

Farewell, Google Reader

Google Reader is shutting down. This is an excellent opportunity to move your blog-reading from the company store over to some fresh property you control.

If all you want is a Reader-alike, you have your pick of several options.

But I had something else – something better – in mind.

Reader-Schmeader

First, let’s get the Reader-alikes out of the way:

If that’s all you’re looking for, have at it.

A River Runs Through It

What I had in mind was somewhat different.

Past RSS reader avoidance had taught me to run away from the gotta-read-them-all whack-a-mole of mailbox-style RSS readers. I’d had a better experience with Twitter and similar social streams, even as my follow-list ballooned to be far busier than my RSS feeds ever were.

It was Dave Winer’s River2 that showed me I could have it all for RSS. The only problem: It runs under Windows. I don’t have a Windows web host, nor do I have any interest in maintaining a Windows box, so I had to look elsewhere.

So what I wanted instead of The Next (Yet Another) Reader was a solution that would:

  • run fine on a *nix box
  • present feeds as a River of News (stream-style) rather than as a mailbox
  • have a server component with API, so I could access my feeds however
  • support multiple users so I could share with family or friends

Nothing Doing

After some looking, the closest things I’d found to the River-spirit were the Planet aggregators, like Venus. Planet feeds are really aggregate-feeds that repackage several feeds into one large feed. You can see an example of a planet-river at Planet IF.

A planet really only hits the ’nix and river bullet points, which is a real let-down as far as a personal solution goes. It won’t track where I am in the stream, and it only supports multiple users inasmuch as it has no notion of users. The existing solutions also had a very Rube Goldberg sense to them; not something I could place much confidence in. And subscribing to more feeds would require editing config files.

So I looked for a good long time. In the end, I came up with this list of not-quite solutions:

Nothing was quite what I wanted. I thought of making my own solution. Then I thought better, and instead gave Newsbeuter a chance.

Newsbeuter

Newsbeuter claims to be “the Mutt of RSS Readers”. Zed Shaw first used this title, and Newsbeuter has since embraced it.

I don’t use mutt, so I can’t speak to the title’s appropriateness, but Newsbeuter works pretty well. It mostly stays out of the way. It’s less a mailbox and more a hierarchical menu. It’s actually surprisingly iPhone-flavored in how its view stacks work.

So what of my requirements?

  • You could scarce dream up a more ’nix reader if you tried. (OK, rsstail might win Unix-philosophy-wise, but Newsbeuter nails the feel and is more practical.)
  • As far as the River of News experience goes, Newsbeuter still tracks read/unread status per article, but it’s not obnoxious about something being OMG unread. It’s configurable enough that you could almost entirely hide read status if you so wished.
  • Newsbeuter is local only. So much for the server-side with API dream. Well, I was about to give up on finding a reader solution entirely, so a half-measure was better than none.
  • And supporting multiple users doesn’t mean much without a server component.

So I had something that would sort of work. It didn’t satisfy all my dreams, but it worked. That’s a good start, I figured.

screenshot of Terminal showing Newsbeuter viewing my Last 24 Hours query feed

RTFM

I read through Newsbeuter’s manual. The manual is more comprehensive than most.

The manual provides! It turns out I can shape Newsbeuter into a river of news reader. You just need to set up a query feed that shows you recent articles, ignore everything else, and be generous with the “mark all as read” command.

And provides again! It turns out Newsbeuter can sync with a server, so long as that server is Google Reader or Tiny Tiny RSS. Well, Google Reader was not an option, but Tiny Tiny RSS certainly was.

But it doesn’t answer all questions.

Could I use query feeds, my solution for creating a semi-river, alongside tt-rss, my solution for keeping feeds subscribed to synced across several devices? I couldn’t tell from the manual alone.

So I looked up Newsbeuter’s source on my phone. I expected to give up in frustration after a few taps and wait till I got back to my laptop to git clone and git grep. But I found the answer in no time:

  • ttrss_urlreader first loads all query feeds from the urls file,
  • then it hits the tt-rss API for the list of feed URLs

So I can totally rig up all the query feeds I want alongside using tt-rss as the main feed URL source.

The manual doesn’t answer all questions, but it answers most of them. For the rest, there’s the sourcee. Newsbeuter is written in clean, well-organized C++. It’s one rare project that won’t make you cry to read the source. Call me impressed.

Tiny Tiny RSS

Tiny Tiny RSS, you say? Well, that will let me sync my feeds across devices. I pull up the tt-rss project’s docs (oh the pain of slow slow Trac); I read the Lifehacker article I linked up above; it looks workable.

I set Tiny Tiny RSS up in no time on Dreamhost, and soon I am viewing RSS feeds in my browser. I’m not too keen on the UI; the Actions menu and Preferences sections feel like a sin bin of options, and early 2000s console-style “Loading” screens aren’t really my thing; but, it works!

a bar 50% filled with text

Once configured, the UI doesn’t matter anyway, because tt-rss is just a sync point, not my reader. Its whole purpose in life is editing the feeds I subscribe to and servicing API requests from my actual readers.

But there was a hitch: I couldn’t get Newsbeuter to auth with my tt-rss install no matter what I did. So I turned to my trusty mitmproxy.

Reviewing the server’s responses quickly revealed the problem: API access wasn’t turned on for my user! You have to go under settings for your user in Tiny Tiny RSS and turn on the “external API” support manually.

Surprise! Without that, everything third-party will fail to work with Tiny Tiny RSS. And it’s disabled by default. Of course.

screenshot of the Preferences screen with the Enable API option highlighted

Victory?

So in the end, I got what I wanted, after a fashion:

  • I run Newsbeuter locally and tt-rss remotely. Both happily hum along atop ’nix.
  • tt-rss doesn’t present a river, but I only use it to edit my feed list. Instead, I use Newsbeuter, which I have transformed into a River-style reader through careful configuration.
  • tt-rss rescues the server-side dream. A very PHP rescue in need of a UX and design team, but I’ll take “it works” over “it doesn’t even exist” any day.
  • And tt-rss has multiple user support.

If you’re looking for an RSS reader solution, and are interested in trying something off the beaten path, give Newsbeuter and Tiny Tiny RSS a shot. They’re more than the sum of their parts.