Skip to content

Releases: antoinefink/interleave

Interleave 0.4.0 — signed & notarized: installs with no Gatekeeper warning

09 Jun 13:37
53440f3

Choose a tag to compare

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 old xattr -dr com.apple.quarantine dance 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 /process loop 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 projects
  • pnpm lint — Biome clean (905 files)
  • pnpm test — Vitest 3,248 passing (376 files)
  • pnpm --filter @interleave/desktop dist:release — produces the signed + notarized .dmg below

Install (macOS, Apple Silicon)

No quarantine workaround anymore — this build is notarized:

  1. Download Interleave-0.4.0-arm64.dmg below (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications.
  2. 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

07 Jun 20:21
f6a6fd8

Choose a tag to compare

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 /process one-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.1 loopback 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 projects
  • pnpm lint — Biome clean (897 files)
  • pnpm test — Vitest 3,132 passing (371 files)
  • pnpm --filter @interleave/desktop dist — produces the .dmg below

Install (macOS, Apple Silicon)

The .dmg is ad-hoc signed, not notarized, so clear the download quarantine once:

  1. Download Interleave-0.3.0-arm64.dmg below (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications.
  2. 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
  3. 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

03 Jun 08:32

Choose a tag to compare

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.1 loopback 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-vec with 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:

  1. Open Interleave-0.2.0-arm64.dmg, drag Interleave to Applications.
  2. 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

01 Jun 06:05
0d2b2e0

Choose a tag to compare

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_logs row, advances FSRS, and the cursor moves to the next item — all in /process.
  • A shared CardFront component now backs both /review and /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 asOf clocks are rejected at the typed boundary so an Invalid Date can never reach FSRS or land in review_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 projects
  • pnpm 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 .dmg below

⚠️ Re-download if you grabbed this before Jun 1. The first v0.1.1 DMG 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

  1. Download Interleave-0.1.1-arm64.dmg below (requires an Apple-Silicon / arm64 Mac), open it, and drag Interleave to Applications.
  2. 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
  3. Open Interleave normally.

A fully Developer-ID-signed + notarized build (no xattr step) 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)

31 May 09:42
ab929a4

Choose a tag to compare

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.