Phone and desktop
Install News from your browser like an app. Swipe through posts on your phone, fly through them with j k o l x on your desktop, and share any page to News to follow it.
Open-source RSS reader
News is a calm RSS reader for your phone and your desktop. No endless scrolling, no algorithm – just your sources. Every new post gets one quick decision: read now, later or not interested. Your devices stay in sync, end-to-end encrypted, no account needed.
Free & open source · installs like an app · works offline
The reader
Most readers pile up unread counters until you give up. News works like a good editor: everything new lands in your inbox, and every post leaves it again – with a decision. Hello, inbox zero.
Fresh posts from all your sources, newest first. Nothing gets marked as read behind your back.
Opens the article and files it under Done. Changed your mind? Undo is one tap away. o
Your reading list – on every device and saved for offline reading, even after the post has left its feed. l
Gone, no guilt. One swipe on your phone, one key on your desktop. x
No ads, no tracking, no “recommended for you” – just your sources, in one calm place.
Install News from your browser like an app. Swipe through posts on your phone, fly through them with j k o l x on your desktop, and share any page to News to follow it.
Scan a QR code and your devices are paired. Feeds, reading list and progress are locked up before they leave your device.
Everything lives in your browser. News starts instantly, keeps going in a tunnel and catches up once you are back online.
Follow any website – even one that has never heard of RSS. The built-in Collector finds the new posts anyway.
Import your OPML file and all your sources move in. Export is just as easy – no lock-in, ever.
No analytics, no third-party requests, no framework. Just a few kilobytes of plain JavaScript and self-hosted fonts.
Sync
Your devices share one secret key. It travels by QR code and never reaches the server. Everything is encrypted on your device first, so the server only ever holds one sealed file it cannot open. No database, no account, no e-mail.
Under the hood · Collector
Most readers give up when a site has no RSS link. News doesn't – thanks to the Collector, a small REST endpoint on the same server. It tries the most precise strategy first, falls back step by step and always returns the same clean JSON. Use it for News, or build your own reader on top.
GET /api/collect?url=https://medium.com/@someone
rule Page URL mapped to the native feed
{
"source": {
"strategy": "rule",
"rule": "medium-user",
"feedUrl": "https://medium.com/feed/@someone"
},
"entries": [ … 10 normalized entries ],
"meta": { "count": 10, "cached": false }
}
GET /api/collect?url=https://example.com/feed.xml
direct URL is a native feed
{
"source": {
"strategy": "direct",
"type": "rss",
"feedUrl": "https://example.com/feed.xml"
},
"entries": [ … 30 normalized entries ],
"meta": { "count": 30, "cached": false }
}
GET /api/collect?url=https://example.com/blog
discovered Feed declared in the HTML
{
"source": {
"strategy": "discovered",
"type": "atom",
"feedUrl": "https://example.com/blog/atom.xml"
},
"entries": [ … 24 normalized entries ],
"meta": { "count": 24, "cached": false }
}
GET /api/collect?url=https://example.com/news
guessed Feed found at a common path
{
"source": {
"strategy": "guessed",
"type": "rss",
"feedUrl": "https://example.com/news/feed"
},
"entries": [ … 20 normalized entries ],
"meta": { "count": 20, "cached": false }
}
GET /api/collect?url=https://example.com/insights
sitemap Entries built from the sitemap
{
"source": {
"strategy": "sitemap",
"type": "sitemap",
"feedUrl": null
},
"entries": [ … 50 normalized entries ],
"meta": { "count": 50, "cached": false }
}
GET /api/collect?url=https://example.com/press
html-article Entries extracted from the page
{
"source": {
"strategy": "html-article",
"type": "html",
"feedUrl": null
},
"entries": [ … 12 normalized entries ],
"meta": { "count": 12, "cached": false }
}
GET /api/collect?url=…24 h shared cache per sourceSSRF-safe – private hosts blocked, every redirect re-checkedRate limited per client
Self-host your own
News Reader is open source under the MIT license. Run it for yourself, your family, your team or your community – on your own domain, under your own brand. White-label is not an add-on: it is one theme file.
A handful of PHP files and a static web app. No database server, no build step, no container.
Colours and fonts live in app/theme.css. Swap the icons and the app name in the manifest – done. Your users see your reader, not ours.
Any web server with PHP 8.1+ and HTTPS. The bundled nginx config blocks everything except the app and the API.
# get the code
$ git clone https://github.com/kreativ-anders/news-reader.git
# let PHP write the feed cache + sync vaults
$ sudo chown -R www-data: news-reader/var
# make it yours
$ $EDITOR news-reader/app/theme.css
# open https://news.example.com/app/ – done
Requires PHP 8.1+ with dom, libxml, mbstring (curl recommended) and a writable var/. That's it.
A calm feed reader for your phone and your desktop browser. Every new post lands in your inbox and gets one decision: read now, later or not interested. It installs like an app, works offline and is free and open source.
No account, no ads, no tracking and no algorithm deciding what you see. Your reading progress lives on your devices, sync is end-to-end encrypted, and you can run the whole thing on your own server.
Your first device creates a random secret key. Other devices join by scanning a QR code or opening the pairing link. From that key, each device derives an access token and an encryption key. The server only ever gets the token and one encrypted file – the key itself never leaves your devices.
No. Feeds, reading list and progress are encrypted on your device (AES-256-GCM) before they are uploaded. The server stores one sealed file per vault, named after a hash of the access token – no database, nothing readable to leak. Like any website, the web server does see your IP address when you connect.
Then nobody can open the vault – not even us. That is the price of real end-to-end encryption. Want a backup? Export your feeds as OPML every now and then.
The REST endpoint that ships with News Reader: GET /api/collect?url=… turns any website or feed URL into normalized JSON entries. It tries a native feed first, then a declared feed, common feed paths, the sitemap and finally the page's HTML.
News can still follow it. The Collector uses the site's sitemap if it carries dates, and otherwise picks the posts straight from the page (JSON-LD, article elements or links below the requested path).
Yes – it is MIT-licensed. Colours and fonts live in one theme file, name and icons in the web app manifest. Run it for yourself, your family, your team or your readers, on your own domain.
PHP 8.1+ with dom, libxml and mbstring (curl recommended), a web server with HTTPS and a writable var/ folder. No database server, no build step, no background workers. An nginx config is included.
Yes. Export your subscriptions from Feedly as OPML and import the file in News under Feeds. News exports OPML too, so you are free to leave any time.
Open News in your browser, follow your first website and put it on your phone’s home screen – takes a minute. Or run your own News Reader, for you, your team or your readers.