Difference between revisions of "Google Summer of Code 2023"

From XMPP WIKI
Jump to navigation Jump to search
m
 
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
= Participation =
= Participation =


The XSF has plans to be a mentoring organization for '''Google Summer of Code 2023'''. This is an early attempt to ensure good planning and enough time for the application process. '''Remind: The XSF has not yet applied nor being accepted'''.
The XSF has plans to be a mentoring organization for '''Google Summer of Code 2023'''. The XSF has been accepted as a mentoring organization in GSOC 2023!


XMPP oriented projects should still add project ideas to the below list.
XMPP oriented projects should still add project ideas to the below list.
Line 28: Line 28:
| 2023
| 2023
| Organization Application preparation
| Organization Application preparation
| emus & XSF members
| emus & supporters
|-
|-
| 2023-02-07  
| 2023-02-07  
Line 73: Line 73:
* '''Submit small patches''': To assess students applying to GSoC for XSF projects we want them to have submitted some small patches to one of the XMPP projects in advance, as this gives us an idea of their general ability to interact with the projects and submit patches. These should only be an afternoon or two's work, and should not be onerous!
* '''Submit small patches''': To assess students applying to GSoC for XSF projects we want them to have submitted some small patches to one of the XMPP projects in advance, as this gives us an idea of their general ability to interact with the projects and submit patches. These should only be an afternoon or two's work, and should not be onerous!


* '''Solve the XMPP quiz''': To be announced.
* '''Solve the XMPP quiz to the best extend you can''': Please include you answers in your application. Please also don't make your answers public so others don't start copy & pasting responses. The idea is not to have the perfect answers, but show that you took time to review the technology. If you don't understand certain details that is a good indicator to start a discussion about it within the community.
** What does XMPP stand for?
** Is XMPP just another name for Jabber?
** What is federation?
** What can you do with XMPP apart from chatting?
** Do you know examples/implementations for XMPP usage in a centralized service, as a federated service, as a serverless service?
** What is a XEP?
** What is a stanza?
** Describe the core RFCs and XEPs.
** Does XMPP run on IoT devices?
** What is OMEMO?


A list of teaser tasks is given in the [[#Project_Ideas|Project Ideas]] overview, but please join the chat rooms for the respective projects and discuss them there, where mentors will be able to help you and know what you're up to. There are different teasers for different codebases, and more teasers will be appearing here over the next few days.
A list of teaser tasks is given in the [[#Project_Ideas|Project Ideas]] overview, but please join the chat rooms for the respective projects and discuss them there, where mentors will be able to help you and know what you're up to. There are different teasers for different codebases, and more teasers will be appearing here over the next few days.


== Student Proposal ==
== Student Proposal ==
Before you started with the proposal - please ensure you follow-ed the steps above!


In addition to writing a proposal, engagement with the actual projects before the application is very important. Showing motivation by taking interest in the project and communicating with the mentors is very advantageous. Solving a typical small problem can show that a student is serious with their plans.
In addition to writing a proposal, engagement with the actual projects before the application is very important. Showing motivation by taking interest in the project and communicating with the mentors is very advantageous. Solving a typical small problem can show that a student is serious with their plans.
Line 85: Line 97:
Furthermore we recommend a bit of research on online guides to write a proposal or motivational letter. The official guidelines of the [https://developers.google.com/open-source/gsoc/help/student-advice Google Summer of Code 2023] are highly recommended to read first.
Furthermore we recommend a bit of research on online guides to write a proposal or motivational letter. The official guidelines of the [https://developers.google.com/open-source/gsoc/help/student-advice Google Summer of Code 2023] are highly recommended to read first.


= Project Ideas (TO BE UPDATED FOR 2023) =
==== Checklist ====
 
* I have read the [https://summerofcode.withgoogle.com/help Google Summer of Code 2023 guidelines]!
* I have contacted the project mentors and exchanged about the project.
* I have conducted a teaser task (see second bullet point).
* I have join our GSoC group chat channel via XMPP (you can reach out via mail of course as well, but we really recommend to also use the technology) [https://wiki.xmpp.org/web/Google_Summer_of_Code_2023#Join_the_group_chat! Link].
* I have solved the [https://wiki.xmpp.org/web/Google_Summer_of_Code_2023#Teaser_Tasks XMPP Quiz]
 
= Project Ideas =
 
== Monal ==
''Website:'' https://monal-im.org/<br/>
''Source Code:'' https://github.com/monal-im/monal<br/>
''Description:'' Monal is a modern iOS and MacOS XMPP chat client<br/>
''Project Contact:'' [[User:TMolitor|tmolitor]]<br/>
''Relevant readings:'' XMPP + SwiftUI + Swift (+ ObjC)<br/>
''Teaser Tasks:'' [https://github.com/monal-im/Monal/labels/%3Asuperhero%3A%20Help%20wanted Issues tagged "Help Wanted"]<br/>
''Chat:'' [xmpp:monal@chat.yax.im?join monal@chat.yax.im] or [https://xmpp.org/chat#converse/room?jid=monal@chat.yax.im Webchat] or via 1:1 chat with [xmpp:thilo.molitor@juforum.de tmolitor]
 
=== Modern Onboarding ===
 
''Brief explanation:'' When new unexperienced (XMPP) users start Monal for the first time, they should be taken by the hand and introduced to XMPP (decentralized, login vs. registration) as well as the most important privacy settings / privacy policy. The resulting introduction should be implemented using SwiftUI and should replace / incorporate the existing login/register UI.
 
''Relevant readings:'' SwiftUI + Swift (+ ObjC)
 
''Project size:'' 175h
 
''Difficulty:'' Easy
 
''Deliverables / Expected Results:''
 
* Short and understandable introduction to XMPP / Monal
* Configuration and explanation of the most important privacy settings
 
=== Image Preview ===
 
''Brief explanation:'' When tapping onto an image in the chat, a storyboard based image viewer appears, showing that image in full screen. Implement a new SwiftUI based media viewer supporting animated gifs, other image types and videos. Allow to swipe through all received/sent media. Show a gallery of all received media leading to this image viewer when tapping a button in the contact
details.
 
''Relevant readings:'' SwiftUI + Swift (+ ObjC)
 
''Project size:'' 175h
 
''Difficulty:'' Easy
 
''Deliverables / Expected Results:''
 
* Support for animated gifs
* Support for other common image formats (png, jpg etc.)
* Support for common video formats
* Media gallery
* Support swiping through media
 
=== MDM support ===
 
''Brief explanation:'' Add support for "managed configuration" allowing to automatically configure Monal in school or business environments.
 
''Relevant readings:'' [https://github.com/monal-im/Monal/issues/164#issuecomment-778239069 Links in Monal Issue comment] + ObjC / Swift
 
''Project size:'' 350h
 
''Difficulty:'' Easy
 
''Deliverables / Expected Results:''
 
* Configuration of most settings in Monal through MDM (privacy settings etc.)
* Auto-Create of account in Monal via MDM
 
=== Modern Chat View ===
 
''Brief explanation:'' The existing chat view (storyboard based) should be replaced by a new SwiftUI implementation. It should support text-, audio-, video-, geo- and OMEMO-messages.
 
''Relevant readings:'' SwiftUI + Swift (+ ObjC)
 
''Project size:'' 350h
 
''Difficulty:'' Medium
 
''Deliverables / Expected Results:''
 
* Chat view with support for one to one chats as well as group chats
* Display the trust level of the device that sended an OMEMO encrypted message in the chat view
* Play / send audio & video messages
* Text messages with support for Quotes, HTTP/HTTPS links, styles
* Sending / showing images and geo locations
* Quote/Copy/Forwarding messages
* Show state of sent messages
* Sending files (upload progress etc.)
* Floating "scroll to bottom" button if not fully scrolled to bottom


== Dino ==
== Dino ==
Line 97: Line 197:
''Chat:'' [xmpp:chat@dino.im?join chat@dino.im] or [https://xmpp.org/chat#converse/room?jid=chat@dino.im Webchat]
''Chat:'' [xmpp:chat@dino.im?join chat@dino.im] or [https://xmpp.org/chat#converse/room?jid=chat@dino.im Webchat]


'''Note:''' Feel invited to combine small projects into a large project, if you want to do a large project. Combinations of the 3 projects related to file transfers are a particular fit for a large project.
'''Note:''' Feel invited to combine small projects into a large project, if you want to do a large project. Combinations of the 2 projects related to file transfers are a particular fit for a large project.


=== Inline link preview ===
=== Inline link preview ===
Line 110: Line 210:
* Automatic generation of metadata, working with major websites. This should be done in a generic fashion, not targeting a specific website
* Automatic generation of metadata, working with major websites. This should be done in a generic fashion, not targeting a specific website
* Design or reuse a specification for sending metadata with XMPP messages
* Design or reuse a specification for sending metadata with XMPP messages
=== Stateless file sharing ===
''Brief explanation:'' Attach metadata to HTTP file transfers and display it.<br/>
''Involved Technologies:'' Vala, XMPP, HTTP<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0446.html XEP-0446], [https://xmpp.org/extensions/xep-0447.html XEP-0447], [https://xmpp.org/extensions/xep-0363.html XEP-0363]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
* Use [https://xmpp.org/extensions/xep-0447.html Stateless file sharing (SFS)] for outgoing HTTP file transfers.
* Send minimal thumbnails (less than 16 pixels) for image file transfers
* Display minimal thumbnails blurred on incoming file transfers (before file is fetched).


=== On-demand p2p file sharing ===
=== On-demand p2p file sharing ===
Line 129: Line 217:
''Project size:'' Small (175h)<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Medium<br/>
''Difficulty:'' Medium<br/>
''Important Note:'' This project can only be achieved by first implementing the "Stateless file sharing" project.<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* Implement [https://xmpp.org/extensions/xep-0234.html#requesting Jingle File Transfer requests] to request and deliver files.
* Implement [https://xmpp.org/extensions/xep-0234.html#requesting Jingle File Transfer requests] to request and deliver files.
Line 159: Line 246:
* Apply markup to messages in conversation history via Pango Attributes
* Apply markup to messages in conversation history via Pango Attributes


== Psi ==
== Moxxy ==
''Website:'' https://codeberg.org/moxxy/moxxyv2<br/>
''Source Code:'' https://codeberg.org/moxxy/moxxyv2<br/>
''Description:'' Moxxy is an experimental, modern XMPP client written in Flutter<br/>
''Project Contact:'' [[User:PapaTutuWawa|PapaTutuWawa]]<br/>
''Relevant readings:'' XMPP + Flutter + Dart<br/>
''Teaser Tasks:'' [https://codeberg.org/moxxy/moxxyv2/issues?q=&type=all&sort=&state=open&labels=43305&milestone=0&assignee=0&poster=0 Good first issues]<br/>
''Chat:'' [xmpp:moxxy@muc.moxxy.org?join moxxy@muc.moxxy.org] or [https://xmpp.org/chat#converse/room?jid=moxxy@muc.moxxy.org Webchat]
 
=== Groupchats ===


''Website:'' https://psi-im.org/<br/>
''Brief explanation:'' For some users, groupchats are an essential part of the instant messaging experience. Moxxy is currently lacking such functionality. This project should provide users with the basics of groupchats.
''Source Code:'' https://github.com/psi-im/psi<br/>
''Description:'' An XMPP client for advanced users.</br>
''Project Contact:'' [[User:Rion|Sergei Ilinykh]], Tehnick (Boris Pek), VitoZz (Vitaly Tonkacheyevb)<br/>
''Relevant readings:'' [https://psi-plus.com/wiki/en:main]<br/>
''Teaser Tasks:'' [https://github.com/psi-im/psi/milestone/4]<br/>
''Chat:'' [xmpp:psi-dev@conference.jabber.ru?join psi-dev@conference.jabber.ru] or [https://xmpp.org/chat#converse/room?jid=psi-dev@conference.jabber.ru Webchat]


=== Mediated Information Exchange (MIX) ===
''Relevant readings:'' [https://codeberg.org/moxxy/moxxmpp moxxmpp], [https://xmpp.org/extensions/xep-0045.html XEP-0045], [https://xmpp.org/extensions/xep-0313.html XEP-0313], [https://xmpp.org/extensions/xep-0402.html XEP-0402]


''Brief explanation:'' Add support for Mediated Information Exchange (MIX).<br/>
''Project size:'' 175h
''Involved Technologies:'' Qt, C++<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0369.html XEP-0369: Mediated Information eXchange (MIX)]<br />
''Size:'' large<br/>
''Difficulty:'' Hard<br/>
''Deliverables / Expected Results:''<br/>
* A set of classes in [https://github.com/psi-im/iris iris] library to support MIX extensions.
* A MIX management component in Psi itself similar to one implemented for MUC.
* A Working UI (probably some rework of the current MUC UI to make it compatible with MIX)
* The solution has to be tested with popular XMPP servers


=== QML UI ===
''Difficulty:'' Easy


''Brief explanation:'' A modern looking UI for both (group-)chat and roster
''Deliverables / Expected Results:''
''Involved Technologies:'' Qt, QML, JavaScript, C++<br/>
''Relevant readings:'' https://en.wikipedia.org/wiki/QML<br/>
''Size:'' large<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
* It's a huge task, so expected an implementation of standalone QML/*cross-platform* UI with clear and well-documented API interfaces.
* The UI may be backed by some mocked C++ code where Psi code should be taken as a guidance. This is perfectly fine to borrow design/API ideas from other clients too. This mocked code is mostly needed to initiate some UI actions unrelated to self user (e.g. some contact changes their status) and catch/log UI events.
* It's assumed the UI will be used not just with Psi. So the branded parts preferably should be kept aside and instead set via API.
* The UI should provide next functions: model/view-based chat/group-chat, roster, avatars, statuses, recent (group-)chats, fetching unlimited message log, contact list (with groups/tags), contacts management, own status management.
* The UI should be adaptable to screen size (read: there plans to use it for mobile platforms too).
* The UI should be compilable at least on Linux, MacOS and Windows.


=== Message Archive Management ===
* Ability to connect to a MUC and interact with it
* The underlying XMPP library should gain support for MUC interactions: Creating (instant and advanced), joining and leaving
* Deal with bookmarks
* Fetch messages from MAM
* An architecture that also allows MIX to be implemented in the future
* Optionally: Simple administrative tasks, like inviting, kicking and banning


''Brief explanation:'' Support for server-based message archive
=== Push Notifications ===
''Involved Technologies:'' Qt, C++<br/>
''Relevant readings:'' https://xmpp.org/extensions/xep-0313.html<br/>
''Size:'' small<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
* Implement MAM in iris (https://github.com/psi-im/iris) library.
* Integrate the new message storage with current local history management in Psi (which is based on iris).
* Keep the ability to use local history (for cases when server MAM is unavailable or undesired) and combine both sources seamlessly
* If it's necessary update Psi UI to make it work with the new mechanism.
* Keep in mind related to MAM XEPs to not make something completely incompatible.


== PGPainless ==
''Brief explanation:'' Not all users are able or want to have Moxxy permanently running in the background. XMPP, however, provides us with a way to negotiate the usage of push notifications, if available. This projects should
provide Moxxy with the ability to work on devices where running in the background indefinitely is not an option.


[https://pgpainless.org/ PGPainless] is a Java OpenPGP library. While it is not strictly an XMPP related project, it has it has its origins in GSoC and the XMPP community, since it was created as a [https://blog.jabberhead.tk/summer-of-code-2018/ Summer of Code project in 2018].
''Relevant readings:'' [https://codeberg.org/moxxy/moxxmpp moxxmpp], [https://xmpp.org/extensions/xep-0357.html XEP-0357], [https://unifiedpush.org/ UnifiedPush], [https://github.com/UnifiedPush/flutter-connector UnifiedPush's Flutter library]


Interested students are encouraged to join '''[xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org]'''
''Project size:'' 175h


=== OpenPGP Message Parsing using Parser Generator ===
''Difficulty:'' Medium


''Size:'' Small<br/>
''Deliverables / Expected Results:''
''Brief explanation:'' Enforce OpenPGP message syntax during parsing by using a Parser Generator such as JavaCC<br/>
''Involved Technologies:'' Java, Bouncy Castle, EBNF<br/>
''Relevant readings:'' [https://datatracker.ietf.org/doc/html/rfc4880 RFC4880: OpenPGP Message Format]<br/>
''Deliverables / Expected Results:''<br/>
* In the OpenPGP Interoperability Test Suite PGPainless currently fails some tests related to [https://tests.sequoia-pgp.org/#Unusual_Message_Structure unusual message structures].
* The project has the goal to improve PGPainless' score in this category by rewriting/improving the libraries' rather naive [https://github.com/pgpainless/pgpainless/blob/master/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/DecryptionStreamFactory.java message parser logic].
* An ideal implementation would enforce the OpenPGP message structure syntax defined as EBNF. This could be done by using a parser generator such as [https://javacc.github.io/javacc/ JavaCC].


== Converse.js ==
* Register against a push server for push notifications, given a locally available UnifiedPush distributor
* Moxxy should be be woken up, receive messages and display a notification
* Sent messages should be queued up so that they don't get lost
* Users should be able to configure if they want push notifications or the persistent connection


[https://conversejs.org/ Converse] is a web-based XMPP client.  It has different modes, allowing it to be integrated into existing websites, used as a webchat for a specific chatroom, or used as a full-fledged XMPP client on its own. There is also an [https://www.electronjs.org/ electron]-based version available.
== Your own ideas ==


* [https://xmpp.org/chat#converse/room?jid=discuss@conference.conversejs.org Webchat]
You feel confident to propose your own well-stated idea? Then please ahead. First reach out in our GSoC group chat please.


=== Support Audio/Video calls in Converse ===
To make a good proposal yourself please be aware that you:


''Size:'' small (175hrs)<br/>
* Need to be significantly more motivivated for this project
''Brief explanation:'' Add support for Audio/Video Communication via Jingle.<br/>
* Apply active engagement with the XMPP Community now
''Involved Technologies:'' JavaScript, WebRTC, Jingle<br/>
* Apply self-organisation and motivation to understand XMPP technology to a higher level than expected from contributors to existing ideas
''Relevant readings:'' [https://xmpp.org/extensions/xep-0166.html XEP-0166], [https://xmpp.org/extensions/xep-0167.html XEP-0167], [https://xmpp.org/extensions/xep-0353.html XEP-0353]<br />
''Deliverables / Expected Results:''<br/>
* 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 [https://conversations.im Conversations]

Latest revision as of 20:55, 14 March 2023

Participation

The XSF has plans to be a mentoring organization for Google Summer of Code 2023. The XSF has been accepted as a mentoring organization in GSOC 2023!

XMPP oriented projects should still add project ideas to the below list.

Organization: Edward offered to help the organization. Please reach out to the GSoC chat if you want to support as well of plan to participate in any way: GSoC chat room gsoc@muc.xmpp.org

Dates

More information on the dates are listed on their GSoC Website

Otherwise, all other info is on GSoC page

Find their FAQ.

Overview

Date Meeting Participants
2023 Kick-off Meeting emus & supporters
2023 Organization Application preparation emus & supporters
2023-02-07 Org Application Deadline emus
2023-04-04 Projects Application Mentors

Overview

XMPP is an Internet protocol used in many fields, such as the Internet of Things, chat applications, voice and video calls, etc. It's what commercial client alike Google Talk, Whatsapp or Google Hangouts uses as an XMPP-derivate of the protocol uses or in some aspects of XMPP internally, and as well as end-users it's used extensively by enterprises and governments but of course also the open variant propagated and standardised by the XSF.

The XSF is (for GSoC) an umbrella organization for various XMPP-related projects. As such, there's two tiers involved - the XSF itself, which is responsible for gatherding mentors to submit ideas, choosing students etc., and the software projects themselves that then mentor students. Anyone interested in participating in GSoC as an XSF student can join the gsoc@muc.xmpp.org MUC room, where various mentors will be available to answer questions and generally help. Although each idea below lists a possible mentor, this group chat (MUC) is the best place to start.

As there are several disparate projects here, there's variety across several codebases in different languages and with significantly different aims, so take a look through all the ideas - there should be something for everyone here :)

How to get started?

  • Read the Google Summer of Code 2023 guidelines!
  • Review the projects below and inform yourself if that could be of interested for you Link
  • Reach out the projects contact, tell about yourself and why you are interested (see project section)
  • Join our GSoC group chat channel via XMPP (you can reach out via mail of course as well, but we really recommend to also use the technology) Link
  • Continue to discuss teaser tasks with the project contact Link
  • If everything is fine, start preparing a proposal and if reviewed submit the application Link

Join the group chat!

Use a regular XMPP client and join the GSoC chat room gsoc@muc.xmpp.org.

How to join:

Teaser Tasks

  • Submit small patches: To assess students applying to GSoC for XSF projects we want them to have submitted some small patches to one of the XMPP projects in advance, as this gives us an idea of their general ability to interact with the projects and submit patches. These should only be an afternoon or two's work, and should not be onerous!
  • Solve the XMPP quiz to the best extend you can: Please include you answers in your application. Please also don't make your answers public so others don't start copy & pasting responses. The idea is not to have the perfect answers, but show that you took time to review the technology. If you don't understand certain details that is a good indicator to start a discussion about it within the community.
    • What does XMPP stand for?
    • Is XMPP just another name for Jabber?
    • What is federation?
    • What can you do with XMPP apart from chatting?
    • Do you know examples/implementations for XMPP usage in a centralized service, as a federated service, as a serverless service?
    • What is a XEP?
    • What is a stanza?
    • Describe the core RFCs and XEPs.
    • Does XMPP run on IoT devices?
    • What is OMEMO?

A list of teaser tasks is given in the Project Ideas overview, but please join the chat rooms for the respective projects and discuss them there, where mentors will be able to help you and know what you're up to. There are different teasers for different codebases, and more teasers will be appearing here over the next few days.

Student Proposal

Before you started with the proposal - please ensure you follow-ed the steps above!

In addition to writing a proposal, engagement with the actual projects before the application is very important. Showing motivation by taking interest in the project and communicating with the mentors is very advantageous. Solving a typical small problem can show that a student is serious with their plans.

Of course, a good proposal is fine, too. We would be interested in the motivation behind the application. Additionally, the student's background, the possible experiences and preferred technologies, the outcome of a preliminary research on the protocol and codesbases the student might work on. Furthermore, their own perspective on how the collaboration and organization through the Google Summer of Code with the mentors should look like and a review of which possible problems may be faced are also helpful.

Furthermore we recommend a bit of research on online guides to write a proposal or motivational letter. The official guidelines of the Google Summer of Code 2023 are highly recommended to read first.

Checklist

  • I have read the Google Summer of Code 2023 guidelines!
  • I have contacted the project mentors and exchanged about the project.
  • I have conducted a teaser task (see second bullet point).
  • I have join our GSoC group chat channel via XMPP (you can reach out via mail of course as well, but we really recommend to also use the technology) Link.
  • I have solved the XMPP Quiz

Project Ideas

Monal

Website: https://monal-im.org/
Source Code: https://github.com/monal-im/monal
Description: Monal is a modern iOS and MacOS XMPP chat client
Project Contact: tmolitor
Relevant readings: XMPP + SwiftUI + Swift (+ ObjC)
Teaser Tasks: Issues tagged "Help Wanted"
Chat: monal@chat.yax.im or Webchat or via 1:1 chat with tmolitor

Modern Onboarding

Brief explanation: When new unexperienced (XMPP) users start Monal for the first time, they should be taken by the hand and introduced to XMPP (decentralized, login vs. registration) as well as the most important privacy settings / privacy policy. The resulting introduction should be implemented using SwiftUI and should replace / incorporate the existing login/register UI.

Relevant readings: SwiftUI + Swift (+ ObjC)

Project size: 175h

Difficulty: Easy

Deliverables / Expected Results:

  • Short and understandable introduction to XMPP / Monal
  • Configuration and explanation of the most important privacy settings

Image Preview

Brief explanation: When tapping onto an image in the chat, a storyboard based image viewer appears, showing that image in full screen. Implement a new SwiftUI based media viewer supporting animated gifs, other image types and videos. Allow to swipe through all received/sent media. Show a gallery of all received media leading to this image viewer when tapping a button in the contact details.

Relevant readings: SwiftUI + Swift (+ ObjC)

Project size: 175h

Difficulty: Easy

Deliverables / Expected Results:

  • Support for animated gifs
  • Support for other common image formats (png, jpg etc.)
  • Support for common video formats
  • Media gallery
  • Support swiping through media

MDM support

Brief explanation: Add support for "managed configuration" allowing to automatically configure Monal in school or business environments.

Relevant readings: Links in Monal Issue comment + ObjC / Swift

Project size: 350h

Difficulty: Easy

Deliverables / Expected Results:

  • Configuration of most settings in Monal through MDM (privacy settings etc.)
  • Auto-Create of account in Monal via MDM

Modern Chat View

Brief explanation: The existing chat view (storyboard based) should be replaced by a new SwiftUI implementation. It should support text-, audio-, video-, geo- and OMEMO-messages.

Relevant readings: SwiftUI + Swift (+ ObjC)

Project size: 350h

Difficulty: Medium

Deliverables / Expected Results:

  • Chat view with support for one to one chats as well as group chats
  • Display the trust level of the device that sended an OMEMO encrypted message in the chat view
  • Play / send audio & video messages
  • Text messages with support for Quotes, HTTP/HTTPS links, styles
  • Sending / showing images and geo locations
  • Quote/Copy/Forwarding messages
  • Show state of sent messages
  • Sending files (upload progress etc.)
  • Floating "scroll to bottom" button if not fully scrolled to bottom

Dino

Website: https://dino.im/
Source Code: https://github.com/dino/dino
Description: Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.
Project Contact: larma, fiaxh
Relevant readings: Vala Tutorial
Teaser Tasks: Good first issues
Chat: chat@dino.im or Webchat

Note: Feel invited to combine small projects into a large project, if you want to do a large project. Combinations of the 2 projects related to file transfers are a particular fit for a large project.

Inline link preview

Brief explanation: Add support for attaching and displaying link metadata.
Involved Technologies: Vala, XMPP, HTML, OpenGraph
Relevant readings: OpenGraph protocol
Project size: Small (175h)
Difficulty: Easy
Deliverables / Expected Results:

  • User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain.
  • Automatic generation of metadata, working with major websites. This should be done in a generic fashion, not targeting a specific website
  • Design or reuse a specification for sending metadata with XMPP messages

On-demand p2p file sharing

Brief explanation: Allow for on-demand multi-party peer-to-peer file transfers.
Involved Technologies: Vala, XMPP, Jingle
Relevant readings: XEP-0447, XEP-0234
Project size: Small (175h)
Difficulty: Medium
Deliverables / Expected Results:

WebRTC file transfer

Brief explanation: Add support for WebRTC-based file transfers using WebRTC data channels for web compatibility and improved NAT traversal.
Involved Technologies: Vala, XMPP, Jingle, WebRTC
Relevant readings: XEP-0343, XEP-0234
Project size: Small (175h)
Difficulty: Hard
Deliverables / Expected Results:

Rich message support

Brief explanation: Add support for creating and displaying rich test messages.
Involved Technologies: Vala, XMPP, GTK+, Pango
Relevant readings: XEP-0393, XEP-0394, XEP-0372
Project size: Small (175h)
Difficulty: Easy
Deliverables / Expected Results:

  • Add rich text features to Dino's chat input box using buttons and well-known keyboard shortcuts for bold, italic, strikethrough, monospace, lists, blockquotes, code blocks, links and mentions.
  • Allow users to activate Markdown input, which is instantly converted to rich text during input.
  • Send rich text messages using Message Markup and References as well as a fallback using Message Styling
  • Apply markup to messages in conversation history via Pango Attributes

Moxxy

Website: https://codeberg.org/moxxy/moxxyv2
Source Code: https://codeberg.org/moxxy/moxxyv2
Description: Moxxy is an experimental, modern XMPP client written in Flutter
Project Contact: PapaTutuWawa
Relevant readings: XMPP + Flutter + Dart
Teaser Tasks: Good first issues
Chat: moxxy@muc.moxxy.org or Webchat

Groupchats

Brief explanation: For some users, groupchats are an essential part of the instant messaging experience. Moxxy is currently lacking such functionality. This project should provide users with the basics of groupchats.

Relevant readings: moxxmpp, XEP-0045, XEP-0313, XEP-0402

Project size: 175h

Difficulty: Easy

Deliverables / Expected Results:

  • Ability to connect to a MUC and interact with it
  • The underlying XMPP library should gain support for MUC interactions: Creating (instant and advanced), joining and leaving
  • Deal with bookmarks
  • Fetch messages from MAM
  • An architecture that also allows MIX to be implemented in the future
  • Optionally: Simple administrative tasks, like inviting, kicking and banning

Push Notifications

Brief explanation: Not all users are able or want to have Moxxy permanently running in the background. XMPP, however, provides us with a way to negotiate the usage of push notifications, if available. This projects should provide Moxxy with the ability to work on devices where running in the background indefinitely is not an option.

Relevant readings: moxxmpp, XEP-0357, UnifiedPush, UnifiedPush's Flutter library

Project size: 175h

Difficulty: Medium

Deliverables / Expected Results:

  • Register against a push server for push notifications, given a locally available UnifiedPush distributor
  • Moxxy should be be woken up, receive messages and display a notification
  • Sent messages should be queued up so that they don't get lost
  • Users should be able to configure if they want push notifications or the persistent connection

Your own ideas

You feel confident to propose your own well-stated idea? Then please ahead. First reach out in our GSoC group chat please.

To make a good proposal yourself please be aware that you:

  • Need to be significantly more motivivated for this project
  • Apply active engagement with the XMPP Community now
  • Apply self-organisation and motivation to understand XMPP technology to a higher level than expected from contributors to existing ideas