The recent announcement that Google Reader will no longer be available from July 1st has prompted many of its current users to look for alternative RSS reader applications. Despite the panic, there are plenty of other web-based and GUI options, but text user interface enthusiasts (and Arabesque readers) may find Newsbeuter worth a look in particular.
Newsbeuter refers to itself as “the Mutt of RSS readers”, alluding to
ncurses(3) interface, plaintext configuration with many
options, and extensive feature set. If you like the idea of using a client-side
RSS reader in a terminal, then this may be ideal for you.
Having a client-side reader is particularly valuable if you follow feeds which aren’t available on the public internet, or if you would prefer to keep your subscriptions relatively private. While Google Reader’s search is very good, it’s also handy to have a local cache of feed items to search, which is a feature of Newsbeuter.
Newsbeuter can be downloaded and built from source, or there are
packages available in most Linux distributions. On Debian-derived systems, it’s
available in the
# apt-get install newsbeuter
Newsbeuter will throw an error if you try to start it with no feeds defined. We’ll be fixing that shortly.
Exporting Google Reader feeds
If you’re using Google Reader, you should start by exporting your feeds in OPML format format using Google Takeout. You can do this by going to Reader Settings -> Import/Export -> Download your data through Takeout:
This leads you to the Google Takeout page, and offers you a download of all of
your Google Reader data, which you can retrieve by clicking Create Archive.
The downloaded zip file will contain (within a couple of directories) a file
subscriptions.xml. This is the OPML file containing the URLs and
categorizations of all the feeds to which you were subscribed. Save that
somewhere accessible on the Linux or BSD machine on which you intend to run
Importing feeds into Newsbeuter
Once you have your
subscriptions.xml file ready for import, you can import
the data straight into Newsbeuter using the
$ newsbeuter -i subscriptions.xml Import of subscriptions finished.
With this done, you should be able to start Newsbeuter with no options, and its main interface will start with the URLs to all your feeds:
You’ll note that none of these have any items yet; this is because the defaults
for Newsbeuter are to fetch the articles only on demand, not automatically. You
can start this process by pressing
R for Reload All, at which point the
titles of your feeds will appear, along with a count of their unread items:
Some useful keystrokes
From here, the basics are pretty intuitive; you can move around with the cursor
keys, and select feeds and items within them with
Enter. You can press
move up a screen, and to quit the program;
Q will quit unconditionally from
You can move to next and previous feed items with
Ctrl-k. A nice
quick way to read everything is to cycle through unread items across all feeds
n. You can save the complete text of an article with
s, and search for
articles matching a string (not a regular expression) with
You can press
o to open the feed’s URL in a browser; this works fine if
you’re using an X server, but you can also configure this to be a command-line
lynx if you’d prefer with the
browser option in the
configuration file. If you’re using PuTTY and you’re going to be copy-pasting
URLs from your terminal window, it helps to make sure you’ve configured it to
easily select URLs on double-click.
A complete list of all the keystrokes is available by pressing
Adding, removing, and tagging feeds is all done with the
urls file. This
might be saved in either
Either way, you can edit it directly within the program using
E, which will
$EDITOR to manage the URLs. Add and remove feed URLs, save the
file, quit, and you’re done; Newsbeuter will reload its defined feeds
automatically once the editor is closed.
If you imported your feeds from Google Reader and you were using folders to
keep your feeds organised, you may note that in your
urls file in Newsbeuter
the names of the folders are included in quotes at the end of each line:
http://www.debian-administration.org/atom.xml "Tech" http://www.jerkcity.com/jc.rss "Comics" http://www.kiwiblog.co.nz/feed "Politics"
These are tags, Newsbeuter’s way of organising feeds non-hierarchically. If
you have such tags defined, you can limit your view of feeds to a particular
tag by pressing
t to show only those matching feeds. You can press
to back out of that view and show all feeds again.
Creating a new tag is done by editing the
urls file as above. Add the tag in
quotes after the appropriate feed URLs. Note that you can have more than one
tag for each URL:
http://www.debian-administration.org/atom.xml "Tech" "Debian"
The Newsbeuter configuration file might be in either
~/.newsbeuter/config. The following
options might be useful:
auto-reload yes— Check all feeds for new items on startup, and periodically thereafter.
reload-time 30— Re-check all feeds automatically every 30 minutes.
notify-beep yes— Send a console beep every time new items are found. You will probably only want this if you are dealing sensibly with bells, for example with a visual bell system in GNU Screen or tmux, otherwise you may find an audible bell annoying.
confirm-exit yes— Prompt before quitting. Tapping
qto get to the top screen is a little error-prone, and it’s easy to quit accidentally.
The colorscheme for the application can also be customized here, and the keybindings too. See the Newsbeuter documentation for a complete list of configuration options.
You may find that some feeds don’t return any information when you use Newsbeuter, probably because the user agent string it sends is not recognised as an RSS reader. The feed for the Abstruse Goose comic is an example, as is Toothpaste for Dinner.
The easiest way to work around this is to make Newsbeuter identify itself as a better-known RSS reader. I’ve found that pretending to be Liferea works:
user-agent "Liferea/1.4.14 (Linux; en_US.UTF8; http://liferea.sf.net/)"
With this done and Newsbeuter restarted, the feeds seem more willing to yield their items for reading.
Daniel Aleksandersen points out in the comments that this is probably because Newsbeuter used a suspicious user agent string until his patch for 2.6. If you are using Newsbeuter 2.6 or newer, then you may not need to do the above.
If you can’t directly retrieve your feed from a URL, but need to generate it
programatically from a script or use a tool like
curl to retrieve it, you can
exec: URLs in the
urls file to manage this. For example, to
retrieve an RSS feed of my work’s network changelist, I do something like this:
"exec:ssh work curl http://changelog.worknet/rss.xml"
This retrieves the feed using
ssh(1), and presents it as
a normal feed in Newsbeuter. Note the quotes are required for any command that
Though I will miss Google Reader, I’ve found Newsbeuter a great replacement,
and it fits very nicely as a permanent window in my
Hopefully you’ll find it suits you too, and works well with your