pj 0bc3e36ee6 feat(editor): persist active chapter per book
Remember which chapter was open per book and restore it on reopen,
falling back to the first chapter when the saved id is no longer valid.

Claude-Session: https://claude.ai/code/session_01RzTWrLiy4zGuw2hZSQGamk
2026-06-22 13:15:01 -04:00
2026-06-20 23:46:10 -04:00
2026-06-22 13:03:11 -04:00
fix
2026-06-20 19:07:57 -04:00
2026-06-21 14:37:02 -04:00
2026-06-22 16:50:04 +00:00
2026-06-22 09:56:20 -04:00
2026-06-20 13:09:40 -04:00
2026-06-22 11:56:31 -04:00

margin

An offline desktop app for writing books and exporting them to print-ready PDF and reflowable EPUB — a focused, free alternative to InDesign for text-first books (novels, non-fiction).

Stack

  • Tauri 2 (Rust shell) — offline by construction; the entire export pipeline runs locally, nothing hits the network.
  • React + TipTap — the semantic writing surface.
  • Typst (embedded as a Rust crate) — print-ready PDF with real book typography.
  • Built-in EPUB3 generator + zip packager.

One semantic document feeds three renderers — the editor, the PDF, and the EPUB — from a single design-token theme (Quiet Press: Literata for the page, Hanken Grotesk for the chrome). Both fonts are bundled.

Develop

pnpm install
pnpm tauri dev     # the real desktop app: live PDF dock, file dialogs, PDF/EPUB export
pnpm dev           # browser-only UI preview (Tauri APIs are inert)

The first tauri dev build is slow because it compiles Typst.

Using it

  • A book saves as a single .margin file (JSON). Open / Save with ⌘O / ⌘S.
  • Click the title in the top bar for Book setup (title, author, ISBN, trim size, language).
  • Insert images from the toolbar and choose a placement (inline / full-width / full-page / float).
  • Export to PDF or EPUB from the titlebar menu.

Layout

  • src/editor/ — TipTap editor, extensions, figure block, floating toolbar.
  • src/components/ — app shell, preview dock, book-setup panel, pdf.js renderer.
  • src/export/ — typst.ts (book → Typst source), epub.ts (book → EPUB3 files), exporters.ts.
  • src/store/, src/model/ — document model and state.
  • src-tauri/src/ — pdf.rs (Typst compile), epub.rs (zip packager), project.rs (file IO).
S
Description
No description provided
Readme MIT
8.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 46.6%
CSS 13.7%
Rust 12%
Astro 11.2%
HTML 8.4%
Other 8.1%