Skip to content
Docs
opendesk.shOpen app

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 and as a self-hosted install, and the two run the same code.

  • 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.
  • 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.
  • Live chat. An embeddable widget with optional identity verification, typing indicators and live delivery. See Live chat widget.
  • Knowledge base and help center. Collections and articles, published to a public help center your widget can link to. See Knowledge base.
  • Automations and SLAs. Rules that run on ticket events, and response and resolution targets per priority. See Automations and SLA policies.
  • Reports and CSAT. Volume, response times, resolution times, SLA breaches and satisfaction scores. See 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.
  • A public API. The web app uses exactly the documented REST API, plus signed webhooks and a realtime socket. See API overview.
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 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:

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.desk.example.com, one serverinternal networkBrowserweb app, appsand chat widgetcaddyHTTPS, ports 80, 443realtimelive events, presenceopendeskAPI, workers, web appNATS, embeddedpostgresthe only datastore:443/socketeverything elseevents over NATSSQLthe only published service
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

Use opendesk.sh

Nothing to install or run.

  1. Create your account
  2. Name your workspace
  3. Connect a mailbox
  4. Add the chat widget to your site
  5. Invite your team
Cloud quickstart

Self-host

Run it on your own server

Free forever, one command to install.

  1. Get a server with Docker
  2. Point a domain at it
  3. Run the install script
  4. Create the first account
  5. Set up email
Self-host quickstart

Edit this page on GitHub