Most RSS readers are built like email. New items pile up. The unread count climbs. You feel pressure to clear it — or guilt when you can’t. Six months later you have an inbox of 4,000 articles you’ll never read.

Jorvik Daily News is built like a newspaper instead. Each morning’s edition is what your feeds published today. The ones from yesterday rotated off the front page. The ones from last week are gone. There is no backlog, because newspapers don’t backlog.

It’s an opinionated reader, and the opinion is this: read what catches your eye, and let the rest go.

Today’s paper, not today’s inbox

The app publishes one edition a day. Articles dated within the local calendar day flow into the paper; items older than midnight don’t appear, however unread they are.

Through the day, feeds re-fetch on each clock-hour boundary — 09:00, 10:00, 11:00 — and new same-day items accumulate into the running edition. The fetch timer re-arms after wake-from-sleep so updates don’t miss during long computer sleeps.

The front page leads with a single dominant story and a three-column masonry grid of secondary stories below. The paper prefers a lead that carries both halves — a picture that actually loads, warmed and validated before publishing, and text to read under the headline — but it never goes without one: failing that it takes a story with a picture, then one with text, then whatever it has. A lead with no picture becomes a full-width headline over a two-column deck, which reads as a paper with no art today. Sections beyond the front page get their own pages, navigable with commandleft and commandright or with the floating page indicator at the bottom of the viewport.

Set like a newspaper

Type is comfortable to read between roughly 45 and 75 characters a line. Across the full width of a large window a standfirst runs to about 113, so it is set in as many columns as its width warrants — two for the lead, one for a card — balanced to within a line of each other. A deck too short for two columns turns the lead on its side instead, with the picture in one column and the headline and text in the other.

Nothing is cut mid-sentence. The text is measured against the space before it is drawn and trimmed to the last whole sentence that fits, rather than the rendering being clipped with an ellipsis wherever the line happens to break. A headline that would end on a single orphaned word binds its last two words together so it doesn’t.

The front page of an edition: a dominant lead story, a masonry grid of secondary stories below, section pages signalled in the page indicator.

Video and PDFs play in place

A headline that points at a video opens the video — chrome-free, right inside the paper, no browser, no recommendation rabbit-hole. YouTube and Vimeo play as a bare embedded player; a direct video file plays in a native macOS player. A link to a PDF opens in a native PDF view — scroll, zoom, select text, find — instead of downloading or bouncing you out.

Most video feeds label their items, but some don’t — so any headline that will open a video gets a [VIDEO] tag added automatically when it’s missing. You always know you’re about to watch rather than read before you click, which matters when you’re somewhere a video would be unwelcome.

Sections that learn

Every feed belongs to a section: News, Tech, Culture, Business, Sport — or any custom section you create. Each section becomes a page in the edition.

Behind the scenes, an in-app classifier learns from the moves you make. Right-click any article, choose Move to…, pick a section, and two things happen: that article is pinned to that section permanently, and the classifier trains on the move. After three sections each accumulate three or more training documents, the classifier starts predicting sections for new articles automatically. Until then, articles fall back to their feed’s declared section.

The classifier is heuristic, not magical — a naive Bayes implementation with Laplace smoothing, English stopword filtering, and a length filter on tokens. It’s wrong sometimes. When it is, you correct it once and it learns. The model is yours; nothing leaves your Mac.

A section page showing the masonry layout flowing across multiple feeds.

A reader, not a redirect

Click a headline and the paper makes way for a clean reading view — not a modal, not a popup, just the article. Mozilla’s Readability extracts the main content from the source page; a serif stylesheet renders it at a fixed 680 pixel column width, dark-mode aware.

No ads. No trackers. No pop-ups. JavaScript is disabled in the extracted reader pane, so nothing on the page can run — not even the keychain prompts some sites push for “WebCrypto Master Key” access. The reader uses ephemeral WebKit sessions, so no cookies, local storage, or site data persist across sessions.

The reader header always tells you where the material comes from: the feed’s name, and beneath it the destination hosteconomist.com, youtube.com — in plain monospace. It’s there in every reading mode, so even a chrome-free video tells you its source at a glance. From the same header you can re-file the article into another section (training the classifier as you go) or exclude its source entirely, without leaving the page.

If Readability can’t parse the page (paywalled sites, JavaScript-rendered SPAs, strange CMSes), the reader doesn’t dead-end you — it renders the real page inline, in-app, with Open in Browser always in the header as the escape hatch. And it is measured rather than assumed: a page that lays out nothing to read gets an explanation and a link to your browser instead of an empty pane. The live page is the one place the app shows you somebody else’s page, so it does not run that page’s scripts unless you ask it to — the notice tells you how, if you would rather have working pages. The extracted reading view never runs any.

The distraction-free reader: serif type, fixed column width, dark-mode aware, no clutter.

Feeds without anxiety

Feed management is its own pane. You can:

Each feed shows a health pill next to its name — green if its most recent fetch succeeded, amber if it’s currently failing but succeeded within the last 30 days, red if it’s been failing for longer or has never succeeded. The pill makes a 300-feed collection actually manageable: at a glance you can see which sources have gone dark.

The Manage Feeds pane: feeds organised in sections with health pills, search bar, and OPML buttons.

Quietly good plumbing

Things you don’t notice unless they’re absent:

What it doesn’t do

Keyboard shortcuts

ShortcutAction
commandNAdd a feed
commandRRefresh now
shiftcommandFManage feeds
shiftcommandOImport OPML
shiftcommandEExport OPML
command1Front page
commandleft / commandrightPrevious / next page in the edition
escBack to the paper from the reader

Auto-update

Updates are handled by Sparkle. The app checks for new versions automatically once a day in the background and surfaces them as a non-modal alert. You can also trigger a check from Jorvik Daily News → Check for Updates… at any time.

Requirements

macOS 14 (Sonoma) or later. Universal binary (Apple Silicon and Intel).

Installation

The recommended path is the installer — it bypasses macOS’s download quarantine and App Translocation, so the first launch is clean.

  1. Download JorvikDailyNews.pkg and double-click to install
  2. Launch Jorvik Daily News from your Applications folder
  3. Add a feed (commandN) or import an OPML file (shiftcommandO) to begin

If you prefer the .zip: download JorvikDailyNews.zip, unzip, and drag Jorvik Daily News.app to Applications. Subsequent updates flow through Sparkle either way.

Or install it with Homebrew: brew install --cask perpetualbeta/jorvik/jorvik-daily-news

Building from source

Jorvik Daily News builds via the shared Jorvik release.mk. With the jorvik-release sibling repo cloned alongside it and GNU Make 4 installed:

  1. Clone the repo: git clone https://github.com/PerpetualBeta/JorvikDailyNews.git
  2. Run gmake release
  3. The signed, notarised, stapled .pkg and .zip land in .build/