Chatwoot
Omnichannel support desk with documented Application, Platform and Client APIs; MIT core, env-configured.
Live chat, email, WhatsApp, social and SMS in one inbox, with help center, campaigns, reports and the Captain AI agent. Self-host under MIT (enterprise/ is commercial) and configure through documented env vars. The Builder documents three REST APIs; there is no official MCP, though community wrappers exist.
- I want WhatsApp, email and website chat in one queue on our own server and our agent drafting replies through the API
- I am paying per seat for Intercom or Zendesk and want a flat self-hosted desk
- Platform API is self-hosted or managed hosting only, not cloud
- enterprise/ directory (Captain and others) is commercially licensed; MIT covers the core
- README warns of breakages if channel env vars are not set
- 1,300+ open issues: large surface, expect rough edges
Last activity Sep 3, 2026. Fit: adaptable 3, operable 3.
Editions
Community (self-hosted) · Free open source
Cloud · Free closed source
- HostedOpen the hosted app
Enterprise (self-hosted) · Free closed source
No distribution recorded.
Adaptable: what is yours to change
Make it yours
Config only25 things to editadmin-ui surface
The named env vars (.env.example) are deployment configuration: SECRET_KEY_BASE, FRONTEND_URL, POSTGRES_*, REDIS_URL, SMTP_*, inbound-mail ingress, storage and per-channel app ids; only INSTALLATION_NAME/BRAND_NAME/LOGO overrides in config/installation_config.yml touch branding. Business adaptation lives in the admin UI: inboxes and channels, teams and agents, canned responses, macros, automation rules, labels, help center and Captain settings.
- Env vars
FRONTEND_URLSECRET_KEY_BASEPOSTGRES_HOSTPOSTGRES_USERNAMEPOSTGRES_PASSWORDREDIS_URLSMTP_ADDRESSSMTP_USERNAMESMTP_PASSWORDMAILER_SENDER_EMAILMAILER_INBOUND_EMAIL_DOMAINRAILS_INBOUND_EMAIL_SERVICEENABLE_ACCOUNT_SIGNUPFB_APP_IDFB_APP_SECRETSLACK_CLIENT_IDSLACK_CLIENT_SECRETGOOGLE_OAUTH_CLIENT_IDAZURE_APP_IDACTIVE_STORAGE_SERVICES3_BUCKET_NAMEDEFAULT_LOCALE- Config files
.env.exampledocker-compose.yamlconfig/installation_config.yml- Prompt files
- none
- Accounts you need
- SMTP providerMeta developer app (Facebook, Instagram, WhatsApp)Twilio (SMS, optional)OpenAI (Captain, optional)
Source
- github.com/chatwoot/chatwoot
- MIT with enterprise/ under commercial license license
- Last commit Sep 3, 2026
- 36,413 stars
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 6 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Read and reply to conversations | Reachable | Application API conversations and messages endpoints |
| Manage contacts and their attributes | Reachable | Application API contacts endpoints |
| Create and configure inboxes | Reachable | Application API inboxes; Platform API for installation-level setup |
| Manage agents and teams | Reachable | Application API agents; Platform API users and accounts |
| Receive events | Reachable | Webhooks documented in the API reference |
| Run reports (conversation, agent, CSAT) | Undetermined | Not confirmed on the API introduction page; check the Application API reports section |
| Automation rules, labels, canned responses | Undetermined | Not confirmed on the introduction page |
| Publish help center articles | Undetermined | Not confirmed on the introduction page |
| Configure the Captain AI agent | Undetermined | Captain is an enterprise/ feature; API coverage not documented on the intro page |
| Embed a custom chat widget | Reachable | Client API with inbox_identifier and contact_identifier |
Code stack
- Languages
- RubyJavaScript
- Frameworks
- Ruby on RailsVue.jsSidekiq
- Package manager
- bundler + pnpm
- Database
- PostgreSQLRedis
- Hosting target
- DockerHerokuDigitalOcean Kubernetes
- Built
- Human-written (recorded, never ranked)
Model stack
- Providers
- OpenAI (Captain)
- Models
- none
- Keys you need
- none
- Prompts live in
- none
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: Rails app deployed with Docker, Heroku, Kubernetes | 95% |
| executionModel | README Captain AI agent on top of a deterministic desk | 80% |
| operability | developers.chatwoot.com: Application, Client and Platform APIs with access tokens | 95% |
| effort | README Deployment: link to environment-variables docs; .env.example with 120+ named vars | 85% |
| editions | README: MIT core, enterprise/ commercial; chatwoot.com cloud | 70% |
| active | GitHub pushedAt 2026-09-03 | – |
| reach | 65% |
Open questions
- Cloud plan prices and whether a free cloud plan exists
- Confirm API coverage for reports, automation rules, labels, canned responses and help center
- Which model provider does Captain require?
Sources
- github.com/chatwoot/chatwoot sourcing:smb-ops-crm:github
- developers.chatwoot.com sourcing:smb-ops-crm:github