Skip to content

evanschoffstall/Librerss

Repository files navigation

LibreRSS logo

LibreRSS

Your feeds. Your rules. Zero noise.

A self-hosted, open-source RSS reader built for calm, focused reading —
no ads, no algorithms, no distractions.

Next.js 16 React 19 TypeScript 5 Bun MIT License



✨  What is LibreRSS?

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.


🌟  Features

📡  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

🚀  Quick Start

1 · Install dependencies

bun install

2 · Configure your environment

Create .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

3 · Provision the database

bun run db:provision

Verifies your connection and applies the full schema in one shot.

4 · Start the dev server

bun dev

Open http://localhost:3000 🎉

GReader clients connect at http://localhost:3000/api/greader.php


🧱  Stack

⚡ Framework Next.js 16 · React 19 · TypeScript 5
🎨 UI Tailwind CSS v4 · shadcn/ui · Radix UI · Lucide Icons
🗄️ Database PostgreSQL · Drizzle ORM
🏎️ Runtime Bun

🗄️  Database Commands

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

👤  User Management

Create a user

bun run create-user <email> <password>

Inserts a user directly into the database. Minimum 8-character password. Ideal when public signup is disabled.


🗂️  Project Structure

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

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages