Set up your own Slack-like chat system on Linux

Do you need Zulip?

Development of the Linux Kernel still happens primarily over email. Yes, Linus has his own Git tree that new patches are based off, but they’re still submitted via the mailing list for analysis by the maintainers of the various subsystems. 

Newcomers to the Linux Kernel Mailing List (LKML) are amazed that this works, given the huge volume of traffic the list attracts. But work it does, and change any time soon it’s not likely to (okay Yoda – Ed). 

Many open source projects also use IRC (internet relay chat) for communications. IRC has been around since the late 80s and hasn’t changed much since then. You connect to a server, join some channels and messages are relayed between your server and others on a given network. Many Linux distros still include an IRC client, such as the excellent Hexchat, out of the box.

Many geeks and misfits choose to run their own XMPP server. XMPP (formerly known as Jabber) is the open protocol that used to power Hipchat and Google Talk (now replaced by Hangouts), and continues to be used behind the scenes for a number of proprietary chat systems. 

screenshot of Zulip

It’s easy to get started with Zulip’s free hosting plan if you want to try out the software before it graces your server. (Image credit: Zulip)

We showed you how to set up your own XMPP server on a Raspberry Pi back in LXF232. Actually, XMPP is used, via the Prosody daemon, to connect people via Jitsi Meet, the outstanding video-conferencing software that we looked at in LXF268. 

But in an age where email has, for many, been relegated to a means to reset passwords and when communication happens with shiny mobile clients over proprietary networks such as WhatsApp, Discord and Slack, we couldn’t help but feel that the open source sphere is missing a more modern communication platform.

How Zulip shook up the chat scene

At least we couldn’t until last issue when we interviewed Zulip founder Tim Abbott. If you missed it, Zulip is an open source chat program similar (but far superior) to Slack. It has all the emoji and stylish web interface (as well as an electron app) that you’d expect from a modern chat system. 

But what makes Zulip really stand out is its threaded message model. Similar to how email conversations are threaded by subject, Zulip will group messages by topic, avoiding some of the chaos of synchronous messaging where key messages are lost in the history buffer, usually to make room for cat GIFs.

Apart from sparing you the message overload that’s become synonymous with Slack, Zulip can integrate with many other software and be used as a notification system, a triage centre and more. 

You can have separate ‘streams’ for Github projects, JIRA tickets or even IoT devices. And thanks to threading, whatever you integrate it with won’t affect Zulip’s ability to exchange memes. 

It all sounded so good we simply had to try it out for ourselves. So like good citizens we read the manual, set up our very own Zulip VM and now we share that experience for your benefit. 

Before you dive in though, a word of caution. It’s strongly recommended to install Zulip on its own server. If you install it on a machine with other things running, then you will run into difficulties.

Some hints for working around this are provided in the documentation, but if at all possible you should avoid doing this. The installer will overwrite various files in /etc, in particular any Nginx, Puppet or PostgreSQL configuration you might have, so at the very least back these up before proceeding. 

Or do what we did and run it in a VM. Alternatively there’s an experimental Docker image (which worked very well in our brief experiment) and also a ready-to-roll Digital Ocean droplet if you want to run it in the cloud.