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 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 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.

24 thoughts on “RSS with Newsbeuter

  1. Pingback: RSS readers on Linux — The Endeavour

  2. Pingback: Preparándonos para la muerte de Google Reader: Lectores RSS para Linux | AleQwerty Blog GNU/Linux

  3. Pingback: Lazy Reading for 2013/03/17 – DragonFly BSD Digest

  4. Hello,

    Something I’ve found very useful: add a “&” to the browser command, so the browser opens in background and you’re not forced to close the browser in order to continue reading articles in newsbeuter.

    Example: browser “google-chrome %u &”

    Thank you for another great article. :)

  5. I’ve been trying newsbeuter and a few more. Newsbeuter is a very good software (I especially like the tagging and the quick response). However, I find it hard to read extensively on the CLI. Thus, I have reluctantly fallen back on Liferea with all its limitations!

      • I have changed my terminal’s font to Terminus:14 and gave newsbeuter another go. It’s much better now!

        And while I can keep everything synched across my computers through Dropbox, the source option in the config file allows me to have machine-specific customisations. Neat!

        • Yeah, I see Terminus everywhere among terminal enthusiasts. I tried it and it’s not for me (I actually rather like anti-aliased/Xft fonts) but it’s certainly a step up from the default Xterm font, or Courier New.

  6. I love newsbeuter, and use it daily. But one quirk I discovered is about how to download your feeds quicker. This line in ~/.newsbeuter/config describes how the feeds can be reloaded faster by downloading in parallel…

    reload-threads 4

    But I discovered that this speedup only happens for when newsbeuter is started with the “-r” option for reload. Whereas if “R” is pressed from within newsbeuter, then all the feeds will reload, but just one-at-a-time.

    $ newsbeuter -r

  7. Which version were you using when you had problems with the User-Agent? (and what is the default User-Agent you got?)

    The 2.6 release includes a patch I submitted that simplified the User-Agent. It removed the curl component which was the cause for all the blocks I experienced.

    • Hi Daniel; I’m using Newsbeuter 2.5 on Debian Sid. That does sound like a likely cause, and it would make sense that some administrators would block curl as a user agent.

      I’ve added a note to the article under the relevant section, linking to your comment and the patch you made. Thanks for commenting!

  8. Pingback: Newsbeuter for feed reading | PHP Developer

  9. i like to watch feeds by time not by feed url. Newsbeuter can’t do that so there is no good cli feedreader. I’m annoyed :(

Leave a Reply

Your email address will not be published. Required fields are marked *

You can use Markdown if you want.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>