← all SaaS
Self-host Discord
Community / voice chat ·
Category: team chat & community
Discord is the default for gaming + open-source communities. Self-hostable replacements cover the channels + voice + roles model; what they don't replicate is Discord's network effects and bot ecosystem.
Discord pricing anchor: Free; Nitro at $9.99/user/mo for power-user perks.
- GitHub
- ★ 2.43k · last commit 3w ago · 22 open issues
- License
-
AGPL-3.0 - Setup time
- 20min docker-compose
- Monthly cost
- $10 VPS for a small server — Mongo + several Rust services.
Migration sketch. No Discord importer (different data model). Communities migrate by announcing the move + inviting users; Revolt mirrors Discord's UX closely so onboarding is fast. Bots have to be rewritten against Revolt's API.
Good fit forOpen-source projects and communities that want a Discord-shaped tool with no Trust & Safety surprises.
Weak atVoice quality is good but the bot ecosystem is tiny.
- GitHub
- ★ 36.6k · last commit today · 857 open issues
- License
-
AGPL-3.0 (Team Edition) - Setup time
- 15min docker-compose
- Monthly cost
- $5 VPS for ~50 daily-active users.
Migration sketch. Use bulkimport JSONL: write a script that reads Discord channels via the Discord API and converts to Mattermost's bulk format. Voice does not transfer (Mattermost calls is a different model).
Good fit forEngineering teams who want Discord-shaped chat but with Slack-style polish.
Weak atVoice/video huddles are weaker than Discord's voice channels.
- GitHub
- ★ 4.16k · last commit 1d ago · 1996 open issues
- License
-
AGPL-3.0 - Setup time
- 30-60min (Synapse + Element web client + reverse proxy)
- Monthly cost
- $10 VPS for a small homeserver.
Migration sketch. Use the `matrix-appservice-discord` bridge to mirror a Discord server into a Matrix room while you migrate; users can join either side. Eventually announce Matrix is the source of truth.
Good fit forFederated communities that want decentralization + e2e encryption.
Weak atSetup is the most involved option here; voice via Element Call is newer.
In a terminal? npx os-alt discord prints this table —
how the CLI works →