Zenfeed - Documentation.


Zenfeed is a web-based RSS reader and aggregator. Its main "feature" is not to indicate the number of unread items : that's why it's zen.

On the right, you can see the main view : a clean list of feeds, indicating the title of the last entry for each of them.
If one feed is very prolific, it will not pollute this view with all his items.

[zenfeed screenshot]

List of feeds, index view.


  • Simple, tiny (~1K SLOC), and fast (cache)
  • No Javascript required (except for admin zone)
  • Clean and light UI
  • Easy installation : pip install zenfeed
  • Easy launch : zenfeed
  • Administration zone is accessible at the /admin/ relative URL (default password : zenfeed).
[zenfeed screenshot]

Single feed view.

  • Entry view is adapted for reading.
  • w,a,s,d keys for navigation (JS needed)
  • Each feed is separately configurable (fetching interval, pagination…)
  • Responsive design
  • Available in english, french, spanish.
[zenfeed screenshot]

Entry view.


Quick install for Debian/Ubuntu

Download the zenfeed.deb package.
Install it. Well done!

$ wget http://fspot.org/pkg/zenfeed.deb
$ sudo dpkg -i zenfeed.deb

With pip

You will need some system packages :

  • python-dev
  • python-pip

$ pip install zenfeed



$ zenfeed -h
Zen RSS feed reader.

  zenfeed [--database URI --favicons PATH -p PORT --log LOG --lang LANG
           --tz TIMEZONE --prefix PREFIX --no-cache --debug]
  zenfeed genstatic PATH
  zenfeed -h | --help
  zenfeed -v | --version

  -h --help           Show this screen.
  -v --version        Show version.
  -d --database URI   Specify database URI (SQLAlchemy format).
                      For SQLite, this is just a file name.
                      [default: ./zenfeed.db]
  -f --favicons PATH  Specify where favicons will be put.
                      [default: ./]
  -p --port PORT      Specify on which port to listen.
                      [default: 5000]
  --prefix PREFIX     If zenfeed is not alone in its domain/subdomain,
                      specify its path prefix. E.g: /zenfeed/
                      [default: /]
  --log LOG           Specify where to log messages, and which level to set.
                      Can be "stderr", "syslog", or a filename, followed by the level.
                      [default: stderr:INFO]
  --lang LANG         Fix the language instead of let it depend on the browser's value.
                      The language needs to be supported. E.g: en
                      [default: browser]
  --tz TIMEZONE       Specify which timezone to use, to adjust date and time display.
                      For french timezone : "--tz Europe/Paris"
                      [default: GMT]
  --no-cache          Disable cache on index and feed pages.
  --debug             Debug mode, do not use.


This command :

$ zenfeed -f favs/ -p 8080 --lang fr --log zf.log:INFO --tz Europe/Paris

starts zenfeed, and :

  • favicons (downloaded for each feed) will be stored in the favs/ directory
  • zenfeed will listen on port 8080
  • french lang will be used
  • logs will be append to zf.log file, if the level is greater or equal to INFO
  • Paris timezone (GMT+1) is selected
Because the --database parameter is not supplied, default settings will apply : database will be the zenfeed.db sqlite file in current directory.


If you want your web server to serve zenfeed's static files (served at the /static/ relative URL), you can collect these files into a directory with this command :

$ zenfeed genstatic path/to/static/dir/


Inspired by zencancan.