The project's README from github.com/useopendesk/opendesk. As one markdown file: README.md.
The open-source helpdesk.
Features · How it works · Quick start · Self-hosting · Docs · Community · Support
⭐ Help more teams find opendesk. Star this repo!
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.
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.
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-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 | sh
It 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 ofCREDENTIALS_KEY, the key that encrypts mailbox credentials. Lose it and every stored credential is unreadable.opendesk-ctl backupsaves 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.
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 |
Have a question, found a bug, or want to shape where opendesk goes next?
[email protected][!NOTE] Need a hand? We are happy to help. Ask in Discord, open a GitHub issue or email
[email protected], 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
[email protected].
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/.
Found a vulnerability? Email [email protected] or open a
private advisory
instead of a public issue. See
responsible disclosure.
Apache License 2.0. Copyright 2026 Mindroot Ltd. See LICENSE.