A lightweight, self-hosted scheduling tool. Give guests a link — they pick a time that works for both of you.
Invito connects to your existing CalDAV calendars to find open slots and blocks time when a booking is confirmed. No cloud lock-in, no monthly fee.
- CalDAV integration — connects to any CalDAV server (Nextcloud, iCloud, Google Calendar via DAV, etc.)
- Multiple event types — define different meeting kinds with fixed durations (e.g. "30-min intro call", "1-hour consultation")
- Public booking pages — share a link; guests book without needing an account
- Embeddable widget — embed the booking picker as an iframe on any website
- Pending approval — every booking request waits for your confirmation before being added to your calendar
- Email notifications — accept or reject bookings directly from your inbox
- OIDC login — no separate user database; plug in your existing identity provider
- Single binary — deploy with one file and an SQLite database
- Go 1.22+
- An OIDC provider (Keycloak, Authentik, Dex, GitHub, Google, …)
- A CalDAV server
- An SMTP server
docker run -d \
-e INVITO_BASE_URL=https://invito.example.com \
-e INVITO_OIDC_ISSUER=https://auth.example.com/realms/main \
-e INVITO_OIDC_CLIENT_ID=invito \
-e INVITO_OIDC_CLIENT_SECRET=secret \
-e INVITO_SMTP_HOST=smtp.example.com \
-e INVITO_SMTP_FROM=invito@example.com \
-e INVITO_SESSION_SECRET=replace-with-32-byte-hex \
-v invito-data:/data \
ghcr.io/jeboehm/invito:latestgit clone https://github.com/jeboehm/invito.git
cd invito
go build -o invito ./cmd/invito
INVITO_BASE_URL=http://localhost:8080 ./invitoSee Getting Started for a full walkthrough.
| Type | Content |
|---|---|
| Tutorial | Step-by-step: from install to first confirmed booking |
| How-to: Add a calendar | Connect a CalDAV calendar |
| How-to: Create an event type | Define a new meeting kind |
| How-to: Set your availability | Configure recurring weekly office hours |
| How-to: Share a booking link | Send guests a link |
| How-to: Manage bookings | View and filter booking requests |
| How-to: Set up your profile | Configure username and timezone |
| How-to: Embed a booking widget | Add an iframe booking picker to your website |
| Explanation: Architecture | Design decisions and system overview |
| Explanation: Data model | Entities and relationships |
| Explanation: Booking flow | How a booking moves from request to confirmation |
| Reference: Configuration | All environment variables |
| Reference: HTTP API | All routes and their behavior |
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
MIT — see LICENSE.
