Publish by conversation.
Pages, collections, and docs — managed entirely through your AI assistant.
WriteKit is a publishing platform with an MCP server built in. Point Claude, Cursor, Windsurf, Cline, Zed, OpenCode, or Goose at it and write, organise, and publish pages from the chat.
Hosted — zero setup.
claude mcp add --transport http writekit https://mcp.writekit.devSign in at writekit.dev with Google, GitHub, or Discord, pick a subdomain, and start telling your assistant what to write.
Desktop — local-first, no account.
Download WriteKit for your OS from Releases. It runs entirely on your machine — data lives in %APPDATA%\WriteKit (or ~/Library/Application Support/WriteKit, ~/.local/share/WriteKit). A local MCP server is exposed on 127.0.0.1 so Claude Desktop (or any MCP client) can read and write to it in the background.
- Pages: any markdown content — a doc, guide, tutorial. Start as drafts, publish when ready.
- Collections: group related pages (docs, a tutorial series, a changelog). Ordered manually or by date.
- Visibility:
public,unlisted(URL-only), orprivate(team members only) — per page and per collection. - Teams:
owner/editor/viewerroles on the hosted service; invite members by email. - Semantic graph: embedding-powered similarity graph of your pages, visualised in 2D or 3D. Embeddings run entirely in your browser via transformers.js — pick a model in Settings, it downloads once and caches locally.
- MCP tools:
create_page,update_page,publish_page,list_pages,search_pages,create_collection,update_settings, and more. See writekit.dev/docs for the full list.
Standard CommonMark + GFM, with a few extensions that matter:
- Syntax-highlighted code blocks with language tags and a copy button
- Callouts:
> [!NOTE],> [!TIP],> [!WARNING],> [!DANGER] - Media embeds:
<embed src="https://...">for YouTube, Spotify, SoundCloud, Twitter/X, GitHub Gists - D2 diagrams: write architecture diagrams in
```d2fenced blocks, rendered server-side to interactive SVG - Footnotes, task lists, tables, raw HTML
One codebase, two artifacts:
| Hosted | Desktop | |
|---|---|---|
| URL | writekit.dev |
http://127.0.0.1:<port> |
| Storage | Postgres (platform) + per-tenant SQLite | SQLite only |
| Accounts | Google / GitHub / Discord OAuth | None — single user, loopback trust |
| MCP auth | OAuth 2.0 + PKCE | Unauthenticated (loopback only) |
| Multi-tenant | Yes — subdomain per site | No — single site |
| Entry | cmd/writekit |
desktop/ (Wails v2 wrapper) |
git clone https://github.com/Macawls/writekit
cd writekit
docker compose up -d # starts postgres
export DATABASE_URL=postgres://writekit:writekit@localhost/writekit
export SESSION_SECRET=$(openssl rand -hex 32)
go run ./cmd/writekitPoint DNS at your box with a wildcard *.yourdomain.tld record and you've got a multi-tenant publishing service. OAuth providers (Google/GitHub/Discord) and AWS SES for magic-link email are optional — the server boots with any subset configured. Embeddings are computed client-side in the user's browser, so the server never needs an embedding model installed.
All env vars are declared in internal/config/config.go.
AGPL-3.0-or-later. The entire codebase is open source. AGPL §13 (network-use) means: if you modify WriteKit and run your fork as a service, you must publish your changes under the same license. Self-hosting, personal use, and modification are unrestricted.