Run your own corner of the Matrix network. Federated chat across millions of users, end-to-end-encrypted rooms, Element on every device, and a homeserver you fully own. From $5/mo.
Discord rooms vanish if Discord wants them to. Slack pricing climbs as your community grows. Matrix is open federation - your homeserver talks to matrix.org, mozilla.org, kde.org, and any other Matrix server in the world.
Your community lives on your handle (@you:yourdomain.org). You set the rules. You own the message archive. If Element User Interface changes, you can swap clients without losing the room.
Join rooms on any homeserver. Bridge to Discord, Telegram, IRC, Slack. One client, many networks.
Megolm for groups, Olm for 1:1. Even the homeserver admin can't read your encrypted DMs.
Branded identity. Open registration or invite-only. Spaces (Discord-style room groupings) and room policies.
Maubot framework, GitHub bridge, RSS bot, alertmanager. The plugin ecosystem is huge.
Synapse is famously RAM-hungry, especially when joined to big rooms like Matrix HQ.
spantaleev/matrix-docker-ansible-deploy does the heavy lifting.
Synapse-on-Postgres lives or dies by disk IOPS. SAS SSD is the difference between snappy and "loading…"
Synapse upgrades occasionally need DB migrations. Snapshot before; restore in seconds if it goes sideways.
Public homeservers get scanned constantly. We mitigate; your room joins stay smooth.
If federation breaks, we'll help you read the Synapse log. Not redirect you to a generic FAQ.
Your handle, your rules, your archive. One VPS away.
Concrete setup details for the first deploy, the firewall, and the first thing to check when something acts strange.
Expose 443 for clients and federation through your reverse proxy. Some deployments also use 8448 for federation.
Pro is the sensible floor for a federated homeserver. Enterprise is safer for large public rooms, bridges, and busy Postgres.
Use Postgres, not SQLite. The matrix-docker-ansible-deploy project is a good path if you want Synapse, Element, bridges, and TLS handled together.
If federation fails, check .well-known delegation, TLS chain, server_name, and whether port 443 or 8448 is reachable from the public internet.