Self-Hosted Discord Alternatives Compared
Stoat, Spacebar, and Matrix/Element compared for self-hosting a Discord replacement: RAM needs, voice/video maturity, Discord bot compatibility, and the real migration friction for an existing community.

Self-Hosted Discord Alternatives Compared
Your community's Discord server holds years of pinned messages, custom roles, and bots you spent a weekend configuring — on infrastructure you don't control. The question of whether you can actually move it onto your own hardware comes up the moment something goes wrong: an outage, a policy change, a ban appeal nobody answers. The honest answer is that no self-hosted platform replicates Discord feature-for-feature yet, but three get close enough to be worth the install.
TL;DR
- Stoat (renamed from Revolt in October 2025) is the closest visual match to Discord — servers, channels, roles, reactions — but it doesn't federate and isn't end-to-end encrypted by default.
- Spacebar reimplements Discord's own API, so most existing Discord bots can point at a self-hosted Spacebar instance with little to no change — the deciding factor if your community runs on bots.
- Matrix + Element is the only one of the three that federates and encrypts by default; it's also the heaviest to self-host, and getting group video working means standing up a second backend service.
- None of the three offer a one-click import of your existing Discord server's message history, roles, or channel structure — migration means rebuilding, not copying.
The Short Answer
Pick by what your community actually needs, not by which one looks most like Discord:
- Want the closest Discord-like feel and don't need encryption or federation → Stoat.
- Your community runs on Discord bots and losing them is a dealbreaker → Spacebar.
- You want real end-to-end encryption and the option to federate across servers, and voice/video is secondary → Matrix + Element.
It's the same first question as self-hosting anything else or picking a self-hosted Reddit reader over the official app: what feature are you actually willing to give up for control of your own data.
Stoat (Formerly Revolt): The Closest Discord Look-Alike
Stoat is the project most people mean when they say "a self-hosted Discord." It kept its Discord-style UI — servers, channels, roles, reactions, a familiar sidebar — through a forced rename: the project rebranded from Revolt to Stoat in October 2025 after receiving a cease-and-desist over the old name. The official announcement is explicit that the servers, accounts, and codebase didn't change — only the name and visual identity did. If you find older guides still calling it Revolt, they're describing the same software.
The official self-hosted repository ships a Docker Compose stack that brings up the whole platform — API, websocket/events service, file storage, and a LiveKit-backed voice and video layer — in one docker compose up -d. That's a meaningfully heavier stack than a single Go binary: you're running the app services plus MongoDB, Redis, and message-queue infrastructure behind them, not a lightweight container you can forget about.
Note: Stoat does not federate between self-hosted instances, and it is not end-to-end encrypted by default — two things Matrix offers out of the box. If either one is a hard requirement for your community, Stoat is the wrong pick regardless of how much you like the UI.
Voice calls run on LiveKit, the same open-source real-time media server several other self-hosted voice tools use, and basic voice works once the compose stack is running. Video and screen-share support is newer and less proven in self-hosted deployments than in Stoat's own hosted instance — budget time for troubleshooting if your community is voice-and-video heavy, not just text.
Spacebar: Discord-API-Compatible, Bot-Friendly
Spacebar takes a different approach: instead of building a new UI and a new API, it reimplements Discord's own API closely enough that existing Discord bots and clients are designed to work against a Spacebar instance with little to no modification, according to the project's own bot-setup documentation. If your community's workflow depends on moderation bots, music bots, or custom integrations you've already built against the Discord API, that compatibility is the single biggest reason to look at Spacebar over Stoat or Matrix.
The tradeoff is that compatibility is a moving target. Spacebar tracks Discord's API, and when Discord changes something, Spacebar has to catch up — the project's own documentation acknowledges some incompatibilities remain rather than claiming full parity. Treat any "it just works" claim about bot compatibility as a starting point to verify against your specific bots, not a guarantee.
Typical Spacebar self-host flow (see docs.spacebar.chat for the current compose file):
git clone https://github.com/spacebarchat/server
cd server
docker compose up -d
Matrix + Element: The Mature, Federated Option
Matrix is a protocol, not a single app — Synapse (and newer options like Dendrite) is the homeserver software, and Element is the most widely used client. It's the option every other roundup in this space calls the "safe default," and for good reason: it's the only one of the three with federation (separate servers can talk to each other, the way email does) and end-to-end encryption on by default.
That maturity comes with real weight. Synapse's own docs ask for at least 1GB of free RAM just to participate in large public rooms, and the docs are candid that Synapse's architecture caches aggressively in RAM to stay fast — in practice, 2GB is a more realistic starting point for even a small homeserver, well above what Stoat or Spacebar's core services need idle.
Voice and video are the part that takes extra work. Element shipped end-to-end encrypted voice and video for self-hosted community users through a newer system called MatrixRTC, but self-hosting it isn't part of the base Synapse install — the Element Call self-hosting guide is explicit that you need to run two extra backend pieces yourself: a LiveKit SFU and a JWT authorization sidecar. Text and basic 1:1 calls work out of the box; group video on your own server is a second deployment, not a checkbox.
Tip: if your community is text-first and voice/video is occasional, the extra MatrixRTC backend may not be worth standing up at all — Element's calls still work for small 1:1 use without it, and you can revisit group video later.
Feature and Maturity Comparison
| Platform | Federation | E2E encryption | Voice/video self-hosted | Discord bot compatibility | Self-host stack weight |
|---|---|---|---|---|---|
| Stoat (ex-Revolt) | No | No (default) | LiveKit-based; voice solid, video newer | No — own API | Moderate (app services + MongoDB, Redis, queue) |
| Spacebar | No (per-instance) | No | Early; depends on deployment | Yes — reimplements Discord's API | Moderate |
| Matrix + Element | Yes | Yes (default) | Mature via MatrixRTC, but needs a separate LiveKit SFU + JWT sidecar to self-host | No | Higher (homeserver + client + optional call backend) |
The same shape shows up in our Gitea vs Forgejo vs GitLab CE comparison: the full-feature option (GitLab CE there, Matrix here) costs the most RAM to run, and the lighter options each trade away one specific thing — federation and encryption here — to stay simple.
Migrating An Existing Discord Community: The Real Friction
This is the part every quick comparison skips, because it's not about features — it's about what happens to a community that already exists on Discord. None of these three platforms offer an official, built-in importer that pulls your Discord server's channel structure, roles, and message history across in one step. You are recreating the structure by hand, not migrating it.
Warning: plan the move as a one-way door, not a trial. There's no supported path to copy years of pinned messages and threaded history out of Discord and into Stoat, Spacebar, or Matrix — whatever history you don't manually archive beforehand stays on Discord.
What does carry over, with effort:
- Roles and permissions — recreated by hand on all three; nobody imports a Discord permission set automatically.
- Bots — Spacebar's Discord-API compatibility is the one case where an existing bot might reconnect with a changed token and little else; Stoat and Matrix bots are written against different APIs entirely and need to be rebuilt or replaced.
- Community habit — the biggest friction isn't technical. All three platforms' mobile apps are newer and rougher than Discord's decade of polish, and members will feel that in notifications and day-to-day use during the first few weeks, not just in the one-time setup.
FAQ
Is Revolt the same as Stoat?
Yes. The project renamed itself from Revolt to Stoat in October 2025 after a cease-and-desist over the old name. The servers, user accounts, codebase, license, and maintainers are unchanged — only the name and visual identity are new.
Is there a real self-hosted alternative to Discord?
Three realistic ones: Stoat (closest Discord look-alike), Spacebar (Discord-API-compatible, best for bot compatibility), and Matrix/Element (federated and encrypted, heavier to run). None matches Discord feature-for-feature yet, especially on voice/video polish.
Can Matrix replace Discord for voice chat?
Basic voice and 1:1 calls work through Element without extra setup. Group voice/video over MatrixRTC requires self-hosting a separate LiveKit SFU and JWT auth sidecar alongside your homeserver — see the Element Call self-hosting guide for the exact pieces.
Does Spacebar work with existing Discord bots?
Spacebar reimplements Discord's own API, and its bot documentation states existing Discord bots and clients are designed to work against a Spacebar instance with little to no modification. Compatibility isn't guaranteed for every bot, since Spacebar has to track changes Discord makes to its API.
Can I import my Discord server's message history into a self-hosted alternative?
No. None of Stoat, Spacebar, or Matrix/Element offer an official importer for Discord's channel structure, roles, or message history. Moving a community means rebuilding the server structure by hand and archiving any history you want to keep before you stop using Discord.
More from Self-Hosting & Privacy

You edit .env, restart the container, and the old value is still there - no error anywhere. The exact precedence order between env_file, environment, and your shell, reproduced on a real stack, plus the fix when Compose won't pick up the change.

Every password manager says it: "zero-knowledge." Here is what that actually means technically, how client-side key derivation works, and a 5-point checklist to verify any vendor is claim for yourself.

Duplicate keys, mixed env syntax, unquoted booleans - none of them throw an error. A structural walkthrough of docker-compose.yml with YAML anchors to cut repetition and the docker compose config habit that catches mistakes before they reach a running container.
Stay in the loop
Get the latest articles delivered to your inbox. No spam, unsubscribe anytime.
Docker Compose: env_file vs environment
You edit .env, restart the container, and the old value is still there - no error anywhere. The exact precedence order between env_file, environment, and your shell, reproduced on a real stack, plus the fix when Compose won't pick up the change.
Continue Reading