dorkhub

tymeslot

Open-source meeting scheduling platform built with Elixir/Phoenix LiveView. Self-host or use the managed cloud at tymes…

Tymeslot
Elixir16019 forksAGPL-3.0updated 2 days ago
visit the demogit clone https://github.com/Tymeslot/tymeslot.gitTymeslot/tymeslot
Tymeslot

Scheduling software that stays yours.

Booking pages, calendar sync, video rooms and automated emails — running on your server, under your control.
Built on Elixir/OTP, so it keeps running while you sleep.

Licence: AGPL-3.0 Elixir Phoenix LiveView Latest release Last commit GitHub stars

Self-host with Docker →  ·  Try the Cloud →  ·  Live demo →  ·  Docs →  ·  Issues →


Booking a meeting on a Tymeslot page — pick a duration, choose a time, confirm

A real booking, start to finish: pick a duration, choose a time, done.  ·  Watch in HD →


Open source, and staying that way. Calendly is closed SaaS. Cal.com relicensed away from open source in 2026. Tymeslot's source stays public and self-hostable under the GNU AGPLv3 — what you run today, you can keep running tomorrow.

Actively developed. Tymeslot is the engine behind tymeslot.app, our managed cloud — so the code you self-host is the same code we run in production for paying customers. New releases ship regularly; see the releases.


Quick start

One command. Postgres is bundled, so there is nothing else to install.

docker run --name tymeslot \
  -p 4000:4000 \
  -e SECRET_KEY_BASE="$(openssl rand -base64 64 | tr -d '\n')" \
  -e PHX_HOST=localhost \
  -v tymeslot_data:/app/data \
  -v tymeslot_pg:/var/lib/postgresql/data \
  luka1thb/tymeslot:latest

Open http://localhost:4000 — your scheduling platform is live. The first account you create becomes the admin. For SMTP, TLS, a reverse proxy and external Postgres, see the Docker guide.

Keep tymeslot_pg as a named volume. Swapping it for a host path can fail on Docker Desktop, rootless Docker and SELinux hosts. If you need a specific location, use external Postgres instead.


Everything you need to take bookings

No add-ons, no per-feature upsells. It all ships in the box.

One place to run your day

Upcoming meetings, quick actions and your whole setup on a single screen. No hunting through menus to change how you take bookings.

Tymeslot dashboard — overview with upcoming meetings and quick actions

Availability that mirrors reality

Working hours, date-specific overrides, holiday blocks, per-meeting buffers, booking windows and minimum notice — set once, and your booking page reflects exactly when you are free.

Availability editor — weekly schedule with per-day hours and breaks

Embed it anywhere

Inline on a page, a popup, or a floating button. Copy the snippet, paste it on your site. Tokens are signed and domain-locked, so your widget only runs where you put it.

Embed & share — inline, popup and floating embed options with code snippets

Never double-booked

Every connected calendar is checked the moment someone books. One conflict anywhere blocks the slot everywhere — across Google, Outlook, CalDAV and the rest.


And there's more under the hood

  • Email that delivers — responsive templates, an .ics file on every send, configurable reminders, and signed cancel/reschedule links that need no login.
  • Ask the right questions — add custom questions to any meeting type, so you walk into every call already briefed.
  • SSO-first auth — email/password, Google, GitHub, plus generic OAuth/OIDC for Keycloak, Authentik, Okta and Azure AD. Disable registration or password login independently.
  • Privacy by design — credentials encrypted at rest, no third-party trackers or analytics pixels, rate-limited public endpoints, HMAC-signed webhooks, CSRF and signed tokens throughout.
  • Automate everythingmeeting_created, meeting_cancelled and meeting_rescheduled webhooks plug straight into n8n, Zapier, Make or your own backend.
  • Make it yours — two booking-page themes (Quill and Rhythm) with dark mode and white-label options.
  • Speaks your language — English, German, Ukrainian, French and Italian, with Slack/Telegram notifications.
  • Get paid to meet — optional paid bookings through Stripe Connect, off by default and fee-free for self-hosters.

Works with your stack

Calendars — sync availability and write confirmed meetings back, both ways.

Google Calendar
Google Calendar
Outlook
Outlook
Apple iCloud
Apple iCloud
CalDAV
CalDAV
Nextcloud
Nextcloud
Radicale
Radicale
Zimbra
Zimbra
Baikal
Baikal
mailbox.org
mailbox.org

Video & location — auto-create a meeting room (or set a place) when a booking is confirmed.

Google Meet
Google Meet
Microsoft Teams
Microsoft Teams
Zoom
Zoom
MiroTalk P2P
MiroTalk P2P
In person / phone
In person / phone
Custom link
Custom link

Deploy your way

Method Guide Notes
Docker README-Docker.md Single container, Postgres included — recommended
Cloudron README-Cloudron.md One-click install, automatic updates
Railway Deploy → One-click cloud, no server to manage
Managed Cloud tymeslot.app Zero setup, free plan included

Full configuration reference — SMTP, OAuth, OIDC, reCAPTCHA, external Postgres, SSO-only mode — lives in the Docker guide. The first user to register on a fresh install becomes admin and gets /admin, where runtime settings (registration on/off, password auth, video transcoding) can be toggled without a redeploy. For promoting further admins on each target, see docs/ADMIN.md.


Meeting payments

Optional. Charge attendees through Stripe at booking time. Off by default — self-hosters opt in by registering their own Stripe platform, and Tymeslot never holds the funds or takes a cut unless you set one.

Set up Stripe Connect

Prerequisites

  1. Register a Stripe account for your instance and enable Stripe Connect.
  2. Add Tymeslot as a Connect platform — your instance becomes the platform that hosts' Stripe accounts connect to.
  3. Create a separate webhook endpoint in the Stripe dashboard for Connect events and copy its signing secret. Point it at https://<your-domain>/webhooks/stripe/connect, set it to listen to events on Connected accounts, and subscribe it to checkout.session.completed, checkout.session.expired, charge.refunded, charge.dispute.created, charge.dispute.closed, and account.updated.

Tymeslot pins its Stripe API calls to version 2025-11-17.clover. Create the webhook endpoint on that API version (or your account default, if newer); endpoints on older versions keep working, as both payload generations are read. Upgrading Tymeslot never rotates or invalidates webhook signing secrets — existing endpoints and secrets stay valid.

Environment variables

Variable Purpose
STRIPE_SECRET_KEY Your platform's Stripe secret key (sk_live_… or sk_test_…). Required when MEETING_PAYMENTS_ENABLED=true.
STRIPE_CONNECT_WEBHOOK_SECRET Signing secret for the Connect webhook endpoint. Required to verify connected-account events.
MEETING_PAYMENTS_ENABLED Set to true to expose the payments dashboard and the per-event payment toggle. Defaults to false.
MEETING_PAYMENTS_APPLICATION_FEE_BP Optional platform fee in basis points (100 = 1%). Defaults to 0, so self-hosters never take a cut unless they opt in. Range 010000.

Once enabled, hosts connect their own Stripe account from Dashboard → Integrations → Payments, pick a currency, and switch on Require payment for any event type. Direct charges flow into the host's Stripe balance on their existing payout schedule.


Built on

Elixir 1.20  Erlang/OTP 28  Phoenix 1.8  LiveView 1.1  PostgreSQL 14+  Oban

Tailwind CSS  Swoosh + MJML  Docker  Cloudron


Pricing

Self-hosted — free, forever

The full feature set, every integration, unlimited bookings. Yours under the GNU AGPLv3, with community support. Self-host with Docker →

Managed Cloud — free plan, €9/mo for Pro

Zero maintenance, automatic updates and priority support. Start free; upgrade to Pro when you grow. Try the Cloud → — 7-day Pro trial, no card required.


Star us & contribute

If Tymeslot is useful to you, star the repo — it's the single biggest thing you can do to help others find it.

PRs and issues are welcome — start with CONTRIBUTING.md. Found a security issue? Please report it via the contact page rather than a public issue.

Tymeslot is better thanks to its contributors — see CONTRIBUTORS.md, with special thanks to @dani for generic OAuth, French localisation and a stream of CalDAV fixes.

Licence

Open source under the GNU AGPLv3 — free to use, self-host, modify and redistribute; if you run a modified version as a network service, share your changes under the same licence.

The licence covers the code. The Tymeslot name and logo are trademarks of Diletta Luna OÜ — forks are welcome, but must travel under their own name. See TRADEMARK.md.


Built with Elixir, Phoenix and LiveView · by the Tymeslot team at Diletta Luna OÜ · Tallinn, Estonia

more like this

ForwardWidgets

Widgets for Douban and Trakt watchlists plus personalized recommendations, live TV streaming including PlutoTV, Yatu ra…

JavaScript247

frirss

A modern, self-hosted, customizable web frontend for FreshRSS.

TypeScript51

YiMao

YiMao · 云海求片助手 — 双核心 Telegram 影视求片机器人。订阅模式:TMDB 智能搜索一键订阅 / 趣味求片模式:AI 生成五层地狱闯关,通关解锁优先求片。深度集成 MoviePilot + Emby/Jellyfin。…

Go52

search

search projects, people, and tags