Cal.rs
One Rust binary · Fully self-hostable · No external requests · Open source

# 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.

Get started
View on GitHub
Features

## 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. Delta sync via RFC 6578 sync-token — only fetches changes, not your entire calendar. Scales to hundreds of users. Background sync catches deletions even when nobody's booking.

⚡

### Availability engine

Free/busy computed from availability rules, synced calendar events, existing bookings, buffer times, and minimum notice. Date overrides let you block days off or set custom hours. RRULE expansion for recurring events.

🌐

### Timezone aware

Guest timezone auto-detected from the browser. Calendar events are converted from their original timezone to yours — a 10:00 New York meeting correctly blocks 16:00 in Paris. 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. Guests can invite additional attendees who receive their own confirmation with ICS.

👥

### Unified teams

Create teams from OIDC groups, hand-picked users, or both. Round-robin assigns to the least-busy available member with configurable priority weights. Collective requires all members to be free. Team avatars and stacked member photos on booking pages. Global admins can set up teams without being bookable.

🔓

### Three-level visibility

Public — listed on your profile, anyone can book. Internal — any authenticated colleague generates single-use invite links from the Invite Links page. Private — only you send invite links. Works for both personal and team event types. One-click link generation with clipboard copy.

🔄

### Reschedule

Guests and hosts can reschedule bookings without cancelling. Guests pick a new slot and the host approves; hosts reschedule instantly. CalDAV events updated in place, tokens regenerated, both parties notified.

📆

### Date overrides

Block specific dates or set custom hours per event type. Perfect for holidays, conferences, or one-off schedule changes. Overrides replace your weekly rules for that day — the troubleshoot view shows when they're active.

🔒

### Security

Argon2 password hashing, OIDC SSO with PKCE, AES-256-GCM encrypted credentials at rest. Hidden password input. Auto-generated secret key or bring your own via environment variable.

🎨

### Theme engine

7 built-in themes (Default, Nord, Dracula, Gruvbox, Solarized, Tokyo Night, Vates) plus custom colors — all configurable from the admin dashboard. Every theme adapts to both dark and light modes. Cal.com-style slot picker with dynamic timezone labels and month calendar.

📦

### Single binary, zero external requests

No runtime dependencies. SQLite storage in a single WAL-mode file. Ships as one binary — deploy with Docker, systemd, or just run it. Fonts are bundled — no Google Fonts CDN, no third-party requests. Fully GDPR-compliant out of the box.

🛠

### Full CLI

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

✅

### Tested & verified

500+ automated tests covering web handlers, CLI commands, auth lifecycle, availability engine, slot computation, database migrations, RRULE expansion, iCal parsing, timezone conversion, and email rendering. Every commit is checked by CI with code coverage tracking.

🐳

### Pre-built Docker images

Multi-arch images for `amd64` and `arm64` published to GitHub Container Registry on every release. No build step — just `docker pull` and run. Works on Raspberry Pi, Apple Silicon, and ARM cloud instances.

In action

## See it in action

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

Bookings — human-friendly dates
Slot picker with timezone support
Event types
Booking form
Calendar sources
Connect a CalDAV calendar
Teams
Event type editor
Team settings
Invite links
Admin panel
Availability troubleshoot
Profile & settings
Public booking profile
Reschedule slot picker
Reschedule confirmation
Light & mobile
Light mode
Light mode — bookings
Mobile dashboard
Mobile bookings
Mobile slots
Get started

## Up and running in minutes

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

    # Pre-built image from GHCR (amd64 + arm64)
    docker run -d --name calrs \
      -p 3000:3000 \
      -v calrs-data:/var/lib/calrs \
      -e CALRS_BASE_URL=https://cal.example.com \
      ghcr.io/olivierlambert/calrs:latest

    # Open http://localhost:3000 and register

    # docker-compose.yml
    services:
      calrs:
        image: ghcr.io/olivierlambert/calrs:latest
        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

Tech stack

## 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 + 6578) 📧 Lettre (SMTP) 🔒 Argon2 + OIDC

## Your time, your stack

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

Star on GitHub
Fork
Report an issue
Discussions
Documentation
AGPL-3.0