Skip to main content

General

A markdown filesystem for agents and teams. It’s a single Go binary with a web UI, git versioning, full-text and vector search, and access over REST, MCP, NFS, S3, WebDAV, and FUSE. Your content stays plain markdown files on disk.
Obsidian is a desktop app. KiwiFS is a server: it adds a web UI, agent APIs, a git audit trail, and server-side search over the same kind of markdown files. You can import an Obsidian vault directly.
Those tools keep content in their own databases. KiwiFS stores plain markdown, so cat page.md and git clone always work.
No. Git runs under the hood and the web UI and API hide it. It is the audit trail, not the interface.
KiwiFS is in active development (v0.19). Core features run in production, but public APIs may change before v1.0. Pin a version and read the changelog before upgrading.

Installation

One static binary. SQLite and the web UI are embedded, and there are no CGo dependencies. KiwiFS runs on macOS, Linux, and Docker. git must be on the path for git versioning. The FUSE client (kiwifs mount) isn’t available on Windows.
Download a release binary, or run the Docker image:
Terminal
The Quickstart also covers building from source with make build.
.kiwi/ holds configuration and derived state side by side:Commit everything except .kiwi/state/, which kiwifs init adds to .gitignore.
kiwifs init defaults to kb. Use wiki for a team wiki, memory for agent memory, or tasks for task tracking. See Init templates for all 12.

Agents

Three ways, all through the same write pipeline:
  1. MCP: kiwifs mcp --root ~/knowledge over stdio, or the /mcp endpoint that kiwifs serve always exposes. 78 tools.
  2. REST: PUT /api/kiwi/file and friends.
  3. Filesystem: an NFS or FUSE mount, with cat, echo, and grep.
Yes. kiwifs mcp --root ~/knowledge works directly on the folder in-process. To share one knowledge base between several agents, run kiwifs serve and point them at it with kiwifs mcp --remote http://host:3333.
mcp.json
For a KiwiFS Cloud workspace, kiwifs connect <slug> --write auto writes the config for you. See MCP.
Send X-Actor and X-Provenance headers on writes. The actor is recorded as the git commit author, and KiwiFS adds a derived-from entry to the page’s frontmatter.

Security

Yes. The default auth mode is none, which suits a laptop. Before exposing a server, set [auth] type to apikey, perspace, or oidc. See Authentication.
Only the global api_key in apikey mode. NFS uses an IP allowlist (--nfs-allow) and no keys. Keep these protocols on a private network. See Alternate protocols.
No. KiwiFS indexes only the question of a quiz, so answers don’t appear in search results or snippets. The answers stay in the markdown file itself.
The web UI’s search runs full-text and vector search together when vector search is on. See Search.
Yes. Use Ollama (or the built-in ONNX embedder) as [search.vector.embedder] and sqlite as [search.vector.store] provider. Everything stays on your machine. See Ollama vector search.
Terminal

Web UI

Yes. Set keys under [ui.features] to false, for example edit = false for a read-only UI. This only hides buttons; use auth scopes to actually block writes. See Customize the UI.
Some defaults, like Mod+Shift+W and Mod+N, are also browser shortcuts. Rebind them in .kiwi/keybindings.json or [ui.keybindings]. See Keyboard shortcuts.
Every folder in a progress tracker starts collapsed so long courses stay readable. Click a folder’s header to expand it.
Export as PDF in the web UI downloads the Typst compiler from a CDN the first time, so it needs internet access. For offline or automated exports, use kiwifs export --format pdf or POST /api/kiwi/export/document.

Protocols

See Alternate protocols.
Yes. Every write gets a git commit, an index update, and an SSE broadcast, whichever protocol it came in on.
Yes. Pass --space name=path once per extra knowledge base, or list them in [[spaces]]. Each space has its own git repo and search index, and its own routes at /api/kiwi/{name}/.... See Multi-space.

Data

Writes are atomic: KiwiFS writes a temp file, calls fsync, and renames it into place. You get either the old file or the new one, never half of each.
  • Set [backup] remote to push to a git remote every few minutes, or run kiwifs backup.
  • Restore with kiwifs restore --from <remote> --to <dir>.
  • Or rsync the knowledge root.
See Backup and sync.
Terminal
The web UI’s import wizard supports both too. See Import.

License

KiwiFS is source-available under the Business Source License 1.1. You can self-host, modify, and embed it, including in production. You can’t offer KiwiFS itself to third parties as a competing hosted service. Each release converts to Apache 2.0 four years after it ships.
Yes, to build and run your own applications and internal services, and to embed it in your product. The only restriction is offering KiwiFS itself as a commercial hosted service.
See CONTRIBUTING.md for the code, or the docs repo for documentation.
Last modified on October 19, 2026