Conversations.im Summer of Code 2018
Conversations started out as an easy to use Jabber client for the Android platform but quickly became an umbrella project for all sorts of UX improvements to the XMPP ecosystem.
Getting involved
Conversations puts a lot of focus on user experience so we encourage you to become a user of XMPP first.
To become a user you need to:
- Download an XMPP client (Conversations1 on Android and Gajim on Windows and Linux)
- Create an account on an XMPP server. For startes we recommend creating an account on the conversations.im server. In both Gajim and Conversations you can tick the checkbox Create new account during initial setup.
After downloading a client and creating an account please join the conversations group chat (MUC) under the address: xmpp:gsoc@conference.conversations.im?join.
1 Conversations is not available for free on the PlayStore. However we wouldn’t ask potential applicants to buy the application. Instead either sideload it from the Open Source App Store F-Droid, build it from source or join with a different client first and ask for a promo code in the GSoC group chat, that will allow you to install the app for free from the Google PlayStore.
Project Ideas
Keep in mind that the following project ideas are just ideas. In general we are interested in anything that has the ability to improve the UX for end users and newcomers to XMPP. This doesn’t necessarily have to involve client development but can also be about aiding the user to pick the right server or about contact discovery.
Turn Compliance Tester into Webservice
- Software Project: XMPP Compliance Tester
- Software URL: conversations.im/compliance/
- Software VCS: github.com/iNPUTmice/ComplianceTester
- Software Description: A tool totest XMPP servers for compatibility with various compliance suites.
- Brief explanation: Adding a server to the compliance tester overview is a rather complicated task. A server admin (or interested user) has to download the Compliance Tester, run it, and submit the result as a pull request on github. Afterwards a series of hacked together scripts will evaluate those results and create the overview page. This Google Summer of Code project is to create a webservice that will run the test automatially in certain intervals, store the test results in a database and dynamically create the overview page from that database.
- Required skills: Java, HTML, Basic XMPP knowledge
- Implementation Language: Java 8, Babbler XMPP library
- Contact details: inputmice@siacs.eu
Implement client-side MIX in Conversations
- Software Project: Conversations
- Software URL: conversations.im
- Software VCS URL: github.com/siacs/Conversations
- Software Description Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards.
- Brief explanation: MIX is the upcoming standard in group chats. This project would be one of the first implementations of this standard.
- Expected results:
- Allow users to subscribe to MIX channels
- Display users in a channel
- Implement UI to create new channels
- Difficulty: Moderate
- Implementation Language: Java/Android
- Contact Details: MUC at gsoc@conference.conversations.im
Jingle encrypted A/V calling
- Software Project: Conversations
- Software URL: conversations.im
- Software VCS URL: github.com/siacs/Conversations
- Software Description Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards.
- Brief explanation: The ability to make voice and video calls is by far the most requested feature for Conversations. With Jingle there is a standard extension in XMPP to negoitate P2P audio and video sessions. Implementing video calls faces many challanges. Not only network and bandwidth wise but also UX wise.
Quite frankly this is a rather challenging project. We aim to actually merge the code that comes out of GSoC and we can't merge the code if the UX is bad (either because of too many edge case where it simply doesn’t work or because it looks terrible.)
- Expected results:
- Make libwebrtc build in Conversations
- Setup some basic A/V calls between two Conversations clients
- Translate the SDP output of libwrtc to Jingle syntax
- (Re)negoitae the session on network switches or screen rotations
- Implement a great accept call and call UI
- Difficulty: Very hard
- Implementation Language: Java/Android
- Contact Details: MUC at gsoc@conference.conversations.im
Add OMEMO support to Babbler
- Software Project: Babbler
- Software URL: sco0ter.bitbucket.io/babbler/?
- Software VCS URL: bitbucket.org/sco0ter/babbler/src
- Software Description Babbler is a young XMPP client library for Java SE 8 based on JAXB as XML processing technology.
- Brief explanation: Add support for the OMEMO encryption to Babbler
- Expected results:
- Being able to send e2ee messages back and forth with other OMEMO implementations
- Basic trust model. Ability to enable disable devices
- Knowledge Prerequisite:
- Java 8
- JAXB
- Ability to read and understand RFC’s and XEP’s
- Awareness for security and crypto
- Difficulty: Moderate
- Implementation Language: Java 8
- Teaser Task: Create a Babbler Extension that represents a OMEMO device list; Create a very minimal client that logs in, subscribes to the device list PEP node and prints the contents.
- Contact Details: MUC at gsoc@conference.conversations.im
Add OMEMO support to Converse.js
- Software Project: Converse.js
- Software URL: conversejs.org
- Software VCS: github.com/jcbrand/converse.js
- Software Description: Converse is an XMPP that runs in your browser written in pure JavaScript
- Brief explanation: Add support for the E2E encryption OMEMO. Can probably be based upon existing strophe library
- Expected results:
- Send and receive messages
- Trust UI; Approve keys; Mark messages as trusted in UI
- Knowledge Prerequisite:
- JavaScript
- Ability to read and understand RFCs and XEPs
- Awareness for security and crypto
- Contact Detail: MUC at discuss@conference.conversejs.org
Add Audio/Video support to Converse.js
- Software Project: Converse.js
- Software URL: conversejs.org
- Software VCS: github.com/jcbrand/converse.js
- Software Description: Converse is an XMPP that runs in your browser written in pure JavaScript
- Brief explanation: Add support for WebRTC-based Audio and Video calls. Can probably be based upon an existing strophe library
- Expected results:
- Initiate Audio or Video calls within private and group chats
- Knowledge Prerequisite:
- JavaScript
- Ability to read and understand RFCs and XEPs
- Familiarity with WebRTC
- Contact Detail: MUC at discuss@conference.conversejs.org
Add OpenPGP for XMPP Instant Messaging support to Smack
Add support for Entity Capabilities 2.0 to Smack
- Software Project: Smack
- Software URL: https://igniterealtime.org/projects/smack/
- Software VCS URL: https://github.com/igniterealtime/Smack
- Software Description Smack is a highly modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs.
- Brief
explanation: Entity
Capabilities 2.0 (XEP-0390) is an overhaul
of Entity
Capabilities (XEP-0115), which provides an efficient way for
remote entities to signal their capabilities. This mechanism reduces
network traffic and speeds up most other protocols. In order to add
support for XEP-0390, the existing ServcieDiscoveryManger code must
be extended to support for plugable remote entity feature discovery
mechanisms.
- Expected results:
- Support for Entity Capabilities 2.0.
- Extending the existing Service Discovery code to allow for plugable feature-cache mechanisms.
- Difficulty: Moderate
- Implementation Language: Android compatible Java 8
- Contact Details: MUC at gsoc@conference.conversations.im
Add support for XMPP over WebSocket to Smack
- Software Project: Smack
- Software URL: https://igniterealtime.org/projects/smack/
- Software VCS URL: https://github.com/igniterealtime/Smack
- Software Description Smack is a highly modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs.
- Brief explanation: WebSockets
(RFC 6455) are an
alternative way to establish a connection between a server and a
client. This project idea is about adding support
for XMPP over
WebSocket (RFC 7395) to Smack. The student needs to implement
a new `XMPPWebSocketConnection` which extends the existing
`XMPPConnection` interface. The resulting API must be compatible to
the existing Smack code and must also be usable on Android
devices.
- Expected results:
- Being able to connect to XMPP services via WebSocket.
- Definition of a WebSocket interface on top of the used
WebSocket libraries, allowing for differeet WebSocket
implementations.
- Difficulty: Moderate
- Implementation Language: Android compatible Java 8
- Contact Details: MUC at gsoc@conference.conversations.im
Dino: OMEMO improvements
- Software Project: Dino
- Software URL: https://dino.im
- Software VCS URL: https://github.com/dino/dino
- Software Description Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.
- Brief explanation: The OMEMO encryption protocol allows to have forward-secret encrypted chats with multiple parties/devices on the XMPP network. Dino already includes a basic implementation of OMEMO, currently supporting simple encrypted two-person chats. However our OMEMO implementation lacks support for groupchats and still requires proper ways to verify keys of other users and manage trust in user keys. We'd like to use the "Blind trust before verification" model by default, with possibility to entirely disable blind trust for the paranoid.
- Relevant readings:
- Expected results:
- Allow to verify your own devices and keys of other users, maintain trust in local database.
- Implement "Blind trust before Verification"
- Notify the user about new own devices, asking for verification
- Show message in conversation with user when they add a new device. Ask for verification if required.
- Difficulty: Moderate
- Implementation Language: Vala
- Contact Details: MUC at gsoc@dino.im
Dino: Message search
- Software Project: Dino
- Software URL: https://dino.im
- Software VCS URL: https://github.com/dino/dino
- Software Description Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.
- Brief explanation: Dino displays messages as they come in and allows to go back in time as a user scrolls up. However, there is no way to search through messages. This project should add a UI to quickly and intuitively search through locally stored messages with the possibility to view the context of a result.
- Expected results:
- Intuitive UI for searching through messages
- Possibility to explore the context of a search result
- Performant search
- Difficulty: Moderate
- Implementation Language: Vala
- Contact Details: MUC at gsoc@dino.im
Dino: On-boarding experience
- Software Project: Dino
- Software URL: https://dino.im
- Software VCS URL: https://github.com/dino/dino
- Software Description Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.
- Brief explanation: When a user first starts Dino, they get to a screen informing them that there are no accounts, they can then get to a window that offers to add an account and then to a window where they can enter their JID and password. This procedure is neither fast, nor intuitive, nor does it handle errors or provide advanced options. The goal of this project is to rework the on-boarding experience. A student doing the project will have to design a viable user experience and decide about relevant features and how to present them. A student may extend this project by considering an XMPP easy-onboarding process.
- Relevant readings:
- Expected results:
- Account creation
- Certificate error handling
- Hostname and port configuration
- Difficulty: Moderate
- Implementation Language: Vala
- Contact Details: MUC at gsoc@dino.im
Dino: In-Band Real Time texting
- Software Project: Dino
- Software URL: https://dino.im
- Software VCS URL: https://github.com/dino/dino
- Software Description Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.
- Brief explanation: Real-time text is text transmitted instantly while it is being typed or created. The recipient can immediately read the sender's text as it is written, without waiting. It allows text to be used as conversationally as a telephone conversation, including in situations where speech is not practical (e.g., environments that must be quiet, environments too noisy to hear, restrictions on phone use, situations where speaking is a privacy or security concern, and/or when participant(s) are deaf or hard of hearing).
- Relevant readings:
- Expected results:
- Allow users to exchange text as they type with other users and other compatible clients
- Performant input and output (UI rendering wise and network wise)
- Difficulty: Easy
- Implementation Language: Vala
- Contact Details: MUC at gsoc@dino.im
Your application
Thank you for your interest in participating in Google’s Summer of Code with conversations.im. Your application can be free form but should answer the following questions.
- What made you choose Conversations.im?
- What is your background? Have you been using XMPP before? Have you been involved with another open source community?
- Brief description of the project
- Detailed description What do you expect to do over the summer? What are the deliverables?
- Why do you want to work on that project?
- What inspires you? What other pieces of software do you look up to that can act as a inspiration for your project?
- How did you prepare for your project? What documents did you read? Did you do any prototypes that can prepare you for the project?
- What kind challanges do you expect? What potential problems do you expect to run into?
- How will you schedule your time? Give us a brief week-by-week summary of what you are planning to do
- Contact details What is your Jabber-ID? What is your email address?