Feedbrief is a native desktop app that turns RSS feeds into a daily briefing you can actually read. It fetches stories in parallel, scores them with a local Ollama model, summarizes the important ones, and saves each day's result so you can revisit it later.
- Pulls from a configurable set of RSS feeds
- Scores and tags stories with a local LLM
- Generates a single executive-style briefing from the top items
- Keeps a local history of briefs by date
- Lets you switch between personas with different feed sets and briefing prompts
- Opens the original article when you want the source material
- Runs entirely on your machine, with no webview or hosted backend
- Daily briefing view - see today's synthesized summary at a glance
- Live pipeline feedback - watch feeds load, articles score, and summaries complete in real time
- Topic filtering - narrow the finished briefing by topic tags
- History navigation - move through previous days or jump from saved history pills
- Persona management - create and edit persona profiles from inside the app
- Persona backup/restore - export the full persona set to JSON and import it back from the persona manager
- Local persistence - store briefs in SQLite so they are available across launches
- Offline-friendly workflow - the app checks whether Ollama is available and uses only local inference
- RSS feeds are fetched in parallel.
- Articles are scored and tagged by the selected Ollama model.
- The strongest stories are summarized into a concise briefing.
- The final brief is saved locally and can be reopened later.
- Rust 1.75+ - install from https://rustup.rs
- Ollama - install from https://ollama.com, then pull at least one supported model:
ollama pull llama3.1:8b
- Platform graphics dependencies:
- macOS: nothing extra needed (Metal is built in)
- Windows: nothing extra needed (DirectX is built in)
- Linux:
sudo apt install libxkbcommon-x11-0 libgtk-3-dev libwayland-dev libxkbcommon-dev
# Run in development mode
cargo run
# Build a release binary
cargo build --release
./target/release/feedbrief # macOS/Linux
.\target\release\feedbrief.exe # WindowsThe first build takes longer because eframe, winit, wgpu, and the platform graphics stack need to compile. After that, incremental builds are much faster.
Feedbrief stores briefs locally in SQLite. Persona backups are written to a JSON file in the same data directory.
- macOS:
~/Library/Application Support/com.feedbrief.Feedbrief/briefs.db - Linux:
~/.local/share/Feedbrief/briefs.db - Windows:
%APPDATA%\feedbrief\Feedbrief\data\briefs.db - Persona config:
personas.jsonin the same app data directory
You can open the database with any SQLite browser if you want to inspect past briefs, and you can move persona definitions between machines by copying the JSON export.
- Add or remove feeds: edit
src/feeds.rs - Adjust scoring or briefing prompts: edit
src/llm.rs - Change the UI palette: edit the color constants near the top of
src/app.rs - Tune the default window size: edit
src/main.rs - Manage personas: use the in-app persona editor and its JSON export/import controls
Feedbrief is a fully native Rust desktop app. The main pieces are:
egui+eframefor the UItokiofor async orchestrationreqwestandfeed-rsfor RSS fetchingollamaover HTTP for local scoring and summarizationrusqlitefor persistence
There is no browser shell involved; the app renders directly through the platform graphics stack.
feedbrief/
├── Cargo.toml
├── README.md
├── assets/ ← optional .ttf font files
└── src/
├── main.rs ← entry point, opens window
├── app.rs ← egui UI and views
├── feeds.rs ← feed source list and personas
├── fetcher.rs ← parallel RSS fetch
├── llm.rs ← Ollama scoring and summarization
├── progress.rs ← progress event types
├── pipeline.rs ← orchestration
└── storage.rs ← SQLite persistence and day navigation
- Source-level weight overrides
- Embedding-based dedupe
- Export a day brief as markdown or PDF
- Background scheduled fetches
- Bookmark or star articles across days
