Zulip 3.0: Threaded open-source team chat
We’re excited to announce the release of Zulip Server 3.0, containing hundreds of new features and bug fixes to help distributed and remote teams stay productive and focused.
Zulip is the open-source threaded team chat app, used by thousands of teams globally. Zulip’s unique topic-based threading experience combines the immediacy of real-time chat with the asynchronous efficiency of email-style threading.
Zulip Server 3.0 contains major visual design improvements, dramatic scalability and performance improvements, a new logo, and several of Zulip’s most requested features to help users efficiently read, skim, search, and refer back to their messages. Zulip is 100% free and open-source software, and ships with translations for 16 languages.
Zulip 3.0 is our largest release ever, with over 4100 new commits since December’s Zulip 2.1 release. A total of 110 people contributed commits to Zulip 3.0, bringing the Zulip server project to 619 distinct code contributors. With 54 people who’ve contributed 100+ commits, Zulip has by far the most active open-source development community of any team chat software.
Huge thanks to everyone who’s contributed to Zulip over the last few months, whether by writing code and docs, reporting issues, testing changes, translating, posting feedback on chat.zulip.org, or just suggesting ideas! We could not do this without the hundreds of people giving back to the Zulip community.
Today marks a release of the Zulip server, but lots of exciting work has happened outside the server codebase over the last several months as well. Highlights include:
Zulip has experienced an extraordinary increase in usage in 2020 as a result of the ongoing pandemic changing how people work. It’s been incredibly gratifying to hear from users about how Zulip has helped them make remote work, conferences, teaching, and meetups successful. We now sponsor free Zulip Cloud Standard hosting for hundreds of worthy open-source projects, non-profits, research groups, and similar non-commercial organizations. New organizations can apply during the signup flow or on the billing page.
Zulip Cloud has introduced 60-day free trials for commercial users to help ensure that budget freezes aren’t a barrier to experimenting with Zulip. Zulip has robust data import tools for Slack, Mattermost, and Gitter.
Zulip has a new logo! Constructed from two chat bubbles that together form a Z (with a second Z in the negative space between them!), it replaces our aging “green Z inside a circle” logo created in 2013.
Our primary domain is now https://zulip.com. We’ll be migrating organizations from
subdomain.zulip.comin the coming weeks, taking care to avoid breaking existing API integrations and permalinks.
The Zulip mobile apps for iOS and Android have fixed numerous bugs and gained features like displaying math formulas with LaTeX—a frequently requested feature for the many organizations who do machine learning or other work best expressed in the language of mathematics.
We’re having an excellent Google Summer of Code this year, with 18 amazing students spending their summer working on Zulip. Many of the features advertised here and in our full changelog were built by current GSoC students or alumni of the program.
Because this is such a huge release, just listing the hundreds of important changes in this release makes our changelog incredibly long. Here are just some highlights:
Core user experience
Added support for moving topics (or messages within topics) between streams. This was by far our most requested feature.
Redesigned the top navbar/search area to be much cleaner and show stream descriptions. This was our second most requested feature, and removes what had been Zulip’s most visible UI wart.
Added “Recent Topics”, a useful new interface for browsing conversations. Feedback so far has been extremely positive, and we plan to make a version of this the default view in Zulip Server 4.0.
Essentially every widget in the Zulip UI received significant polish work in this release.
- Zulip has an innovative new feature for scheduling meetings with global participants. Instead of doing gymnastics to clearly communicate a meeting time to an audience across the globe, you can use a date picker to write a time which Zulip will show in each reader’s own timezone.
- Zulip’s markup now supports spoiler blocks.
- Quote-and-reply now generates a handy link to the referenced message.
- This release adds support for Ubuntu 20.04 Focal, and ends support for Ubuntu 16.04 Xenial and Debian 9 Stretch (both of which were based on Python 3.5, which reaches EOL in September). See our documentation for upgrading the operating system.
- Zulip now defaults to using PostgreSQL 12 on new installs, with support for PostgreSQL 10–12. (Previously, Zulip always used whatever PostgreSQL version came with the base OS release.) This release also adds a convenient new tool to upgrade PostgreSQL.
- Numerous major performance improvements. Zulip’s server-to-client push system scales 4x better than in Zulip 2.x, and several of the most common queries are much faster. Performance has improved dramatically for organizations like our own Zulip development community with 10,000s of user accounts.
- We upgraded Django from 1.11.x to the latest LTS series, 2.2.x. We continue to love how every major Django release comes with great features that we hadn’t realized we needed!
- We’re moving to a new versioning scheme with only 2 digits; the next maintenance release will be Zulip Server 3.1 and the next major release will be Zulip Server 4.0.
API and API Documentation
- Zulip’s REST API documentation received a major overhaul both of content and presentation. Most importantly, our automated tests now validate every API request, response, and example against the OpenAPI schemas used to generate the API documentation. Because the Zulip server has nearly 100% test coverage, this ensures the API documentation is always consistent with the implementation.
- Zulip now has a detailed API changelog
which documents exactly when each API change was introduced. The
zulip_feature_levelfield in the server settings API (which is more fine-grained than a server release), when combined with the changelog, allows client applications to know exactly what any given Zulip server supports. This should make it easier for developers (including developers of the official desktop, mobile, and terminal clients) to write full-featured client apps directly off of the API documentation, without needing to investigate server internals.
- Documenting the API provided a natural audit of Zulip’s API for obscure quirks and mistakes that would be better cleaned up than documented. As a result, this release contains dozens of changes to the Zulip API, which had previously been quite stable for years. Because of careful backwards-compatibility work, these shouldn’t cause any disruption (Zulip mobile app releases from 6 months ago work unmodified against this release!)
- New external authentication method integrations: GitLab and Sign in with Apple.
- The Zulip desktop apps now do social authentication (Google, GitHub, etc.) via an external browser, which improves security and provides a more pleasant single sign-on experience.
- Added a new incoming webhook API that accepts messages in the format used by Slack’s incoming webhooks API. This means that some third-party products that integrate with Slack but don’t have a generic outgoing-webhook feature can now easily integrate with Zulip.
- Zulip’s popular SAML integration now supports login initiated from the SAML Identity Provider.
- BigBlueButton joins Jitsi and Zoom as a supported video call provider. We also rewrote the Zoom integration to have a much better OAuth user experience. The Google Hangouts video call integration was removed due to Google Hangouts reaching end of life. (Its replacement, Google Meet, does not offer a similar API for third-party apps to create calls.)
- New native integrations for ErrBit, Grafana, Thinkst Canary, and Prometheus Alertmanager, with improvements to the integrations for GitHub, GitLab, Sentry, Taiga, Semaphore, and many more.
Zulip now uses the
prefers-color-schemeCSS property to determine whether to default to the day theme or the popular night theme, based on the operating system’s theme.
Zulip’s notification settings UI has been redesigned around an intuitive table format, displaying all individual streams that have non-default settings. This makes it much easier to configure, and is also important preparation for upcoming features like subscribing to notifications on a topic.
Added support for programmable message retention policies. This has long been one of Zulip’s most-requested features, both from enterprises and privacy enthusiasts.
- Zulip now has complete or nearly-complete translations for 16 languages: Chinese, Czech, Finnish, French, German, Italian, Japanese, Korean, Persian, Portuguese, Romanian, Russian, Spanish, Turkish, and Ukrainian, as well as English. Another 8 languages have partial translations which cover the majority of the strings in the project: Bulgarian, Catalan, Dutch, Hindi, Hungarian, Indonesian, Polish, and Swedish.
- Zulip’s missed-message emails, one of the last parts of the Zulip core experience that was not yet internationalized, are now tagged for translation.
See the detailed changelog for dozens of other notable improvements, including new features, performance optimizations, and bug fixes. If you administer a Zulip server, we encourage you to read at least the list of added features at the top, since there are a number of useful new settings introduced in this release that you may want to take advantage of.
We highly recommend upgrading, since this release is a big improvement over previous releases. You can upgrade as usual by following the upgrade instructions. See the upgrade notes section of the changelog for some changes you’ll want to understand before upgrading.
Many installations have already upgraded to release candidates, so we feel very confident in this release. But if you need help, best-effort support is available on chat.zulip.org. You can also purchase commercial support from the Zulip core team.
I’d like to take this opportunity to advertise a few opportunities to contribute back to Zulip:
- Join the chat.zulip.org developer community, where we deploy the latest experimental features and design improvements. We love feedback from the Zulip user community, and have a few streams especially for that purpose.
- Translate! We’d love to get a few more languages to 100%. See our translating guide for how to get involved.
- Follow us on Twitter or join our low-traffic announcement mailing list!
- If you’d like to get involved with Zulip professionally, we’re hiring engineers! See our jobs page for details on what we’re looking for.
Thanks again to the amazing global Zulip development community for making this possible! What follows is a summary of the code contributors to this server release, sorted by number of commits.
—Tim Abbott, Zulip founder and lead developer
$ git shortlog -s 2.1.0..3.0 | sort -nr
686 Steve Howell
617 Anders Kaseorg
516 Tim Abbott
231 Mateusz Mandera
197 Tejas Tank
178 Aman Agrawal
118 Rohitt Vashishtha
115 Alex Vandiver
111 Vishnu KS
109 Sahil Batra
103 Siddharth Varshney
83 Yash Rathore
76 Ryan Rehman
72 Puneeth Chaganti
71 Arpit Sharma
61 Aditya Verma
61 Mohit Gupta
58 Shubham Gupta
56 Pragati Agrawal
42 Jagan Sivam
33 Kartik Srivastava
31 Hashir Sarwar
27 Priyank Patel
23 Clara Dantas
22 Rein Zustand
20 Sharif Naas
17 Hemanth V. Alluri
15 Wyatt Hoodes
14 Greg Price
10 Chris Heald
9 Divyanshu Agrawal
7 Vaibhav Raj Singh
7 Graham Bleaney
5 Vinit Singh
5 Chris Bobbe
3 Ray Kraesig
3 Johannes Hochreiter
3 Eeshan Garg
2 Stefan Weil
2 Sebastian Morr
2 Sanskar Bajpai
2 Manav Mehta
2 João Maurício Carvalho
2 Imran Iqbal
2 Cyril Cohen
1 Wbert Adrian Castro Vera
1 Tom Daff
1 Tim April
1 Till Schneidereit
1 Sourabh Singh
1 Sara Gulotta
1 Sahil Silare
1 Sahil Batra
1 Roland Crosby
1 Rohan Prashant
1 Rike-Benjamin Schuppner
1 Priyansh Garg
1 Onur Temiz
1 neiljp (Neil Pilgrim)
1 Katerina Perikou
1 Karim Tayie
1 Jonathan Cobb
1 Jonas Svatos
1 Jenny Ghose
1 Gillian Pantaleon
1 Emilio López
1 Dylan Nugent
1 David Wood
1 Bhanu Gupta
1 Ankita Bansal
1 Alex Dehnert
1 Alexandre Gigleux
1 Akash Nimare
1 Aditya Bansal