Skip to main content

How to Migrate from Slack to Mattermost: Complete Guide

·OSSAlt Team
slackmattermostmigrationself-hostedguide

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

  1. Go to Slack AdminSettings & PermissionsWorkspace Settings
  2. Click Import/Export DataExport
  3. Choose Standard Export (public channels) or request a Corporate Export (includes DMs, private channels)
  4. 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 → ImportSlack 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 FeatureMattermost Equivalent
Slack botsMattermost bots + webhooks
Slack appsIncoming/outgoing webhooks + plugins
/slash commandsCustom slash commands
Slack ConnectFederated channels (Enterprise)
HuddlesCalls plugin (built-in)
Workflow BuilderPlaybooks
GitHub notificationsGitHub plugin
Jira integrationJira plugin
Google CalendarCalendar 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

  1. Send invitations — Generate invite links or send email invitations
  2. Set passwords — Imported users need to create new passwords
  3. Install apps — Desktop (Windows, Mac, Linux) and mobile (iOS, Android)
  4. Pin a getting-started message — Key differences from Slack
  5. Run both platforms — Keep Slack active for 2-4 weeks during transition

Key Differences to Communicate

SlackMattermost
Channels sidebarChannels sidebar (same!)
ThreadsThreads (same!)
HuddlesCalls (built-in plugin)
Slack ConnectN/A (or federated)
/giphy/giphy (plugin)
Custom emojiCustom emoji (re-upload needed)

Cost Savings

Team SizeSlack Pro (annual)Mattermost Self-HostedSavings
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

WeekTask
Week 1Deploy Mattermost, import data, set up integrations
Week 2Invite team, run both platforms in parallel
Week 3Move primary communication to Mattermost
Week 4Sunset Slack, cancel subscription

Compare team chat platforms on OSSAlt — features, self-hosting guides, and community health side by side.