mirror of
https://github.com/priyanshujain/margin.git
synced 2026-10-02 11:07:04 +00:00
3177b2f1ebb1c414ebf06b3143865eee8f3aa217
The render loop swallowed getDocument/render rejections, leaving the preview silently blank with no signal about what failed. Surface the error in the pane and recover on the next compile. Also drop the redundant canvasContext arg (pdf.js v6 renders via the canvas itself).
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
.marginfile (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).
Languages
TypeScript
46.6%
CSS
13.7%
Rust
12%
Astro
11.2%
HTML
8.4%
Other
8.1%