commafeed
Google Reader inspired self-hosted personal RSS reader.
What is it?
What it is
CommaFeed is a self‑hosted RSS reader inspired by Google Reader, built with a Quarkus backend and a React/TypeScript frontend.
Why it exists
It offers a privacy‑first, ad‑free alternative to commercial readers, with features such as multiple layouts, dark/light themes, keyboard shortcuts, RTL support, thousands of feeds, OPML import/export, REST and Fever‑compatible APIs, auto‑marking of read articles, push notifications, custom CSS/JS, native compilation for fast startup, and support for several databases.
Who should use it
Developers, system administrators, and tech‑savvy users who want a self‑hosted, customizable RSS reader with advanced features such as OPML import/export, REST and Fever‑compatible APIs, push notifications, and native‑compiled binaries.
Who should avoid it
Users looking for a simple, out‑of‑the‑box RSS reader without self‑hosting or advanced configuration, or those who prefer a managed service and are not comfortable with Docker, Java, or command‑line setup.
How it works
A quick walkthrough in plain English
How commafeed works
Step 1 of 3
You interact with it
Open commafeed, send a request, or connect it to your stack.
Features
Advantages
- Self-hosted, giving full control over data
- No ads, no tracking, data not sold or exploited
- Free public instance available (donation-funded)
- Easy deployment via Docker images
- Affordable cloud hosting via PikaPods (starting at $1/month)
- Native compilation reduces startup time and memory footprint
- Supports large scale (thousands of users, millions of feeds)
- Extensive language support (25+ languages)
- Highly customizable via CSS/JS and themes
- Provides REST and Fever-compatible APIs for integration
- OPML import/export for easy migration
- Browser extension enhances usability
- Open-source Apache-2.0 license
- Built with modern stack (Quarkus backend, React/TypeScript frontend)
Disadvantages
- Public instance has limitations compared to self-hosted setup
- JVM package requires a JRE and manual memory tuning for low-memory environments
- Native compilation requires GraalVM installation
- Memory management may need manual configuration (-Xmx, GC tuning) to avoid high usage
- Login persistence requires setting encryption key; otherwise credentials lost on restart
- Setup for non-H2 databases requires manual configuration of datasource properties
- Limited to supported databases (H2, PostgreSQL, MySQL, MariaDB)
- May require some technical knowledge for self-hosting and customization
Installation
cloud
Deploy with PikaPods using the 1‑click link: https://www.pikapods.com/pods?run=commafeed.
docker
Pull the image from Docker Hub (athou/commafeed) and run it with Docker, e.g. `docker run -p 8082:8082 athou/commafeed`.
native
Download the native package (linux-x86_64, linux-aarch_64, windows-x86_64) from the releases page and run the executable directly, or build from source with `./mvnw clean package -Pnative`.
FAQ
How do I configure CommaFeed to use a specific database like PostgreSQL or MySQL?
Set the `quarkus.datasource.jdbc.url`, `quarkus.datasource.username`, and `quarkus.datasource.password` properties in `application.properties`, environment variables, or command-line arguments with the appropriate database URL and credentials.
What are the key differences between native and JVM packages?
Native packages compile to executable binaries with faster startup and lower memory usage, while JVM packages require a JRE and use Java bytecode, offering cross-platform compatibility but slower performance.
How can I customize the look of CommaFeed?
Use custom CSS via the [custom CSS documentation](https://athou.github.io/commafeed/documentation/custom-css) or modify JavaScript to adjust themes, layouts, or features like keyboard shortcuts.
Does CommaFeed support push notifications for new articles?
Yes, CommaFeed includes push notifications for new articles. For mobile apps, use the Fever-compatible API to integrate notifications.
How do I manage memory usage on systems with limited RAM?
Use JVM flags like `-Xms20m -XX:+UseG1GC` for dynamic memory sizing or switch to the OpenJ9 JVM for better memory efficiency. Native packages also optimize memory usage.
What steps are required to add a new language for translation?
Add the locale code to `commafeed-client/.linguirc` and `i18n.ts`, run `npm run i18n:extract` to generate the PO file, then translate the messages in the new `messages.po` file.
Featured in Videos
YouTube tutorials and walkthroughs for commafeed
Alternatives
Similar projects ranked by category, topics, and text overlap.