A distraction-free writing app for novelists, built for your desktop.
Loomdraft is a local-first desktop writing application designed for novelists, screenwriters, and long-form creative writers. It combines a hierarchical project manager with a rich Markdown editor, giving you a place to draft your manuscript and organize your world-building notes side by side. Your data never leaves your machine.
A guided welcome tour introduces new users to the app on first launch. Eight steps walk through project structure, the editor, wiki-links, writing modes, search, export, themes, and keyboard shortcuts. The tour can be replayed anytime from the keyboard shortcuts panel (Cmd+/ or Ctrl+/).
Structure your novel as a tree of documents. Separate your manuscript from planning materials, drag nodes to reorder, and let the sidebar keep everything at your fingertips.
- Hierarchical document tree with manuscript and planning sections
- 14 document types, from Parts and Chapters down to Characters, Locations, and Lore entries
- Drag-and-drop reordering with visual drop indicators
- Right-click context menus for adding, renaming, and deleting nodes
- Recent projects list for quick access
Write in Markdown with a fast, modern editor powered by CodeMirror 6. Auto-save means you never lose work.
- Full Markdown syntax support with live formatting
- Auto-save every 10 seconds
- Real-time word and character count
- Undo/redo with smart grouping
- Soft word wrap toggle
- Collapsible heading outline for quick navigation
- Inline image rendering with optional size syntax (
) - Image import dialog (PNG, JPG, GIF, WebP, SVG, BMP)
Tailor the editor to how you write best.
- Typewriter Mode keeps your cursor line centered on screen as you type
- Focus Mode dims every line except the one you're writing, reducing visual noise
- Distraction-Free Mode hides the sidebar entirely for full-screen writing
- Manuscript Mode centers your content in a narrower column for a book-page feel
Connect your documents with [[wiki-links]]. Click to navigate, hover to preview, and track backlinks automatically.
- Type
[[Character Name]]to create a cross-reference - Click any wiki-link to jump to the linked document
- Hover to see a preview card with title, type, and opening text
- Resolved links styled in blue, unresolved in red
- Automatic backlink tracking via SQLite index
Real-time spell checking powered by nspell with a bundled English dictionary. Misspelled words are underlined directly in the editor. Code blocks, URLs, and wiki-links are skipped automatically.
Find anything in your project instantly. Search across all documents with results ranked by relevance.
- Project-wide full-text search (Ctrl/Cmd + Shift + F)
- Powered by SQLite FTS5 for fast, ranked results
- Keyboard-navigable results with snippets
- Backlink graph tracking to see which documents reference each other
Compile your manuscript into a single file, ready to share or print.
- Markdown clean plaintext export
- HTML styled and self-contained with serif typography and table of contents
- PDF print-ready with proper margins, serif fonts, and clickable TOC
Exports walk your manuscript tree in order, strip frontmatter and wiki-links, and generate heading levels based on document type (Part = H1, Chapter = H2, Scene = H3). A toast shows word count and section count when done.
Every save creates a backup. Browse and restore any previous version of a document.
- Automatic backup on every save (up to 20 per document)
- Browse backups with timestamps, file sizes, and content previews
- One-click restore to roll back to any version
- Safety backup created before each restore
Seven built-in themes with full syntax highlighting, or import your own.
| Theme | Appearance | Vibe |
|---|---|---|
| Dark | Dark | Purple accent on cool gray, the default |
| Light | Light | Indigo accent on clean white |
| Midnight Jazz | Dark | Deep navy with warm gold, late-night lounge |
| Forest Canopy | Dark | Moss greens with amber, dappled forest light |
| Sunset Drift | Dark | Warm tones with coral and peach, desert dusk |
| Arctic Fog | Light | Ice blue and slate, clean and calming |
| Sepia Study | Light | Cream and brown, leather-bound journal |
Each theme includes a complete color palette and syntax highlighting colors for headings, emphasis, links, code blocks, and more.
Import your own color themes as JSON files, or change the editor and UI fonts to anything you like.
Theme JSON format:
{
"name": "My Theme",
"id": "my-theme",
"appearance": "dark",
"colors": {
"bg": "#1a1a2e", "bg-2": "#16213e", "bg-3": "#0f3460",
"border": "#2a3a5c", "text": "#e0e0e0", "text-dim": "#888",
"accent": "#e94560", "accent-h": "#ff6b81",
"drop-line": "#5c7aaa", "danger": "#e05252", "radius": "6px"
},
"syntax": {
"heading": "#ff6b81", "emphasis": "#c8a0e0",
"strong": "#e0e0e0", "link": "#5b9fd4",
"code": "#8bc4a0", "quote": "#888",
"list": "#e94560", "meta": "#5a5e7e"
}
}Custom fonts: Import .ttf, .otf, or .woff2 files for the UI or editor font. Fonts are stored in the app data directory and persist across sessions.
All shortcuts show the correct modifier for your platform (Cmd on macOS, Ctrl on Windows/Linux).
| Shortcut | Action |
|---|---|
| Cmd/Ctrl + S | Save |
| Cmd/Ctrl + P | Quick open |
| Cmd/Ctrl + Shift + F | Search documents |
| Cmd/Ctrl + Shift + E | Filter sidebar tree |
| Cmd/Ctrl + Shift + D | Distraction-free mode |
| Cmd/Ctrl + Alt + T | Typewriter mode |
| Cmd/Ctrl + Alt + F | Focus mode |
| Cmd/Ctrl + Alt + W | Soft wrap |
| Cmd/Ctrl + Shift + O | Heading outline |
| Cmd/Ctrl + / | Show all shortcuts |
| Cmd/Ctrl + F | Find in document |
| Cmd/Ctrl + B | Bold |
| Cmd/Ctrl + I | Italic |
| F2 | Rename selected node |
Loomdraft separates your work into two categories:
| Manuscript | Planning |
|---|---|
| Part | Character |
| Chapter | Location |
| Scene | Item |
| Interlude | Organization |
| Snippet | Event |
| Lore | |
| Outline | |
| Research | |
| Note |
Manuscript documents compile into your exported file in tree order. Planning documents are for reference (character sheets, world-building notes, outlines) and are excluded from export.
| Layer | Technology |
|---|---|
| Framework | Tauri 2 |
| Frontend | React 19, TypeScript, Vite 7 |
| Editor | CodeMirror 6 with Markdown |
| Backend | Rust |
| Database | SQLite with FTS5 (via rusqlite) |
| Spell Check | nspell (Hunspell-compatible) |
| Markdown Processing | comrak |
| PDF Generation | printpdf |
| Icons | Lucide |
Local-first. Your projects are plain files on disk: Markdown documents with YAML frontmatter, organized in folders. No cloud, no accounts, no telemetry.
- Node.js (v18+)
- pnpm
- Rust (stable toolchain)
- Tauri 2 system dependencies (see Tauri docs)
git clone https://github.com/your-username/loomdraft.git
cd loomdraft
pnpm install
# Run the full app (frontend + Rust backend with hot reload)
pnpm tauri dev
# Run frontend only (without Tauri shell)
pnpm dev# Build release binary
pnpm tauri buildWhen you create a Loomdraft project, it generates this structure:
MyNovel/
├── project.json # Project manifest (node tree, metadata)
├── manuscript/ # Manuscript documents
│ ├── part_the-beginning.md
│ ├── chapter_a-dark-night.md
│ ├── scene_the-encounter.md
│ └── ...
├── kb/ # Knowledge base (planning docs)
│ ├── character_hero.md
│ ├── location_castle.md
│ └── ...
├── assets/
│ └── images/ # Imported images (UUID-prefixed)
└── .app/ # App-internal data
├── index.sqlite # Full-text search index
└── backups/ # Auto-backups per document
└── {node-id}/
└── 20260308T143012.123.md
Each document is a standard Markdown file with YAML frontmatter:
---
id: a1b2c3d4
type: chapter
title: A Dark Night
created: 2026-03-08T14:30:12Z
modified: 2026-03-08T15:45:00Z
---
The rain hammered against the window as she reached for the door handle...