Build from source
Set up the tools, run inkwell in development, and build installers for macOS, Windows and Linux.
This page is for developers. If you just want to use inkwell, see Getting started.
inkwell is a Tauri v2 desktop app. The interface is React 19 and TypeScript on top of CodeMirror 6, and the native side is Rust.
What you need
| System | Install |
|---|---|
| macOS | Xcode Command Line Tools: xcode-select --install |
| Windows | Microsoft C++ Build Tools and WebView2 (already included in Windows 11) |
| Linux | libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev, patchelf |
Run in development
git clone https://github.com/coros-hq/inkwell.git
cd inkwell
pnpm install
pnpm tauri dev
pnpm tauri dev starts the Vite dev server on port 1420, opens the app window, and reloads the interface when you edit the frontend. It recompiles the Rust side when that changes.
Build installers
pnpm tauri build
Installers are written to src-tauri/target/release/bundle/:
| System | Output |
|---|---|
| macOS | .app and .dmg |
| Windows | .exe and .msi |
| Linux | .deb, .rpm and .AppImage |
On macOS, to update an existing install by hand, drag the new .app onto the old one in /Applications and click Replace.
Collaboration settings
Real-time collaboration talks to a Supabase project. The values are baked into the app at build time, so set them in a .env file at the project root before you build:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
Without them, the app still works as a local notes app, but signing in, sharing and joining vaults fail. The database schema lives in supabase/schema.sql and supabase/migrations/.
Project structure
inkwell/
├── src/
│ ├── components/
│ │ ├── editor/ MarkdownEditor, RichPreview, charts, tables, attachments, share dialog
│ │ ├── layout/ AppShell, Sidebar, NoteList, EditorPane
│ │ ├── board/ Kanban board, columns, cards, task drawer
│ │ ├── canvas/ Canvas view, toolbar, templates, notes sheet
│ │ ├── collab/ Share dialog, presence avatars
│ │ ├── settings/ Settings dialog, theme editor, font picker
│ │ └── shared/ Search, context menu, GitHub sync, vault picker
│ ├── store/ Zustand store (useAppStore)
│ ├── lib/ vault, vault watcher, github, export, editor extensions, themes, sync
│ ├── styles/ globals.css (CSS variables and theme definitions)
│ └── types/ TypeScript interfaces
├── src-tauri/
│ ├── src/lib.rs Tauri commands, tray, global shortcut, quick-note window
│ └── tauri.conf.json Window config, updater, deep links
└── supabase/ Database schema and migrations
Releases
Pushing a tag that starts with v runs the release workflow in .github/workflows/release.yml, which builds macOS (universal), Windows and Linux installers and publishes the updater manifest that inkwell’s built-in updater reads.