opendesk README

The project's README from github.com/useopendesk/opendesk. As one markdown file: README.md.

opendesk

The open-source helpdesk.

opendesk.sh Docs CI status License Join us on Discord Follow @OpendeskHQ on X

Features · How it works · Quick start · Self-hosting · Docs · Community · Support

⭐ Help more teams find opendesk. Star this repo!

The opendesk inbox: live chats waiting, the unassigned queue, and a ticket where Ollie cancels and refunds an order

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

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

Runs on Docker Compose

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 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
Email 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?

Support

[!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].

Try opendesk Cloud Email the team Ask on Discord

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 [email protected] or open a private advisory instead of a public issue. See responsible disclosure.

License

Apache License 2.0. Copyright 2026 Mindroot Ltd. See LICENSE.

opendesk (useopendesk/opendesk)

go
Searching Database…

What is this?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. A built-in AI called Ollie drafts, triages and answers alongside your team.
Is this one app or split into several services?It is one Go binary that handles the API, background jobs and the event relay, paired with an Elixir realtime gateway and a Postgres database. Self-hosted, everything sits behind Caddy on one server; the hosted version just splits the same binary into API and worker roles.
How do I get it running?For self-hosting, one command installs it on any Linux server with Docker, asking for your domain and an email for the TLS cert. For local development you need Go, Node.js with pnpm, Elixir and Docker for Postgres, then open the app and sign up.
Do I need Redis or Kafka alongside it?No. Events go through NATS, which runs embedded inside the opendesk binary when self-hosted, so there is no Redis and no Kafka to run separately.
Any gotcha when first setting it up?Until you configure a real mail driver, verification and invitation emails are not actually sent — they just get printed to the API log.
Can I use it outside the browser?Yes — there are native desktop apps for macOS, Windows and Linux, plus a native iPhone app, alongside the web inbox.
What is Ollie?Ollie is the built-in AI that drafts replies, summarizes and triages tickets, translates, and answers from your knowledge base, using any Anthropic or OpenAI-compatible provider, including local models.
What does opendesk integrate with?It ships integrations with Linear, GitHub, Jira, Sentry, Slack and Stripe, plus any MCP server, and exposes a public REST API with signed webhooks and a realtime socket.
Is opendesk Cloud different from the self-hosted version?No — opendesk Cloud runs the exact same code, just hosted and operated by the team, for people who would rather not run it themselves.
Size
29.4 MB
Stars
337
Age
7d
Commits · 90 Days