This Week in Matrix 2019-05-31

2019-05-31 — This Week in Matrix — Ben Parsons

Matrix Live - Half-Shot and Sorunome discuss the Discord-Matrix Bridge 🎙

Dept of Spec 📜

TravisR:

Alongside Synapse’s 1.0 release, the Matrix Specification is also getting a 1.0 on June 10th. In practice this means a fresh release of the Client-Server, Server-Server, Application Service, and Identity Service specifications. The Push Specification is just so simple it hasn’t needed an update yet.

Work has been happening to get all the specs in shape for 1.0 - follow along at https://github.com/matrix-org/matrix-doc/projects/2?fullscreen=true

Dept of Servers 🏢

Synapse

Main news in synapse-land this week is that we released Synapse v0.99.5.2, which fixes a big performance regression which was introduced v0.99.5. Folks who are currently on v0.99.5/v0.99.5.1 are advised to upgrade asap.

Otherwise, work has been continuing apace towards a v1.0 release on 10th June.

Construct

Construct is a homeserver implementation in C++:

  • Construct has added support for Server Access Control Lists (m.room.server_acl). The exact behavior of the implementation is configurable by the server administrator, and is even more comprehensive than Synapse. In Construct, ACLs can be configured to cover incoming EDUs, outgoing events, and indirectly fetched events.
  • The GraphicsMagick library has been utilized to implement the media thumbnailing feature called for by the specification. This is an optional dependency written in C and offers a rich API which as been extremely fun to work with. In the future, expect your Construct to be capable of things like annotating images with the Server Command Line which can be used to generate memes in your chatroom or write custom text on top of stickers!
  • On the backend we have devoted significant effort to getting the most out of dynamic-linking to simplify the architecture of a large and modular free-software project. This effort makes adding features and contributions to Construct extremely straightforward. I will enumerate the basics for those familiar with developing C software: We are now loading all modules at runtime with the flags RTLD_GLOBAL|RTLD_DEEPBIND|RTLD_LAZY and we build with the flag --weak-unresolved-symbols; during execution we hook the error handling in ld.so to throw our own C++ exception directly from the PLT slot of a missing symbol. In summary this allows features to be added to Construct by simply creating an interface in a header and definitions in a loadable module, while still enjoying optional loading and unloading of the module at runtime. This is a significant feat that remains unrealized in most existing projects around the free software ecosystem!

Dept of SDKs and Frameworks 🧰

Dept of Clients 📱

nheko 0.6.4 and 0.7.0 roadmap

red_sky updated us on nheko:

Just wanted to pop in and mention that 0.6.4 is out this week. It comes with a decent number of bug fixes.

And then:

Nheko 0.7.0 roadmap is out: https://github.com/Nheko-Reborn/nheko/milestone/2
Also, Nheko-Reborn has a new team member, with MonokelPinguin joining the team : https://github.com/MonokelPinguin. (goes by Nico in the #nheko-reborn room)

el0 pointed out that nheko is available on flathub: https://flathub.org/apps/details/io.github.NhekoReborn.Nheko

continuum, JavaFX client

yuforia:

continuum modified the JSON parser to save a copy of the source. Now fields that are not standard or not yet supported are displayed when you right-click to view the source. For example, "age" and "transaction_id" are not used by the app, but are available when viewing the raw JSON

continuum screenshot

Neo

f0x has been working on Neo:

Neo can now finally fetch old backlog, with a fancy css loading animation

The Neo room has moved to #neo:pixie.town, and the site+deployment are being moved to https://neo.pixie.town

Fractal 🦶

Alexandre Franke:

Fractal got initial support for being kicked, implemented by first time contributor Isaac Curtis.

We also joined the new call at https://stopthemingmy.app

Riot Web

Continued work on edits and reactions. Also ongoing work on sdk-level support for cross-signing. Released Riot 1.2.0 (and 1.2.1).

Dept of Bridges 🌉

mautrix-telegram, mautrix-facebook, mautrix-hangouts, mautrix-whatsapp

Can you believe it, tulir had a busy week working on his various bridges:

mautrix-telegram now has native Matrix edit support in both directions and basic Prometheus metrics. I'll probably start making 0.6.0 RCs after improving the metrics a bit.

mautrix-facebook and mautrix-hangouts got some bugfixes and options to configure the displaynames of the ghost users on Matrix (like adding (FB) or (Hangouts) suffixes).

mautrix-whatsapp's Matrix puppeting was finished (meaning typing notifs, read receipts and presence updates can now be bridged to WhatsApp) and unexpected disconnection handling was fixed (automatic reconnections should now usually work again). Backfilling needed some hacks to work with Matrix puppeting. The problem is that the real Matrix users have rate limits and can't send timestamp-massaged messages. I decided to just invite the default ghost user to the room while backfilling and make it leave afterwards so that private chat room names and such would stay intact. Some clients like Riot Android/iOS sometimes do weird things, such as moving the room out of "People", but that shouldn't be too bad.

Dept of Ops 🛠

matrix-docker-ansible-deploy makes Synapse optional

Slavi:

matrix-docker-ansible-deploy has seen some work in becoming more flexible.

Synapse is not a requirement anymore. People can now use the playbook to install any of the other services, wiring them to a Synapse instance installed in another way. This is mostly useful for installing bridges or other auxiliary services without going "all in" on the playbook. Not having Synapse as a fixed requirement also opens the door for installing alternative homeservers, when such become available in the future.

On a similar note, to ease maintanability, all bridges have been moved to separate Ansible roles (outside of the matrix-synapse role). There have been lots of improvements related to bridge configuration with even more likely to come soon.

0.99.5.2 kubernetes-optimized images

Ananace had 0.99.5.2 kubernetes-optimized images ready to go very quickly.

Dept of Services 🚀

Matrix User Documentation launches 🎉

Aaron (formerly known as Aaron Raimist) has been a major help to the Matrix project, and has recently launched something new:

I have started another Matrix documentation project, Matrix User Documentation. I know, there are several however none of them aim to actually be a handbook for using Riot or any other clients. I would like for this to become a place where you can find "The (unofficial) Riot Handbook" or "The (unofficial) Quaternion Handbook" as well as a place where you can find answers to more of your FAQs.

It's still very early, only a few answers are written so far and none of the handbooks have been started but I would welcome any community assistance. You can view what I have so far at: http://mud.raim.ist/en/latest/

You can contribute some documentation at: https://github.com/aaronraimist/matrix-user-documentation and join our room: #matrix-user-documentation:raim.ist

matrixservers.net

We welcomed Atreatis to Matrix recently. They are creating a new directory service:

Someone mentioned earlier that there is a need for a list of public servers on Github so people can find and add their public matrix servers. Which combines well with what I am building at the moment. Hopefully you guys don't mind helping me out on creating the list and spreading the word. The repository can be found here: https://github.com/Atreatis/matrix-servers

Final thoughts 💭

Matrix Shell Suite is a promising looking project which could deserve more attention.

Thank You to PyConWeb and especially to Hardy for letting richvdh and myself host TWO Matrix sessions at your event last weekend - was a great time and I hope everyone enjoyed the presentations and workshops.

That's all I know 🏁

See you next week, and be sure to stop by #twim:matrix.org with your updates!