How to Migrate from Slack to Mattermost: Complete Guide
How to Migrate from Slack to Mattermost: Complete Guide
Slack's pricing ($8.75-12.50/user/month) adds up fast. A 50-person team pays $5,250-7,500/year. Mattermost gives you the same team chat experience, self-hosted, for the cost of a VPS. Here's exactly how to migrate.
What You'll Need
- A server for Mattermost (4 GB RAM minimum, 2+ cores)
- Slack workspace admin access
- 2-4 hours for setup, 1-2 weeks for team transition
Step 1: Deploy Mattermost
# Docker Compose — fastest path
mkdir mattermost && cd mattermost
curl -o docker-compose.yml https://raw.githubusercontent.com/mattermost/docker/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/mattermost/docker/main/env.example
# Edit .env with your domain
nano .env
# Set DOMAIN=chat.yourdomain.com
# Set MM_SQLSETTINGS_DATASOURCE
docker compose up -d
Configure your reverse proxy (Nginx/Caddy) to point your domain to Mattermost.
Step 2: Export Slack Data
- Go to Slack Admin → Settings & Permissions → Workspace Settings
- Click Import/Export Data → Export
- Choose Standard Export (public channels) or request a Corporate Export (includes DMs, private channels)
- Wait for the export to complete → download the ZIP file
Note: Free and Pro plans only export public channels. Business+ and Enterprise Grid can export everything.
Step 3: Import into Mattermost
# Use the Mattermost bulk import tool
mmctl import upload /path/to/slack-export.zip
mmctl import list available
mmctl import process <import-file-name>
Or via System Console → Import → Slack Import → Upload the ZIP.
What transfers:
- ✅ Public channel messages and history
- ✅ Channel names and descriptions
- ✅ User accounts (as deactivated — they'll need to set passwords)
- ✅ File attachments (within Slack export limits)
- ⚠️ Threads (imported as regular messages)
- ❌ Reactions and emojis (custom emojis need re-upload)
- ❌ Apps and integrations (rebuild separately)
- ❌ DMs (unless Corporate Export)
Step 4: Set Up Integrations
Replace Slack integrations with Mattermost equivalents:
| Slack Feature | Mattermost Equivalent |
|---|---|
| Slack bots | Mattermost bots + webhooks |
| Slack apps | Incoming/outgoing webhooks + plugins |
| /slash commands | Custom slash commands |
| Slack Connect | Federated channels (Enterprise) |
| Huddles | Calls plugin (built-in) |
| Workflow Builder | Playbooks |
| GitHub notifications | GitHub plugin |
| Jira integration | Jira plugin |
| Google Calendar | Calendar plugin |
Set up incoming webhooks:
# System Console → Integrations → Incoming Webhooks → Add
# Then use the webhook URL in your services:
curl -X POST https://chat.yourdomain.com/hooks/YOUR_HOOK_ID \
-d '{"text": "Deployment complete ✅"}'
Step 5: Configure SSO (Optional)
// config.json — GitLab OAuth example
{
"GitLabSettings": {
"Enable": true,
"Secret": "your-secret",
"Id": "your-client-id",
"Scope": "read_user",
"AuthEndpoint": "https://gitlab.com/oauth/authorize",
"TokenEndpoint": "https://gitlab.com/oauth/token",
"UserAPIEndpoint": "https://gitlab.com/api/v4/user"
}
}
Mattermost supports OIDC, SAML, LDAP, Google, GitLab, and Office 365 SSO.
Step 6: Onboard Your Team
- Send invitations — Generate invite links or send email invitations
- Set passwords — Imported users need to create new passwords
- Install apps — Desktop (Windows, Mac, Linux) and mobile (iOS, Android)
- Pin a getting-started message — Key differences from Slack
- Run both platforms — Keep Slack active for 2-4 weeks during transition
Key Differences to Communicate
| Slack | Mattermost |
|---|---|
| Channels sidebar | Channels sidebar (same!) |
| Threads | Threads (same!) |
| Huddles | Calls (built-in plugin) |
| Slack Connect | N/A (or federated) |
| /giphy | /giphy (plugin) |
| Custom emoji | Custom emoji (re-upload needed) |
Cost Savings
| Team Size | Slack Pro (annual) | Mattermost Self-Hosted | Savings |
|---|---|---|---|
| 10 users | $1,050/year | $120/year (VPS) | $930/year |
| 25 users | $2,625/year | $240/year (VPS) | $2,385/year |
| 50 users | $5,250/year | $360/year (VPS) | $4,890/year |
| 100 users | $10,500/year | $600/year (VPS) | $9,900/year |
Common Issues
"Messages are out of order after import" — Slack exports include message timestamps. Mattermost preserves them during import. If ordering looks off, check timezone settings.
"File attachments are missing" — Slack's standard export has file size limits. Large files may not be included. Re-share them in Mattermost.
"Users can't log in" — Imported users are deactivated by default. Activate them in System Console → Users and have them reset passwords.
"Custom emojis are missing" — Export custom emojis from Slack separately and re-upload via Mattermost's custom emoji settings.
Timeline
| Week | Task |
|---|---|
| Week 1 | Deploy Mattermost, import data, set up integrations |
| Week 2 | Invite team, run both platforms in parallel |
| Week 3 | Move primary communication to Mattermost |
| Week 4 | Sunset Slack, cancel subscription |
Compare team chat platforms on OSSAlt — features, self-hosting guides, and community health side by side.