Self-hosted Β· Open source Β· AI-assisted

News,
distilled.

NewsGator reads your RSS feeds, merges the five articles covering the same event into a single Story, and hands you an honest headline, a two-minute summary and the sources β€” so you spend your time only on what deserves it.

β˜… View on GitHub See how it works ↓
Why it exists

Built out of
daily frustration.

I read the news every day, and it always felt like a struggle. I searched for the right app for years and never found it. In 2026, building an application is as easy as buying a piece of bread β€” so I described my need, and this is the result.

β€” the author, after one RSS reader too many

The problem

In 2026, news is
a firehose.

We are submerged. Knowing what to read is harder than reading itself β€” and the classic RSS workflow makes it worse, not better.

01

Drowned in feeds

You subscribe to many sources because you want different angles β€” and get hundreds of items a day. Nobody has that time. So you skim, anxious, sure you're missing what matters.

02

The same story, five times

Every outlet covers the same event. You read one, then a second β€” and the other three become pure noise you still have to wade through and dismiss, every single day.

03

The clickbait toll booth

A catchy title, an intro that says nothing. Click to the site, dismiss the cookie banner, scroll past the ads… to discover there was nothing in the article. Time is the most precious thing you have.

This is not a way to read the news.
It's a way to choose the news worth reading.

🧭

A filter, not a destination

The summary exists to help you decide, never to replace the article. The last step is always the same: open the piece and read it for real.

πŸ”—

Sources, always

Every Story lists every source it was built from, one tap away. Publishers did the work β€” they deserve the click and your attention.

βš–οΈ

Honest about AI

Summaries can be wrong. Models can be biased. No claim of truth here β€” just a triage tool. Trust, then verify at the source.

How it works

From XML firehose
to a handful of Stories.

You give it RSS feeds. It does the boring, repetitive part.

πŸ“‘

Ingest RSS / ATOM

Polls your feeds like any reader. New entries are deduplicated and queued β€” nothing is ever lost, even across restarts.

πŸ“„

Full-text fetch PAST THE TEASER

Goes and gets the real article content β€” not the three-line RSS teaser designed to make you click. Images included.

✍️

Summarize YOUR LANGUAGE

An LLM writes an honest headline and a compact summary β€” in the language you actually think in, whatever the source wrote in.

🧬

Embed & cluster DEDUPE BY MEANING

Each article is embedded and compared against existing Stories. Same event? It joins that Story instead of creating noise β€” and if it brings new facts, the merged summary and headline are refreshed.

β˜•

You read THE GOOD PART

Open the app, scroll or swipe through a handful of Stories, and deep-dive the ones that matter β€” at the source, as it should be.

Using it, every day

Open. Swipe.
Deep-dive.

A web app on your desktop, an installable PWA on your phone. Stories you skipped stay read; Stories that gained new facts come back badged β€œupdated” β€” never as fake unread.

The Stories list β€” one card per event, with sources and summary
The Stories list. One card per event β€” not per article. Honest headline, summary, source logos, reading time.
Story detail with merged summary and all sources
Inside a Story. The merged summary, then every source β€” one tap sends you to the publisher, where the real reading happens.
Mobile swipe deck β€” swipe left to mark read, right to go back
The swipe deck. On touch devices, Stories become cards: left = read, right = back. Triage a whole day in two minutes.
Live activity stream showing every pipeline decision
Full transparency. Every pipeline decision β€” poll, fetch path, LLM call and latency, clustering similarity β€” streams live. Nothing happens in the dark.
LLM usage dashboard with per-day chart and cost playground
Cost under control. Every LLM call is metered β€” tokens, latency, per-feed and per-stage. Type a $/1M price and see what it would cost on a paid API.
And the little things

Built for one user.
Polished for many.

πŸ—žοΈ

Story clustering

Duplicate coverage merges into one Story with a versioned, evolving summary.

🌍

Your language

Headlines and summaries written in the language you configure β€” per user.

πŸ“€

Share, translated

Share a Story to family in their language β€” translated on demand, sources included.

πŸ“‘

Readeck export

One tap pushes a permanent, self-contained copy to your Readeck instance.

πŸ‘οΈ

Honest read state

Read stays read. New facts on a read Story badge it β€œupdated”, never unread.

πŸ‘₯

Multi-user

Admin-managed accounts; read state and language are per user.

πŸ“±

PWA + dark mode

Installs on iOS & Android, follows your OS theme, works on flaky networks.

πŸ“ˆ

Full observability

Live activity stream of every pipeline decision, plus an LLM usage dashboard.

Your stack, your rules

Cheap to run.
Yours to keep.

  • Any OpenAI-compatible LLM β€” oMLX, Ollama, llama.cpp, LM Studio, or a paid API. No provider lock-in, ever.
  • No genius model needed β€” summarizing articles is a modest task; a small local model does it well.
  • Metered from day one β€” tokens and latency logged per call; a price playground estimates what a paid API would cost.
  • Boring, solid tech β€” FastAPI + SQLite (+ sqlite-vec, or external Qdrant), SvelteKit frontend, one Docker compose.
# that's the whole install $ git clone …/NewsGator && cd docker $ cp .env.example .env # LLM_BASE_URL β†’ your server $ docker compose up --build # β†’ http://localhost:3000

Stop drowning.
Start choosing.

Free, self-hosted, and it will never show you an ad or a cookie banner.