Revolt
Open-source chat platform for communities
Revolt is an open-source, self-hostable chat platform built for communities, offering a Discord-like experience. It targets community organizers wanting control over their chat. It is deployed via Docker.
Key features
- Discord-style servers and channels
- Self-hostable backend
- Roles and permissions
- Open-source clients
Pros & cons
Strengths
- Familiar Discord-like UX
- Community-focused
- Self-hostable
Trade-offs
- Younger ecosystem
- Self-hosting is involved
Revolt replaces
Last reviewed Sep 13, 2026 · 832 words
Self-hosting Revolt means running about 10 containers: MongoDB, Redis, RabbitMQ, MinIO for file storage, a Caddy front, and then Revolt's own API, events gateway, file server, embed proxy, push daemon and web client. The catalogue's 1 GB minimum is a floor, not a comfortable number; 2 GB is where it stops swapping. For a community that wants Discord's servers, channels, roles and emoji on hardware it owns, and can absorb that operational weight, Revolt is the most faithful open-source answer. For a company chat with 20 people, it is the wrong tool and I say why below.
A note on the name
The project has been rebranding to Stoat, and the source now lives under the stoatchat organisation on GitHub; the catalogue lists it under both names. Images, config keys and documentation are in the middle of the rename at the time of writing, so when a guide you find says Revolt and the repo says Stoat, they mean the same code. Check which image tags the self-hosted repo's compose file currently references rather than trusting a blog post from last year.
What the stack looks like on disk
The official self-hosted repository ships a compose.yml and two files you must edit before the first start: Revolt.toml (renamed to match the new brand in recent releases) and an env file that sets the public hostname. The pieces that carry state are MongoDB (users, servers, messages), MinIO (every uploaded avatar and attachment), and Redis (presence, transient). RabbitMQ carries events between the API and the push and notification workers. Point the hostname variables at a single public domain and let the bundled Caddy route /api, /ws, /autumn (files) and /january (link previews) to the right container. Get the hostname wrong on first boot and the web client loads but every websocket and upload fails, which is the number one issue thread.
Backups are three jobs, not one: mongodump on a schedule, an S3-compatible sync of the MinIO bucket, and a copy of the config files. Skip MinIO and you restore a chat where every image is a broken link.
Registration, invites and email
By default a fresh instance lets anyone register. The config has an invite-only flag and SMTP settings for email verification; turn on at least one of them before the URL goes anywhere, because open registration on a public chat server attracts bots within a day. Users, servers and everything else are per instance. There is no federation between Revolt instances and none planned; if your friends are on the public revolt.chat, your self-hosted server is a separate universe with separate accounts. That is the same model as Discord, and the opposite of Synapse and the Matrix world, where a self-hosted server still talks to everyone.
Voice is the part that lags
Text chat, threads, reactions, custom emoji, roles with granular permissions, and server discovery are solid, and the desktop and web clients are pleasant. Voice channels have historically been the weak point: the media server component has been rewritten more than once and its self-hosted setup involves extra ports and a TURN server that the basic compose does not fully configure. If voice is why your community uses Discord, test it on your network before you migrate anyone, and expect to spend the most time on it. There is no video calling or screen share parity with Discord yet.
Mattermost or Zulip for teams, Revolt for communities
The team chat category splits on one question: is this a workplace or a hangout. Mattermost is a single Go binary plus Postgres, uses less RAM than Revolt's stack, and has the integrations and compliance features a company needs. Zulip is the best option if long-running topical threads matter more than presence. Both are bigger, older projects with commercial backing, and both are the safer pick for anything with a payroll. Revolt earns its place when the goal is specifically a Discord feel, with the community-style server list and a client people who grew up on Discord will accept without complaint. That is the honest reason to run it, and it is a good enough reason for a gaming group or an open-source project moving off Discord.
What I'd do
A 2 vCPU, 4 GB VPS dedicated to the stack, the official compose with only the hostname and invite-only settings changed, MinIO bucket and MongoDB dumped nightly to off-box storage, and a written procedure for upgrades, because the rename means image names may change under you. Invite the community to the text channels first and keep the old Discord voice channels alive until the self-hosted voice has survived a month of real use. If the group is fewer than 15 people and mostly talks in text, I would skip the whole stack and run Mattermost in a tenth of the resources.
Similar team chat apps
Rocket.Chat
Team ChatOpen-source team chat and collaboration platform
Replaces Slack, Microsoft Teams
Mattermost
Team ChatSecure collaboration for developer teams
Replaces Slack, Microsoft Teams
Zulip
Team ChatThreaded team chat that combines email and chat
Replaces Slack, Microsoft Teams
Let's Chat
Team ChatSelf-hosted chat app for small teams
Replaces Slack, HipChat
Matterbridge
Team ChatBridge messages between many chat platforms
Replaces Slack
Zulip Terminal
Team ChatTerminal client for the Zulip team chat platform
Replaces Slack