01 Free macOS app
Save it now. Read it properly, later.
A read-it-later app for the Mac, in the shape of Pocket. Give Stow a link and it fetches the page, extracts a clean readable article, and files it for a distraction-free read whenever you get to it.
Requirements
macOS · SwiftUI and SwiftPM, no external dependencies · one SQLite file, no account, no cloud
Build from source
Signing
The build script takes the best identity available — Developer ID, then a local self-signed one, then ad-hoc. A stable identity matters beyond Gatekeeper: macOS keys Automation grants to it, so ad-hoc builds lose the browser-tab permission on every rebuild.
02 The loop
A saved page should read like a page.
Not a bookmark with a title on it — the article itself, set in a serif reader that remembers how far you got.
Save
⌘L for a URL, ⇧⌘L to take whatever is on the clipboard. Stow fetches the page and pulls out the title, excerpt, hero image, reading time and article body through a readability heuristic of its own — no third-party parser.
Browse
A three-column cockpit: sidebar for Saves, Archive, Favorites, Highlights and All, plus a live tag list; then the item list; then the reader.
Read
A distraction-free serif reader with adjustable text size and real structure — headings, inline images, links, quotes, code. It resumes where you left off, and half-read articles wear a progress ring until they earn a ✓.
Return
A Continue Reading shelf at the top of Saves jumps you back into anything half-finished, so the pile stays a queue rather than an archive of good intentions.
03 Features
Everything you need to actually get through the pile.
Mark it, annotate it, listen to it, find it again a year later — and act on twenty things at once when the queue gets away from you.
Highlights & notes
Select and press ⇧⌘H to mark, again to unmark; attach a note, and search matches note text
Listen
Text-to-speech on any article, with the spoken paragraph highlighted and followed as it reads
Full-text search
Title, excerpt, host, tags — and the whole article body, not just the metadata
Bulk actions
⌘/⇧-click a range and the reader pane becomes archive, favorite, tag and delete for the lot
My order
Sort by date or reading length, or drag rows into an arrangement of your own
Feeds
RSS 2.0, RSS 1.0/RDF, Atom and JSON Feed 1.0/1.1, with smart feeds, folders and favicons
Menu bar
The unread count, a clipboard save, and Save Current Browser Tab from Safari, Chrome, Arc, Brave, Edge or Vivaldi
Chrome extension
One click, ⌘⇧S, or a right-click on any page or link — it sends only the URL, never the page
04 Feeds
A feed reader that never floods your reading list.
Subscribing shouldn’t fill your queue, so entries stay candidates until you hit Save to Stow — which keeps “Saves” meaning “I chose this”.
Smart feeds sit above the list — Today, Yesterday, All Unread and Starred — and subscriptions can live in folders that collapse, carry a combined unread count, and round-trip through OPML. Everything refreshes at launch and every thirty minutes, replaying each feed’s ETag and Last-Modified so an unchanged feed answers 304 and costs a header exchange rather than a download.
Feed discovery asks a local Ollama model for publications — and then throws its URLs away. Measured against llama3.1:8b, four of six suggested feed URLs were 404s while all six publications were real: the model remembers magazines and invents paths. So Stow keeps only the names, finds the feed itself by autodiscovery and then by the conventional paths, fetches and parses the result, and drops anything that doesn’t resolve rather than showing it as a hopeful link. There is a model-free option too — feeds found on the hosts already in your library.
Your library
One SQLite file at ~/Library/Application Support/Stow/stow.sqlite3 — WAL-journaled, one row per item or feed, and only the changed rows written.
The path probe is deliberately sequential. Firing all eight candidates at once earned an instant HTTP 429 from a site whose feed answers fine to a single request.
stow.shafer.llc05 Keyboard
The whole app drives from the keys.
Save, triage, read, listen and walk the unread queue without reaching for the trackpad.
- ⌘L / ⇧⌘L
- Save a URL, or the one on the clipboard
- ⇧⌘H
- Highlight the selection, or unmark it
- ⇧⌘F / ⇧⌘D
- Subscribe to a feed · discover new ones
- ⌘R / ⇧⌘U
- Refresh everything · jump to the next unread
- j / k
- Move down and up the list
- a / f / o / l
- Archive · favorite · open the original · listen
- s / u / space
- Save an entry · toggle read · walk the unread queue
- → / ←
- Move focus across sidebar, list and reader
Saving from the browser
The MV3 Chrome extension sends the app nothing but a URL — the fetching and the extraction happen in Stow, so the extension needs no access to page content.
Its listener binds to 127.0.0.1 only, and rejects any request carrying a non-extension Origin with a 403. Without that, any page you happened to be browsing could post into your reading list.
06 Moving in
Bring your Pocket list and your subscriptions.
Both live in the File menu, and neither asks you to start over.
-
01
Pocket
Either export shape — the classic ril_export.html or the later CSV — bringing across titles, URLs, tags, timestamps and archive/favorite state. Exports carry no article text, so rows land as stubs and each body is fetched the first time you open it: importing 5,000 links must not mean 5,000 immediate requests.
-
02
NetNewsWire
No export step at all. Stow finds your local NNW accounts, reads each one’s Subscriptions.opml, and — the part OPML cannot carry — lifts read and starred state out of a private, read-only copy of NNW’s database. A caught-up switcher does not face a thousand fake unreads, and old starred articles arrive with the bodies that may exist nowhere else.
-
03
OPML
Subscriptions in and out, folders included: they round-trip as nested outlines, and an import recreates whatever folder structure it finds.
07 Install
Clone it and run one script.
Free & open source · stow.shafer.llc · Source on GitHub
08 Next step
Need something built the same way?
Small, native, and honest about what it can’t do. Tell us what you’re making and we’ll come back with an approach and a timeline.