# On CentOS/RHEL, you must first install epel-release, and then python36,# and finally you must run `sudo ln -nsf /usr/bin/python36 /usr/bin/python3`# On Fedora, you must first install python3# From a clone of zulip.git./tools/provisionsource/srv/zulip-py3-venv/bin/activate./tools/run-dev.py# starts the development server

We recommend one of the other installation methods, since they are
extremely well-tested and generally Just Work. But if you know what
you’re doing, these instructions can help you install a Zulip
development environment on other Linux/UNIX platforms.

Because copy-pasting the steps documented here can be error-prone, we
prefer to extend tools/provision to support additional platforms
over adding new platforms to this documentation (and likely will
eventually eliminate this documentation section altogether).

You can use
our provisioning tool
to setup the Zulip development environment on current versions of
these platforms reliably and easily, so we no long maintain manual
installation instructions for these platforms.

If tools/provision doesn’t yet support a newer release of Debian or
Ubuntu that you’re using, we’d love to add support for it. It’s
likely only a few lines of changes to tools/lib/provision.py and
scripts/lib/setup-apt-repo if you’d like to do it yourself and
submit a pull request, or you can ask for help in
#development help
on chat.zulip.org, and a core team member can help add support for you.

doaspkg_addsudobashgccpostgresql-serverredisrabbitmq \
memcachedlibmemcachedpy-Pillowpy-cryptographypy-cffi# Get tsearch_extras and build it (using a modified version which# aliases int4 on OpenBSD):gitclonehttps://github.com/blablacio/tsearch_extrascdtsearch_extrasgmake&&sudogmakeinstall# Point environment to custom include locations and use newer GCC# (needed for Node modules):exportCFLAGS="-I/usr/local/include -I/usr/local/include/sasl"exportCXX=eg++# Create tsearch_data directory:sudomkdir/usr/local/share/postgresql/tsearch_data# Hack around missing dictionary files -- need to fix this to get the# proper dictionaries from what in debian is the hunspell-en-us# package.sudotouch/usr/local/share/postgresql/tsearch_data/english.stopsudotouch/usr/local/share/postgresql/tsearch_data/en_us.dictsudotouch/usr/local/share/postgresql/tsearch_data/en_us.affix

There’s an NPM package, zulip-cloud9, that provides a wrapper around
the Zulip development server for use in the Cloud9 environment.

Note: npmi-gzulip-cloud9 does not work in zulip’s virtual
environment. Although by default, any packages installed in workspace
folder (i.e. the top level folder) are added to $PATH.

cd .. # switch to workspace folder if you are in zulip directory
npm i zulip-cloud9
zulip-dev start # to start the development server

If you get error of the form bash:cannotfindcommandzulip-dev,
you need to start a new terminal.

Your development server would be running at
https://<workspace-name>-<username>.c9users.io on port 8080. You
dont need to add :8080 to your url, since the cloud9 proxy should
automatically forward the connection. You might want to visit
zulip-cloud9 repo and it’s
wiki for more info on
how to use zulip-cloud9 package.

The docker instructions for development are experimental, so they may
have bugs. If you try them and run into any issues, please report
them!

You can also use Docker to run a Zulip development environment.
First, you need to install Docker in your development machine
following the instructions. Some other interesting
links for somebody new in Docker are:

You’ll want to
read the guide for Zulip development
to understand how to use the Zulip development. Note that
start-dockers automatically runs tools/run-dev.py inside the
container; you can then visit http://localhost:9991 to connect to your
new Zulip Docker container.

To view the container’s run-dev.py console logs to get important
debugging information (and e.g. outgoing emails) printed by the Zulip
development environment, you can use:

dockerlogs--follow<containerid>

To restart the server use:

dockerpsdockerrestart<containerid>

To stop the server use:

dockerpsdockerkill<containerid>

If you want to connect to the Docker instance to run commands
(e.g. build a release tarball), you can use:

You can modify the source code in your development machine and review
the results in your browser.

Currently, the Docker workflow is substantially less convenient than
the Vagrant workflow and less documented; please contribute to this
guide and the Docker tooling if you are using Docker to develop Zulip!