In any collaborative environment, it's important to have good tools for communication. What tools work best for you depends a bit on your situation, but might include anything from mailing lists for email communication, Git or Subversion for version control, a wiki or Etherpad for collaborative authoring, a shared task list for organizing workflow, or even a full-fledged project management suite.
One collaboration tool which has become indispensable is team chat. Whether your colleagues are sitting across the room from you or on the other side of the planet, the ability to communicate in real-time makes many conversations faster, easier, and can help reduce confusion that might emerge in asynchronous communication.
There's still a perception out there in some circles that chat applications can be a distraction, and I do believe it's important to have a commitment to reel in off-topic threads before they create a cognitive disruption. And it's equally important to be able to give yourself the space to work uninterrupted when you have tasks that require longer periods of concentration. As I write this, for example, I'm using at least two team collaboration tools, but the notifications are silenced so that I can check in periodically as the breaks in my work allow for it, just as I silence social media notifications when I really need to get stuff done.
I would advocate that for your team collaboration needs, you pick a tool that's exclusive to work, though not everyone agrees on this. Personally, I find it too easy to be distracted by non-work conversations when I reuse the chat feature of, say, a social media tool. I like to keep work separate so I can turn off personal communications when I'm at work, and vice versa. But do what works best for your team.
Slack quickly became the darling of software development circles, leading to the displacement of many other tools. An article in The Next Web proclaimed "Slack is quietly, unintentionally killing IRC," and this switch has also come to many open source communities. The developers behind Wordpress, for example, have switched to Slack for their team communications.
But Slack is a closed source SaaS tool, and it's far from the only name in the game. In fact, open source might be critical to your business chat needs. If you work with sensitive information or need to make sure that all communication stays behind a firewall, self-hosting might be your best option. And access to the source helps you ensure that the communication between you and your team isn't seeping out of your control through some nefarious addition to the codebase.
Let's look at a few open source alternatives, from old classics to brand new, that might be a good fit for you and your team's chat needs.
Mattermost
Mattermost is a very modern approach to team chat, and offers both self-hosted and hosted options. It's written in Golang with a good chunk of JavaScript under the React framework. It features private and public chats, including one on one communication, good archival support, and a very similar interface to Slack, including most of the features you've come to expect there. In fact, if you're already using Slack, there's an easy import function which lets you move over your current channels and archives. Mattermost also integrates into your organization's existing LDAP or Active Directory authentication systems.
One feature I really like is the ability to upload sound, video, or images directly from your mobile device, which seems handy when communicating on the go. Mattermost is licensed under an "Apache-wrapped AGPL." Check out the source code on GitHub, and then give it a try.
Zulip
Released under the Apache license and primarily offering hosted instances, Zulip is another cross-platform multimedia-rich chat service. It comes with many of the things you might expect if you're familiar with a client like Slack: image embeds, @-mentions, file uploads, logging, and much much more. It features multiple streams (the same as channels or rooms), which are a must if you're working on a team of more than a couple of people. It offers a free service to anyone, with paid plans available for more storage, LDAP and Active Directory integration, and on-premises support.
If your team is already embedded in an existing chat application, you can import your organization from Slack, HipChat, Mattermost, and Gitter.
Zulip offers chat apps for Linux, Mac, Windows, iOS, and Android.
Rocket.Chat
Rocket.Chat is written in CoffeeScript and JavaScript on top of the Meteor framework. Rocket.Chat is designed for you to download and run on-premise with a client interface for either desktop or mobile access. It hosts many of the same features as other modern clients, from desktop notifications to image and file uploads to an archived history with search, and integration with LDAP. Planned and in the roadmap are a native Android application, Kerberos support, and integration with many other tools from GitLab to antivirus tool for attached files.
Rocket.Chat features an online demo, and you can check out its source code on GitHub as well. Rocket.Chat is available under an MIT license.
Element.io
One of the options which has become increasingly popular since this article was originally published, and now deserves its own spot in the list, is Element.io. Element has a collection of web and mobile tools which can be used to connect to Matrix, an "open network for secure, decentralized communication."
Element is also perhaps the easiest of these tools to try. Its web client is hosted, so there's nothing to install (although there are clients, should you want a dedicated app). You can also check out the full source for all of the projects on GitHub.
Thanks to bridge integrations, you can also use Element to interconnect with services utilizing IRC, Slack, Gitter, Telegram, potentially allowing you to replace multiple other clients with a single open source option.
To learn more about Element, go check out our full introduction to the project.
IRC
Internet Relay Chat, or IRC, is a protocol dating back to the late 1980s. Because it's been around so long, there are numerous open source implementations on both the client and the server side. One of its primary advantages is its simplicity. The IRC specification is so simple that it's commonly used in introductory programming classes as an easy way to learn network communication.
Coming with its age, however, are numerous drawbacks. It lacks many features one might expect in a modern chat client, from security to identity management to even just being able to easily transmit non-text components, like images, files, or emoticons (the latter might be seen as a plus to some, however). Some features have been implemented after-the-fact through bot services, including nickname management, logging, and other features, but these vary from server to server.
IRC does still have some things going for it, though. It's nearly universal, and clients are available for basically every platform out there. Though the command-driven interface isn't necessarily intuitive for beginners, many clients re-implement commands through a GUI. And if you're doing upstream open source development, there's a good chance you're already hanging out in IRC anyway, so adding a team server might be a path of least resistance.
Want to learn more about IRC? Check out our free IRC cheat sheet.
Other options
The list above is far from exhaustive, and I encourage you to look around and try a few others out before you make a decision. Have another favorite that didn't make the list? Let us know in the comments below so everyone can check it out!
This article was originally published in November 2015 and has been updated to include new information and additional tools.
50 Comments