A self-hosted RSS feed aggregator with a built-in web UI.
Single Rust binary, embedded React frontend, SQLite storage. Built on the news-flash engine.
- Feed management: add, discover, import/export OPML, per-feed refresh
- Articles: list, search, save with notes and tags, mark read/unread
- Categories and unread badges
- Privacy-friendly image proxy (private-network proxying off by default)
- PWA: installable, works offline after first load
![]() Overview |
![]() Feeds |
![]() Reader |
![]() Sources |
![]() Overview |
![]() Feeds |
![]() Reader |
![]() Sources |
- Rust toolchain (stable) +
cargo - bun for the frontend (used for both dev and build)
The build links against a few system libraries (via the news-flash engine and
reqwest). You need these installed before cargo build:
- pkg-config — build-time dependency probe
- OpenSSL headers (
libssl-dev) — Linux/macOS only (Windows uses SChannel)
Install per platform:
# Debian / Ubuntu
sudo apt-get install -y pkg-config libssl-dev
# macOS (Homebrew)
brew install pkg-config opensslIf bun is not on your PATH (e.g. installed via the bun installer into ~/.bun/bin), add it:
export PATH="$HOME/.bun/bin:$PATH"make build # builds frontend then cargo build --release
./target/release/feedea --data-dir /path/to/dataOn first run feedea prints a generated password to stderr. Log in at the web UI and change it in Settings.
Default data dir (when --data-dir is omitted):
$HOME/.local/share/feedea (or FEEDEA_DATA_DIR).
Run backend and frontend together:
make dev- backend:
cargo runon port 3000 - frontend:
bun run dev(Vite) on port 5173, proxying/apiand/imgto the backend
Or run them in two terminals:
# terminal 1 — backend
make backend-dev
# terminal 2 — frontend
make frontend-devThen open http://localhost:5173.
make test # cargo test + frontend typecheck/lint| target | purpose |
|---|---|
make build |
bun run build then cargo build --release |
make run |
cargo run --release (single binary) |
make dev |
backend + Vite concurrently |
make test |
cargo tests + frontend typecheck/lint |
make clean |
remove target/, frontend/dist, frontend/node_modules |
The binary accepts these flags; each can also be set as an environment variable:
| flag | env | default | description |
|---|---|---|---|
--data-dir |
FEEDEA_DATA_DIR |
~/.local/share/feedea |
data directory |
--host |
FEEDEA_HOST |
0.0.0.0 |
listen address |
--port |
FEEDEA_PORT |
3000 |
listen port |
--allow-private-proxy |
FEEDEA_ALLOW_PRIVATE_PROXY |
false |
allow proxying images from private networks |
Example:
FEEDEA_PORT=8080 FEEDEA_ALLOW_PRIVATE_PROXY=1 ./target/release/feedea<data_dir>/
feedea.sqlite # feedea settings, sessions
feedea.sqlite-wal, -shm # SQLite WAL files
engine/
config/ # news-flash config
data/
database.sqlite # news-flash feed/article database
Back up the whole <data_dir> for a full snapshot.
See docs/selfhosting.md for the systemd unit, deployment notes, and troubleshooting.
feedea links against news-flash, which
is licensed GPL-3.0-or-later. The combined binary is therefore distributed
under GPL-3.0-or-later — provide the corresponding source if you distribute
the binary. See Cargo.lock for the full dependency tree and licenses.







