One shared contract
Zod schemas and permission rules live in @musubi/types, imported by both
the Express server and the Expo client.
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 |