Calendar & Contacts
What is SnagTime? SnagTime is a self-hosted scheduling application built with Next.js and Prisma. It handles account registration, workspaces, event types with durations and test pricing, availability management, public booking links with timezone support, booking confirmation and rescheduling, Google Calendar synchronization, Stripe test payments with webhooks, SMTP email notifications, and custom branding. The local demo runs on SQLite with a local calendar adapter, an internal email inbox, and stub payments requiring no external credentials. Production uses PostgreSQL 18 with row-level security, separate web and worker containers, TLS, and authenticated proxy ingress. MIT licensed.
Should you self-host SnagTime? SnagTime scores 44/100 on selfhost.directory (how scoring works ) and ranks #23 of 30 in Calendar & Contacts . It has 400 GitHub stars.
There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.
Setup is advanced: plan for several services and some ongoing maintenance. It is MIT-licensed and written mostly in Typescript.
Its closest alternative on selfhost.directory is Radicale (69/100, 5 154 stars). It scores higher overall, so compare the two before you pick. See SnagTime vs Radicale side by side.
Features Availability management
Booking links
Booking management
Calendar Sync
Custom Branding
Email notifications
Event types
Local demo mode
Production architecture Advanced self-hosting path, not a one-click managed service
REST API
Test payments Stripe live mode is explicitly rejected in this release
Workspaces
== Readme## Install$ Config
How to install SnagTime NPM
How to configure SnagTime Expand all Copy as .env (47)
AUTH_SECRET= replace-with-at-least-32-random-charactersUse a long random value outside source control. NEXTAUTH_SECRET is accepted as a fallback. Use a long random value outside source control. NEXTAUTH_SECRET is accepted as a fallback.
BOOKING_CAPABILITY_KEY_ID= booking-capability-v1Versioned signing key for booking bootstrap capabilities Versioned signing key for booking bootstrap capabilities
BOOKING_CAPABILITY_SECRET= replace-with-an-independent-32-byte-random-valueIndependent 32-byte random value for booking capabilities Independent 32-byte random value for booking capabilities
BUILD_ID= developmentImmutable build identifier Immutable build identifier
CALENDAR_PROVIDER= localCalendar provider (local or google) Calendar provider (local or google)
values: local, google
DATABASE_PROVIDER= sqliteDatabase provider Database provider
values: sqlite, postgresql
DATABASE_ROLE= appDatabase role DATABASE_URL= file:./dev.dbLocal demo database. Prisma resolves this relative to prisma/schema.prisma. Local demo database. Prisma resolves this relative to prisma/schema.prisma.
DEMO_HOST_EMAIL= owner@example.comDemo organizer email DEMO_HOST_PASSWORD= replace-with-a-strong-demo-passwordDemo organizer password DEMO_MODE= trueEnable demo mode EMAIL_FROMFrom email address EMAIL_PROVIDER= localEmail provider (local or smtp) Email provider (local or smtp)
values: local, smtp
EMAIL_REPLY_TOReply-to email address EMAIL_SENDER_DOMAINSender domain for email authentication Sender domain for email authentication
EMAIL_TOKEN_SECRET32-byte random secret for email tokens 32-byte random secret for email tokens
GOOGLE_CALENDAR_ID= primaryGoogle Calendar ID to use Google Calendar ID to use
GOOGLE_CLIENT_IDGoogle OAuth client ID GOOGLE_CLIENT_SECRETGoogle OAuth client secret Google OAuth client secret
GOOGLE_ENV_WORKSPACE_IDEnvironment-managed Google credentials workspace ID Environment-managed Google credentials workspace ID
GOOGLE_REFRESH_TOKENGoogle OAuth refresh token Google OAuth refresh token
MONITOR_DATABASE_URLMonitor database URL NEXTAUTH_SECRETFallback for AUTH_SECRET NEXT_PUBLIC_APP_URL= http://localhost:3000Canonical application URL Canonical application URL
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEYStripe publishable key (test mode only) Stripe publishable key (test mode only)
OPERATOR_HEALTH_SECRETSecret for operator health checks Secret for operator health checks
OUTBOX_POLL_INTERVAL_MS= 5000Outbox poll interval in milliseconds Outbox poll interval in milliseconds
OUTBOX_WORKER_ENABLED= trueEnable outbox worker for background jobs Enable outbox worker for background jobs
OUTBOX_WORKER_MODE= localOutbox worker mode Outbox worker mode
values: local, dedicated
PAYMENTS_PROVIDER= stubPayments provider (stub or stripe) Payments provider (stub or stripe)
values: stub, stripe
PROXY_SHARED_SECRETShared secret for trusted proxy Shared secret for trusted proxy
RATE_LIMIT_HASH_SECRETRate limit hash secret RATE_LIMIT_MAX_BUCKETS= 100000Maximum rate limit buckets Maximum rate limit buckets
RATE_LIMIT_PROVIDER= localRate limit provider Rate limit provider
values: local, postgresql
SMTP_HOSTSMTP host SMTP_PASSWORDSMTP password SMTP_PORTSMTP port SMTP_TLS_MODE= starttlsSMTP TLS mode SMTP TLS mode
values: starttls, implicit
SMTP_USERSMTP username STRIPE_CLAIMABLE_SANDBOX= falseEnable Stripe CLI claimable sandbox (non-production only) Enable Stripe CLI claimable sandbox (non-production only)
values: true, false
STRIPE_SECRET_KEYStripe secret key (test mode only) Stripe secret key (test mode only)
STRIPE_WEBHOOK_SECRETStripe webhook secret TENANT_CONTEXT_SECRETTenant context secret TOKEN_ENCRYPTION_KEY= replace-with-64-random-hex-characters64 random hex characters for encrypting Google OAuth tokens at rest 64 random hex characters for encrypting Google OAuth tokens at rest
TRUST_PROXY= falseTrust proxy headers Trust proxy headers
values: true, false
WORKER_DATABASE_URLWorker database URL WORKER_SHUTDOWN_TIMEOUT_MS= 30000Worker shutdown timeout in milliseconds Worker shutdown timeout in milliseconds
SOGo Self-hosted, open-source groupware server: webmail, calendars and address books, with native client access via CalDAV, CardDAV, IMAP, SMTP and Microsoft ActiveSync.
Someday Self-hosted scheduling tool built on Google Apps Script that integrates with Gmail and Google Calendar as a free alternative to Calendly.
spacepad Self-hosted, open-source meeting room display turning tablets into availability panels with real-time calendar sync for Google, Microsoft 365, and CalDAV.
Stalwart Mail Server Self-hosted, open-source Rust mail server with calendars, contacts and shared files over JMAP, IMAP, POP3, SMTP and the DAV protocols, plus built-in anti-spam.
Timeful Timeful is a self-hosted, open-source scheduling platform that helps groups find the best meeting time through availability polls with calendar integration.
tine tine is a self-hosted open-core groupware suite for organizations with calendar, email, contacts, tasks, file management, CRM and time tracking.
todofy A local-first desktop task and calendar app with smart views, Kanban board, Pomodoro timer, recurring tasks, and natural-language capture.
tribu A self-hosted, open-source household hub that unifies calendars, tasks, shopping, contacts, birthdays, meal plans, and a shared display for kitchen screens.
Tymeslot Self-hosted open-source meeting scheduler that syncs calendars, creates video rooms, and embeds booking pages — all free when you run it yourself.
Xandikos Self-hosted, open-source CalDAV and CardDAV server that stores calendars and contacts in Git repositories, with scheduling, sync and WebDAV-Push support.
yuvomi Yuvomi is a self-hosted, open-source family planner replacing multiple paid apps with one private server for tasks, calendar, meals, shopping, budget, and documents.
actual-ical Self-hosted open-source application that exposes Actual Budget scheduled transactions as an iCal feed for calendar integration.
Rate this project Click to rate — no account needed.
Loading comments…
0 comments