Import from Gitter (beta)
Zulip supports importing data from Gitter, including users, channels,
messages, attachments, and avatars.
Note: You can only import a Gitter room as a new Zulip organization. In
particular, this tool you cannot use this tool to import from Gitter into an
existing Zulip organization.
Import from Gitter
First, export your data from Gitter.
Export your Gitter data
Export your Gitter data. You will
receive json files of the public rooms that you are a part of.
gitter_data.json file of the room which you want to import into
Note: You'll need a Gitter API token to export data. You can get this
token by following the instructions in the "Getting Started" section of the
Import into Zulip Cloud
Email email@example.com with
gitter_data.zip and your desired
subdomain. Your imported organization will be hosted at
If you've already created a test organization at
<subdomain>.zulipchat.com, let us know, and we can rename the old
Import into a self-hosted Zulip server
install a new Zulip server,
skipping "Step 3: Create a Zulip organization, and log in" (you'll
create your Zulip organization via the data import tool instead).
Log in to a shell on your Zulip server as the
zulip user. To import with
the most common configuration, run the following commands:
supervisorctl stop all # Stop the Zulip server
./manage.py convert_gitter_data gitter_data.json --output converted_gitter_data
./manage.py import '' converted_gitter_data
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
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
<subdomain> with the desired subdomain.
./manage.py import <subdomain> converted_gitter_data
Once the import completes, all your users will have accounts in your
new Zulip organization, but those accounts won't have passwords yet
(since for very good security reasons, passwords are not exported).
Your users will need to either authenticate using something like
Google auth, or start by resetting their passwords.
You can use the
./manage.py send_password_reset_email command to
send password reset emails to your users. We
recommend starting with sending one to yourself for testing:
./manage.py send_password_reset_email -u firstname.lastname@example.org
and then once you're ready, you can email them to everyone using e.g.
./manage.py send_password_reset_email -r '' --all-users
'' with your subdomain if you're using one).
Create organization owners
The Gitter API don't contain data on which
users are administrators of the Gitter channel. As a result, all
Gitter users are imported into Zulip as normal users. You can follow
the Zulip documentation on
making a user an organization owner from the terminal
to mark the appropriate users as organization owners.
The Gitter data export tool
doesn't support exporting private Gitter channels.
Gitter's export tool doesn't export email addresses; just GitHub
usernames. The import tool will thus use GitHub's generated
noreply email addresses to compute the
GitHub-generated noreply email address associated with that GitHub
Since one cannot receive email at those noreply email addresses,
imported users will need to use GitHub authentication to log in to
Zulip and will be unable to receive email notifications until they
change their Zulip email address.
You can merge multiple Gitter channels into a single Zulip
organization using this
This tool doesn't translate Gitter's Markdown format into Zulip
format Markdown (there are a few corner cases where the syntax is
different). Additionally, Gitter's issue mention syntax isn't translated.