Important note about Claude subscription usage in NeverWrite starting June 15, 2026
- Update: Claude delayed their decision, you can continue to use claude native integration inside NeverWrite. More info in the linked discussion.
NeverWrite is a local-first knowledge workspace for people who need to handle workflows with multiple parallel agents and subagents. Built like a code editor, but for markdown. It has inline review changes, like Cursor and others. Please help me test it!
Today the repository combines:
- An Electron desktop app with a Rust sidecar that opens a local vault and keeps working state on disk.
- A Markdown, CSV, and text/code editing workflow with wikilinks, live preview, frontmatter editing, spellcheck, and grammar checking.
- Knowledge navigation tools such as backlinks, tags, advanced search, bookmarks, concept maps, and a 2D/3D graph view.
- An ACP-based AI layer with Codex, Claude, Gemini, Grok, Kilo, and OpenCode runtimes.
- An explicit AI change-review system with inline review inside the editor and a dedicated surface in chat and a tab with changes pending approval.
- A separate browser web clipper that can save directly into the desktop app through a local API, with deep-link fallback. Compatible with both Firefox and Chromium.
The current product already includes:
- Local vault opening with progress reporting, persisted snapshots, filesystem watching, and incremental re-sync
- A desktop workspace with tabs, sidebars, command palette, quick switcher, detached windows, and first-class terminal tabs
- Native-feeling editing for Markdown notes, CSV files, PDFs, images, HTML previews, and generic text/code files
- Embedded Excalidraw-based concept maps stored as
.excalidrawfiles in the vault. The map format is visible and editable by agents. - A graph view with global, local, and overview modes plus 2D and 3D rendering
- AI chat sessions with attachments from the vault, slash commands, transcript persistence, and runtime-specific capabilities
- A real AI review pipeline so generated edits are not silently committed
Saved AI conversations are stored locally under each vault's hidden .neverwrite/sessions/ directory.
See AI session history and crash recovery for the disk layout and recovery flow.
NeverWrite also writes local diagnostic logs under the app data logs/ directory; see App logs for platform-specific paths and privacy notes.
- AI edits stay reviewable through an accumulated action log, inline controls, and a dedicated review tab. It is much more than a chat.
- The desktop app is not limited to Markdown notes; it already handles CSV files, PDFs, images, text/code files, and maps in the same workspace.
- It features a best-in-class multipane experience that lets the user parallelize multiple lines of work with agents while simultaneously reading and editing documents in the same window.
- The web clipper allows saving web articles quickly, securely, and efficiently.
- Open, index, and watch a local vault.
- Recent vaults, pinned vaults, reopen-last-vault behavior
- File tree with drag and drop, multi-selection, sorting, and context actions
- File tree modes for curated writing/media files, all vault files, or an explicit extension allowlist
- Persistent bookmarks per vault
- Persistent tabs and window session restore
- Detached note windows and separate vault windows
- First-class terminal tabs with themed xterm rendering, persistent workspace state, search, and Claude Code integration in the Agents sidebar
- Markdown editing with CodeMirror 6
- Optional Vim key bindings for modal editing, with Vim-style ex commands and relative line numbers
- Wikilink suggestions, resolution, and navigation
- Live preview with tasks, tables, embeds, math, and YouTube previews
- Frontmatter/properties editing
- CSV editing with table and raw fallback views
- Editable text/code files with syntax highlighting and autosave
- Sandboxed in-app HTML viewing for
.htmland.htmfiles - PDF viewing with visual filters
- Internal image viewing with fit and zoom
- App-owned Hunspell-based spellcheck with bundled
en-USandes-ES - Grammar/style checks through LanguageTool
- Backlinks and outgoing links
- Tags extracted from content and frontmatter
- Advanced search with query builder, regex, negation,
OR, and property filters - Graph view in 2D and 3D
- Concept maps in
.excalidraw
- ACP runtime integration for Codex, Claude, Gemini, Grok, Kilo, and OpenCode
- Attachment flows for notes, folders, files, PDFs, audio, images, and screenshots
- Session history, transcript viewing, session export, fork, resume, and rename flows
- Crash recovery for saved chats through
Chat Historyand local.neverwrite/sessions/transcripts - File-based app diagnostics for Electron, renderer, and native backend logs
- Inline review inside the editor when the tracked file has a reliable base
- A dedicated
Reviewtab plus anEditssurface for keep/reject workflows - Rust/WASM-backed diffing and change tracking
- Dedicated browser extension in
apps/web-clipper - Full page, selection, and URL-only clipping modes
- Markdown preview before save
- Template system with vault and domain scoping
- Local clip history
- Direct desktop save through
http://127.0.0.1:32145/api/web-clipper - Deep-link fallback when the desktop API is unavailable
apps/
desktop/ Main Electron + React desktop application
web-clipper/ Browser extension built with WXT + React
crates/
ai/ Shared AI domain types
diff/ Rust diff engine, plus WASM bindings for review flows
index/ Vault indexing, link resolution, and search primitives
types/ Shared DTOs and domain models
vault/ Vault scanning, parsing, filesystem watching, and PDF discovery
- Desktop shell: Electron 41, React 19, TypeScript 6, Vite 8, Tailwind CSS 4, CodeMirror 6, Excalidraw, PDF.js, electron-updater
- Desktop native backend: Rust 2021, Tokio,
notify,portable-pty,reqwest,spellbook, app-owned spellcheck runtime - Desktop main process: Electron IPC plus a Node HTTP server for the local web clipper API
- Shared Rust crates: vault parsing, indexing, search, diff, DTOs
- Browser extension: WXT, React, TypeScript, Chrome MV3 and Firefox MV3 targets
Important: there is no top-level JavaScript workspace package. JavaScript dependencies are installed per app.
- Rust and Cargo
- Node.js 22+ and npm for
apps/desktopand JavaScript tooling - pnpm for
apps/web-clipper(packageManageris pinned topnpm@10.33.0)
CI and release workflows are pinned to Node.js 22, so local development should use Node 22 or newer.
cd apps/desktop
npm install
npm run devThat starts the Electron desktop app plus the local renderer dev server.
If you only need the renderer dev server:
cd apps/desktop
npm run renderer:devcd apps/web-clipper
pnpm install
pnpm devBuild unpacked extension artifacts:
cd apps/web-clipper
pnpm buildThis produces:
apps/web-clipper/dist/chrome-mv3/apps/web-clipper/dist/firefox-mv3/
cargo testDesktop frontend tests:
cd apps/desktop
npm testWeb clipper validation:
cd apps/web-clipper
pnpm checkRust workspace tests:
cargo testThe repository already contains broad Vitest coverage in the desktop app and web clipper, plus Rust integration tests for vault and index behavior.
NeverWrite currently wires six ACP runtimes:
codex-acpclaude-acpgemini-acpgrokkilo-acpopencode-acp
Current packaging status:
- Codex is intended to be bundled as a sidecar binary in desktop release builds.
- Claude is intended to be bundled through an embedded Node runtime plus vendored runtime files.
- Gemini is integrated in the app, but not bundled by default today.
- Grok is integrated in the app, but not bundled by default today.
- Kilo is integrated in the app, but not bundled by default today.
- OpenCode is integrated in the app, but not bundled by default today.
Useful runtime overrides during development:
NEVERWRITE_CODEX_ACP_BINNEVERWRITE_CLAUDE_ACP_BINNEVERWRITE_GEMINI_ACP_BINNEVERWRITE_GROK_ACP_BINNEVERWRITE_KILO_ACP_BINNEVERWRITE_OPENCODE_ACP_BIN
For release builds, see apps/desktop/scripts/stage-electron-sidecar.mjs and release/appcast/README.md.
The web clipper talks to the desktop app through a local HTTP API on port 32145.
When developing against an unpacked extension build, the desktop app blocks arbitrary extension origins by default. To explicitly allow a local extension origin, start the desktop app with:
cd apps/desktop
NEVERWRITE_WEB_CLIPPER_DEV_ORIGINS="chrome-extension://<dev-id>,moz-extension://<dev-id>" npm run devUse exact origins only. Wildcards are intentionally unsupported.
NeverWrite is in a polish and hardening phase. Core systems already exist, but the project is still pre-1.0, in the process of resolving edge cases — help me find them!!
The areas with the highest product sensitivity right now are:
- AI review and change control
- Inline review and merge behavior
- Session persistence and multi-window workflows
- Desktop-to-clipper integration
- Using the 3D graph on large vaults has memory leaks; after using it, prefer restarting the application.
Apache-2.0. See LICENSE.