VispNote is a local-first desktop note app for structured thinking. It combines markdown files, a block-based editor, graph navigation, task views, and optional local AI assistance in an Electron app.
The project is designed around a simple rule: your notes should stay usable as plain files, even if you stop using the app.
better-sqlite3sqlite-vec for vector indexing supportnode:test for fast editor operation testsInstall dependencies:
npm install
Start the app:
npm start
Run the main checks:
npm run test:editor
npm run check:main
Run the Electron smoke test:
HOME=/tmp/vispnote-smoke npm run smoke:electron
.
├── OminiNote.html # Electron renderer entry point
├── main.js # Electron main process and IPC handlers
├── preload.js # Safe renderer bridge
├── lib/
│ ├── store.js # Filesystem vault storage
│ ├── index.js # SQLite search/backlink/tag index
│ ├── ai.js # Local AI orchestration
│ ├── ollama.js # Ollama client helpers
│ └── seed.js # First-run seed vaults
├── src/
│ ├── app.jsx # App shell and state orchestration
│ ├── editor.jsx # Note editor pane
│ ├── outliner.jsx # Block editor UI
│ ├── editorOps.js # Pure editor operations
│ ├── outline.jsx # Block model and markdown conversion
│ ├── sidebar.jsx # Vault/tag/navigation sidebar
│ ├── notelist.jsx # Note list pane
│ ├── graph.jsx # Knowledge graph view
│ ├── panels.jsx # Todos, today, workflow panels
│ ├── settings.jsx # Settings modal
│ ├── blockFeatures.jsx # Block menu, refs, embeds, and workflow helpers
│ ├── ai.jsx # Ask AI modal
│ ├── markdown.jsx # Inline markdown rendering
│ ├── theme.jsx # Design tokens
│ └── data.jsx # Browser fallback seed data
├── tests/
│ └── editor-ops.test.js # Regression tests for editor behavior
└── scripts/
└── smoke-electron.js # Electron startup smoke test
New installs store vault data in:
~/VispNote
Existing data under ~/OminiNote or ~/MyNote is still supported as a compatibility fallback when ~/VispNote does not exist.
The repository intentionally ignores local vault data, SQLite databases, generated build output, local tool state, and environment files. Do not commit personal notes, local indexes, .env files, or generated app packages.
AI features are optional. By default, VispNote is built for local Ollama usage.
Typical flow:
gemma3.nomic-embed-text.If Ollama is not available, the core note app still works.
npm run test:editor covers the high-risk editor behaviors, including:
npm run check:main syntax-checks the Electron main/preload and backend modules.
Before publishing a release:
npm run test:editornpm run check:main.gitignore is not allowing local vault data or database filesgit status --ignored if local tool or generated files are presentVispNote is licensed under the Apache License 2.0. See LICENSE.