A note-taking desktop app with rich text, spreadsheets, lists, AI chat, voice recordings, and more. Fully modular, with global hotkeys for quick capture. Your data stays on your machine — no account, no subscription.
Note
To install, grab the latest .exe from the Releases tab on the right and run it.
Windows may show a SmartScreen warning because the app isn't code-signed. Click "More info" → "Run anyway" to proceed. The app is fully open-source — you can inspect every line of code in this repo.
I built Vault because I was unsatisfied with existing apps. One app had features another didn’t, workflows were fragmented, and AI was often locked behind premium pricing. I wanted one place that covered my real daily workflow without subscriptions deciding what I could or couldn’t do.
I also wanted total control, so Vault is local-first by design: everything is stored in a local SQLite database on your machine, AI uses your own API key, and voice transcription runs through your own Azure Speech credentials. Due to popular demand, I open-sourced it and modularized it so users can bend it to their own will.
- Hierarchical pages with drag-and-drop reordering
- Rich text editing, custom icons, archive, and full-text search
- Note deep links — paste @mention-style clickable references between notes
- Pop-out notes into separate resizable windows
- Inline voice recordings via
/voiceslash command - Inline emoji picker (
/emoji) with ~500 searchable emojis - Inline icon insertion (
/icon) with searchable custom icons - Native spellcheck with right-click suggestions and Add to Dictionary
- Spreadsheet notes with inline editing and formatting
- Resizable grid with optional AI help in context
- Quick-access list items with optional links and tags
- Tag-based filtering and search
- Multi-session chat with auto-generated titles
- OpenRouter and Azure Foundry integration, streaming responses, image support, and custom instructions
- Context-aware in-note and global modes
- Blur/scramble chat history titles for privacy
- Ctrl+Q — floating Quick Note window, saves to your notes with AI-generated title
- Ctrl+Space — floating Quick AI window for instant queries without opening the full app
- Full-text search across notes and lists
- Filter by Notes, Lists, and toggle Include Archived
- Fully modular — enable or disable any feature (Notes, Lists, AI Chat, File Cleaner) from Settings
- Teams call transcription that auto-transcribes and summarises calls, saved as notes
- File Cleaner with Tinder-style swipe interface for cleaning up files on your machine
- One-click export of all data (notes, lists, audio, icons) as a zip
| Layer | Tech |
|---|---|
| Desktop shell | Electron 29 |
| Frontend | Next.js 16 (App Router, Turbopack), React 19, Tailwind CSS 4 |
| Backend | Next.js API Routes, Prisma ORM |
| Database | SQLite via Prisma |
| AI (cloud) | OpenRouter or Azure Foundry (user-supplied key) |
| Transcription (cloud) | Azure Speech live transcription (user-supplied key) |
All user data lives in:
| OS | Path |
|---|---|
| Windows | %APPDATA%\Vault\data\ |
This folder contains:
mothership.db— the SQLite database (notes, lists, chat history, settings)icons/— custom note iconsaudio/— voice recordings.trash/— stores the last deleted file to power the undo system (before final empty)
Data persists independently of the app installation, so reinstalling or updating doesn't touch it.
- Node.js 18+
- npm
# 1. Clone the repo
git clone https://github.com/yourusername/vault.git
cd vault
# 2. Install dependencies
npm install
# 3. Generate Prisma client
npx prisma generatenpm run devOpens at http://localhost:3000. Good for UI work — no Electron overhead.
npm run electron:devStarts the Next.js dev server and Electron together.
npm run install:localThis will:
- Kill any running Vault instance
- Rebuild native modules for Node.js
- Build Next.js for production
- Rebuild native modules for Electron
- Package with electron-packager
- Install to
%LOCALAPPDATA%\Programs\Vault
npm run packageOutput goes to dist/Vault-win32-x64/.
npm run version:push -- patchYou can use patch, minor, major, or an explicit version like:
npm run version:push -- 0.2.0Or keep the bump type first and set an explicit version last:
npm run version:push -- patch --version 0.2.0This command updates package.json (and package-lock.json if present), creates a release commit, creates the matching vX.Y.Z tag, and pushes both to GitHub.
PRs and issues are welcome. This is a personal project so I may be opinionated about direction, but if you've found a bug or have a genuinely useful idea, open an issue and let's talk.
If you're adding a feature, open an issue first so we're aligned before you put in the work.
CC BY-NC 4.0 (Creative Commons Attribution-NonCommercial 4.0 International)