Update Zulip integration terminology and add per-thread topic mapping

Vijay_Hiremath
Thu, 19 Mar 2026 08:46:04 +0000
Feature

Hi Team,

I’ve submitted a PR to update the Zulip integration in discourse/discourse:

github.com/discourse/discourse

Zulip: Update terminology and add per-thread topic mapping (#38404)

main ← vijayho1:zulip-update-terminology

opened 09:33AM - 10 Mar 26 UTC

vijayho1

+51 -23

## Zulip: Update terminology and add per-thread topic mapping ### Terminology… update - Replaces all occurrences of `stream` and `subject` with `channel` and `topic` respectively in user-facing parts of the Zulip integration, to match current Zulip terminology. ### Per-thread topic mapping - Makes the `topic` field optional in channel settings. - When a fixed topic is configured, it is used as before. - When the topic field is left blank, the Discourse thread title is automatically used as the Zulip topic, mapping each Discourse thread to its own Zulip topic. ### Optional parameter support in Channel model - Updates `channel.rb` to support `required: false` on channel parameters, skipping validation for optional parameters when left blank. - Updates `edit-channel.gjs` frontend validation to allow saving a channel when optional parameters are left blank. ## Motivation Zulip has updated its terminology: `streams` are now called `channels` and `subjects` are now called `topics`. This PR updates the integration to reflect that. The per-thread topic mapping was requested in this [comment](https://meta.discourse.org/t/discourse-chat-integration/66522/309). This PR is part of the work tracked in: [#33769](https://github.com/zulip/zulip/issues/33769#issuecomment-4020150075) ## Testing - Syntax verified via `ruby -c` on all changed files. - Spec file updated to reflect new keys (`channel`, `topic`) and includes tests for both fixed topic and thread-title fallback behavior, with request body assertions to verify the correct topic is sent. - Full test suite requires a Discourse development environment to run.

This is part of the work tracked in the Zulip project:

github.com/zulip/zulip

Update our documentation for the Discourse integration

opened 11:42AM - 03 Mar 25 UTC

Niloth-p

help wanted in progress documentation (integrations)

### Update the Discourse integration: 1. Update the following terminology in all… the user-facing parts of the Discourse-Zulip integration: 1. Replace all occurrences of the term "subject" with "topic". 2. Replace all occurrences of the term "stream" with "channel". 2. Support mapping each Discourse thread to its own Zulip topic, in a reasonable way, as requested in [this comment here](https://meta.discourse.org/t/set-up-zulip-notifications-using-the-chat-integration-plugin/68501). This requires submitting a PR to [discourse/discourse-chat-integration](https://github.com/discourse/discourse-chat-integration), written in Ruby. Relevant files to update: - [lib/discourse_chat_integration/provider/zulip/zulip_provider.rb](https://github.com/discourse/discourse-chat-integration/blob/main/lib/discourse_chat_integration/provider/zulip/zulip_provider.rb) - [spec/lib/discourse_chat_integration/provider/zulip/zulip_provider_spec.rb](https://github.com/discourse/discourse-chat-integration/blob/main/spec/lib/discourse_chat_integration/provider/zulip/zulip_provider_spec.rb) You would need access to a Discourse server so that you can test the integration. For the integration's setup instructions, refer to the [integration doc](https://zulip.com/integrations/doc/discourse). ### Update the documentation: Once the PR has been merged, the following documentation pages also need to be updated. - Update the [Zulip integration doc](https://zulip.com/integrations/doc/discourse) to update the setup instructions following the merge, by editing [this file](https://github.com/zulip/zulip/tree/main/templates/zerver/integrations/discourse.md). - Get Discourse to update [their documentation](https://meta.discourse.org/t/set-up-zulip-notifications-using-the-chat-integration-plugin/68501). Contributors do not have the permission to directly edit the doc, or submit PRs for updating the doc. One would need to compile the list of changes, and get a Discourse team member to update the doc. - In addition to the above changes made to the codebase, the doc also needs to be updated to use a more recent screenshot example (like the one used in the [Zulip integration doc](https://zulip.com/integrations/doc/discourse)), and being linked to the Zulip integration doc for the setup instructions involving Zulip. - Once the mapping of Discourse threads to Zulip topics has been added, the [Chat integration instructions](https://meta.discourse.org/t/discourse-chat-integration/66522) needs to be updated too. Especially, update the comparison table and lines like "(Note that at this time, only the Slack integration implements threads.)" once Zulip also supports this, since a Zulip topic is better suited for Discourse threads than Slack threads are. #### References: For more on integrations, refer to these docs - [Integrations Overview](https://zulip.com/api/integrations-overview), and [Non-webhook integrations](https://zulip.com/api/non-webhook-integrations). The Discourse integration is a plugin integration with all the code being located in [discourse/discourse-chat-integration](https://github.com/discourse/discourse-chat-integration).

The PR includes:

Terminology update: stream → channel, subject → topic to match
current Zulip terminology (Zulip renamed these in Zulip Server 10.0)

Per-thread topic mapping: when the topic field is left blank, the
Discourse thread title is automatically used as the Zulip topic,
mapping each Discourse thread to its own Zulip topic

Optional parameter support in channel.rb and edit-channel.gjs

Migration file updated

Would appreciate a review when you get a chance!

Thank you!

1 messaggio - 1 partecipante