A standards-first, self-hosted calendar & contacts server

Daymark speaks CalDAV and CardDAV natively and exposes a normalized OpenAPI domain model for everything else. One Rust binary, one database. No Redis, no queue service, no data directory.

CalDAV · CardDAV · OpenAPI 3.1 · single Rust binary · PostgreSQL · MIT

Everything a calendar server should be

Full-protocol interoperability, a real database, and a programmable API — without deploying a groupware suite.

⚖

Standards first

CalDAV (RFC 4791) and CardDAV (RFC 6352) with discovery, CRUD, sync-token REPORTs and free/busy — for events, tasks and journals. Client-tested: Thunderbird, DAVx⁵, Apple.

🗃

PostgreSQL-normalized

iCalendar is a wire format, never the source of truth. Events, tasks, journals, contacts and attachments live in a normalized schema — searchable full-text, addressable through the API.

🔒

Modern auth

Argon2id passwords, WebAuthn passkeys, TOTP 2FA with recovery codes, scoped API bearer tokens, CalDAV app passwords, login lockout.

👥

Collaboration

Calendar ACLs with multiple owners, revocable public share feeds, attendee invites by email or phone, iTIP invitations and iMIP replies.

⏰

Automation

VALARM reminders over email, SMS and Web Push from a durable in-process job queue; a rules engine; HMAC-signed webhooks — all configured from the web UI.

💻

Developer platform

OpenAPI 3.1 served live at /api/openapi.json, scoped tokens, an embedded web UI with no CDN and no build step. MIT licensed.

Have a look

The embedded web UI: calendar, tasks, contacts, and admin — vendored assets, no CDN.

Calendar month view
Calendar month view
Tasks
Tasks
Contacts
Contacts
Admin and audit log
Admin & audit log

Get up and running

One binary, one empty PostgreSQL database. Migrations apply on startup.

Prebuilt binary (any Linux distro)
tar xzf daymark-v*-x86_64-linux.tar.gz
DATABASE_URL=postgres://user:pass@localhost/calendar \
  BIND_ADDR=0.0.0.0:8080 ./daymark-server serve
Or with Docker
docker run -d --name daymark -p 8080:8080 \
  -e DATABASE_URL=postgres://user:pass@host/calendar \
  ghcr.io/btafoya/daymark:latest
Or bare-metal with systemd (Debian)
git clone https://github.com/btafoya/Daymark.git && cd Daymark
sudo scripts/install.sh --with-postgres
Create the first admin
calendar-server create-admin admin you@example.com 'a-strong-password'

Full configuration reference and client setup guides in the README.

Found something? Want something?

v1.0.0 is running in production without issue — and real-world use decides what comes next.

Stay in the loop

Release notes and Daymark news, low volume.