ST

Stringer

Anti-social, self-hosted RSS reader

RSS & News Readers ★ 4.1k stars Medium setup MIT

Stringer is a self-hosted, anti-social RSS reader with no external dependencies on third-party services. It targets users who want a private, no-frills feed reader. It is deployed via a Ruby stack or Docker.

Key features

  • No third-party dependencies
  • Keyboard shortcuts
  • Simple unread-focused view
  • Self-contained

Pros & cons

Strengths

  • Private and minimal
  • Easy reading flow
  • No external services

Trade-offs

  • Slow development
  • Basic feature set

Stringer replaces

Last reviewed Sep 13, 2026 · 844 words

Stringer does one thing that neither Miniflux nor FreshRSS quite does: it shows you a queue of unread items, you press j to move down and k to move up, and when the queue is empty it tells you so and stops. No folders to manage, no counts nagging you, no social sharing, no recommendations. The project calls itself "anti-social" and means it. That is the entire pitch, and for a certain reader it is a better daily experience than the feature-rich alternatives. It is also a Ruby application with a slow release cadence and 4,131 stars, so most people should still install Miniflux and put Stringer on the "try one weekend" list.

What the anti-social design gets right

Stringer has been around since 2013, which puts it in the wave of readers written immediately after Google Reader closed. Its interface is a single column of unread items in chronological order, with a feed list that shows counts only when you ask. Read items disappear from the queue. Starring exists for the things you want to keep. Keyboard shortcuts cover everything: j and k to move, v to open the original, s to star, r to refresh. There is no "mark all as read above" because the whole design assumes you either read the thing or scroll past it.

If your relationship with RSS has decayed into "1,847 unread" and guilt, this model is a reset. Miniflux gets close with its minimal interface, but Stringer is more opinionated about the queue-as-the-only-view idea. The RSS is not dead piece makes the broader case for owning your reading again; Stringer is the most extreme expression of it.

It is self-contained, which is the point

The description says "no third-party dependencies" and it means no external services: no Feedly-style backend, no cloud fetcher, no analytics, no calls home. Feed fetching happens on a schedule inside the app, and the whole thing is yours. MIT licensed, single-user by design, with a Postgres database behind it and about 512 MB of RAM to run comfortably, mostly because Ruby applications are not small.

It also implements the Fever API, which is the part that saves it from being web-only. Any mobile client that speaks Fever (Reeder and Unread on iOS, several on Android) can sync with your Stringer instance, so the phone experience is whatever client you already like rather than a mobile web view. OPML import brings your existing subscriptions in; OPML export takes them out again, and that export is the whole migration story if you leave.

Deploying it: Docker, Postgres, patience

The maintained route is Docker Compose with a Postgres container beside the app. The compose file in the repository is the reference; broadly, you supply a DATABASE_URL, a SECRET_KEY_BASE, and a fetch interval, then run the database migration once before the first start. Put it behind a reverse proxy with TLS and stop there, since a single-user reader with a login page does not need SSO. Start with 512 MB reserved and expect it to stay there.

Bare metal is possible for people who already run Ruby, with a recent Ruby, Bundler and a Postgres role. I would not go that way unless you enjoy maintaining Ruby versions; a Docker image that someone else builds is the safer choice when the project's release pace is measured in quarters rather than weeks.

The honest operational note: development has gone quiet more than once in the project's history, then picked up under new maintainers. Feed parsing is the kind of code that rots as the web changes, and a reader that has not shipped in a year will hit feeds it cannot parse. Watch the commit history before committing your reading habit to it.

Where it falls behind the bigger readers

Stringer has no rules engine, no full-text fetching for truncated feeds, no per-feed scrapers, no multi-user, no Google Reader API for the broader client ecosystem, and no theming beyond what a browser extension gives you. Miniflux has all of those in a 20 MB Go binary that uses a fraction of the memory. FreshRSS adds extensions, multi-user and a huge community of client support. The FreshRSS vs Miniflux comparison is where most readers should be choosing, and the RSS category lists the rest of the field.

What I'd do

Run Miniflux as your reader. Then, if you find yourself never opening it because the counts feel like a to-do list, spend a Saturday standing up Stringer, import your OPML, and use it for a fortnight with a Fever client on your phone. If the queue model changes how you read, keep it and accept that you are running a slow-moving Ruby app on 512 MB. If not, export the OPML back out and you have lost nothing. It is a reader worth trying precisely because it refuses to be a platform.

Compare Stringer

30 head-to-head comparisons.

Similar rss & news readers apps