vurpo

Improving nheko (and creating a better Matrix)

By creating more and better IM clients for Matrix, we can create a better world of Matrix, meeting the needs of more people. Making nheko a better Matrix client helps toward this goal.

That sounded a bit pretentious, didn’t it? It’s just the initial paragraph that ends up in all the places with the “read more” link, so I like to make it fancy. (on an unrelated note, I haven’t even started writing that article about writing a Matrix client that I mentioned a while back, but I don’t think anyone cares :^)

My interest in nheko began when I realized that more good Matrix clients = a better Matrix for everyone. At the time nheko had just gotten support for images, so it was pretty bare-bones. I looked over the open issues and started by just adding support for quitting the app by pressing Ctrl-Q (Cmd-Q). After that I added support for joining and leaving rooms(joining room ended up being finished up and added a while later), then support for custom stylesheets and system theme colors, and finally the big one, communities.

By the time that custom theme support was merged into nheko (along with default light and dark themes), I realized I was ready to use it as my main Matrix client on desktop, at least for most of my needs. It still lacks a lot of features I want in an IM client, but I can overlook those for the time being, since it now works smoothly enough for my most basic IM needs. But where should nheko go next? My personal goal is, after all, that I wouldn’t need Riot-web on my laptop anymore. (I don’t think Riot is bad in any way, it is just kind of heavy for my laptop, I prefer something lighter)

Missing features

I have a kind of “personal wishlist” of features I feel are missing from nheko and are important. These are roughly in order of urgency:

Notifications

Matrix has server-side notifications, a system where notification rules (rules that determine which messages should be notified about) are uploaded to the homeserver, which can then convey information about which events should be notified about to the client. Riot uses this feature to determine which messages should ping the user and produce unread messages counts for a room. Nheko should just do the same, basically.

The other big notification issue is desktop notifications. When I get a ping I want to get a notification about it on my desktop, like most messaging apps, and many other apps on my desktop do. This would require an external library to handle native notifications cross-platform (since Qt does not do that). One example would be Snorenotify, which is already aimed at Qt projects.

Room and user (and community) information

There should be a way to view the members list of a room, view and edit the settings of a room, and view the user profiles of individual users. This is the main blocker that keeps me needing Riot (to manage rooms and so on). Related to this, viewing and managing communities, i.e. viewing the group page, editing the group, is also a wanted feature.

Improvements in the timeline

This means supporting timeline events that are not currently displayed, such as invites, joins, and leaves. Also supporting redactions, so redacted messages are not accidentally replied to (which happened to me once). And of course, showing read receipts. (The way to show read receipts has been discussed to some extent in the nheko room, and probably requires more discussion and experimentations before a good UI is reached).

Better offline support

When the computer goes offline or even goes to sleep for a while, nheko should recover from it nicely. This means retrieving all the messages it missed once network connectivity returns (currently it can miss messages), tell the person using it that the computer is offline, and retrying the conection with some reasonable growing delay (I enjoy the way Telegram Desktop implements this, with a small notification about how many seconds until next connection attempt, double the delay every time, and a manual reconnection button one can click to retry now).

End-to-end encryption

I know, this is hard to implement. But it’s something people want, and something I feel should be built into nheko at some point, whether it is after every other missing feature is done. Should probably be done by someone who knows what they’re doing.

Where am I going with this?

The above are the biggest missing features in my opinion, and of course there are more than the above-mentioned ones as well. Now, I noticed that Matrix has a list of potential Google Summer of Code projects. And that one of the ideas is this. So yeah, I’m strongly considering signing up for GSoC with the goal of adding one or more of these features to nheko. That’s basically it, my intent with this post was basically to provoke a little bit more discussion about what should be in nheko.

Now I’m off to FOSDEM and GodotCon.


Creative Commons License
All code on this site is licensed under the MIT License
(except if otherwise noted)