Best Self-Hosted Slack Alternative for Small Teams
Compare Mattermost, Rocket.Chat, Synapse and Zulip for RAM, database, mobile push, SSO, upgrades and licence, using vendor sizing figures.
Wetin self-hosted Slack alternative you suppose run
Self-hosted Slack alternatives wey worth small team time na Mattermost, Rocket.Chat, Matrix with Synapse, and Zulip. For internal team tool wey dey one server, run Mattermost. For public community, run Zulip. Run Matrix with Synapse when you must talk to servers wey other people own, and only for that case, because federation na the one thing wey the others no fit copy, and na also the thing wey go change your work as administrator.
Feature lists no go separate these four. All of dem get channels, threads, search, file uploads, and mobile apps. Wetin separate dem na wetin dem require from you every month: memory, database wey you must keep running, mobile push path wey you fit no control, and licence wey decide whether the feature you need dey behind payment. The comparison below use these points, for ten users and for a hundred.
Wetin each of the four really be
Mattermost na Go server wey get PostgreSQL database. One binary, one database, one configuration file. E dey behave like Slack, threads and slash commands join, and na the easiest of the four to operate, which mean say e no dey give much wahala.
Rocket.Chat na Node.js application wey dey run on MongoDB. E get the widest feature set for here, including voice and video calls, plus omnichannel inbox wey dey bring customer conversations from email and social channels enter the same interface. If na that inbox make you dey look, compare am with dedicated Chatwoot support desk first, because chat server wey dey handle support work different from chat server wey dey handle team work.
Matrix na protocol, no be product. Synapse na the reference server (Python, PostgreSQL), while Element na the client wey most people dey use. Na only this option for here wey your server fit communicate with servers wey you no dey run.
Zulip na Python server (Django plus Tornado) wey PostgreSQL, RabbitMQ, memcached and Redis dey support behind am. E dey install as one unit with its own script. Its model na topics inside channels, so conversation from Tuesday still easy to find on Friday. Version 12.0 land for April 2026.
How much RAM and which database, for 10 users and for 100
Every number for the chart below come from the project documentation itself, wey I read for August 2026. None of dem na my own measurement, and I no invent any of dem. The basis dey the same for every row: na the smallest configuration wey the project publish, with the database included when the project size am separately.
The data behind this chart
[
{
"label": "Synapse",
"published_ram_gb": 1,
"notes": "Synapse install docs: at least 1 GB free RAM if you want to join large public rooms. PostgreSQL is required for production and is not sized."
},
{
"label": "Mattermost",
"published_ram_gb": 2,
"notes": "Mattermost requirements: 1 to 1,000 users on 1 vCPU and 2 GB RAM, single server, database included."
},
{
"label": "Zulip",
"published_ram_gb": 2,
"notes": "Zulip requirements: under 100 users on 1 CPU, 2 GB RAM and 2 GB swap. 100 users and above needs 2 CPUs and 4 GB."
},
{
"label": "Rocket.Chat",
"published_ram_gb": 8,
"notes": "Rocket.Chat requirements: smallest published tier is 4 GiB for the app plus 4 GiB for MongoDB, rated up to 500 concurrent users."
}
]The rows no get the same format, and na that be the first useful finding. Synapse 1 GB na the minimum for the Synapse process, but e get one condition: the docs ask for at least that amount of free RAM if you want join large public rooms. PostgreSQL dey outside that figure. Mattermost 2 GB na for the whole machine, database join, and e cover 1 to 1,000 users on one vCPU. Zulip document 2 GB and one CPU for below 100 users, plus 2 GB of swap. For 100 users and above, e need 4 GB and two CPUs. Rocket.Chat publish the biggest number here, 8 GB, because e size the application at 4 GiB and MongoDB at 4 GiB. That tier fit handle up to 500 concurrent users.
For 10 users, all 4 of dem fit run on hardware wey you no go need think about twice. For 100 users, the answers separate: Mattermost still dey inside the 2 GB tier, Zulip need 4 GB and another CPU, while Rocket.Chat smallest documented tier remain 8 GB. This na because MongoDB memory demand depend on the machine, not your user count.
The database choice go affect your future upgrades more than your daily performance. Mattermost need PostgreSQL 14 or newer, and e don deprecate MySQL support from v11, so MySQL install today fit become migration tomorrow. Synapse fit run with SQLite, but the project docs talk am clearly say SQLite only dey okay for testing, because e perform badly inside large rooms. Rocket.Chat 8 require MongoDB 8.0. This mean say database upgrade and chat upgrade go be one project, instead of two.
Wetin 2 GB VPS really give you
2 GB plan na the entry size for most providers, and e fit handle two out of these four well.
- Mattermost fit run well. Na the only one wey vendor document for this exact size, for up to 1,000 users, with PostgreSQL for the same box. Ten people on 2 GB no go get problem.
- Zulip fit run, but use swap. The docs recommend swap for anything below 5 GB, and dem warn say machines with small RAM fit get out of memory errors during upgrades, where
tools/webpackna the step wey dey fail. Na real failure wey you go meet during upgrade, no be during installation. - Synapse fit run while traffic dey low. E no dey use much memory when idle. The problem na the spike, and the section about federation below explain where e dey come from.
- Rocket.Chat na the one to avoid for 2 GB, and MongoDB storage engine na the cause. WiredTiger set its internal cache to the higher value between 50% of (RAM minus 1 GB) and 256 MB, so for 2 GB machine e reserve about 512 MB before Node.js even start. The result no be clean refusal. E installs, e runs, e slows down as history dey grow, and later the kernel out of memory killer go stop whichever process big pass at that time.
Check wetin you actually get before you decide, because providers dey count RAM differently from free:
free -h
swapon --showRemember say chat server no be the only thing for the box. TLS (transport layer security) termination, backups, and container runtime all need memory. Put whichever server you choose behind reverse proxy wey you understand, like Nginx, Caddy or Traefik, and if you deploy with containers, Docker Compose basics for a VPS na the part wey make sense to set up correctly first.
Do the mobile apps need your own push server
Na this one people dey discover after dem deploy, and na am dey often decide the answer.
This na how e work. Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM) go accept notification only from person wey hold the signing credentials for that particular app. Your server no fit send push to app wey you no build. So, self-hosted chat server wey dey use vendor App Store build must send its notifications to vendor gateway, and vendor go set the terms.
- Mattermost. The free option na Test Push Notification Service (TPNS) for
https://push-test.mattermost.com. The docs talk say dem no recommend am for production, and e get no service level agreement (SLA). E dey work only with App Store and Play Store builds. Hosted Push Notification Service (HPNS) na production-grade option, but e need paid subscription. The third option na to compile the push proxy yourself. For that one, you need your own app builds with your own APNs and FCM credentials. - Rocket.Chat. Push need you to register the workspace with Rocket.Chat Cloud, and community workspaces get limit of 10,000 push notifications per month. That one na about 330 per day for the whole workspace. When the quota finish, notifications stop to arrive until the month reset. To users, e go look like say the app don break.
- Matrix with Element. Synapse dey send notifications to push gateway, and the official Element apps dey point to the gateway wey matrix.org dey run for
https://matrix.org/_matrix/push/v1/notify. The payload carry event and room identifiers instead of message text, and the app dey fetch the content from your server. So the gateway dey see metadata, not conversations. You fit run your own Sygnal gateway, but that one mean say you must build and distribute your own apps. For Android, UnifiedPush with ntfy server wey you host dey provide middle option. - Zulip. The free plan include mobile push service for up to 10 users. If users pass 10, you need a plan. The free Community plan cover many non-commercial organisations. Zulip 12.0, for April 2026, add end to end encryption for push payloads.
For ten users, all these options give you working notifications at no cost. For one hundred users, the situation change: Zulip need a plan, Mattermost still work with the test service but without SLA or support, Rocket.Chat monthly cap become the restriction, and Matrix no dey affected because the gateway free to use.
Which ones give you single sign-on for free
Single sign-on (SSO) na where open core business model dey show itself pass.
- Zulip include SAML (security assertion markup language) and LDAP (lightweight directory access protocol) for the self-hosted server at no cost. You no need buy separate tier.
- Synapse support OpenID Connect (OIDC), SAML and CAS for its own configuration file, free. Newer deployments dey increasingly use Matrix Authentication Service, wey be separate service with one-way migration from classic Synapse authentication. So plan that move instead make you discover am later.
- Rocket.Chat community edition get basic LDAP and SAML login. To sync extended user attributes, map groups and teams, and run background synchronisation, you need enterprise licence.
- Mattermost free Team Edition give you GitLab OAuth and nothing else. SAML, AD/LDAP and OpenID Connect na paid features.
If you plan run several services behind one login, put self-hosted Authentik identity provider in front of dem and check which one of the four fit actually talk to am with the licence wey you get.
Wetin federation really cost you
Federation na the main reason Matrix dey exist. Your user fit join room wey dey for another person server and talk to people wey their accounts dey there, just as mail servers dey exchange mail. No other option for here fit do this. If you need am, nothing else for this page fit replace am.
Na federation still make Synapse be different kind workload. When your user join federated room, your server go keep copy of the room state and events, and e go cache media wey users for other servers post: avatars, images and files. Your disk usage go then depend on rooms wey you no create and people wey no get accounts for your server. Na why Synapse installations fit grow media store wey far bigger pass the volume of messages wey their own users send. Na still why the docs connect joining large public room with specific memory requirement.
Set retention policy from day one, no be when disk don full:
media_retention:
local_media_lifetime: 90d
remote_media_lifetime: 14dSynapse gain media_retention for version 1.61, with separate lifetimes for local and remote media. Remote media na cache, so if user ask for purged file again, Synapse go request am again from the server wey e come from. Local media no be cache, so short local_media_lifetime go permanently delete uploads wey your own users make.
The honest summary be say: if your users dey only talk to each other, federation no give you anything, but e go use disk, bandwidth and make upgrades more difficult. Turn am off, or choose another server.
Upgrade dem dey go how
Zulip na the easiest. One script go do am, and the documented downtime dey under 30 seconds unless big database migration dey involved. Installation and upgrade dey look like this; na you go run am for the server:
cd $(mktemp -d)
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
tar -xf zulip-server-latest.tar.gzRun the installer as root. The --push-notifications flag go register the server with the mobile push service during installation, and e go ask you to accept the terms of service that time. So read dem before you start.
sudo ./zulip-server-*/scripts/setup/install --push-notifications --certbot \
--email=YOUR_EMAIL --hostname=YOUR_HOSTNAMEFor later upgrades, na the same tarball plus one command:
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
sudo /home/zulip/deployments/current/scripts/upgrade-zulip zulip-server-latest.tar.gzMattermost predictable. Replace the binary, restart am, and migrations go run when e start. Since the August 2025 releases, the Extended Support Release (ESR) track dey release every 9 months with 12 months of support. ESR-to-ESR upgrades na the tested path. You fit skip several ESRs at once, but dem never test am. For practical purpose, na you go test am yourself.
Rocket.Chat dey tie three upgrades together. As of August 2026, the 8.x line na the current one. Dem release 8.7.0 on 6 August 2026, and e require MongoDB 8.0 plus matching Node.js version. If you skip a major version, you fit end up with database wey the application refuse to open. The Rocket.Chat Docker Compose installation guide dey pin these versions together for you. Na this be the main reason to use the container route here.
Synapse need careful reading. Every release get upgrade notes. You must read the notes for every version wey you pass through, no be only the version wey you land on. After the upgrade, Synapse go run background updates against the database. For small server, these updates fit keep the machine slow for hours. This na expected behaviour, no be fault.
Licence terms, for plain language
Mattermost dey distribute im compiled Team Edition builds under MIT licence, while dem dey offer the source under AGPLv3 or commercial licence. Some parts of the repository dey under Mattermost Source Available License, and you need paid licence to run dem for production. Rocket.Chat na MIT, except for the ee/ directories, wey get their own enterprise licence. Synapse move from Apache 2.0 go AGPLv3 for version 1.99.0. Contributors dey sign CLA wey allow Element sell exceptions to that licence. Zulip na Apache 2.0 and e no get enterprise directory. Na why im SSO story no get any asterisk.
The practical meaning be say: AGPL only concern you if you plan modify the server and offer am to other people as a service. Wetin matter pass for small team na the open core line, meaning which features no dey inside the free build. Zulip get the fewest, while Mattermost get the most.
Which one you suppose pick
An internal team tool. Mattermost. E get the smallest documented footprint, upgrades wey no dey cause wahala, and familiar interface wey no need plenty explanation. Plan to pay for plan once SSO become requirement, because most teams go reach that point.
A community server. Zulip. Topics make busy public channel remain easy to read even after months, SAML and LDAP no cost anything, and one command dey enough to upgrade am. If your community dey closer to posts and replies than live chat, compare self-hosted forum software first, because forum dey index better for search and no need push infrastructure at all. Pick Rocket.Chat instead if you want voice, video and omnichannel features, and you fit give am the 8 GB wey its own documentation ask for.
A network wey must interoperate. Matrix with Synapse and Element. Accept say media go grow, set retention from day one, give am PostgreSQL and more disk than you think, then get real value from talking to servers wey you no control. If team no ever federate, choosing Synapse mean say you dey pay that cost for nothing.
FAQ
Wetin be the best self-hosted Slack alternative for small team?
Mattermost, for most internal teams. E documentation cover 1 to 1,000 users for one vCPU and 2 GB RAM with PostgreSQL for the same machine, so e fit the entry-size VPS plan wey most providers dey sell. The catch na single sign-on: free Team Edition support only GitLab OAuth, while SAML, AD/LDAP and OpenID Connect all need paid plan. If free SSO matter pass the Slack-like interface, run Zulip instead.
I fit run self-hosted chat server for 2 GB VPS?
Mattermost yes, and Zulip yes if you add swap, as Zulip own docs recommend below 5 GB. Rocket.Chat na the one wey go disappoint you, because MongoDB WiredTiger engine claim the larger value between 50% of (RAM minus 1 GB) or 256 MB for e cache. So roughly 512 MB of 2 GB machine don go before the application even start. E go install, then performance go reduce as history dey grow, and e go eventually end with out of memory kill. Rocket.Chat smallest published tier na 4 GiB for the app plus 4 GiB for MongoDB.
Self-hosted chat servers need their own mobile push notification server?
Usually no, because Apple's APNs and Google's FCM only accept notifications from whoever sign the app. So the vendor app dey use the vendor gateway. The terms no be the same. Mattermost offer free test service with no SLA and paid hosted service. Rocket.Chat limit community workspaces to 10,000 push notifications per month. After that, delivery stop until the month reset. Zulip include push free for up to 10 users and need plan above that. Matrix homeservers send push through the gateway wey Element apps use, at no cost. You only need your own gateway if you also ship your own app builds.
I suppose self-host Matrix and Synapse for team wey never dey talk to other servers?
No. Federation na wetin Synapse dey for, and na also wetin make am heavier to run. Joining rooms for other servers dey pull their state and cache their media for your disk, so storage go grow for reasons wey no relate to your own users. Set media_retention with short remote_media_lifetime before that happen. Team wey only dey talk among themselves go get the operational cost but none of the benefit, and Mattermost or Zulip go do the same work with less hardware.
Which self-hosted Slack alternative get free single sign-on?
Zulip and Synapse. Zulip include SAML and LDAP for the self-hosted server at no cost, while Synapse support OpenID Connect, SAML and CAS for e configuration. Newer installs dey move to the separate Matrix Authentication Service. Rocket.Chat community edition do basic LDAP and SAML login, but e put attribute sync, group mapping and background sync behind enterprise licence. Mattermost free Team Edition support only GitLab OAuth.