Fractal is an instant messaging client from the GNOME ecosystem based on the Matrix protocol. Early in 2021 the Fractal NEXT initiative started with the pursuit of a full rewrite. The goal of this year’s GSoC project was to advance Fractal NEXT by bringing the most essential features to the new code base and making it a minimal, but usable Matrix client.
The main missing pieces of room and member management are now part of Fractal. From simply being in a room, the user can now view and edit relevant information like name, topic and avatar. Members can be viewed, searched for and their permissions can be modified. All actions that can be taken are tied to the user’s power level in the room and the corresponding controls get disabled in case they are forbidden. With this addition, the user can be in control over their rooms and now all everyday instant messaging tasks can be performed from within Fractal.
The work on Fractal is not finished and new tasks were discovered during this GSoC. One big follow up task will be the robust handling of pending events, i.e. making sure user actions get instantaneously reflected in the UI state, in spite of the related API requests not being completed. The matrix-rust-sdk will be a good place for this implementation. A more open-ended task is the extension of Fractal’s room details by additional functionality like settings for notifications, invitations, room history and room visibility; a media gallery could be accessed from the room details. Another future task regards the young ecosystem around GTK4 on which the new Fractal is built: the user avatars look quite crisp. Some foundational work is required in libadwaita or GTK to get rid of image aliasing.
Here is a list of all work submitted as part of this GSoC 2021 project.
Room details show the room’s information and enable the user to change them. Avatar, name and topic are shown at the top and their layout is customized for a nicer look and a better user experience. Editing of the room name and topic can be toggled via an edit button. For the avatar two extra buttons are available to update it with the help of a file picker, or to remove it entirely. Controls for actions are bound to the user’s power level in the room and get disabled when they are not allowed.
The member page allows the user to view and interact with members of the room. The total number of members is shown and each member is displayed with user name, avatar and Matrix ID. For members with special power levels their power level is shown as a badge together with a possible categorization as moderator or admin. A menu for changing power levels or kicking members is included. To find members, a search bar allows filtering of room members by their attributes.
Some other MRs emerged from the work on Fractal. They include foundational work (!811), a bigger usability fix (!810), infrastructure, documentation and code cleanup (!790, !808, !809, !812, !814, !815, !816, !817). Some issues were filed in the process, too: #804, #805, #813, #815, #817, #818, #820.
With GTK4 and the matrix-rust-sdk being young projects and the ecosystems around them as well, there was a need to interact with different projects to do foundational work aiding the development of Fractal.