The workspace that turns scattered ideas into shipped projects.
Capture raw ideas, promote the ones that matter into projects, plan them on a Kanban board, link your notes, and watch your idea-to-reality ratio climb.
Runs anywhere you do — in your browser, on your own server, or backed by Supabase.
Same app, same data model, you pick the backend.
Features • Quick Start • Self-Hosting • Architecture • Contributing • License
OpenNapse is built around one loop: capture → promote → plan → ship.
- 🧠 Capture every idea the moment it hits — one keystroke, zero friction. Bad ideas are cheap; losing good ones is expensive.
- ⬆️ Promote the ideas worth pursuing into real projects with a first task already waiting.
- 📋 Plan the work on a Kanban board you can drive entirely from the keyboard.
- 📝 Connect notes (text or voice) to the ideas and projects they belong to.
- 📊 See momentum — your idea-to-reality ratio tells you whether you're shipping or just collecting.
🗄️ Your data, your backend — run it fully in the browser, self-host it with Docker, or back it with Supabase. The storage layer is a swappable adapter, so the same app fits a solo notebook or a team deployment.
🔒 Private by default — no telemetry, no account required, no AI calls unless you turn them on. Out of the box, nothing leaves your machine.
🤖 Bring-your-own-key AI — wire in OpenAI, Anthropic, Mistral, DeepSeek, Groq, OpenRouter, or Ollama. BYOK means no markup and no middleman, and your keys never get baked into the browser bundle.
🕸️ A map of your thinking — every idea, project, note, and task is one connected graph you can actually see.
🤝 Agent-ready (MCP) — an optional Model Context Protocol server lets AI agents read your ideas and tasks, see what's in progress, and improve idea descriptions or attach markdown resources — scoped to your account through Row Level Security.
🎯 Focus mode — daily slots and a distraction-free surface for the one thing that matters today.
🖥️ Desktop & installable — native builds for Windows, macOS, and Linux, plus an installable PWA with an offline app shell.
# Clone
git clone https://github.com/Xelson431/OpenNapse.git
cd OpenNapse
# Install dependencies
pnpm install
# Start development server
pnpm devOpen http://localhost:5173. That's it — no database, no backend, no accounts required.
# Dev mode (requires pnpm dev running in another terminal)
pnpm --filter @opennapse/web electron:dev
# Build installer (.exe / .dmg / .AppImage)
pnpm --filter @opennapse/web electron:buildOpenNapse runs on three backends from the same codebase. Pick the one that fits.
Build the frontend and host it anywhere static. Every idea, project, note, and task lives in the user's browser via IndexedDB. Nothing to operate, nothing to pay for.
pnpm build
# Upload apps/web/dist/ to Cloudflare Pages, Vercel, Netlify, or nginxServe the app behind nginx with one command. Runs browser-only by default; pass Supabase build args to light up cloud features.
docker compose up --build
# Open http://localhost:8080See docker/ for the Dockerfile and nginx config.
Add Supabase for authentication, team workspaces, and the server-side AI gateway.
# 1. Create a Supabase project at https://supabase.com
# 2. Copy env vars
cp apps/web/.env.example apps/web/.env.local
# Edit .env.local with your Supabase URL + anon key
# 3. Run migrations
supabase link --project-ref <your-ref>
supabase db push
# 4. Deploy Edge Functions
supabase functions deploy bootstrap-personal-workspace
supabase functions deploy invite-member
supabase functions deploy accept-invite
supabase functions deploy test-provider-connection
supabase functions deploy run-ai-action
# 5. Start
pnpm devStatus: auth, workspace schema, RLS policies, team invites/roles/ownership transfer, workspace lifecycle (delayed cancelable deletion), and the AI gateway are wired up and deployed. Cross-device cloud sync is staged behind the adapter and not enabled yet — the app shows its current sync state in Settings so you always know where your data lives.
Once Supabase is configured and you're signed in, you can point AI agents (Claude Desktop, Cursor, Cline, opencode, …) at your workspace through the MCP server. Build it from the monorepo (it's set up to publish to npm as opennapse-mcp, but isn't published yet):
pnpm --filter opennapse-mcp build
# Point your agent at apps/mcp/dist/index.js with your Supabase URL,
# anon key, and a user access token. See docs/mcp.md.Agents can then list ideas, see which tasks are in progress or done, and read or improve idea descriptions and resources — all scoped to your account through Row Level Security. See docs/mcp.md.
apps/web/ React 19 + Vite + TypeScript frontend
src/
domain/ Zod-validated models (ideas, projects, tasks, notes, idea resources, workspaces)
stores/ Zustand state management
db/ DBAdapter interface → BrowserLocalAdapter (IndexedDB) or SupabaseCloudAdapter
ai/ Provider registry (BYOK providers), action costs, consent gates
auth/ Supabase auth hooks, teams service, lifecycle, credits, audit
components/ Extracted UI components
lib/ Shared utilities
electron/ Electron main + preload (compiles to dist-electron/)
e2e/ Playwright end-to-end tests
apps/mcp/ Model Context Protocol server (stdio) — agent access to ideas/tasks/resources
supabase/
migrations/ Postgres schema (workspaces, content tables, idea resources, RLS, ops tables)
functions/ Edge Functions (AI gateway, invites, workspace bootstrap)
docs/ Architecture, security, MCP, external providers notes
docker/ Self-host scaffolding
- One adapter, three backends — the
DBAdapterinterface is the heart of the app.BrowserLocalAdapter(IndexedDB) andSupabaseCloudAdapterimplement the same contract, so the UI never knows or cares where data lives. - Private by default — no telemetry, no account, no AI calls until you opt in. Browser-only mode keeps everything on-device.
- Workspace-scoped — every record carries
workspaceId+createdBy; Supabase RLS enforces those boundaries server-side. - BYOK AI — bring your own API key to skip credit charges entirely; keys live in Supabase Vault, never the browser.
- No secrets in the bundle — hosted provider keys are session-only in memory and never persisted to storage.
| Script | What it does |
|---|---|
pnpm dev |
Start Vite dev server |
pnpm build |
Typecheck + production build |
pnpm typecheck |
TypeScript project check |
pnpm lint |
ESLint |
pnpm test |
Vitest in watch mode |
pnpm test:run |
Vitest one-shot |
pnpm --filter @opennapse/web electron:dev |
Electron dev mode |
pnpm --filter @opennapse/web electron:build |
Package desktop installer |
pnpm --filter @opennapse/web exec playwright test |
E2E tests |
pnpm --filter opennapse-mcp build |
Build the MCP server (agent access) |
- Node 20+
- pnpm 10+
We welcome contributions! Please read CONTRIBUTING.md before submitting a PR.
Found a vulnerability? Please report it responsibly. See SECURITY.md.
MIT — use it however you want.
Built with ❤️ for people who think in ideas, not tasks.