# 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.

Alternative to: Intercom, Zendesk, Freshdesk

- Capabilities: adaptable, operable
- Vertical: smb-ops-crm
- Shape: business-app
- Form factor: web-app
- Execution model: hybrid
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/chatwoot/chatwoot (MIT with enterprise/ under commercial license), 36413 stars, last commit 2026-09-03
- Last activity: 2026-09-03
- Page: apps/chatwoot--chatwoot.html
- JSON: apps/chatwoot--chatwoot.json

## Use it when

- 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

## Gotchas

- 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

## Editions

- Community (self-hosted): Free, open source
  - source: https://github.com/chatwoot/chatwoot
  - one-click: https://heroku.com/deploy?template=https://github.com/chatwoot/chatwoot/tree/master
  - container: https://chatwoot.com/deploy
- Cloud: Free, closed source
  - hosted: https://www.chatwoot.com/pricing
- Enterprise (self-hosted): Free, closed source

## Adaptable: make it yours

Effort: config-only (25 things to edit), surface kind admin-ui

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_URL, SECRET_KEY_BASE, POSTGRES_HOST, POSTGRES_USERNAME, POSTGRES_PASSWORD, REDIS_URL, SMTP_ADDRESS, SMTP_USERNAME, SMTP_PASSWORD, MAILER_SENDER_EMAIL, MAILER_INBOUND_EMAIL_DOMAIN, RAILS_INBOUND_EMAIL_SERVICE, ENABLE_ACCOUNT_SIGNUP, FB_APP_ID, FB_APP_SECRET, SLACK_CLIENT_ID, SLACK_CLIENT_SECRET, GOOGLE_OAUTH_CLIENT_ID, AZURE_APP_ID, ACTIVE_STORAGE_SERVICE, S3_BUCKET_NAME, DEFAULT_LOCALE
- Config files: .env.example, docker-compose.yaml, config/installation_config.yml
- Prompt files: none
- Accounts you'll need: SMTP provider; Meta developer app (Facebook, Instagram, WhatsApp); Twilio (SMS, optional); OpenAI (Captain, optional)

## Operable: what an agent can drive

Operability: official. Interface: api at https://developers.chatwoot.com/api-reference/introduction (published by the builder, both).

### Reach (partial coverage)

- 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: Ruby, JavaScript
- Frameworks: Ruby on Rails, Vue.js, Sidekiq
- Package manager: bundler + pnpm
- Database: PostgreSQL, Redis
- Hosting target: Docker, Heroku, DigitalOcean Kubernetes

## Model stack

- Providers: OpenAI (Captain)
- Models: none
- Keys you need (names only): none
- Prompts live in: none
- Tools: none

## Evidence and confidence

- formFactor: README: Rails app deployed with Docker, Heroku, Kubernetes (confidence 0.95)
- executionModel: README Captain AI agent on top of a deterministic desk (confidence 0.8)
- operability: developers.chatwoot.com: Application, Client and Platform APIs with access tokens (confidence 0.95)
- effort: README Deployment: link to environment-variables docs; .env.example with 120+ named vars (confidence 0.85)
- editions: README: MIT core, enterprise/ commercial; chatwoot.com cloud (confidence 0.7)
- active: GitHub pushedAt 2026-09-03
- reach:  (confidence 0.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

- https://github.com/chatwoot/chatwoot (sourcing:smb-ops-crm:github)
- https://developers.chatwoot.com (sourcing:smb-ops-crm:github)
