zen
Selfhosted notes app. Single golang binary, notes stored as markdown within SQLite, full-text search, very low resource usage
Links
README
From the repo.
Zen
Live Demo • Features • Updates

Features
- Single Go binary or Docker Compose
- Low resource usage
- Standard Markdown files, local SQLite database
- Organize with flexible tags, not rigid folders
- Markdown features like tables, code blocks, task lists, highlights, and more
- Full-text search with BM25 ranking
- Import and export data with full portability
- Templates
- Pinned notes
- Archive and soft delete notes
- Bulk archive and delete
- Version history
- Internal note links with side panel preview
- Minimal dependency footprint
- Automated backups (via Zen Backup)
- Import from other services (via Zen Import)
Experimental Features
- Canvas for spatial organization of notes and images (stored as JSON Canvas)
- Semantic search for notes and images (via Zen Intelligence)
- Similar images (via Zen Intelligence)
- MCP for searching, listing and reading notes
Installation
Build from source
$ make build
Local Development
Run the application using default configuration
$ make dev
Run the application in watch mode
$ go install github.com/air-verse/air@latest
$ go install github.com/evanw/esbuild/cmd/esbuild@latest
$ make watch
Schema Migrations
- Create new migration file under
./migrations - Use the format
<version>_<title>.sql
Image Versioning
$ git tag x.y.z
$ git push origin x.y.z
Contributions
This is a personal project built for my own use. The codebase is available for forking and modifications. Note that I may not actively review pull requests or respond to issues due to time constraints.
Thanks
Collected info
- ★ 1,175 stars
- ⎇ 63 forks
- Language: JavaScript
- Source updated: 9/20/2026
Config for your environment
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.