Skip to content
Conduit

mcp server

nixsites

Self-hosted tool for managing notes, tasks, calendar, habits and the rest of life in one place

sianachi/nixsitescommunitylistedunreviewed

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, 2026

Nix (nixsites) — self-hosted workspace

Release Licence CI backend CI frontend Container image GitHub stars

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 .nix archives, plus PDF, DOCX and Markdown export; Markdown, DOCX, PDF and Obsidian import.
  • Scriptable. nixctl is a JSON CLI, and nixctl mcp exposes 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.

TimelineCalendar
SpreadsheetList
MatrixRich notes
FinanceHabits
Companion chatDark 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.

NixNotionObsidian
Where it runsYour machine or server, with Docker or KubernetesNotion's hosted serviceA folder of Markdown on your devices. Sync is Obsidian Sync or your own
LicenceMITProprietaryProprietary. Free for personal use
ShapeOne item tree: lists, boards, calendars, sheets, habits, finance and the restPages and databasesNotes, plus a large plugin ecosystem
Editing togetherReal-time CRDT editing, with presence, for a small groupReal-time collaborationFiles synced between devices
LeavingLossless .nix archives, plus PDF, DOCX and Markdown. An Obsidian vault can be importedMarkdown, HTML and CSV exportThe notes are already files
Toolsnixctl and an MCP server. Publish a subtree as a static siteThe Notion API, and Notion SitesPlugins, 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

You need Docker and mise.

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

MIT

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.

↑↓ navigate openesc close