Zulip v3.0 Release Notes

Release Date: 2020-07-16 // over 2 years ago
  • 3.0 -- July 16, 2020


    • โž• Added support for Ubuntu 20.04 Focal. This release drops support
      for Ubuntu 16.04 Xenial and Debian 9 Stretch.
    • Redesigned the top navbar/search area to be much cleaner and show
      ๐Ÿ‘‰ useful data like subscriber counts and stream descriptions in
      0๏ธโƒฃ default views.
    • โž• Added a new "Recent Topics" widget, which lets one browse recent
      and ongoing conversations at a glance. We expect this widget to
      0๏ธโƒฃ replace "All messages" as the default view in Zulip in the
      ๐Ÿš€ next major release.
    • Redesigned "Notification settings" to have an intuitive table
      0๏ธโƒฃ format and display any individual streams with non-default settings.
    • โž• Added support for moving topics between streams. This was by far
      Zulip's most-requested feature.
    • โž• Added automatic theme detection using prefers-color-scheme.
    • โž• Added support for GitLab and Sign in with Apple authentication.
    • โž• Added an organization setting controlling who can use private messages.
    • โž• Added support for default stream groups, which allow organizations
      to offer options of sets of streams when new users sign up.
      Currently can only be managed via the Zulip API.
    • The Zulip server now sets badge counts for the iOS mobile app.
    • Quote-and-reply now generates a handy link to the quoted message.
    • โฌ†๏ธ Upgraded Django from 1.11.x to the latest LTS series, 2.2.x.
    • โž• Added integrations for ErrBit, Grafana, Thinkst Canary, and AlertManager.
    • ๐Ÿ“š Extended API documentation to have detailed data on most responses,
      validated against the API's actual implementation and against all
      โœ… tests in our extensive automated test suite.
    • โž• Added support for programmable message retention policies, both a
      0๏ธโƒฃ global/default policy and policies for specific streams.
    • โž• Added a new incoming webhook API that accepts messages in the format
      ๐Ÿ‘‰ used by Slack's incoming webhooks API.
    • Introduced the Zulip API Feature Level, a concept that will greatly
      simplify the implementation of mobile, terminal, and desktop clients
      ๐Ÿ‘ that need to talk to a wide range of supported Zulip server
      ๐Ÿ”– versions, as well as the Zulip API changelog.
    • Our primary official domain is now zulip.com, not zulipchat.com.

    โฌ†๏ธ Upgrade notes for 3.0

    • โฌ†๏ธ Logged in users will be logged out during this one-time upgrade to
      transition them to more secure session cookies.
    • ๐Ÿš€ This release contains dozens of database migrations, but we don't
      anticipate any of them being particularly expensive compared to
      ๐Ÿš€ those in past major releases.
    • Previous versions had a rare bug that made it possible to create two
      ๐Ÿ‘‰ user accounts with the same email address, preventing either from
      ๐Ÿš€ logging in. A migration in this release adds a database constraint
      that will fix this bug. The new migration will fail if any such
      duplicate accounts already exist; you can check whether this will
      happen be running the following in a management shell:

      from django.db.models.functions import Lower UserProfile.objects.all().annotate(email_lower=Lower("delivery_email")) .values('realm_id', 'email_lower').annotate(Count('id')).filter(id count gte=2)

    If the command returns any accounts, you need to address the
    โฌ†๏ธ duplicate accounts before upgrading. Zulip Cloud only had two
    accounts affected by this bug, so we expect the vast majority of
    installations will have none.

    • ๐Ÿš€ This release switches Zulip to install Postgres 12 from the upstream
      0๏ธโƒฃ postgres repository by default, rather than using the default
      Postgres version included with the operating system. Existing Zulip
      installations will continue to work with Postgres 10; this detail is
      ๐Ÿ”ง configured in /etc/zulip/zulip.conf. We have no concrete plans to
      start requiring Postgres 12, though we do expect it to improve
      ๐ŸŽ performance. Installations that would like to upgrade can follow
      โฌ†๏ธ [our new postgres upgrade guide][postgres upgrade].
    • The format of the JWT_AUTH_KEYS setting has changed to include an algorithms
      list: {"subdomain": "key"} becomes {"subdomain": {"key": "key", "algorithms": ["HS256"]}}.
    • โž• Added a new Organization Owner permission above the previous
      Organization Administrator. All existing organization
      administrators are automatically converted into organization owners.
      Certain sensitive administrative settings are now only
      editable by Organization Owners.
    • The changelog now has a section that makes it easy to find the
      ๐Ÿš€ Upgrade notes for all releases one is upgrading across.

    Full feature changelog

    • โž• Added new options in "Manage streams" to sort by stream activity or
      number of subscribers.
    • โž• Added new options to control whether the incoming email integration
      prefers converting the plain text or HTML content of an email.
    • โž• Added server support for creating an account from mobile/terminal apps.
    • The Zulip desktop apps now do social authentication (Google, GitHub,
      ๐Ÿ’ป etc.) via an external browser.
    • โž• Added support for BigBlueButton as video chat provider.
    • โž• Added support for setting an organization-wide default language for
      code blocks.
    • โž• Added an API endpoint for fetching a single user.
    • โž• Added built-in rate limiting for password authentication attempts.
    • โž• Added data export/import support for organization logo and icon.
    • โž• Added documentation for several more API endpoints.
    • โž• Added new email address visibility option hiding real email
      โž• addresses from organization administrators in the Zulip UI.
    • โž• Added new "Mention time" markdown feature to communicate about times
      in a timezone-aware fashion.
    • โž• Added new "Spoiler" markdown feature to hide text until interaction.
    • โž• Added a new API that allows the mobile/desktop/terminal apps to
      ๐Ÿ’ป open uploaded files in an external browser that may not be logged in.
    • โž• Added several database indexes that significantly improve
      ๐ŸŽ performance of common queries.
    • โž• Added an organization setting to disable the compose box video call feature.
    • โž• Added a user setting to disable sharing one's presence information
      with other users.
    • โž• Added support for IdP-initiated SSO in the SAML authentication backend.
    • โž• Added new "messages sent over time" graph on /stats.
    • โž• Added support for restricting SAML authentication to only some Zulip
    • โž• Added List-Id header to outgoing emails for simpler client filtering.
    • ๐Ÿ”„ Changed how avatar URLs are sent to clients to dramatically improve
      ๐ŸŽ network performance in organizations with 10,000s of user accounts.
    • Redesigned all of our avatar/image upload widgets to have a cleaner,
      simpler interface.
    • ๐Ÿ‘€ Normal users can now see invitations they sent via organization settings.
    • Rewrote the Zoom video call integration.
    • ๐Ÿ’… Polished numerous subtle elements of Zulip's visual design.
    • Dramatically improved the scalability of Zulip's server-to-client
      push system, improving throughput by a factor of ~4.
    • ๐Ÿ‘Œ Improved handling of GitHub accounts with several email addresses.
    • ๐Ÿ‘Œ Improved "Manage streams" UI to clearly identify personal settings
      and use pills for adding new subscribers.
    • ๐Ÿ‘Œ Improved Sentry, Taiga, GitHub, GitLab, Semaphore, and many other integrations.
    • ๐Ÿ‘Œ Improved "Muted topics" UI to show when a topic was muted.
    • ๐Ÿ‘Œ Improved the UI for "Drafts" and "Message edit history" widgets.
    • ๐Ÿ‘Œ Improved left sidebar popovers to clearly identify administrative actions.
    • Rewrote substantial parts of the Zulip installer to be more robust.
    • Replaced the chevron menu indicators in sidebars with vertical ellipses.
    • โœ‚ Removed the right sidebar "Group PMs" widget. It's functionality is
      available in the left sidebar "Private messages" widget.
    • โœ‚ Removed the Google Hangouts integration, due to Google's support for
      it being discontinued.
    • โœ‚ Removed a limitation on editing topics of messages more than a week old.
    • ๐Ÿ‘ The Gitter data import tool now supports importing multiple Gitter
      rooms into a single Zulip organization.
    • Missed-message emails and various onboarding content are now tagged
      ๐ŸŒ for translation.
    • Redesigned the notice about large numbers of unread messages to be
      ๐Ÿ‘ a banner (no longer a modal) and to use a better trigger.
    • Cleaned up dozens of irregularities in how the Zulip API formats
      data when returning it to clients.
    • Extended stream-level settings for who can post to a stream.
    • ๐Ÿ‘ Extended GET /messages API to support a more intuitive way to
      โœ… request the first unread or latest message as the anchor.
    • Muted topics will now only appear behind "more topics".
    • ๐Ÿ‘Œ Improved UI for picking which streams to invite new users to.
    • ๐Ÿ‘Œ Improved UI for reviewing one's muted topics.
    • ๐Ÿ‘Œ Improved UI for message edit history.
    • ๐Ÿ›  Fixed many minor issues with Zulip's markdown processors.
    • ๐Ÿ›  Fixed many subtle issues with the message editing UI.
    • ๐Ÿ›  Fixed several subtle issues with the default nginx configuration.
    • ๐Ÿ›  Fixed minor issues with various keyboard shortcuts.
    • ๐Ÿ›  Fixed UI bugs with Zulip's image lightbox.
    • Specifying latex or text as the language for a code block now
      does LaTeX syntax highlighting (math remains the recommended code
      block language to render LaTeX syntax into display math).
    • ๐Ÿ›  Fixed performance problems when adding subscribers in organizations
      with thousands of streams.
    • ๐Ÿ›  Fixed performance issues with typeahead and presence in
      organizations with 10,000s of total users.
    • ๐Ÿ›  Fixed guest users being added to the notifications stream
    • ๐Ÿ›  Fixed inconsistencies in the APIs for fetching users and streams.
    • ๐Ÿ›  Fixed several subtle bugs with local echo in rare race conditions.
    • ๐Ÿ›  Fixed a subtle race that could result in semi-duplicate emoji reactions.
    • ๐Ÿ›  Fixed subtle click-handler bugs with the mobile web UI.
    • ๐Ÿ‘Œ Improved defaults to avoid OOM kills on low RAM servers when running
      expensive tools like webpack or Slack import.
    • โž• Added loading indicators for scrolling downwards and fixed several
      subtle bugs with the message feed discovered as a result.
    • โž• Added a migration to fix invalid analytics data resulting from a
      missing unique constraint (and then add the constraint).
    • Dramatically simplified the process for adding a new authentication backend.
    • โž• Added webhook support for AnsibleTower 9.x.y.
    • ๐Ÿ“š Essentially rewrote our API documentation using the OpenAPI format,
      with extensive validation to ensure its accuracy as we modify the API.
    • โœ‚ Removed New User Bot and Feedback Bot. Messages they had sent are
      migrated to have been sent by Notification Bot.
    • โœ‚ Removed the "pointer" message ID from Zulip, a legacy concept dating
      to 2012 that predated tracking unread messages in Zulip and has
      largely resulted in unexpected behavior for the last few years.
    • โฌ‡๏ธ Reduced visual size of emoji in message bodies for a cleaner look.
    • ๐Ÿ‘ Replaced file upload frontend with one supporting chunked upload.
      We expect this to enable uploading much larger files using Zulip in
      ๐Ÿš€ future releases.
    • ๐Ÿ‘Œ Improved error messages when trying to invite a user with an
      existing, deactivated, account.
    • ๐Ÿ‘Œ Improved server logging format to refer to users with
      [email protected] rather than referencing email addresses.
    • ๐Ÿ‘Œ Improved warnings when sending wildcard mentions to large streams.
    • Migrated the frontend codebase to use native ES6 data structures.
    • Migrated settings for notifications streams to our standard UX model.
    • ๐Ÿ”’ Various security hardening changes suggested by the PySA static analyzer.
    • Modernized the codebase to use many Python 3.6 and ES6 patterns.
    • โ†” Integrated isort, a tool which ensures that our Python codebase
      has clean, sorted import statements.
    • โ†” Integrated PySA, a tool for detecting security bugs in Python
      codebases using the type-checker.
    • โ†” Integrated semgrep, and migrated several regular expression based
      ๐Ÿ‘• linter rules to use its Python syntax-aware parser.
    • โž• Added tooling to automatically generate all screenshots in
      ๐Ÿ“„ integration docs.
    • Restructured the backend for Zulip's system administrator level
      settings system to be more maintainable.
    • ๐Ÿš€ This release largely completes the SCSS refactoring of the codebase.
    • โœ… Replaced our CasperJS frontend integration test system with Puppeteer.
    • Extracted the typeahead and markdown libraries for reuse in the
      mobile apps.
    • โœ‚ Removed the legacy websockets-based system for sending messages. This
      system was always a hack, was only ever used for one endpoint, and
      ๐Ÿšค did not provide a measureable latency benefit over HTTP/2.