mcp server
nixsites
Self-hosted tool for managing notes, tasks, calendar, habits and the rest of life in one place
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 25, 2026Nix (nixsites) — self-hosted workspace
Nix (nixsites) is a self-hosted, open-source alternative to Notion and Obsidian: notes, tasks, habits, journal, files, calendar and finance in one item tree, for one person or a small group.
It syncs in real time with CRDTs, offers a CLI and an MCP server for AI tools, exports with no lock-in, and can publish a subtree as a static site.
Live demo and docs. That site is itself a Nix workspace, published as a static site.
What it does
- One tree, many views. A body (note, canvas or spreadsheet) is separate from how its children are shown: list, board, calendar, timeline, gallery, spreadsheet, chart, habit tracker, finance ledger.
- Structure you shape yourself. Property schemas, formulas, rollups, templates and automations, plus a companion that builds structure on request, with every plan previewed before it runs.
- Real-time editing. CRDT-synced notes with presence, version history and password-locked subtrees.
- Quiet reminders and sync. Due tasks and habits arrive as push notifications; Google and Outlook calendars sync both ways with a visible log.
- Safe by construction. Permissions are enforced by Postgres row-level security, and the web app, CLI and MCP server share one authorisation path.
- No lock-in. Lossless
.nixarchives, plus PDF, DOCX and Markdown export; Markdown, DOCX, PDF and Obsidian import. - Scriptable.
nixctlis a JSON CLI, andnixctl mcpexposes the workspace to AI tools. - HTTP API. The same workspace is a REST API. Create a personal access token, exchange it at
POST /public/v1/auth/token, and call/api/v1. Start with the API guide; the contract is backend/openapi/nix-api.json. - Publish a subtree as a static site. The live demo above is one.
The full list is in docs/features.md.
Screenshots
One tree of items, shown the way each job needs. All data here is made up.
| Timeline | Calendar |
| Spreadsheet | List |
| Matrix | Rich notes |
| Finance | Habits |
| Companion chat | Dark theme |
On a phone. Nix installs as an app, with the same views, a share target and offline copies of notes you have opened.
How it compares
Nix is for a workspace you run yourself: structured views, and a copy of the data you can take with you.
| Nix | Notion | Obsidian | |
|---|---|---|---|
| Where it runs | Your machine or server, with Docker or Kubernetes | Notion's hosted service | A folder of Markdown on your devices. Sync is Obsidian Sync or your own |
| Licence | MIT | Proprietary | Proprietary. Free for personal use |
| Shape | One item tree: lists, boards, calendars, sheets, habits, finance and the rest | Pages and databases | Notes, plus a large plugin ecosystem |
| Editing together | Real-time CRDT editing, with presence, for a small group | Real-time collaboration | Files synced between devices |
| Leaving | Lossless .nix archives, plus PDF, DOCX and Markdown. An Obsidian vault can be imported | Markdown, HTML and CSV export | The notes are already files |
| Tools | nixctl and an MCP server. Publish a subtree as a static site | The Notion API, and Notion Sites | Plugins, and Obsidian Publish or your own site |
Anytype and AFFiNE are the other projects people try for this. Anytype is local-first: the sync protocol is open source and a self-hosted node is documented, and the apps are source-available. AFFiNE is a self-hostable workspace of documents and a whiteboard. Nix keeps tasks, habits, journal, files, calendar and finance in that same tree, and adds the CLI, the MCP server and static-site publishing above.
Run it for real
Read deploy/install.sh before you pipe it to a shell. It needs Docker with
the Compose plugin, curl, openssl, jq, and about 8 GB of memory for Docker. The stack runs
Postgres, RabbitMQ, an object store, the identity provider and eight Nix services (API,
collaboration, web, and the import, export, plugin, calendar and notification workers). A default
Docker Desktop VM is often 2 to 4 GB, and a smaller limit thrashes. The script stops if a tool is
missing, and warns when Docker has less than about 8 GB.
curl -fsSL https://raw.githubusercontent.com/sianachi/nixsites/main/deploy/install.sh | bash
Open http://nix.localhost in Chrome or Firefox and sign in with the details it prints.
Safari does not resolve .localhost names: add 127.0.0.1 nix.localhost auth.nix.localhost to
/etc/hosts first.
The same line with a public origin is a real install, using the images at ghcr.io/sianachi/nix:
curl -fsSL https://raw.githubusercontent.com/sianachi/nixsites/main/deploy/install.sh | bash -s -- https://nix.example.org
Point nix.example.org and auth.nix.example.org at the machine and leave ports 80 and 443 free.
The script writes every secret into ~/nix/nix.env and prints an administrator sign-in. Back that
file up with the Docker volumes (nix-*); it cannot be regenerated.
Flags, what the installer starts, upgrades, Kubernetes and image tags are in docs/install.md.
Run it locally
git clone https://github.com/sianachi/nixsites.git && cd nixsites
mise install # Node, pnpm, .NET and Go at the pinned versions
pnpm install --frozen-lockfile
pnpm dev # infrastructure, database, identity, then every service
Open http://localhost:5173 and sign in as dev@nix.localhost with NixDev-Password1!.
These are local development credentials only.
pnpm dev is safe to re-run. Use bash scripts/dev.sh --help to start only some services, or
--skip-stack when the Docker infrastructure is already up. If a port is taken, see .env.example.
Working in JetBrains Rider? node --experimental-strip-types scripts/rider-run-configs.mts writes
Run/Debug configurations for each service.
Stack
ASP.NET Core 10 and Postgres 16 (row-level security, pgvector) · React 19, TypeScript, Tailwind v4 · Node 22 collaboration service (CRDT over WebSocket) · Go workers on RabbitMQ · OIDC login (Zitadel).
apps/web React app, installable as a PWA
apps/collab Collaboration service
apps/go-workers Import, export, plugin, calendar and notification workers
apps/cli nixctl and the MCP server
apps/sites Static site builder and server
backend/ Core API (ASP.NET) and the migrator
packages/ Shared libraries
deploy/ Compose manifests, images, seed and backup scripts
API
The REST API is a way to use Nix, with the web app, nixctl, and MCP. The API guide covers tokens, the first request in curl, Python, and TypeScript, resources, errors, and limits. The browsable reference generated from the OpenAPI document is docs/site/nix-docs/generated/reference.html. The same text is on the docs site once that guide is published there.
Contributing
Start with CONTRIBUTING.md: how to run Nix, check a change and open a pull request. Issues labelled good first issue are sized for a first change. AGENTS.md is the map of path-by-path rules for people and for assistants; it links the focused guides.
Day-to-day commands are in docs/development.md. Before opening a PR, run
./scripts/changed-path-checks.sh --working-tree and then ./scripts/validate-changed.sh --working-tree.
Generated OpenAPI and client code is never edited by hand.
Licence
Star, or open an issue
If Nix is the workspace you wanted, star the repository so other people can find it. A bug or an idea belongs in an issue.