Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Miniflux Reader

This is a differently opinionated reader frontend for the Miniflux RSS engine.


As opposed to the mobile-first(?) stock UI of Miniflux, Reader is desktop-first and very possibly desktop-exclusive.

  • It gives 25% of your browser width to the sidebar which displays your categories and feeds tree structure. (That tree shows you which feeds and categories the current unread entries are in. Also, it is the interface to controlling subscriptions.

  • In the remaining 75%, it presents you with all your unread feed entries, one by one, in a long scrollable list, assuming you want to read them all in sequence. (You can of course stop at any moment, it won’t mark them all read at once.)

  • It puts important reading commands on keyboard shortcuts and right-click context menus.

  • It has not been tested in any browser except Firefox.


Assuming you host your own instance of Miniflux, you probably keep it behind a reverse proxy such as nginx. Probably on the root of a virtual server, too. So put index.html from this project into a subdirectory (e.g. /srv/www/miniflux/reader/index.html) and expose it in a separate location:

server {
  listen 443 ssl;
  server_name miniflux.mydomain.example;
  ssl_certificate […];
  ssl_certificate_key […];

  error_log /var/log/nginx/miniflux/error.log;
  access_log /var/log/nginx/miniflux/access.log;

  location /reader {
    root /srv/www/miniflux;

  location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

Note the SSL! Unless you only access Reader on localhost, your credentials will travel over the network with each API request. If you use unsecured HTTP, anyone who can listen to transit traffic will be able to intercept them.

By default, Reader will talk to the Miniflux API thinking it’s at the root of the server. If you keep Miniflux under a prefix, find the function myFetch and change the first argument of fetch from uri to e.g. `/miniflux${uri}`.

(You could also put Reader and Miniflux on different servers, but then you’d have to set up CORS headers the recipe for which this README is too small to contain.)


Logging in and out

Point your browser to https://miniflux.mydomain.example/reader/. On first visit, Reader will ask you to log in. If you check the “Remember me” checkbox, it will save your credentials in your browser’s local storage (which is like cookies but different). The logout button is in the top right corner.


By default, Reader will show you unread entries in all feeds. You can switch to All entries using the switch in the topbar. You can also narrow to a single category or feed. Watch the address bar as it changes. You can bookmark any filter combination.

Scrolling and marking

Reader implements smart page scrolling. Page Down, Space, and n all scroll down to the next entry or a little less than one pageful, whichever is smaller. Page Up, Shift+Space, and p scroll up by the same logic.

As you scroll the entries, those that scroll off the top will be marked read. You can scroll back and press M (that’s capital em!) to keep them unread. m marks an entry read, M marks it unread, and x marks it removed. All three act on the entry straddling the top edge of the window.

See other key shortcuts in the help screen, displayed with ?.

Feed management

  • To add a feed, right-click a category and select “Add feed”.

  • To modify a feed, right-click it and select “Edit”.

  • To unsubscribe, right-click a feed and select “Unsubscribe”.

  • To move a feed to a different category, use drag and drop.

Category management

  • To add a category, right-click “All feeds” and select “Create category”.

  • To rename a category, right-click it and select “Rename”.

  • To unsubscribe from all feeds in a category and delete it, right-click it and select “Delete”.

OPML import and export

Not implemented yet. Meanwhile, you can always access them in the stock UI.


A differently opinionated UI for an opinionated RSS aggregator







No releases published


No packages published