How to Self-Host Rocket.Chat: Enterprise Messaging Platform 2026
TL;DR
Rocket.Chat (MIT, ~39K GitHub stars, Node.js/Meteor) is a comprehensive self-hosted messaging platform that goes beyond Slack-style team chat. Its standout feature is omnichannel — a single inbox for customer communications via live chat widget, WhatsApp, email, SMS, Telegram, and more. For pure team messaging: Mattermost is simpler. For teams that also run customer support: Rocket.Chat is unmatched. Community Edition is free; Enterprise Edition adds compliance and advanced omnichannel features.
Key Takeaways
- Rocket.Chat: MIT, ~39K stars, Node.js — team chat + omnichannel customer support
- Omnichannel: Live chat widget, WhatsApp, email, SMS, Telegram — all in one inbox
- Marketplace: 100+ apps and integrations (Jira, GitHub, Trello, Zapier, etc.)
- Federation: Connect with Matrix homeservers (experimental) and other Rocket.Chat instances
- Mobile apps: iOS and Android (free)
- RAM: ~1–2GB — heavier than Mattermost
Rocket.Chat vs Mattermost vs Matrix
| Feature | Rocket.Chat CE | Mattermost CE | Matrix + Synapse |
|---|---|---|---|
| License | MIT | MIT | Apache 2.0 |
| GitHub Stars | ~39K | ~30K | ~12K |
| Omnichannel | Yes (live chat, email, WA) | No | No |
| Marketplace/Apps | 100+ | Limited | No |
| Federation | Matrix (beta) | No | Yes |
| Video calls | Jitsi integration | Calls plugin | Element Call |
| E2EE | Yes | Beta | Yes |
| RAM (idle) | ~1–2GB | ~500MB | ~500MB–1GB |
Part 1: Docker Setup
# docker-compose.yml
services:
rocketchat:
image: rocketchat/rocket.chat:latest
container_name: rocketchat
restart: unless-stopped
ports:
- "3000:3000"
depends_on:
- mongodb
environment:
MONGO_URL: "mongodb://mongodb:27017/rocketchat"
MONGO_OPLOG_URL: "mongodb://mongodb:27017/local"
ROOT_URL: "https://chat.yourdomain.com"
PORT: "3000"
DEPLOY_PLATFORM: docker
mongodb:
image: mongo:6.0
container_name: rocketchat-mongo
restart: unless-stopped
volumes:
- mongodb_data:/data/db
command: mongod --oplogSize 128 --replSet rs0
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
interval: 10s
# Initialize MongoDB replica set (required for Rocket.Chat):
mongo-init-replica:
image: mongo:6.0
restart: on-failure
command: >
mongosh --host mongodb:27017 --eval
"rs.initiate({_id: 'rs0', members: [{_id: 0, host: 'mongodb:27017'}]})"
depends_on:
- mongodb
volumes:
mongodb_data:
docker compose up -d
# Wait for MongoDB replica set to initialize (~30 seconds), then:
docker compose restart rocketchat
Visit https://chat.yourdomain.com → setup wizard.
Part 2: HTTPS with Caddy
chat.yourdomain.com {
reverse_proxy localhost:3000
}
Part 3: Setup Wizard
- Admin Info: Create admin username and email
- Organization Info: Company name, size, industry
- Site Info: Site name, default language
- Server Registration: Skip (or register for push notifications)
Part 4: Channels and Rooms
Room Types
- Channel (
#general,#engineering): Public group chat - Private Group: Invite-only team channel
- Direct Message: 1:1 private chat
- Omnichannel Room: Customer-facing live chat
Recommended Setup
#general — Company-wide announcements
#engineering — Engineering team
#random — Off-topic
#ops — DevOps and infrastructure
#customer-support — Via omnichannel inbox
Part 5: Omnichannel — Live Chat on Your Website
Add a live chat widget to your website:
- Admin → Omnichannel → Installation
- Toggle Enable Omnichannel: On
- Livechat → Widget Appearance → customize colors and greeting
- Get the embed code:
<script type="text/javascript">
(function(w, d, s, u) {
w.RocketChat = function(c) { w.RocketChat._.push(c) };
w.RocketChat._ = [];
w.RocketChat.url = u;
var h = d.getElementsByTagName(s)[0],
j = d.createElement(s);
j.async = true;
j.src = u + '/livechat/rocketchat-livechat.min.js?_=201903240000';
h.parentNode.insertBefore(j, h);
})(window, document, 'script', 'https://chat.yourdomain.com');
</script>
- Paste into your website's
<body> - Customer messages appear in the Omnichannel → Chats queue
Route Chats to Agents
- Omnichannel → Departments → Create department:
Sales,Support - Omnichannel → Agents → Assign agents to departments
- New chats are automatically routed to available agents
Part 6: Integrations
GitHub Notifications
- Admin → Integrations → New → Incoming WebHook
- Channel:
#engineering - Copy webhook URL
- In GitHub → Settings → Webhooks → Add → paste URL
- Select events: push, pull requests, issues
# Webhook payload format configured in Rocket.Chat script field:
# Maps GitHub events to Rocket.Chat message format
Jira
Admin → Marketplace → Install Jira Integration (from marketplace):
- Connect Jira Cloud or Server
/jiraslash commands:/jira create,/jira search,/jira assign
Zapier / n8n
Use Incoming Webhooks to connect Rocket.Chat to any automation:
curl -X POST https://chat.yourdomain.com/hooks/YOUR_HOOK_ID/YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"text": "New lead from Typeform: John Smith", "channel": "#sales"}'
Part 7: Video Calls via Jitsi
- Admin → Video Conference → Default Provider: Jitsi
- Jitsi Domain:
meet.jit.si(public) or your self-hosted Jitsi instance - Start a call: Click the camera icon in any channel
For self-hosted Jitsi:
services:
jitsi-web:
image: jitsi/web:stable
# ... (Jitsi has its own full Docker Compose setup)
Part 8: LDAP / OIDC SSO
LDAP (Admin → Workspace → LDAP):
LDAP Host: ldap.yourdomain.com
Port: 636 (LDAPS)
Bind DN: cn=readonly,dc=yourdomain,dc=com
Base DN: dc=yourdomain,dc=com
OIDC/OAuth2 via Authentik: Admin → Workspace → OAuth → Add Custom OAuth:
- URL:
https://auth.yourdomain.com/application/o/rocketchat/ - Client ID + Secret from Authentik
- Token endpoint, userinfo endpoint, scope:
openid profile email
Maintenance
# Update Rocket.Chat:
docker compose pull
docker compose up -d
# Backup MongoDB:
docker exec rocketchat-mongo mongodump --archive | gzip \
> rocketchat-backup-$(date +%Y%m%d).gz
# Restore:
cat rocketchat-backup-20260309.gz | docker exec -i rocketchat-mongo mongorestore --archive
# Logs:
docker compose logs -f rocketchat
# Rocket.Chat CLI (admin tasks):
docker exec rocketchat node /app/bundle/programs/server/app.js --help
When to Choose Rocket.Chat vs Mattermost
Choose Rocket.Chat if:
- You run a customer support team (omnichannel is unique to Rocket.Chat)
- You need a live chat widget for your website
- You need WhatsApp/email integration in the same platform as internal chat
- You want a large app marketplace
- You're running an enterprise with complex compliance requirements
Choose Mattermost if:
- Pure internal team messaging (no customer communication)
- Simpler setup and lower RAM footprint
- You prefer PostgreSQL over MongoDB
- You want a more Slack-identical UX
See all open source team communication tools at OSSAlt.com/alternatives/slack.