Quill

An RSS reader that
actually files things.

A native macOS reader for NYT, Substack and whatever blogs you follow — grouped by topic rather than by source, with one keystroke to file an article into Notion.

SwiftUI & AppKit No Electron Builds without Xcode macOS 14+

What it does differently

The sidebar groups by topic, not by feed

Seventeen feeds produce one list of sources, which tells you nothing about what you actually want to read. Quill folds each publisher's own category tags into a canonical topic set — AI, Books, Politics, Health — and groups by that instead. Sources are still there, just demoted to a collapsible section.

Publisher categories are messy, so they get normalised

One NYT feed alone ships over 150 distinct category strings, down to "Death Row Records". Those are matched with word boundaries against a rule set and ranked, with the headline used only as a fallback when a feed publishes no categories at all. Your own hand-applied tags always win.

Full article text, not a teaser and a link

When a feed carries only a stub, Quill loads the publisher's page in an off-screen WebKit view and runs a compact Readability pass over the live DOM — real parsing, not regular expressions over raw HTML. Lazy-loaded images are promoted, relative URLs resolved, and the feed body kept as a fallback.

It adapts to your Notion database, not the reverse

No required schema. Quill reads your database's own properties and matches them by name and type — title, url, author, date, summary, tags, status — filling what exists and ignoring the rest. It writes to exactly one summary field and never touches one you've reserved for AI-generated text.

Build it

git clone git@github.com:antass/quill.git
cd quill
./build.sh

Command Line Tools are enough — no Xcode. build.sh compiles with swiftc, assembles the .app bundle by hand, ad-hoc signs it and installs to /Applications.

Connecting Notion

./add-notion-token.sh

Prompts for your integration token with the input hidden, hands it to Quill, which stores it in the macOS Keychain and deletes the temporary file. The token never sits on disk in plain text.

The step people skip: a token alone grants access to nothing. In Notion, open the database you want to save into, then ⋯ → Connections → add your integration. Without that, Notion hides every database from the token and Quill will show an empty list.

Keys

Refresh all feeds⌘R
Add a feed⌘N
Save to Notion⇧⌘S
Add a tag⌘T
Open in browser⇧⌘O
Star / unstar⌘L
Toggle read⌘U
Mark all read⇧⌘U

Known limits

The NYT blocks full-text extraction

NYT returns an empty bot-challenge page to an embedded browser, so full text can't be pulled even with a subscription. Quill ships a sign-in window that shares its cookie jar, which may clear the challenge — but this is unverified. NYT articles otherwise keep their RSS summary and open in your own browser.

Roughly a fifth of articles land untagged

Personal essays genuinely resist classification, and older articles stored before category parsing existed have none to work from. That share shrinks on its own as feeds refresh and backfill. Everything else goes in an Untagged bucket to tag by hand.