inkwell is a local-first markdown editor built as a native macOS desktop app. Notes are stored as plain .md files in a vault folder you own — no cloud, no accounts, no lock-in.
It pairs a distraction-free writing environment with a rich live preview, a Kanban board, a canvas drawing tool, a suite of themes, and deep integrations: a native MCP server so Claude can read and write your notes, and built-in GitHub sync to push your docs to any repository.
Writing
- Distraction-free CodeMirror 6 editor with markdown syntax decoration
- Live split-view preview with full GFM rendering (tables, task lists, strikethrough)
- Syntax-highlighted code blocks that adapt to the active theme
- Inline code, blockquotes, ==highlights==, and embedded images
- Attach files to any note — images, PDFs, and documents stored alongside your vault
- Embed attachments inline with
![[filename]]syntax
Organisation
- Vault-based storage — notes live as real
.mdfiles on disk (Obsidian-compatible) - Nested folders that map 1:1 to real filesystem directories
- Inline rename of notes and folders directly in the sidebar (double-click or right-click → Rename)
- Drag-and-drop reordering and reparenting for notes and folders
- YAML frontmatter on every note (
id,created,updated,pinned,tags) - Automatic migration from legacy JSON storage on first open
- Kanban board view with columns, cards, due dates, subtasks, and comments
- Note links panel — link notes to each other and track references
- Full-text search across all notes (⌘K)
- Pinned notes and trash with soft-delete
Canvas (new in v0.4)
- Custom HTML5 canvas drawing engine — no third-party drawing libraries
- Tools: select, pen, rectangle, ellipse, line, arrow, text
- Shape styling: 12-colour palette, fill toggle, three stroke widths, corner radius, font family/size/bold/italic
- Multi-selection with rubber-band lasso, shift-click toggle, ⌘A select all
- Resize handles on selected shapes, drag-move single and multi-selection
- Duplicate (⌘D), undo/redo (⌘Z / ⌘⇧Z), zoom and pan (scroll or pinch)
- Diagram notes — a slide-in half-panel with a full CodeMirror markdown editor and Edit/Preview tabs, saved to
{vault}/.inkwell/canvas-notes.md - Diagram templates — Flowchart and Mind Map starters with one click
- Canvas state auto-saved to
{vault}/.inkwell/canvas.json
Themes
- 8 built-in themes: Midnight, Parchment, Ink, Dusk, Forest, Sepia, Gruvbox, Fog
- Custom theme builder with live preview
- Syntax highlight colours automatically follow the active theme
Export & Share
- Export notes as Markdown, standalone HTML, or PDF
- Live preview before exporting
- One-click copy to clipboard
GitHub Sync (new in v0.3)
- Connect your GitHub account once in Settings → GitHub
- Push any note directly to a repository as a
.mdfile - Pull the latest version of a file back into inkwell with one click
- Works with any repo — great for keeping project READMEs and docs in sync
Claude MCP Integration (new in v0.3)
- A native Rust MCP server ships inside the app (
inkwell-mcp) - Exposes
list_notes,read_note,create_note,update_note,search_notes,get_vault_infotools - Claude can read, write, and search your vault directly — no copy-paste
- Notes written by Claude land as proper
.mdfiles with YAML frontmatter
macOS
- Native window with overlay title bar
- Optional frosted-glass sidebar (Settings → Appearance → Glass sidebar)
- Smooth scrolling, native vibrancy, system font stack
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| UI | React 19 + TypeScript |
| Styling | Tailwind CSS v3 |
| Editor | CodeMirror 6 |
| Canvas | HTML5 Canvas 2D API (custom engine) |
| State | Zustand |
| Markdown | react-markdown + remark-gfm + rehype-highlight |
| Drag & drop | @dnd-kit/core |
| MCP server | Rust (stdio JSON-RPC 2.0) |
| Build | Vite |
# Clone and install dependencies
git clone https://github.com/your-username/inkwell.git
cd inkwell
pnpm install
# Start the dev server (hot-reload on frontend changes, recompile on Rust changes)
pnpm tauri devpnpm tauri buildThe output .app and .dmg are written to src-tauri/target/release/bundle/macos/.
To update an existing installation, drag the new .app onto the old one in /Applications and click Replace.
cd src-tauri
cargo build --release -p inkwell-mcpThen add it to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"inkwell": {
"command": "/path/to/inkwell-mcp"
}
}
}The MCP server reads the active vault path from ~/.inkwell/active-vault, which inkwell writes automatically when you open a vault.
inkwell/
├── src/
│ ├── components/
│ │ ├── editor/ # MarkdownEditor, RichPreview, AttachmentsBar, MediaPanel, ShareDialog
│ │ ├── layout/ # AppShell, Sidebar, NoteList, EditorPane
│ │ ├── board/ # Kanban BoardView, KanbanColumn, TaskCard, TaskDrawer
│ │ ├── canvas/ # CanvasView, CanvasToolbar, CanvasNotesSheet, canvasTypes, canvasTemplates
│ │ ├── settings/ # SettingsDialog, ThemeEditor
│ │ └── shared/ # Search, ContextMenu, DatePicker, GitHubSyncDialog, VaultPicker
│ ├── store/ # Zustand store (useAppStore)
│ ├── lib/ # vault.ts, github.ts, export.ts, themes, attachments, utils
│ ├── styles/ # globals.css — CSS variables & theme definitions
│ └── types/ # TypeScript interfaces
└── src-tauri/
├── src/lib.rs # Tauri commands (vibrancy, file rename, etc.)
├── mcp-server/ # inkwell-mcp — Rust MCP server for Claude
└── tauri.conf.json # Window config, permissions
MIT