Mattermost
Self-hosted team chat shaped like Slack, with free tiers that narrowed sharply in v11
Mattermost is a self-hosted messaging platform with channels, threads, file sharing and integrations, aimed at a single organization rather than a federated network. It replaces Slack or Microsoft Teams on your own PostgreSQL and your own disk.
Our verdict on Mattermost#
Mattermost is the pragmatic answer when you want Slack's shape without Slack's invoice, and in 2026 you have to choose your free edition deliberately. Team Edition is the AGPL build with unlimited message history, but from v11 it is capped at 250 activated users and no longer ships GitLab SSO, so free means local accounts. Entry, introduced October 2025, hands you the Enterprise Advanced feature set and then meters it: 10,000 channel messages of searchable history, 10,000 push notifications a month, 1,000 board cards, five playbook runs a month, 40 minute calls and 250 AI queries a month. Paid tiers gate AD/LDAP and SAML, group sync, compliance export, high availability clustering and Elasticsearch. v11 also removed MySQL support rather than deprecating it, so PostgreSQL 14 or newer is mandatory. Official images are amd64 only; an ARM board needs a community build.
Who Mattermost is for#
Choose it if
- A small business leaving Slack that wants the same interface and will either accept local accounts or pay for SSO.
- Teams under 250 people who value unlimited searchable history more than enterprise features: that is Team Edition, not Entry.
- GitLab shops that already run PostgreSQL and want chat sitting next to CI.
- Anyone who needs on-premises compliance export or eDiscovery and is prepared to buy Enterprise for it.
Look elsewhere if
- You want to federate with other servers or other people's communities. Mattermost does not federate; that is Matrix's job.
- Your server is a Raspberry Pi or another arm64 box. There is no official ARM image, only community rebuilds.
- You need SSO without paying. Since v11 that combination no longer exists in any free edition.
What running it actually looks like#
Two containers, the Mattermost app and PostgreSQL 14 or newer, plus an optional third for nginx if nothing else terminates TLS. The app listens on 8065. Before the first start create ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes} and chown them to UID 2000, because the container runs unprivileged and a permission mismatch is the classic first failure. Set SiteURL in the System Console immediately: push notifications, OAuth callbacks and email links all break silently when it is wrong. On first run, the first account created becomes system admin. Upgrades are in place: stop, change the image tag, start, and the server migrates the schema on boot. Do not skip major versions, and if you are still on MySQL, that path terminates at v11.
Resource profile#
- Memory
- 500 MB idle, around 1500 MB in ordinary use. The requirements docs quote 2 GB RAM and 1 vCPU for up to 1,000 users. The Go server itself is modest; PostgreSQL and the built-in Bleve search index take most of the rest.
- CPU and acceleration
- One vCPU covers a small team per the requirements table. Spikes come from Bleve index rebuilds and from Calls, which relays audio through the server rather than peer to peer.
- Storage growth
- PostgreSQL holds posts and grows slowly. The `data/` directory holds every upload and is what actually gets large; `bleve-indexes` also grows but is regenerable.
- Operational load
- 3 of 5, Moderate. One app container plus a real database, and in-place upgrades that are usually clean. It scores 3 because v11 removed MySQL support outright and changed what the free editions contain, which is exactly the class of change you only survive by reading release notes.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
Back up a pg_dump of the Mattermost database and the data/ directory, which holds every uploaded file and every custom emoji. config/config.json matters only if you configure through the file; on modern installs most settings live in PostgreSQL instead, which means the database alone carries your configuration. bleve-indexes is regenerable: exclude it and rebuild from the System Console after a restore. logs/ is disposable. A live copy of data/ is safe because uploaded files are write-once, but dump PostgreSQL properly rather than copying its data directory. Restore the database first, then files, then start the app so schema and blobs agree.
Derived backup shape
Postgres dump. pg_dump (or pg_dumpall) into a file, then snapshot that file plus the app's data volume.
Traps and surprises#
v11 removed MySQL rather than deprecating it
From v11 the MySQL driver is gone from the codebase and the server errors out on an invalid configuration instead of warning. If you are on MySQL or MariaDB you must migrate to PostgreSQL 14+ while still on a v10 release, using the documented migration tooling, and verify it before touching the v11 tag. MariaDB is not a drop-in substitute for MySQL here either; it is explicitly unsupported.
Entry hides history, it does not delete it
The Entry edition's 10,000 message limit applies across all channels server-wide, and older posts remain in the database but stop being searchable or reachable. That means the limit is silent: nothing errors, people just cannot find last quarter's decision. If you later license Professional or Enterprise the history comes back. If you never do, you are running a chat server whose archive you cannot read.
Team Edition lost SSO in v11
GitLab SSO was the one single sign-on method Team Edition had, and it was removed in v11 as part of repositioning Team Edition for hobbyists and small teams, alongside a 250 activated user cap. If you upgrade a GitLab-authenticated Mattermost to v11 without planning, your users cannot log in. Provision local accounts or move to a licensed edition first.
Volume permissions are the usual first failure
The app container runs as UID 2000 and will not create its own directory tree. If ./volumes/app/mattermost/* is owned by root, the container starts and then fails on config write or file upload with errors that read like database problems. chown -R 2000:2000 on the volume tree before the first docker compose up saves an hour.
No official arm64 image
Mattermost documents support for 64-bit x86 only, and the official mattermost/mattermost-team-edition and mattermost-enterprise-edition tags publish amd64 manifests only. Community arm64 rebuilds exist and generally work, but they lag official releases and you are trusting a third party with your chat server. Plan for x86 hardware or a VPS if you want supported builds.
Specifications#
- Category
- Chat, mail and notifications
- Licence
- AGPL-3.0 core, Mattermost Source Available License for `server/enterprise/`, Apache-2.0 for webapp and admin tools, MIT for official binaries (Source available)
- Written in
- Go / React
- First release
- 2015
- Maturity
- Mature
- Datastore
- PostgreSQL 14+
- Default ports
8065- Ships as
- docker, deb/rpm package, native binary (tar.gz), kubernetes operator
- arm64 builds
- No
- Identity
- Native OIDC. OIDC and SAML are compiled into the binary but unlock only with a license key; from v11 Team Edition lost even GitLab SSO, so free self-hosters get local accounts.
- Replaces
- Slack, Microsoft Teams, Discord, Google Chat
- Project site
- mattermost.com
- Source
- github.com/mattermost/mattermost
- Documentation
- docs.mattermost.com
Alternatives to Mattermost#
Everything else in chat, mail and notifications, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Stalwart | 3, Moderate | 150 MB | AGPL-3.0 for the Community edition, dual licensed with the proprietary Stalwart Enterprise License for gated features |
| Synapse | 4, Heavy | 700 MB | AGPL-3.0-only (or a commercial license from Element) |
| mailcow: dockerized | 4, Heavy | 3500 MB | GPL-3.0 for mailcow's own code; bundled components keep their own licenses |
| Gotify | 1, Set and forget | 20 MB | MIT |
| ntfy | 1, Set and forget | 30 MB | Apache-2.0 (dual licensed with GPL-2.0) |
Where Mattermost comes up elsewhere#
Migration guides
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.