Your feeds. Your rules. Zero noise.
A self-hosted, open-source RSS reader built for calm, focused reading —
no ads, no algorithms, no distractions.
LibreRSS is a beautiful, self-hosted RSS reader you run on your own server. Subscribe to any feed, organize your sources into categories, and read clean distraction-free articles — all from one dashboard you control.
It also speaks the GReader protocol, so clients like NetNewsWire connect natively.
| 📡 Universal RSS support | Subscribe to any RSS or Atom feed |
| 🗂️ Category organization | Group feeds however makes sense to you |
| 🧘 Distraction-free reading | Clean article view, no clutter |
| 🔗 GReader API | Works with NetNewsWire, Reeder, and more |
| 🌙 Dark & light mode | Looks great either way |
| 🔒 Self-hosted | Your data stays on your server |
| 🚪 Invite-only mode | Disable public signup when you want |
bun installCreate .env.local at the project root:
DATABASE_URL="postgres://user:password@host:5432/dbname"
ALLOW_SIGNUP="false"
NODE_ENV="development"
# TRUSTED_PROXY_COUNT=1
# DB_MAX_CONNECTIONS=1
# DB_IDLE_TIMEOUT_MS=1000
# DB_EAGER_CONNECT_CHECK=false| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
ALLOW_SIGNUP |
"true" to open public registration, "false" to restrict |
TRUSTED_PROXY_COUNT |
Trusted reverse-proxy hops for X-Forwarded-For (default 1) |
DB_MAX_CONNECTIONS |
Max pg pool size (default 1, keep low to minimize DB CUs) |
DB_IDLE_TIMEOUT_MS |
Close idle pg clients after this delay (default 1000) |
DB_EAGER_CONNECT_CHECK |
"true" runs startup select 1; default is lazy/no pre-check |
bun run db:provisionVerifies your connection and applies the full schema in one shot.
bun devOpen http://localhost:3000 🎉
GReader clients connect at
http://localhost:3000/api/greader.php
| ⚡ Framework | Next.js 16 · React 19 · TypeScript 5 |
| 🎨 UI | Tailwind CSS v4 · shadcn/ui · Radix UI · Lucide Icons |
| 🗄️ Database | PostgreSQL · Drizzle ORM |
| 🏎️ Runtime | Bun |
| Command | Description |
|---|---|
bun run db:provision |
✅ Verify connection and apply full schema |
bun run db:push |
⬆️ Push schema changes directly (no migration files) |
bun run db:generate |
📄 Generate SQL migration files via Drizzle Kit |
bun run db:studio |
🔬 Open Drizzle Studio in the browser |
bun run create-user <email> <password>Inserts a user directly into the database. Minimum 8-character password. Ideal when public signup is disabled.
librerss/
├── src/
│ ├── app/
│ │ ├── api/ # Feed, article, and GReader API routes
│ │ ├── dashboard/ # Main reader UI
│ │ └── landing/ # Marketing / login page
│ └── lib/
│ ├── db/ # Drizzle schema and database client
│ └── api/ # Service layer
├── scripts/ # CLI scripts (provision, create-user, check)
└── public/ # Static assets
Made with ❤️ by Evan Schoffstall
MIT License · Free forever · Self-host it