Zulip

Threaded team chat that combines email and chat

Team Chat ★ 25.9k stars Medium setup Apache-2.0

Zulip is an open-source team chat application with a unique topic-based threading model that organizes conversations clearly. It targets teams that want focused, asynchronous-friendly discussions. It is deployed via Docker or an installer.

Key features

  • Topic-based threading model
  • Great for async discussion
  • Powerful search
  • Many integrations

Pros & cons

Strengths

  • Excellent conversation organization
  • Strong async workflow
  • Fully open source

Trade-offs

  • Threading model takes adjustment
  • Heavier install

Zulip replaces

Last reviewed Aug 26, 2026 · 838 words

Every message in Zulip belongs to a channel and a topic, and you cannot post without picking a topic. That single constraint is the reason to choose it and the reason some teams bounce off it in the first week. It means a channel with 400 messages from yesterday reads as 15 short conversations you can skim by title, catch up on out of order, and mute individually. Slack and Mattermost bolt threads on after the fact; Zulip is built from them. For a team that works across time zones, or one that hates the feeling of arriving to 400 unread, it is the best chat model available, hosted or not.

What the install actually contains

Zulip is not a single container. A working server is the Django application plus PostgreSQL, Redis, RabbitMQ, memcached, and nginx, which is why the catalogue lists it at 2 GB minimum and Medium difficulty. There are two supported ways to get it. The official installer on a fresh Ubuntu or Debian machine runs ./scripts/setup/install with your hostname and admin email, sets up every dependency, and obtains a Let's Encrypt certificate if you ask; it expects to own the machine. The docker-zulip project packages the same pieces into a compose file with separate database and broker containers. The installer is the better-trodden path and the one upgrades are designed around; docker-zulip works but you inherit the job of upgrading the database container in step with the application. Either way, plan on 2 GB of RAM for a team of a few dozen and 4 GB once you have a few hundred users or heavy file uploads.

Threading takes a week, then it takes over

The adjustment the catalogue warns about is real. New users post "hi" in the wrong topic, create a fresh topic for every sentence, or dump everything under "general". Two settings fix most of it: let moderators rename and move topics (they can move messages between topics and channels after the fact, which is Zulip's killer moderation feature), and set new-user guidance to nudge people to reuse existing topics. After a week the pattern clicks and the payoff shows in search. Because every message carries a channel and a topic, topic:deploy or a channel-scoped search finds the conversation rather than the needle, and the archive of a Zulip organisation is genuinely readable a year later. Nothing in team chat matches that.

SSO and LDAP are free, which changes the comparison

Self-hosted Zulip ships SAML, LDAP, OpenID Connect, and social logins with no licence tier. Mattermost puts SAML and LDAP group sync in its paid editions; Rocket.Chat has moved features behind plans over the years. If you run Authentik or Keycloak and want single sign-on for chat, Zulip is the one where that costs configuration time and nothing else. The AUTHENTICATION_BACKENDS setting in /etc/zulip/settings.py is where each of these is enabled; the documentation for it is unusually good. The same applies to mobile push: self-hosters register with Zulip's push notification bouncer, which is free for the community and relays notifications to the official iOS and Android apps without you running Apple or Google integration yourself.

Upgrades and backups are scripted, use them

Zulip's own scripts/upgrade-zulip handles the application, migrations, and dependencies, and the project publishes a release every few months with a supported upgrade path from each of the previous few versions. Do not skip several at once. For backups, manage.py backup produces a single tarball of the database, uploads, and settings, and scripts/setup/restore-backup is its partner; run the pair once on a scratch VM before you need them. Postgres major-version upgrades come with their own documented script and are the one operation I would schedule outside working hours.

Where it loses

Voice and video are integrations (Jitsi, BigBlueButton, Zoom) rather than native. The bot and app ecosystem is smaller than Slack's, though the integrations that exist (GitHub, Gitea, Sentry, Grafana, and about a hundred more) cover a homelab and a software team. Federation with other servers does not exist; if you want that, you want Matrix. And the interface, while much improved since 2023, still looks like a tool rather than a product, which some teams will mind. The honest trade is set out in the Slack alternatives guide.

What I'd do

A software team, a research group, an open-source project, anyone with people in more than two time zones: Zulip, via the official installer on its own 4 GB VM, SAML through your identity provider, the push bouncer registered on day one, backups tested once. A small company that wants chat to feel like Slack and will pay for SSO if needed: Mattermost. A community that wants federation: Matrix. Zulip is the least Slack-like of the three, and that is exactly why the teams who fit it never go back.

Compare Zulip

6 head-to-head comparisons.

Similar team chat apps