Skip to content

Musubi documentation

From first boot to confident contribution — architecture, workflows, provider sync, API reference, and production operations.

Musubi (結び, knot or bond) is an open, self-hostable shared calendar. Its data model deliberately differs from most calendar systems:

An event is not nested inside one calendar. It is linked into one or more calendars.

The events table has no calendarId. calendar_events links one event to many calendars, while events.originCalendarID identifies the home calendar whose role controls editing. Once this is clear, permissions, link vs fork, external mirrors, federation, realtime updates, and the client cache all become much easier to reason about.

One shared contract

Zod schemas and permission rules live in @musubi/types, imported by both the Express server and the Expo client.

Offline-tolerant client

Zustand is the live state; SQLite is the local mirror; delta sync is the durable reconciliation path; SSE makes changes feel immediate.

Provider-agnostic sync

Google, Microsoft, and CalDAV adapters normalize calendars and events behind one CalendarAdapter contract.

Self-hostable operations

One Node API and PostgreSQL database, with migrations on boot, JSON logs, Prometheus metrics, dashboards, alerts, and tested backup scripts.

Need Go to
Start every workspace Run locally
Find the right file Architecture overview
Understand a project term Glossary
Look up a command Commands & checks
Configure the server Environment variables
Add or debug an endpoint API server and HTTP API reference
Add a sync provider Sync engine
Review known risks Codebase audit