One binary.
One directory.
Everything in it.
- No database server
- No sync service
- No account anywhere
- the whole app
- 19 MB
- default port
- 8420
Docs, databases and realtime editing for your team. The same workspace is open to ChatGPT, Claude and Cursor, on exactly the access you grant them. One binary, on your own server.
AGPL-3.0 · free software, including at work
$ curl -fsSL https://raw.githubusercontent.com/saltmd/salt.md/main/install.sh | shDownloads the binary for your platform, installs it and starts it, then prints the address to open. On a server that is the machine's own address, not localhost. Needs curl or wget; the script uses whichever is there.
claude mcp add --transport http salt https://your-host/mcp \
--header "Authorization: Bearer <your-token>"Ask Claude to turn a page of notes into a project. It creates the page, builds the database, fills the rows. You open the same board a second later and carry on. Same objects, same permissions, same history, over the Model Context Protocol server that ships inside the binary.
The hosted ones keep your pages on their servers. The self-hostable ones want a database server and a cache running first. salt.md is one process and one directory.
| Tool | Runs on | Services to run | Real-time collaboration |
|---|---|---|---|
| salt.md | Your server | 1 | Yes |
| Notion | Their servers | Hosted for you | Yes |
| Trello | Their servers | Hosted for you | Yes |
| Docmost | Your server | 3 | Yes |
| Outline | Your server | 3 | Yes |
| AppFlowy Cloud | Your server | 11 | Yes |
| Obsidian | Your own machine | None | No |
Notion, Trello, Obsidian, Docmost, Outline and AppFlowy are trademarks of their respective owners. salt.md is an independent project, not affiliated with or endorsed by any of them, and names them here only to describe what it is an alternative to.
Service counts are the containers in each project's own docker-compose.yml, checked on 26 July 2026. Docmost and Outline each add PostgreSQL and Redis. The AppFlowy figure is its self-hosted backend, AppFlowy-Cloud, which adds a gateway, object storage, an auth service, a worker, a search service and an AI service on top of those. The desktop app is a separate component and is not what that number counts. docmost/docmostOutline hosting guideAppFlowy-IO/AppFlowy-Cloud
Paste this into ChatGPT, Claude, Gemini, Copilot or whatever you already have open. It reads the machine-readable docs and then walks you through it, asking about your setup before it hands you commands.
Works in any assistant that can open a URL. If yours cannot browse, paste the contents of llms.txt after the question. llms.txt
Read https://salt.md/llms.txt in full, then walk me through self-hosting salt.md and connecting you to it over MCP. Ask me what operating system, hosting and domain I have before giving me any commands, and give me one step at a time. Flag the licence terms and the security pitfalls as we reach them rather than at the end.
All of it is in the binary. There is no paid tier holding features back.
One binary.
One directory.
Everything in it.
Type / and the toolbox opens: headings, lists, code, tables, callouts, columns. Every page is stored as open block JSON, never a proprietary format.
Add a collection inside any page. Table, board, calendar, timeline, list, gallery and form. Each view keeps its own filters, sorts and columns.
Four roles, and the line between them holds: an admin manages people, not content. Reaching a workspace you are not in takes time-boxed, written, audited emergency access, and its admins are told.
Live cursors and presence, and offline edits that merge on reconnect. The sync server is the same process.
Your pages and databases are your assistant's too: ChatGPT, Claude and Cursor work over MCP, on the same permissions and the same history. Accounts, tokens, backups and instance settings stay out of reach.
Not just the page, but the paragraph in it. The index speaks German as well as English, and it lives inside the binary. No search service beside it.
Markdown in and out, a workspace archive that carries pages, databases and files to another instance, and the SQLite file itself.
Interface, dates and times follow the reader, automatically or by hand. A new language is one command, and the build fails if a string is left behind.
Your workspace stops being tab number forty. Its own window, its own place in ⌘-Tab, one click from the dock. Point it at your instance once and it opens there every time.
The app is the window; the server is the thing you install. Linux has a build too, as an AppImage and a .deb.
No Postgres to babysit, no Redis, no sync server, no S3 bucket. The binary is statically linked with a pure-Go SQLite, so there is nothing to install underneath it.
Everything lives under one data directory. The built-in snapshot is transactionally consistent and safe to take while the instance is running.
A Raspberry Pi, an old NUC, a 5 € VPS. No container orchestration required, though a multi-arch Docker image is there if you prefer one.
Replace the file and restart. Open tabs notice the version change and ask you to reload.
salt (single Go binary)
├── REST API (net/http)
├── MCP server (/mcp, JSON-RPC)
├── Yjs relay (WebSocket)
├── SSE change feed
├── SQLite + FTS5 (pure Go, no CGO)
└── embedded React frontend
(Vite + BlockNote + Yjs)Anything else is best asked where the code is: open an issue.
Install it, open the browser, create your admin account. If you do not like it, delete one directory and it is gone.
$ curl -fsSL https://raw.githubusercontent.com/saltmd/salt.md/main/install.sh | sh