ConverseJS: An in-depth view into my GSoC'22 project!

In this blog, I will discuss my GSoC project, and post an update about the work done since the GSoC contribution period started. Ok, so I would like to split the whole project in two phases, with the first GSoC evaluation (29th July) as being the divider. Since it’s only been three weeks, I will only write about the first phase of the project.

About my project

  • Expected Hours: 175 Hrs(Medium Project)
    • Adding support for Audio/Video Communication via Jingle.
    • Deliverables / Expected Results:
      • The goal is to create a Converse plugin that adds the ability to make one-on-one audio/video calls from Converse
      • The audio/video calls must be compatible with other XMPP clients such as Conversations.

Jingle protocol works something like this:

Jingle Protocol

In short it signals WebRTC to start/end or modify the status of a session.

Proposed Plan

The first phase, as it stands, will consist of the UI implementation, it’s associated tests and implementaion of XEP 0353. I genuinely thought that I would be done with the UI implementation till now, but choosing a UI can be surprisingly tough. Given the deadline, I want to make sure that I complete the implementation of the project in time, so for now we (me & my mentor JC) decided to implement a decent looking UI that would be enough to cover all the edge cases and functionality of the project.


Here is a screenshot which shows the current UI.

Call pending state

Do mind the spacing between the Call Initiated text and the End Call button. The call can simply be ended after clicking either the end call button or the call button in the toolbar. Having said that, I presented Discord’s UI to my mentor and he seemed to like it.

Discord’s Call UI

Although, we plan to build something much more simpler for converse, it’s good to have a long term vision for this feature.


As on this date of writing this blog, I am working on integrating XEP 0353. The XEP makes it easier to keep track of my progress since it splits the feature into sections.

You can track my progress through this Pull Request