Zulip 12.0: Organized chat for distributed teams
Tim Abbott We’re excited to announce the release of Zulip Server 12.0, containing hundreds of new features and bug fixes: end-to-end encryption for mobile push notifications, a major upgrade for Docker, configurable image previews, and much more! Almost 5,500 new commits have been merged across the project since the 11.0 release in August 2025.
Zulip
is an organized team chat
application ideal for both live and asynchronous
communication. With Zulip, you own your data: it’s 100% open-source software,
with easy migration between cloud hosting and
self-hosting, plus a powerful
API.

Zulip is developed in collaboration with our community. A total of 160 people contributed commits to Zulip since the 11.0 release, bringing the project to 1,680 code contributors. Zulip is remarkable for its number of major contributors, with 99 people who’ve contributed 100+ commits.
Huge thanks to everyone who’s contributed to Zulip over the last several months, whether by writing code and documentation, reporting bugs, suggesting features, translating, supporting us financially, participating in discussions in the Zulip development community, or just sharing ideas! We could not do this without the hundreds of people who help the project.
Project highlights
Today marks a release of the Zulip server and web application. We’d also like to share news and updates for the project as a whole since the 11.0 release last August:
Mobile app
Zulip now encrypts your push notifications end to end from the Zulip server to your mobile device. The encryption happens seamlessly when you use Zulip Server 12.0 with an up-to-date version of the Zulip mobile app for Android or iOS. We’re excited about how this upgrade makes Zulip’s security model simpler and more robust, offering self-hosted organizations complete control over their data.
We’ve been busy with lots of other improvements to the mobile app too, in eight mobile releases since the 11.0 release: easier navigation, managing your channel subscriptions, support for new Zulip features like inline images and channel folders, and other improvements too numerous to mention.
Next up, our mobile agenda includes making notifications on iOS more helpful, a “recent conversations” view like Zulip has on the web, and a long list of other features. As always, your feedback helps us choose what to build next; if there’s something you’re especially keen to see added or changed, please let us know.
AI tools are changing our development process
Over the past few months, AI has changed how we work.
October through February was a challenging time for the project. This is always the season when many Google Summer of Code hopefuls first try their hand at contributing, and a time when the direct benefit to the project of reviewing outside contributions is lowest. But this year the floodgates opened (as they have for many OSS projects), and the attention required to identify good work in the sea of AI slop significantly impacted our ability to complete important projects. Of the hundreds of AI-generated PRs we received in this time, virtually none were merged.
I seriously considered banning LLM use for Zulip contributions. But our view is that contributors should be allowed to use modern tools in the service of producing great, reviewable work. AI-assisted work is of course subject to the same rigorous review processes we’ve always used for community contributions.
So we decided to invest in creating, refining, and enforcing a new AI use policy, which has the following key tenets:
- End-to-end human responsibility for work and the communication around it. You always need to understand, test, and explain the changes you’re proposing to make, whether or not you used an LLM as part of your process to produce them.
- Clear and concise communication about points that actually require discussion. While we allow carefully edited AI-generated PR descriptions, we’ve had to ban AI-generated chat messages in the development community as too disruptive.
Manual enforcement of this policy has been rough, with far more PRs closed without review, stern warnings, and outright bans of repeat offenders than we’ve ever had to apply before. (What do you do when someone apologizes for submitting AI slop… by copy-pasting an apology from ChatGPT, including surrounding quotation marks?) We expect that next fall, automation or other major changes will be required for the PR triage process to be manageable.
In the meantime, 2026 is the 11th consecutive year that Zulip is participating in Google Summer of Code — we’re looking forward to welcoming this year’s cohort soon!
On a rare free weekend in January, I ran the experiment of using Claude Code
myself, to see if I could steer it to produce good work for Zulip. The results
were promising (and far better than just a few months prior) — enough for us to
start investing in
teaching Claude Code
how to self-review its work, and how to produce PRs that are
easy for maintainers to review.
This has largely been an AI-supported process of digesting our contributor
documentation into CLAUDE.md, and iterating when we see the model struggle.
As of February, maintainer review identified several issues in every AI-generated PR, even if I personally prompted it with extensive context, and then did a dozen rounds of feedback before opening the pull request. So the best work we got out of it at that time was audits: security audits, as well as checking for bugs in our data import/export systems, or performance issues in key code paths. These use cases are structurally parallelizable search problems, where AI’s ability to scale was most fruitful.
But as I write this in late April, with the investment we’ve made to set up our repositories for AI-assisted work, our engineers regularly produce PRs with Claude Code that are basically ready to be merged. The starting point can be just a link to an issue or to a Zulip conversation. Claude Code reads the linked discussion and any further context it points to, and often puts together a reviewable PR with just a handful of iterations. Maintainers reviewing such AI-assisted work (myself included) have been finding the quality to be just as high as what our core team has historically produced without AI.
This new capability has allowed us to make improvements that previously wouldn’t have been worked on at all, and has enabled some new ways of working. Alya, our PM, used Claude Code to produce a 16-commit redesign of our integrations directory, which the area maintainer approved with no changes.
Try Zulip anonymously in a demo organization
We value
your time, and have always sent a very modest number of onboarding emails. Even
so, we know that folks may feel uncomfortable sharing their email with any
vendor.
As part of evaluating Zulip, you can now create a demo organization in Zulip Cloud without providing your email or any other identifying information. It’s a great way to explore the app, whether you’re considering Zulip Cloud or a self-hosted deployment. Demo organizations are automatically deleted after 30 days, but can be converted into a regular organization if desired.

Learning about Zulip
A revamped security overview describes Zulip’s security model and the details behind it.
- Secure by default: Your data is protected out of the box.
- Well-documented and easy to understand, so that you’re never caught by surprise.
- Flexible, so that you can configure Zulip according to your organization’s needs.
You can also read how Zulip helps engineers focus, understand the context behind technical and product decisions, monitor production systems (without making your chat a mess), and more.
Customer stories
The folks at Mixxx shared how collaboration in Zulip drives open-source innovation for their community of passionate DJs and programmers from all over the world:
“Collaboration in the Mixxx Zulip community propels the creative process to the next level.”— Evelynne Veys, core Mixxx developer
Another new case study showcases how Zulip connects faculty with students at the National University of Córdoba, crossing the generational divide.
“I think Zulip is a great tool, much better than Slack… We can find messages from five years ago — it’s very convenient.”— Miguel Pagano, professor at FAMAF of the National University of Córdoba
Sponsorships
We proudly sponsor free Zulip Cloud Standard hosting for more than 2,000 open-source projects, non-profits, educational institutions, academic research groups, and other communities.
All eligible
organizations are encouraged to
join this program,
or sign up for the
Community plan
for self-hosted organizations.
Our self-hosted plans overview now makes it even clearer that push notifications are available for free for a wide variety of non-workplace uses.

Release highlights
This section gives an overview of the major features and improvements in Zulip Server 12.0. We believe that getting the little details right makes a big difference in a product that’s so central to people’s daily work. To make Zulip a joy to use, we relentlessly fine-tune the user experience, and consider it a priority to investigate and fix even minor bugs. This release contains hundreds of refinements beyond those described here.
Major upgrade for Docker, Docker Compose, and Helm deployments
It’s now easier than ever to deploy Zulip, no matter your preferred environment:
the new version of the Zulip Docker
container resolves
nearly all open issues, and adds
detailed “how-to” documentation
and comprehensive tests. Installs using the
old zulip/docker-zulip version
will need to
upgrade.
For Kubernetes environments, the Helm chart has also been expanded and updated,
complete with a Helm schema, and
is available via OCI.
Improved media sharing experience
-
Uploaded images and audio files are now inserted directly into your message, rather than being attached as linked files, for a cleaner presentation. You can still insert an image anywhere in your message.

-
When choosing
an emoji for a reaction or a
message, you’ll now see handy suggestions based on emoji you and others in
your organization use often. 
-
A new setting lets you configure the size of image and video previews for your organization. Smaller previews avoid disrupting the flow of conversation, while larger ones are easier to see without opening the image viewer.
-
In addition to GIPHY, you can now choose Tenor or Klipy for your organization’s GIF picker. The GIF picker is now resizable, with larger previews and convenient keyboard navigation.
-
In messages made up entirely of emoji, the emoji are now shown at a larger size.
Design improvements
-
The recent conversations view has been redesigned, with a cleaner, friendlier look and a new folder filter.

-
The left sidebar
view showing
all topics
in a channel or
all DMs
has been redesigned, now offering more space for viewing conversations. A
new filter
lets you view just your followed topics. 
-
The help center has been fully redesigned. The new design offers search, improved navigation, and a choice between light and dark themes.
-
Selection menus
throughout the app have been redesigned to clearly and consistently indicate
the currently selected option, special options, and keyboard focus. 
-
Profile pictures for users who don’t have one uploaded use a new abstract design that looks great in both light and dark themes. The previous default avatar source, Gravatar, remains an option for organizations whose users value a consistent avatar across the web.

Improved search and navigation
-
You can now
instantly scroll to any date in the
message feed, whether you’re viewing a conversation, a channel feed, search
results, or anything else. Suggested dates help you quickly find key moments.

-
You can now search for messages that mention any user (not just yourself).
-
New keyboard shortcuts let you copy a link to the currently selected message (
L), set your status (Shift+Y), and format text as code (Ctrl+Shift+C). -
Search now suggests topics from all your channels, matching on any word in the topic name. You can now limit your search to archived channels, or exclude them from your search.

More powerful linkifiers
Linkifiers let you automatically turn text into named links, for example linking issue or ticket numbers to your tracker. You can now configure linkifiers to work in reverse as well: when you paste a URL that matches a linkifier, Zulip will automatically convert it to linked text.
Improved moderation and user management
-
Users can now report problematic messages to a private channel configured by administrators.

-
Administrators can now reset users’ preferences and notification settings to the organization default. You can choose to reset settings for all users, or only those who have not personally configured the setting. (Privacy settings can be configured for new users, but cannot be reset for existing users.)
-
When deactivating a user, administrators can now choose whether to delete the user’s name, profile picture, and messages they’ve sent (e.g., their DMs or channel messages).
-
You can now add many kinds of external accounts (e.g., GitHub, LinkedIn, Mastodon) as a custom profile field. External accounts can optionally be used for @-mention suggestions. GitHub, GitLab, and Atlassian Cloud Jira and Bitbucket integrations now use silent mentions to refer to users if there’s a matching external account.

-
You can now allow authentication with Discord, which can simplify account logistics when moving a community from Discord to Zulip.
-
Custom profile fields can now be synced with SCIM.
Improved channel and permissions management
- Channel settings now have a dedicated tab for managing permissions, and a redesigned, clear overview of key channel information. You can now filter the channels menu by folder.
- You can now restrict who can start new topics in a channel. For example, you can set up a channel where only some users can post new announcements, but everyone can discuss them.
- You can now configure whether Zulip will send an automated message when a channel’s settings (e.g., name, description, or privacy) are updated.
- A new dedicated tab in group settings shows permissions by user role.
Performance
The web app now loads twice as fast in large organizations (10K+ users), thanks to a new protocol for syncing subscriber data. Dozens of other improvements include faster message moves, emoji-picker load times, and more.
Integrations
- Self-hosted installations can now choose Nextcloud Talk, Constructor Groups, or Webex as the video call provider, in addition to Zoom, Jitsi, and BigBlueButton.
- A consolidated bot management panel now makes it convenient to manage your own bots alongside other bots in your organization.
- You can now search Zulip conversations with AI, while keeping full control over where your data lives and who can access it. Read all about Zulip’s new integration with Atolio on our blog.
- We’ve added integrations with Redmine, dbt, Nextcloud, and n8n.
- The GitLab, GitHub, Sentry, and Travis CI integrations have been extended to support additional events.
- LLM-driven agents can now find messages in
web-public channels, following
the instructions in
llms.txt. - The API and integrations documentation pages have been redesigned with a cleaner look.
Data imports
- You can now import data from Slack via a convenient web UI.
- A new tool lets you import data from Microsoft Teams, including user information, teams, and public message history.
- Performance and data fidelity have been improved across all import tools, which now easily support organizations with large numbers of users, messages, and attachments.
- You can now combine multiple teams into one Zulip organization when importing from Mattermost. The importer has been updated to support Mattermost’s latest export format.
Upgrading
We work hard to make sure that the upgrade process Just Works, and highly recommend upgrading to Zulip Server 12.0 to take advantage of the hundreds of improvements in this release. Zulip Cloud is always up to date with the latest Zulip improvements.
If you have any questions or problems with your upgrade process, best-effort community support is available in the Zulip development community. For professional support, upgrade to Zulip Business, or reach out to sales@zulip.com.
Release plans
We plan to continue the cadence of shipping two major releases a year, with the next release expected in Fall 2026.
We use project boards to publicly track goals for major server and mobile releases. These boards are updated on an ongoing basis as priorities evolve, and many community improvements integrated into Zulip are never specifically tracked as release goals.
Are there workflow improvements or feature gaps that matter to you? This is a great time to let us know, as we work to solidify the roadmap for Zulip 13.0.
Community
Thanks again to the amazing global Zulip development community for making this possible! If you appreciate Zulip, please recommend it to someone you know, for work or any other collaborative endeavor. If they say that Zulip won’t work for them, let us know why! Your feedback is a vital part of how we design and prioritize improvements to Zulip.
— Tim Abbott, Zulip project leader
P.S. We’re hiring! If you know an awesome go-to-market leader with startup experience or an amazing designer, please send them our way.
Non-code contributions
We would like to thank the following folks for their non-code contributions. Please fill out this form if you’d like your name to be added, and keep an eye out for future announcements to get listed next time.
- mitry06 (Japanese translation)
Code contributions
What follows is a summary of the commits contributed to Zulip during the 12.0 release cycle.
$ ./tools/total-contributions 11.0 12.0
682 Alex Vandiver
441 Aman Agrawal
435 Anders Kaseorg
371 Chris Bobbe
292 Sahil Batra
268 Alya Abbott
268 Lauryn Menard
256 Greg Price
214 Shubham Padia
208 Niloth P
194 Karl Stolley
183 Apoorva Pendse
183 Tim Abbott
166 PieterCK
148 Evy Kassirer
139 Pratik Chanda
126 Rajesh Malviya
104 Prakhar Pratyush
104 Sayam Samal
71 Mateusz Mandera
53 Sayed Mahmood Sayedi
31 Pritesh Shetty
31 Steve Howell
26 The Dance
22 Ruhaan
20 Agnish Bauri
20 Maneesh Shukla
20 Sathwik Shetty
18 Kunal Sharma
18 Santhosh Kumar
17 Zixuan James Li
15 Tanuj Kinkar
14 Kislay Verma
14 yash
13 Amit Patil
11 Sairam Bisoyi
11 Yogesh Shivaji
9 Mohammad Reza Kianifar
9 Nithyaraj Mudhaliyar
9 Rakshit Chauhan
9 Saubhagya Patel
8 Aman Vishwakarma
8 MritunjayTiwari14
7 Aadithya-J
7 Harsh Santwani
7 Raj Vishwakarma
6 Aditya Kumar Kasaudhan
6 Sanket Srivastava
6 Tanaya Pawar
5 Aadyot Nandan
5 Dhruv Vira
5 Rohith Gurram
5 Sarthak Kumbhar
4 Ayush Sinha
4 Balamurugan Sekar
4 Bedo Khaled
4 Dhruv Shetty
4 Jore
4 Luka Aladashvili
4 Rohan Gudimetla
4 Sachin Kumar
4 Sarafaraj Nasardi
4 chungwwei
3 Andie Keller
3 Ayush Bhagwat
3 CerealNotFound
3 Nirvedh Harpal
3 RoyalOughtness
3 Saiyam Kumar
3 Satyam Bansal
3 Vijay Hiremath
3 kash2104
3 omkarrr2533
3 Stefan Gehr
2 23241a6749
2 Arjun-G-04
2 Arun Kushwaha
2 Cesar Montoya
2 Guru Vyas
2 Kenneth Rodrigues
2 Paul Bettner
2 Soham Panda
2 Ubaid Rehman
2 Yaswanth Badana
2 kraktus
2 raja
2 xevrion
2 Komal Singh
2 Vinod Singh
2 ashutoshkhadse
2 Alessandro Ogier
2 Max Bernstein
2 mubarak-mustopha
1 6829nkhpas
1 Aadya
1 Aarush Jain
1 Abhinav Mishra
1 Aditya Singh Rajput
1 Ahtisham Dilawar
1 Aneesh Hegde
1 Anurag Mishra
1 Arielle Lauper
1 Ashutoshbind15
1 Basit Ali Tariq
1 Enejivk
1 Eshaan
1 Fatih Sözüer
1 Hanzalah Waheed
1 Himanshu Rathi
1 HugosKodbas
1 Irtisam Sajin
1 Isaac van Bakel
1 Janvi Chaturvedi
1 Jay Soni
1 Krishna Yadav
1 Kumar Aniket
1 Manoj
1 Nikita Tarasov
1 Pratik Patil
1 Pulkit Saraf
1 RahulXDTT
1 Rajat Yadav
1 Raphaël Hertzog
1 Ritwik Gupta
1 Sagar Halladakeri
1 Sai
1 Saim Ahmad
1 SiddartthVS
1 Simhadri Kuruva
1 Suraj Kekan
1 Sutou Kouhei
1 Tejaswini Medandrao
1 Therese Selberg
1 Tom Hubrecht
1 Vansh Chaturvedi
1 Vinay Chauhan
1 Yash Kumar
1 Yohei Yamamoto
1 badassscoder
1 clado
1 george0fTheJungle
1 iofq
1 kumarmanusaraswat
1 moustafa
1 tharu-jwd
1 Dev Ttangkong
1 K Akhil
1 Mritunjay Tiwari
1 Paul Berry
1 khanak0509
1 loveucifer
1 Aitchessbee
1 Holland Gibson
1 Matthew W. Thomas
1 Nico Weichbrodt
1 Rein Zustand (rht)
1 Sulayman D Ahmed
1 Taylor Lane
1 Waldir Pimenta
1 Robert Hönig
Commit range 11.0..main corresponds to 2025-08-13 to 2026-04-27
4245 commits from zulip/zulip: 11.0..main
888 commits from zulip/zulip-flutter: 101071a1e5f7..cd05627cd7ca
272 commits from zulip/docker-zulip: a043d68b2de7..872b92a99641
29 commits from zulip/zulip-desktop: 0c7ce62ce1bb..7da12bac401e
33 commits from zulip/python-zulip-api: 3a2c96e64619..7bb8f4eb0def
32 commits from zulip/zulipbot: 7dc7e37bc679..2f78211a6f96
7 commits from zulip/puppet-zulip: 09abdf64d8f9..21ef2aca0156
5 commits from zulip/zulint: 448e36a1e50e..f546edc5b3c2
4 commits from zulip/zulip-terminal: 8e5c0357c874..6a799870eccc
2 commits from zulip/zulip-architecture: f2c1956034ca..71020fdea3ad
2 commits from zulip/github-actions-zulip: e4c8f27c732b..d49c9ccdadd8
2 commits from zulip/zulip-js: cee33876ce49..3c6890e953ed
1 commits from zulip/zulip-archive: 663518053b8f..7546f0c850ea
1 commits from zulip/zulip-archive: 663518053b8f..7546f0c850ea
1 commits from zulip/errbot-backend-zulip: 2e82f4e01ce6..0707daac92f8
Excluded 28 commits authored by bots.
5496 total commits by 160 contributors between 11.0 and main.