The open-source helpdesk.
Features · How it works · Quick start · Self-hosting · Docs · Community · Support
⭐ Help more teams find opendesk. Star this repo!
opendesk
opendesk brings your support email, live chat and help center into one shared inbox, and every change shows up live for everyone on the team. It ships as a hosted service at opendesk.sh and as a self-hosted install, and the two run the same code. Ollie, the built-in AI, drafts, triages and answers alongside your team, with any Anthropic or OpenAI-compatible provider, including local models.
Features
- Shared inbox - tickets with status, priority, assignee, team, tags and SLA; notes, merge, snooze, bulk edit
- Mailboxes - forward your support address in, reply from it through Google, Microsoft or SMTP
- Live chat - an embeddable widget with identity verification, typing and live delivery
- Knowledge base - collections and articles, published to a public help center
- Ollie and bots - drafts, summaries, triage, translation and chat answers from your knowledge base
- Automations and SLAs - rules that run on ticket events, and targets per priority
- Reports and CSAT - volume, response and resolution times, breaches and satisfaction
- Integrations - Linear, GitHub, Jira, Sentry, Slack, Stripe and any MCP server
- Public API - the REST API the app itself uses, plus signed webhooks, a realtime socket and MCP
- Apps - desktop for macOS, Windows and Linux, and a native iPhone app
How it works
opendesk is one Go binary (the API, background jobs and the event relay), an Elixir realtime gateway that holds no database connection, and Postgres. Every change that someone else should see is written as an event in the same transaction as the change; the relay publishes it to NATS, the gateway pushes it to browsers, and webhooks deliver it to your endpoints. There is no Redis and no Kafka.
flowchart LR
B["Browsers · apps"] --> C["Caddy"]
C -- "/socket" --> RT["Realtime gateway"]
C --> OD["opendesk<br/>API · jobs · web app"]
OD --> DB[("Postgres")]
OD -- "events" --> N{{"NATS"}}
N --> RT
OD --> WH["Webhooks"]
OD --> M["Google · Microsoft · SMTP"]
Self-hosted, NATS runs embedded in the opendesk binary and the whole stack sits behind Caddy on one domain. The hosted service splits the same binary into API and worker roles. Full write-up in the introduction and the cloud architecture.
Quick start
You need Go, Node.js with pnpm, Elixir, and Docker for Postgres.
git clone https://github.com/useopendesk/opendesk && cd opendesk cp .env.example .env make dev-db # Postgres on localhost:55432 make api # the Go API and workers, with embedded NATS on :4222 make realtime # the Elixir gateway on :4000 make web # the web app on :5173
Open http://localhost:5173 and sign up. Until you configure a mail driver,
verification and invitation emails are printed to the API log. make site and
make docs run the marketing site and the docs. More in the
contributing guide.
Self-hosting
Self-hosted opendesk is free forever, with no limits, and runs the same code as the hosted service. One command installs it on any Linux server with Docker:
curl -fsSL https://opendesk.sh/install.sh | shIt asks for your domain and an email for the TLS certificate, generates every
secret, pins a release, verifies each file against the release's checksums,
and serves opendesk over HTTPS with Caddy. Open your domain and sign up; the
first account becomes the workspace owner. Add --wizard and it also asks about
email, storage, inbound mail, AI and sign-ups. The script is checksummed at
install.sh.sha256 if you would rather read and verify it first, and
--dry-run prints the .env it would write without touching anything. Every
flag: install script.
To build it from source instead:
git clone https://github.com/useopendesk/opendesk && cd opendesk make selfhost-up
Warning
The installer writes /opt/opendesk/.env, which holds the only copy of
CREDENTIALS_KEY, the key that encrypts mailbox credentials. Lose it and every
stored credential is unreadable. opendesk-ctl backup saves it with the database.
opendesk-ctl in the install directory runs the instance: status, logs,
backup, restore, upgrade, start and stop. From here the
self-hosting guide covers email,
Google and Microsoft sign-in, storage, AI, hardening, scaling and backups.
Documentation
The full docs live at docs.opendesk.sh.
| Read this | To learn |
|---|---|
| What is opendesk | What you get, and how the parts fit together |
| Cloud quickstart | Your account, workspace, first mailbox and chat widget on opendesk.sh |
| Self-host quickstart | A server, a domain and one command to a running instance |
| Install script | What the installer does, every flag, and how to verify it first |
| Configuration | Every environment variable opendesk and the gateway read |
| Inbound forwarding, outbound replies and platform email | |
| Backups and upgrades | Backing up, restoring and moving between releases |
| Hardening | A checklist for running opendesk securely on your own infrastructure |
| Scaling | Splitting into API, worker and gateway roles, with an external NATS cluster |
| Mailboxes | Forwarding your address in and replying from it |
| API reference | Endpoints, auth, webhooks, events, realtime and MCP |
Community
Have a question, found a bug, or want to shape where opendesk goes next?
- GitHub Issues - report bugs and request features
- Releases - follow along for new versions
- Email - reach us at
team@opendesk.sh
Support
Note
Need a hand? We are happy to help. Open a GitHub issue or email team@opendesk.sh, and someone on the team will get back to you.
Would you rather not run it yourself? opendesk Cloud is the same code, hosted and operated by us. For larger teams we also help with migrating from another helpdesk, self-hosted deployments and support agreements. Tell us what you need at team@opendesk.sh.
Contributing
Pull requests are welcome. Keep each one to a single logical change, and open an
issue first for larger design or product changes. Read AGENTS.md
and the files in contracts/ before changing an interface between
parts. Before you open a PR, run make lint and make test for Go, and
pnpm typecheck and pnpm lint in web/. See the
contributing guide.
Logos, icons, colours and usage rules are in brand/.
Security
Found a vulnerability? Email team@opendesk.sh or open a
private advisory
instead of a public issue. See
responsible disclosure.
License
Apache License 2.0. Copyright 2026 Mindroot Ltd. See LICENSE.