Open source, self-hosted team chat

Team chat that lives on your own server

The Desk is a calm, fast, self-hosted Slack alternative: channels, threads, reminders, scheduled messages. One container, your hardware, your data. No per-seat pricing, because there's no one to pay.

No signup, no install — the demo's login page shows the shared credentials.

docker compose pull && docker compose up -dand it's installed. Prebuilt image, no build step.
The Desk's workspace: an icon rail, the channel dock, and the #product-launch channel with a pinned message, reactions and a thread
See it in action

Your whole workspace, quietly in one place

Channels, threads, reactions, and direct messages: the real app, not a mockup. Light and dark both ship, on desktop and on mobile.

The Desk workspace: the icon rail and channel dock beside the #product-launch channel, with reactions, a pinned message and a thread
Powered by

A boring stack you already know how to run

One compose file, a handful of containers. No Kubernetes, no exotic dependencies.

Laravel
Laravel 13Application framework, queues & scheduler
Vue.js
Vue 3Frontend, served through Inertia
Inertia
InertiaServer-driven SPA, no separate API
PostgreSQL
PostgreSQLDatabase, cache, sessions & queue
Meilisearch
MeilisearchInstant full-text message search
Redis
RedisCache & realtime presence
Docker
DockerThe whole stack in one compose file: FrankenPHP app image, Reverb websockets, queue worker & scheduler
Everything a team needs

Built in, not add-ons

Channels, threads, and DMs are table stakes. The Desk also covers the workflow features teams actually miss when they leave the big platforms.

roadmap — 23 messages in 4 channels
from:mayahas:file#product-launch
Search that filtersFull-text search over every channel, thread and DM you can see, then narrow it by author, channel, date, or has:file to find the attachment you half-remember. Pinned in the dock, instant at any history size.
Reminder: retro moved to Thursday.Sends Mon 9:00 AM
Scheduled messagesWrite now, send when it's kind to. Edit or cancel anything still in the queue.
Remind me about this tomorrow at 9 AM
Message remindersSnooze any message and it resurfaces exactly when you asked. Nothing slips.
Starting a thread for icon feedback.5 replies
Threads & group DMsSide conversations stay at the side. Channels stay readable.
@designnotifies all 6
User groups & group mentionsMention @design or @oncall and everyone in the group hears it. Membership lives in settings, not in your head.
0:14
Voice messagesRecord straight in the composer when typing it out would take five minutes. Plays back inline, waveform and all.
Retro on Thursday or Friday?
Thursday7
Friday4
PollsAsk the channel and count the answers in place, instead of eleven replies and a tally in someone's notes. Polls work in threads, and they show up in unread counts like anything else.
🚀 7🥳 3+
Reactions & custom emojiUpload your team's own emoji. Inside jokes are a feature, not bloat.
Reconnecting… your drafts are safe
Connection resilienceFlaky wifi, laptop lids, VPN drops: The Desk reconnects and catches up quietly.
Analytics, audit log, roles & invitations
Roles, analytics & moderationTeam analytics, a moderation audit log, roles and invitations, and session management. Identity and audit get their own section below.
curl -O https://docs.thedeskhq.app/openapi.yaml
REST v1OpenAPI 3.1scoped bot tokens
A REST API, not a scraping projectA versioned public API under /api/v1, described by an OpenAPI 3.1 document that a test keeps in lockstep with the routes — so the spec cannot quietly drift from the running code. Browse the API reference, or point a generator at the spec and get a typed client in your language.
botsigned POST to your endpoint
Bots & webhooksGive a bot scoped tokens and subscribe it to events, per channel if you like: deliveries are signed, retried, and disabled when your endpoint stops answering. Incoming webhooks go the other way — one secret URL posts into a channel.
The Desk on a phone: the #product-launch channel with a pinned message, an attachment, reactions, a thread and the message composer
On your phone

Install it on your phone, then tell it when to be quiet

The same server you already run, on the home screen. No app store, no second product, no third-party notification service in the middle.

  • Add to home screen. An installable app on iOS, Android and desktop, with web push so messages arrive when the tab is closed. Fresh installs generate their own push keys, so it works without extra setup.
  • Designed for the phone, not shrunk to fit. Dialogs come up as bottom sheets, a long press opens message actions, and threads and the quick switcher go full screen.
  • Quiet hours. Pause notifications on a daily schedule, or snooze them for the rest of today. Calm is a setting, not a hope.
Identity, access & audit

The parts your IT review asks about

Self-hosting is the easy half of the approval. The rest is whether it plugs into the directory you already run and leaves a trail afterwards. It does, and both are settings, not a paid tier.

Identity
  • Single sign-on over OpenID Connect, with an SSO-only mode when local passwords should stop being an option.
  • LDAP and Active Directory sign-in against the directory you already run.
  • SCIM 2.0 provisioning, so an account closed in the directory closes here too.
  • Passkeys and two-factor — WebAuthn sign-in and TOTP, each one flag to switch on, with a prompt to add a passkey after registering.
Accountability
  • A security event log — sign-ins, changes to access — pruned on a retention schedule rather than kept forever.
  • Audit exports for when someone needs the record in a file, not on a screen.
  • Per-user data export, generated on request and purged when it expires.
  • Sessions and roles you can actually see and revoke, alongside the moderation audit log.

None of this is a plan you upgrade to. It's the configuration guide and the feature toggles — read them before you believe this page.

Self-hosted, for real

Your messages never leave your building

No SaaS middleman, no data-retention lawyering, no surprise pricing changes. The Desk ships as one compose file with a prebuilt image. Run it on a VPS, a NAS in the closet, or your company's rack.

  • Unlimited everything. Members, history, file storage, bounded by your disk, not a plan.
  • Your name on it. Set the instance name, drop your marks into a mounted directory, drop the attribution line. Read at runtime, so it takes no fork, no rebuild and no custom image — the branding guide is three settings long.
  • Boring, auditable stack. Laravel, Vue, Postgres, Reverb, Meilisearch. No build step. Read every line on GitHub.
  • Hardened before you touch it. A real content security policy, HSTS on secure responses, framing denied by default, secure session cookies. Defaults, not a checklist you work through.
  • English and French. The interface is translated, down to role labels and export copy, and each person picks their language and a 12- or 24-hour clock.
  • Leave anytime. Built-in data export for every user. It's your database either way.
you@yourserver
$ git clone https://github.com/deskhq/the-desk.git && cd the-desk
$ ./docker/gen-secrets.sh # fills APP_KEY, DB, Reverb keys
$ docker compose up -d
Pulling ghcr.io/deskhq/the-desk:latest… done
Running migrations… done
The Desk is live at https://desk.your-domain.com
$

Would rather not hand-manage a VPS? The repo also ships a Dokploy compose file — four screens of settings, no YAML editing. Deploying on Dokploy.

Set up The Desk before your next standup

Free forever, MIT licensed. If you can run a container, you can run your team's chat.

Not ready to install? Try the live demo — no signup, credentials are on the login page.