RSS with Newsbeuter

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 reading an article

Newsbeuter refers to itself as “the Mutt of RSS readers”, alluding to its keystroke-driven 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.

Installing Newsbeuter

Newsbeuter can be downloaded and built from source, or there are packages available in most GNU/Linux distributions. On Debian-derived systems, it’s available in the newsbeuter package:

# 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:

Export Google Reader feeds

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 called 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 GNU/Linux or BSD machine on which you intend to run Newsbeuter.

Importing feeds into Newsbeuter

Once you have your subscriptions.xml file ready for import, you can import the data straight into Newsbeuter using the -i option:

$ 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:

Newsbeuter with imported URLs

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:

Newsbeuter with feed titles and counts

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 q to move up a screen, and to quit the program; Q will quit unconditionally from any screen.

You can move to next and previous feed items with J and K. A nice quick way to read everything is to cycle through unread items across all feeds with 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 browser like 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 ?.

Managing feeds

Adding, removing, and tagging feeds is all done with the urls file. This might be saved in either ~/.config/newsbeuter/urls, or ~/.newsbeuter/urls. Either way, you can edit it directly within the program using E, which will start your $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: "Tech" "Comics" "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 Ctrl-t 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: "Tech" "Debian"


The Newsbeuter configuration file might be in either ~/.config/newsbeuter/config or ~/.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 q to 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.

User agents

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;"

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.

Special feeds

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 use special 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 curl(1) over ssh(1), and presents it as a normal feed in Newsbeuter. Note the quotes are required for any command that includes spaces.

Though I will miss Google Reader, I’ve found Newsbeuter a great replacement, and it fits very nicely as a permanent window in my tmux(1) session. Hopefully you’ll find it suits you too, and works well with your terminal-based workflow.