Releases: antoinefink/interleave
Interleave 0.4.0 — signed & notarized: installs with no Gatekeeper warning
Interleave 0.4.0 is the first Developer ID–signed and Apple-notarized build: a downloaded .dmg now mounts and installs with no Gatekeeper warning and no xattr workaround, even offline. On top of that headline, the daily /process loop, queue, and reader get another deep round of polish and hardening. Everything still runs 100% on-device against native SQLite + a filesystem asset vault — no cloud dependency. Built on v0.3.0.
Highlights
Installs with no warning — signed & notarized
- Developer ID signing + Apple notarization + stapling, applied to both the app and the
.dmg. Gatekeeper opens it cleanly on first launch — the oldxattr -dr com.apple.quarantinedance is gone. - Works offline — the notarization ticket is stapled into the app and the disk image, so a freshly downloaded copy verifies without a network round-trip.
- Hardened runtime with the minimal entitlements the on-device native modules (SQLite, embeddings, OCR) need, and a one-step signed-release build.
A more focused daily loop — process & queue
- Inline process session controls and work routed by actionable stage, so the one-at-a-time
/processloop sends you to the right next step. - Queue clarity — clarified eligibility semantics, a "soon" inbox-triage path, a queue sidebar badge that refreshes on updates, a hidden/By-default-quiet queue search area, and in-place undo kept aligned with lifecycle actions.
- Process source reader — realigned design and layout, reclaimed vertical space, fixed text measurement, restored scroll + rich content display, fixed stale block-processing reads, and kept metadata on a single line.
- Process extract workbench — expanded the workbench, bounded extract→source references, contained distillation prose scrolling, and verified reader reachability from an extract.
- Read-now sources are scheduled to return instead of falling out of view.
Inbox & capture
- Actionable triage — the inbox balance banner/warning now surfaces its triage actions directly instead of just flagging a problem.
- Sharper extension brand mark in the Chrome capture popup.
Reader & review
- Large-selection toolbar anchoring fixed in the reader.
- Flatter review card surfaces for a cleaner grading view.
Under the hood
- Electron E2E suite stabilized and local macOS launches quieted; Interleave dock icon shown in dev.
- Agent/contributor instructions split by scope; workspace lint clean.
Quality gates (all green at this commit)
pnpm typecheck— 14/14 projectspnpm lint— Biome clean (905 files)pnpm test— Vitest 3,248 passing (376 files)pnpm --filter @interleave/desktop dist:release— produces the signed + notarized.dmgbelow
Install (macOS, Apple Silicon)
No quarantine workaround anymore — this build is notarized:
- Download
Interleave-0.4.0-arm64.dmgbelow (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications. - Open Interleave. That's it — no right-click → Open, no
xattr.
The Chrome extension is built separately: pnpm --filter @interleave/extension build, then load apps/extension/dist/ unpacked in Chrome and pair the token in Settings → Browser capture.
sha256(Interleave-0.4.0-arm64.dmg) = 627fe17ae719add1c330045b868e6e02683a8e3cdbbff4372a16dd80f4c40487
This is a pre-1.0 release: green and heavily tested, but not yet daily-driven/battle-tested. Your data is local — back it up (automatic) from Settings.
Full changelog: v0.3.0...v0.4.0
Interleave 0.3.0 — faster daily loop, durable processing & automatic backups
Interleave 0.3.0 is a polish, hardening, and reach release on top of the v0.2.0 gold-standard system. There's no new "Part" of the roadmap here — instead the existing local-first incremental-reading machinery gets a faster daily loop, durable processing, automatic backups, a redesigned browser-capture path, and a big jump in test coverage (2,256 → 3,132 tests). Everything still runs 100% on-device against native SQLite + a filesystem asset vault — no cloud dependency.
Highlights
A faster daily loop — process without leaving the queue
- Inline source processing — read, highlight, and extract a source directly inside the
/processone-at-a-time loop, with no detour out to the full reader. - Inline extract workbench — distill an extract and build cards in place; active cards are now embedded in the extract workspace, so you can review them alongside the lineage without context-switching.
- Durable processed spans — processed/extracted spans persist block-by-block, so your progress through a long source survives re-renders and app restarts.
- Inline undo recovery — queue actions are undoable in place (with a keyboard shortcut), so a mis-postpone or accidental extract is one keystroke to recover.
- Quieter autosave — edit surfaces autosave silently (the status chips are gone) and teardown is hardened so an in-flight save can't be lost on navigation.
Capture & onboarding
- Redesigned Chrome extension — renamed to Interleave, with a reworked capture popup, clearer pairing options, the brand logo as the MV3 toolbar icon, and a one-click path to open the captured source in the app. Still delivered over the token-protected
127.0.0.1loopback server — it never touches the database directly. - Article images come with you — importing an article now downloads its images into the local asset vault, so sources render fully offline and stay readable years from now.
- Onboarding flow + in-app help center — a first-run flow plus a searchable, deep-linkable help center built from the design handoff.
- Public website — a static landing site (
apps/site) with a live in-browser demo.
Safety net — automatic backups
- Automatic rolling backups with retention, so your local knowledge base is snapshotted without you having to remember.
- Restore & reset from Settings — restore a backup or reset local data in-app, and jump straight to the backups folder.
Find & navigate
- Command-palette upgrades — look up any source from the palette, full keyboard navigation, smarter result ordering (commands vs. sources), and collection-explorer modes folded in. Search moved out of the sidebar and into the palette where it belongs.
- Review-activity heatmap in Analytics, backed by durable review-stats capture.
- Task workflow upgrade — library tasks now route to their protected elements.
Polish & theming
- System theme preference (follow macOS light/dark) plus a compact theme picker in the user menu.
- Dozens of focused design fixes across the reader, inbox, queue, search, settings, editor, and shell — processed-paragraph affordances, breadcrumb/lineage clarity, clickable source URLs, cursor affordances, spacing, and dark-mode icon fixes.
Under the hood
- Test coverage jump: 2,256 → 3,132 Vitest tests (371 files), plus an expanded battle-testing matrix and tightened IPC validation at the typed boundary.
- CI hardening (skip the Electron binary download, retry flaky installs) and resolved Dependabot security alerts.
Quality gates (all green at this commit)
pnpm typecheck— 14/14 projectspnpm lint— Biome clean (897 files)pnpm test— Vitest 3,132 passing (371 files)pnpm --filter @interleave/desktop dist— produces the.dmgbelow
Install (macOS, Apple Silicon)
The .dmg is ad-hoc signed, not notarized, so clear the download quarantine once:
- Download
Interleave-0.3.0-arm64.dmgbelow (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications. - Clear the quarantine attribute — right-click → Open does not work for ad-hoc builds on recent macOS:
xattr -dr com.apple.quarantine /Applications/Interleave.app
- Open Interleave normally.
The Chrome extension is built separately: pnpm --filter @interleave/extension build, then load apps/extension/dist/ unpacked in Chrome and pair the token in Settings → Browser capture.
sha256(Interleave-0.3.0-arm64.dmg) = 87d305c8b70896df417bd257d0310e5a941c771e5c201f5f44de875ff9359f6f
This is a pre-1.0 release: green and heavily tested, but not yet daily-driven/battle-tested. Your data is local — back it up (now automatic) from Settings.
Full changelog: v0.2.0...v0.3.0
Interleave 0.2.0 — gold-standard local-first
Interleave 0.2.0 turns the local-first MVP into the full gold-standard incremental-reading system — the entire Part II roadmap (M12–M20) on top of the M1–M10 core loop. Everything runs 100% on-device against native SQLite + a filesystem asset vault; there is no cloud dependency.
Highlights
Capture & import
- Import by URL — fetch a page in the Electron main process, run Readability, snapshot the original + cleaned HTML to the vault, convert to ProseMirror, and land a clean inbox source. Canonical-URL normalization + content-hash duplicate detection (reuse-or-new-version).
- Chrome extension (MV3) — save page / save selection / save to inbox, delivered to the app over a token-protected
127.0.0.1loopback server (no cloud, never writes the DB directly), plus a side panel capture with priority + reason. - Documents — PDF (PDF.js, page read-points + page-level source locations), PDF region extraction (figure/table → image card), OCR (Tesseract WASM, on the on-device job runner), EPUB, Markdown & HTML (round-trips), highlight import (Readwise/Kindle), and Anki
.apkg/CSV import-export.
Knowledge processing
- Rich-media cards — image occlusion (masks separate from the base image → sibling cards), formula (KaTeX) + syntax-highlighted code cards, video import with transcript + timestamped read-points, clip extraction, audio review cards.
- Advanced scheduling & overload — a scoring-based queue, auto-postpone that protects high-priority fragile memory, catch-up & vacation modes, per-concept/priority desired retention, on-device FSRS parameter optimization, workload simulation, and mature-card retirement. (FSRS schedules cards; a separate attention scheduler handles sources/extracts — never crossed.)
- Analytics & quality — source-yield + extract-stagnation analytics, a leech remediation workflow, and minimum-information-principle card-quality checks.
Intelligence (on-device, off by default)
- Semantic search via
sqlite-vecwith on-device embeddings, related-item suggestions, and contradiction detection — degrading gracefully to keyword/FTS when disabled. - Trust — fact staleness/expiry, source-reliability metadata, and scheduled verification tasks.
- AI-assisted distillation runs from a local model or your own API key — output is always a draft (never auto-scheduled), every suggestion is grounded back to the source span. Plus incremental-writing synthesis notes.
- Review modes — review by concept / source / branch / search / semantic / stale / leeches / random, outside normal scheduling.
Hardening
- Large-collection maintenance tools (dedup, orphan-media + orphan-vector cleanup, broken-source reports, integrity checks, bulk actions — all undoable; only Trash hard-deletes) and a 100k-element load-test + index audit pass.
Install (macOS, Apple Silicon)
The .dmg is ad-hoc signed, not notarized, so Gatekeeper will warn on first launch:
- Open
Interleave-0.2.0-arm64.dmg, drag Interleave to Applications. - Right-click the app → Open (once), or run
xattr -dr com.apple.quarantine /Applications/Interleave.app.
The Chrome extension is loaded separately: pnpm --filter @interleave/extension build, then load apps/extension/dist/ unpacked in Chrome and pair the token in Settings → Browser capture.
This is a pre-1.0 release: green and fully tested (2,256 tests), but not yet daily-driven/battle-tested. Your data is local — back it up from Settings.
Interleave v0.1.1 — grade cards in the process loop + queue/review hardening
A hardening release on top of v0.1.0, focused on the daily queue + review surfaces. No new features — the incremental-reading loop is the same — but the one-at-a-time process loop is now a first-class review surface, plus a round of correctness, design, and test fixes across the stack.
Headline fix — grade cards inline in the process loop
In v0.1.0, when a card came up in the /process one-at-a-time loop you couldn't actually review it: the card face showed a placeholder ("grading lands with the review session") and an Open in review button that bounced you out to /review. That was a leftover stub from before the FSRS review session existed.
Now a card grades inline, end to end, without leaving the loop — exactly as the milestone intended ("process ten mixed sources/extracts/cards without returning to a list"):
- Space reveals the answer (cloze unmasks / Q&A answer + the source reference appear).
- 1–4 grade Again / Hard / Good / Easy, with next-interval previews.
- The grade writes a durable
review_logsrow, advances FSRS, and the cursor moves to the next item — all in/process. - A shared
CardFrontcomponent now backs both/reviewand/process, so the two card faces can't drift apart again.
This is verified by a new end-to-end test that grades a card inside /process and confirms the review log survives an app restart.
Other hardening (per-component deep-review pass)
- Queue domain — a card's thin "postpone" defer no longer flips its lifecycle status onto the attention scheduler (the FSRS-vs-attention split is preserved); fresh-DB topic-interval now resolves to the canonical 7-day default instead of falling through to the by-priority band.
- IPC boundary — malformed
asOfclocks are rejected at the typed boundary so anInvalid Datecan never reach FSRS or land inreview_states/review_logs; leech-marking is guarded to cards only. - Review session — guards against a double-grade; the progress meter reaches 100% when cards are removed (suspend/delete) without a grade; the leech "Add context" affordance and the repair bar share one source-context drawer; a hardcoded overlay color became an OKLCH design token.
- Queue list — keyboard-navigation bounds, selection state, and an accessible empty state.
- Home command center — per-type row routing respects the FSRS/attention split; failed reads render a calm em-dash placeholder instead of fabricated zeros or a false "Queue clear".
Also since v0.1.0: native-pnpm CI (typecheck · lint · test · renderer build), README screenshots, and the agent build/deep-review workflow skills.
Quality gates (all green at this commit)
pnpm typecheck— 10/10 projectspnpm lint— Biome clean (354 files)pnpm test— Vitest 1040 passing (89 files)- Targeted
pnpm e2e— process-queue (incl. the new inline-grade + restart test), review, review-edit, sibling-burying, leech, queue, home — all passing pnpm --filter @interleave/desktop dist— produces the.dmgbelow
⚠️ Re-download if you grabbed this before Jun 1. The firstv0.1.1DMG failed with "Interleave is damaged and can't be opened" (it shipped without a valid code signature). The asset below has been replaced with an ad-hoc-signed build that launches correctly. It also now carries the real Interleave app icon instead of the default Electron icon.
Install
- Download
Interleave-0.1.1-arm64.dmgbelow (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications. - The build is ad-hoc signed but not notarized, so clear the download quarantine once — right-click → Open does not work for this (and that menu item was removed in macOS Sequoia):
xattr -dr com.apple.quarantine /Applications/Interleave.app
- Open Interleave normally.
A fully Developer-ID-signed + notarized build (no
xattrstep) is a planned later release.
sha256(Interleave-0.1.1-arm64.dmg) = 36e2740cbea6a731dacbb476844517e6c3dd19f71e915a1880f9c978ab58f52e
Full changelog: v0.1.0...v0.1.1
Interleave v0.1.0 — local-first incremental reading (MVP)
First public release of Interleave — a desktop-first, local-first incremental reading app for macOS (Apple Silicon).
Read sources gradually, lift out the fragments that matter, distill them, and turn the best ideas into spaced-repetition cards — with every card traceable back to the exact sentence it came from.
Install
Download Interleave-0.1.0-arm64.dmg below, open it, and drag Interleave to Applications.
The build is unsigned / not notarized, so on first launch macOS Gatekeeper will warn you: right-click the app → Open (once), then it runs normally. Requires an Apple-Silicon Mac (arm64).
What's in it
The complete incremental-reading loop, end to end:
- Capture & inbox, manual import, priorities
- Tiptap reader with read-points
- Extraction with full source lineage (+ sub-extracts) and a distillation flow (raw → clean → atomic)
- Q&A + cloze cards with quality warnings
- FSRS review (sibling burying, leech detection) — on a separate scheduler from the attention-based source/extract queue
- Due queue + one-at-a-time process loop
- Concepts, tags, full-text search; a Home command-center, Library, and Concepts map
- Trash + command-level undo, analytics, and a restore-ready backup
- Keyboard-first throughout (⌘K palette,
?cheat sheet)
Everything is stored in a native SQLite database and survives an app restart.
How it was built
Built almost entirely by AI agents (Claude) orchestrated through dynamic multi-agent workflows: a documented control-plane roadmap, then builder → independent reviewer → blocking gate → one-commit-per-task, followed by a 17-component hardening audit and a UI-completeness pass. ~70 commits · 985 unit/integration tests · 158 Playwright/Electron E2E. See the README.
Not yet (planned — Part II)
Cloud sync, PDF/EPUB import, AI-assisted distillation, and semantic search.