# Import from Mattermost Starting with Zulip 2.1, Zulip supports importing data from Mattermost, including users, channels, messages, and custom emoji. **Note:** You can only import a Mattermost team as a new Zulip organization. In particular, you cannot use this tool to import data into an existing Zulip organization. ## Import from Mattermost First, export your data from Mattermost. The instructions below correspond to various common ways Mattermost is installed; if yours isn't covered, [contact us](/help/contact-support) and we'll help you out. Replace `` and `` with the appropriate values below. {start_tabs} {tab|mm-default} 1. SSH into your Mattermost production server. ``` ssh @ ``` 2. Navigate to the directory which contains the Mattermost executable. On a default install of Mattermost, the directory is `/opt/mattermost/bin`. ``` cd /opt/mattermost/bin ``` 3. Create an export of all your Mattermost teams, as a tar file. ``` sudo ./mattermost export bulk export.json --all-teams --attachments mkdir -p exported_emoji tar --transform 's|^|mattermost/|' -czf export.tar.gz \ data/ exported_emoji/ export.json ``` 4. Exit your shell on the Mattermost server. `exit` 5. Finally, copy the exported tar file from the server to your local computer. You may need to replace `/opt/mattermost/bin/` with the path to your Mattermost installation. ``` scp @:/opt/mattermost/bin/export.tar.gz . ``` {tab|mm-docker} 1. SSH into the server hosting your Mattermost docker container. ``` ssh @ ``` 2. Navigate to the the Mattermost docker directory. On most installs the directory should be `mattermost-docker`. ``` cd mattermost-docker/ ``` 3. Create an export of all your Mattermost teams, as a tar file. ``` docker exec -it mattermost-docker_app_1 mattermost \ export bulk data/export.json --all-teams --attachments cd volumes/app/mattermost/data/ mkdir -p exported_emoji tar --transform 's|^|mattermost/|' -czf export.tar.gz \ data/ exported_emoji/ export.json ``` 4. Exit your shell on the Mattermost server. `exit` 5. Finally, copy the exported tar file from the server to your local computer. You may need to replace `mattermost-docker` with the appropriate path for your installation. ``` scp @:mattermost-docker/volumes/app/mattermost/data/export.tar.gz . ``` {tab|mm-gitlab-omnibus} 1. SSH into your GitLab Omnibus server. 2. Create an export of all your Mattermost teams, as a tar file. ``` cd /opt/gitlab/embedded/service/mattermost sudo -u \ mattermost /opt/gitlab/embedded/bin/mattermost \ --config=/var/opt/gitlab/mattermost/config.json \ export bulk export.json --all-teams --attachments mkdir -p exported_emoji tar --transform 's|^|mattermost/|' -czf export.tar.gz \ data/ exported_emoji/ export.json ``` 3. Exit your shell on the GitLab Omnibus server. `exit` 4. Finally, copy the exported tar file from GitLab Omnibus to your local computer. ``` scp @:/opt/gitlab/embedded/bin/mattermost/export.tar.gz . ``` {end_tabs} ### Import into Zulip Cloud Email support@zulip.com with your exported archive, the name of the Mattermost team you want to import, and your desired Zulip subdomain. Your imported organization will be hosted at `.zulipchat.com`. If you've already created a test organization at `.zulipchat.com`, let us know, and we can rename the old organization first. ### Import into a self-hosted Zulip server First [install a new Zulip server](https://zulip.readthedocs.io/en/stable/production/install.html), skipping "Step 3: Create a Zulip organization, and log in" (you'll create your Zulip organization via the data import tool instead). Use [upgrade-zulip-from-git][upgrade-zulip-from-git] to upgrade your Zulip server to the latest `main` branch. Log in to a shell on your Zulip server as the `zulip` user. To import with the most common configuration, run the following commands, replacing `` with the name of the Mattermost team you want to import. ``` cd /home/zulip tar -xzvf export.tar.gz cd /home/zulip/deployments/current ./scripts/stop-server ./manage.py convert_mattermost_data /home/zulip/mattermost --output /home/zulip/converted_mattermost_data ./manage.py import "" /home/zulip/converted_mattermost_data/ ./scripts/start-server ``` This could take several minutes to run, depending on how much data you're importing. The server stop/restart is only necessary when importing on a server with minimal RAM, where an OOM kill might otherwise occur. **Import options** The commands above create an imported organization on the root domain (`EXTERNAL_HOST`) of the Zulip installation. You can also import into a custom subdomain, e.g. if you already have an existing organization on the root domain. Replace the last line above with the following, after replacing `` with the desired subdomain. ``` ./manage.py import /home/zulip/converted_mattermost_data/ ``` {!import-login.md!} [upgrade-zulip-from-git]: https://zulip.readthedocs.io/en/latest/production/upgrade-or-modify.html#upgrading-from-a-git-repository ## Caveats Mattermost's export tool is incomplete and does not support exporting the following data: * user avatars We expect to add support for importing these data from Mattermost once Mattermost's export tool includes them. Additionally, Mattermost's data exports do not associated private messages with a specific Mattermost team. For that reason, the import tool will only import private messages for data export archives containing a single Mattermost team. [upgrade-zulip-from-git]: https://zulip.readthedocs.io/en/latest/production/upgrade-or-modify.html#upgrading-from-a-git-repository