Open source · AGPL-3.0

Scheduling that
respects your stack

Connect your CalDAV calendar, define bookable meetings, share a link. No Node.js, no PostgreSQL, no SaaS subscription. Just a single Rust binary.

calrs dashboard

Everything you need to schedule meetings

A complete scheduling platform that runs on your infrastructure. No vendor lock-in, no monthly fees.

📅

CalDAV sync

Pull events from Nextcloud, BlueMind, Fastmail, iCloud, Google, and more. Auto-discovery via RFC 4791. Write confirmed bookings back to your calendar.

Availability engine

Free/busy computed from availability rules, synced calendar events, existing bookings, buffer times, and minimum notice. RRULE expansion for recurring events.

🌐

Timezone aware

Guest timezone auto-detected from the browser. Slots displayed in the visitor's timezone. Full IANA timezone database support.

📧

Email notifications

HTML emails with .ics calendar invites. Approve or decline pending bookings directly from the email — no login required.

👥

Groups & round-robin

OIDC group sync from Keycloak. Group event types with combined availability and automatic round-robin assignment to the least-busy member.

🔒

Authentication

Local accounts with Argon2 hashing or OIDC SSO (Keycloak, Authentik, Auth0). Authorization code + PKCE. User impersonation for admins.

🎨

Dark mode UI

Clean, responsive web interface. Dashboard, admin panel, public booking pages, and availability troubleshoot timeline. Dark mode via prefers-color-scheme.

📦

Single binary

No runtime dependencies. SQLite storage in a single WAL-mode file. Ships as one binary — deploy with Docker, systemd, or just run it.

🛠

Full CLI

Manage everything headless: sources, sync, event types, bookings, users, SMTP config. Perfect for automation and scripting.

See it in action

A clean, focused booking experience for your guests and a powerful dashboard for you.

Time slot picker
Slot picker with timezone support
Booking form
Booking form
Admin dashboard
Admin dashboard
Availability troubleshoot
Availability troubleshoot timeline

Up and running in minutes

Pick your preferred method. The first user to register becomes admin.

# Build and run with Docker (or Podman)
docker build -t calrs .
docker run -d --name calrs \
  -p 3000:3000 \
  -v calrs-data:/var/lib/calrs \
  -e CALRS_BASE_URL=https://cal.example.com \
  calrs

# Open http://localhost:3000 and register
# docker-compose.yml
services:
  calrs:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - calrs-data:/var/lib/calrs
    environment:
      - CALRS_BASE_URL=https://cal.example.com
    restart: unless-stopped

volumes:
  calrs-data:
# Build from source
cargo build --release

# Install binary + templates
sudo cp target/release/calrs /usr/local/bin/
sudo cp -r templates /var/lib/calrs/templates

# Create system user and start
sudo useradd -r -s /bin/false -m -d /var/lib/calrs calrs
sudo cp calrs.service /etc/systemd/system/
sudo systemctl enable --now calrs
# Clone and run from source
git clone https://github.com/olivierlambert/calrs.git
cd calrs
cargo build --release
./target/release/calrs serve --port 3000

# Register at http://localhost:3000

Built with boring, reliable technology

No JavaScript frameworks. No microservices. Just Rust, SQLite, and HTML templates.

🦀 Rust 🗃 SQLite (WAL) ⚡ Tokio 🔬 Axum 📄 Minijinja 📅 CalDAV (RFC 4791) 📧 Lettre (SMTP) 🔒 Argon2 + OIDC

Your time, your stack

calrs is free, open source, and self-hostable. Star the repo, try it out, and join the community.