Zulip combines the immediacy of real-time chat with an email threading model. With Zulip, you can catch up on important conversations while ignoring irrelevant ones.
Why Zulip? - Efficient communication with organized team chat.
My GSoC proposal was primarily centered on improving Zulip's permissions with user groups. However, ongoing work in the same area by others made it impossible to address other issues related to user groups, as everything builds on top of each other. Consequently, during the summer, I redirected my efforts to address the priorities for the Zulip server 8.0 release. The issues I worked on spanned various areas within the Zulip codebase, including UI redesign, organizational settings, onboarding, the search bar, and more. Below, I provide details on each issue I worked on, the current status of the work, and any future steps required to integrate them.
- All the mentioned work is listed in chronological order based on the dates when the PRs were opened.
*
represents work that started before GSoC and continued during the community bonding period.**
represents work that started before GSoC and continued during the official coding period.
When new users join a Zulip organization, they are automatically subscribed to a default set of streams. Previously, users had to navigate to a different panel to add a stream as a default. There was no indication in stream settings to show whether a stream was part of the default streams list. I worked on adding a checkbox in the stream creation and editing UI to allow users to add or remove a stream as a default.
π Issue: #24048
βοΈ PR: #24216
π Status: Merged
Some organizations need to restrict private messages between users. So, we intended to introduced two new settings to control private messaging between users:
- All direct message and group direct messages must include as sender or recipient at least one member of
- Who can start a direct message thread
Before implementing this, some preparatory work was necessary as it was the first realm-based user group settings.
π Issue: #24467
βοΈ PR: #24762
π¬ Discussion: API design
π Status: Most of the preparatory work required for adding a realm-level group setting was completed with #25884. Now that #25884 is merged, as of writing this, I have resumed work on this and am close to opening a new PR for the feature.
Added a dropdown called "Organization language" on the "Create a new Zulip organization" form (/new
page). This allows messages from the Welcome Bot and introductory messages in streams to be internationalized.
π Issue: #25729
βοΈ PR: #26102
π¬ Discussion: Unicode normalization
π Status: Work on this is nearly complete, waiting for the final review and requiring some feedback on a couple of points discussed in the PR.
Various lists and tables in Zulip were using the ::after
pseudo-element to display a message indicating that the list is empty. With this PR, we redesigned the UI and added functionality in list_widget.js
to render a message when the list is empty, eliminating the need for the ::after
pseudo-element for non-decorative content.
π Issue: #23072
βοΈ PR: #26196
π¬ Discussion: Design
π Status: Awaiting integration review.
π Issue: #25670
βοΈ PR: #26210
π Status: Merged
Currently, users in the search dropdown are displayed as pills before they are selected. However, if the search continues, the already-selected users are shown as email addresses instead of user pills
With this PR, our goal is to consistently display users in the dropdown as user pills, even after the user has been selected.
π Issue: #23365
βοΈ PR: #26360
π Status: The logic and implementation have been figured out. However, the area is undergoing a redesign with #24345, so further work is pending until the redesign is merged.
Zulip integrates with Jitsi Meet, a fully-encrypted, 100% open-source video conferencing solution. I worked on adding support for a custom Jitsi Meet server URL that organizations can use. Previously, organizations could only use the default server level hardcoded URL.
π Issue: #17914
βοΈ PR: #26399
π¬ Discussion: API design
π Status: Merged
Zulip currently uses Spectrum-colorpicker, a third-party dependency, to offer a color picker. We are planning to migrate from Spectrum-colorpicker, which is no longer maintained, to the native HTML5 <input type="color"/>
, supported by most browsers.
π Issue: #14961
βοΈ PR: #26637
π¬ Discussion: Design
π Status: Design has been finalized, with ongoing discussions on minor points. The coding part is also completed and will require a few rounds of review before integration.
Zulip has an invariant that all unread messages must be in streams to which the user is subscribed. Therefore, with this PR, we are working towards notifying users when a message from a stream to which they are not subscribed is skipped while marking messages as unread in an interleaved view.
π Issue: #23470
βοΈ PR: #26634
π¬ Discussions: UI Design, API Design, Stream/Message filtering
π Status: Most of the work is completed. Currently, we are in the process of figuring out how to filter affected messages and stream IDs before returning them from the API.
- Improve UI of deactivated and reactivated users #26147
- Make stream name in stream settings panel a link #25212
- Warn when archiving a notification stream #26111
- Add a new setting Who can create multiuse invite link #25884
This journey presented its fair share of challenges and provided numerous learning opportunities. The issues I tackled included multiple areas of the codebase, making it somewhat more challenging. A basic understanding of each area was required before diving into the actual tasks. However, this became achievable thanks to a well-structured codebase, comprehensive testing, and excellent documentation.
Throughout my GSoC journey, I had the chance to gain insights into how different components of a large codebase collaborate to deliver a seamless and efficient solution. Starting with a basic knowledge of HTML, CSS, JavaScript, and Git when I first began contributing to Zulip, I gradually progressed to contributing to various components within this extensive codebase while continually acquiring new skills. π
I'd like to thank Google for arranging this amazing program that introduces students to open-source communities.
A huge thanks to the core Zulip team and the entire Zulip community for being such an incredible group of people, always ready to provide assistance whenever needed and for fostering a collaborative and welcoming environment.
Finally, a special thanks to my mentors, Sahil Batra and Purushottam Tiwari, for their invaluable time and incredible support throughout the program.
I have multiple open PRs which I will continue to work on after GSoC. Beyond that, I will strive to be an active member and contributor to this amazing community.