# What is opendesk

opendesk is an open-source helpdesk with shared email inboxes, live chat, a knowledge base and a public API.

opendesk is an open-source helpdesk. It 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](https://opendesk.sh) and as a self-hosted install, and **the two run the same code**.

![The opendesk inbox: folders, teams and views in the sidebar, the ticket list, and an email ticket open with its timeline, the reply box, the ticket's details and Ollie's summary](https://docs.opendesk.sh/guides/home/hero.webp)

## What you get

- **Shared inbox.** Every conversation is a ticket with a status, priority, assignee, team, tags and an SLA. Agents reply, add internal notes, merge, snooze and bulk edit. See [Inbox and tickets](/guides/inbox-and-tickets/).
- **Mailboxes.** Bring support addresses in by forwarding, IMAP and SMTP, or by connecting a Google or Microsoft account. Replies go out through your own mailbox, so customers see your address. See [Mailboxes](/guides/mailboxes/).
- **Live chat.** An embeddable widget with optional identity verification, typing indicators and live delivery. See [Live chat widget](/guides/live-chat/).
- **Knowledge base and help center.** Collections and articles, published to a public help center your widget can link to. See [Knowledge base](/guides/knowledge-base/).
- **Automations and SLAs.** Rules that run on ticket events, and response and resolution targets per priority. See [Automations](/guides/automations/) and [SLA policies](/guides/sla-policies/).
- **Reports and CSAT.** Volume, response times, resolution times, SLA breaches and satisfaction scores. See [Reports](/guides/reports/).
- **AI, optional.** Draft replies, summaries, triage, translation and chat answers from your knowledge base, with any Anthropic or OpenAI-compatible provider, including local models. See [AI features](/guides/ai/).
- **A public API.** The web app uses exactly the documented REST API, plus signed webhooks and a realtime socket. See [API overview](/api/).

## How it is built

| Part | What it does | Hosted at |
| --- | --- | --- |
| API and workers | One Go binary. Serves the REST API, runs background jobs, relays events. `OPENDESK_ROLE` selects `all`, `api` or `worker`. | `api.opendesk.sh` |
| Realtime gateway | An Elixir and Phoenix service that pushes events, presence and typing over WebSockets. It holds no database connection. | `gateway.opendesk.sh` |
| Web app | A React app, plus the help center and the chat widget. | `app.opendesk.sh` |
| Postgres | The only datastore. Neon in the cloud, stock Postgres when self-hosted. | |

Every change that someone else should see is written as an **event** in the same database transaction as the change. A relay publishes events to NATS, the gateway pushes them to browsers, and webhooks deliver them to your endpoints. Background jobs run on Postgres. There is no Redis and no Kafka. The [events catalog](/api/events/#how-events-flow) draws the whole path.

When you self-host, NATS runs embedded in the opendesk binary, and the whole stack (opendesk, the realtime gateway and Postgres) sits behind Caddy on one domain:

*Diagram: A self-hosted install on one server and one domain. Browsers reach Caddy over HTTPS on port 443. Caddy sends /socket to the realtime gateway and everything else to opendesk. opendesk, which runs the API, the workers, the web app and an embedded NATS, publishes events over NATS to the realtime gateway and keeps its data in Postgres. Realtime, opendesk and Postgres sit on an internal network; only Caddy is published.*

*Four containers behind one domain. Only Caddy is published; the rest talk on an internal network.*

The hosted service splits the same binary into API and worker roles on AWS, with the web app on Cloudflare Pages. See [Cloud architecture](/cloud/architecture/).

## Next steps

- [Use opendesk.sh](/getting-started/quickstart-cloud/): Nothing to install or run. (Cloud quickstart)
- [Run it on your own server](/getting-started/quickstart-self-host/): Free forever, one command to install. (Self-host quickstart)
