This Week in Matrix 2019-06-28

2019-06-28 — This Week in Matrix — Ben Parsons

Matrix Live 🎙

Matthew & Amandine talk to Ross Schulman; new Matrix.org Foundation Guardian!

Dept of Status of Matrix 🌡

Hottest GovTech Startup in Europe at The Europas tech awards

New Vector won Hottest GovTech Startup in Europe at The Europas tech awards last night for work on rolling out Matrix for France and elsewhere!

It was mainly judge-based, but public votes were used to filter.

Rust Embedded community is moving to Matrix

They held a public vote, and Matrix won very convincingly.

Dept of Spec 📜

  • MSC2134 Identity Hash Lookups is making steady progress
    • Readers who like crypto/hashing are encouraged to join in the fun
  • MSC2140 Terms of Service for ISes and IMs is nearing a conclusion
  • MSC2108 Sync over Server Sent Events hopes to add an alternative sync method to long-polling
    • Finally servers pushing events!
  • MSC2010 Adding client-side spoilers is a small feature but requires a lot of thought to integrate it seamlessly
    • Sorunome thought this would be easy
  • Lots of small fixes across the board.

Dept of Servers 🏢

Synapse

Here's Neil:

With 1.0 shipped we are now starting to take a closer look at Synapse performance more generally and this will be a theme for us over the coming months. We want to improve not only large scale deployments such as Matrix.org but also optimise for smaller instances.

You may have seen a few trial servers run by core team members in matrix.org community rooms popping up and this is a precursor for a broader effort to make synapse more manageable on less powerful infrastructure. My own instance has been sat at a pretty steady 256MB of RAM.

Other than that, based on 1.0 feedback, we have been working on improving the Synapse upgrade path and expect to put out a new release next week containing the tweaks. Specifically this means improving configuration for Docker installs, and configuration management for sending emails.

We’re also implementing open tracing into Synapse, initially to help with e2ee debugging, but it will make tracking down strange behaviour easier more generally.

Finally we’re bringing our push server Sygnal kicking and screaming into 2019 and will upgrade to Python 3, drop gevent for twisted and update our vendor specific libraries, not mention improving the monitoring and alerting. We’ll also add in open tracing which will help hunt down push failures.

Finally finally, look out for a DAG visualisation tool written by GSOCer Eisha referenced elsewhere in TWIM - we consider this to be seriously cool, and can’t wait to start using it in anger.

Note: 1.0 is the last release to support python 2 and postgres 9.4, the next Synapse release will drop support for both, see https://matrix.org/blog/2019/04/08/synapse-deprecating-postgres-9-4-and-python-2-x for more.

Dendrite

Dendrite received a few updates this week. Notably:

  • Cnly has been implementing typing notifications support in #718
  • anoa has been fixing up the flaky sytests in #631. The team is considering moving from CircleCI to BuildKite for tests in the future.
  • Cnly has added a few issues for odd bits and bobs they’ve found around the codebase. This is much appreciated!

Construct

  • We now support building with Clang, and also GCC-9
  • Work on version 3/4/5 rooms has been underway.

Ruma

This Week in Ruma: https://www.ruma.io/news/this-week-in-ruma-2019-06-23/

This week was spent working on a big revamp of ruma-events, the library that defines Rust types for the "events" used in Matrix.
After some discussion in #ruma:matrix.org, I decided to make a move towards treating ruma-events as a higher-level library. Previously, ruma-events has more or less offered Rust types that are exact representations of the JSON structures used by Matrix. However, by representing events this way, it would be possible for users to easily create values that, while valid JSON, would be invalid events according to the specification.
The way we're approaching this problem is by separating serialization/deserialization of JSON from validation of events.

Jeon/JeonServer

ma1uta:

Jeon 0.9.0 release. It is a release candidate for Jeon 1.0.0 which complies with the Matrix stable release 1.0.
Not a lot changes, just added missing endpoints and events.
Also I started to work on JeonServer, a Matrix server written on java.

Jeon is a set of Java interfaces to Matrix APIs, JeonServer is a proposed homeserver.

matrix-media-repo

TravisR:

matrix-media-repo has received some speed improvements and is generally nicer to memory when using the s3 datastore. Give it a try and leave feedback in #media-repo:t2bot.io.

GSOC project: Matrix Visualisations 🎓

Eisha appeared with this terrific GSOC update:

The GSoC project “Matrix Visualisations” has made good progress during this first period:

  • The implementation of the CS API backend has been completed to properly retrieve events from a room in real time.
  • Many features have been added to the UI, here are some of them:
    • The DAG is displayed vertically, every node of the same “depth” are on the same level in the graph and each node has outgoing arcs for each of its previous events (if they have already been retrieved).
    • The node at the top of the DAG allows to fetch earlier events by selecting it.
    • Each node can have two different colors whether its “origin” is the HS the application is currently talking to or not.
    • The full JSON body of an event can be displayed by double clicking on its node.
    • It is possible to select which fields of the events will be directly included in the labels of the nodes.
  • A (server-side) backend has been implemented so that the application can directly talk to the PostgreSQL database of Synapse. You can find it on this repo.

Note that the support of the Federation API has been postponed so I could work on this Synapse database backend. The UI of the application isn’t very beautiful or well-organised yet, as the effort is focused on the backends and core functionalities for now, but improvements will be made once these functionalities will be completed.

Remember you can check TWIM from last week to get a reference on the other three GSOC projects.

Matrix Visualisations

Dept of SDKs and Frameworks 🏗

matrix-bot-sdk

TravisR:

matrix-bot-sdk v0.4.0-beta.1 has been published with a bunch of improvements for appservices. There's still more planned before the final v0.4.0 release, however live testing is always better than unit tests. If you use the library, try npm install [email protected] and report any issues to #matrix-bot-sdk:t2bot.io.

libQuotient, now with EncryptionManager

libQuotient introduces EncryptionManager, check out the PR for more info, and also review aa13q's GSOC update from last week.

Ruby SDK

Ananace:

Just cut a 1.2.0 release of the Ruby SDK, including fixes for timeout handling, some general code cleanup and documentation work, and a collection of getters and setters for most of the specced room state types

Dept of Bridges 🌉

freenode IRC bridge restarted

The freenode IRC bridge was restarted with the following fixes:

  • Some characters in IRC usernames (such as “|”) would cause IRC user’s messages to not appear on the Matrix side.
  • Room upgrades are now handled a bit more cleanly

mx-puppet-bridge platform

Sorunome has been working on her all-new bridge platform, mx-puppet-bridge:

This week soru has been working more on mx-puppet-bridge, together with mx-puppet-slack and the now-new mx-puppet-tox.

mx-puppet-bridge

This is work on the underlying bridge, protocol implementations still have to do their thing

  • room name, icon and topic (was already implemented but untested)
  • ghost name and icon (was already implemented, but untested)
  • file sending in both directions (image, audio, video, file, autodetect) (was already implemented, but untested)
  • have own ghosts create rooms --> appservice bot is not needed, more invisible bridging (especially nice for 1:1 rooms!)
  • implemented 1:1 room bridging
  • implemented provisioning interface via appservice bot
  • remote -> matrix presence handling
  • remote -> matrix typing notifications
  • matrix -> remote puppet name tracking
  • matrix -> remote puppet avatar tracking
  • mx-puppet-bridge uses caching for better performance
  • Added linting

mx-puppet-slack

Lots of work here, smoothening things out

  • room name, icon and topic bridging
  • ghost name and icon bridging
  • file sending in both directions
  • presence and typing notifs

mx-puppet-tox

This is a new one! It bridges tox over to matrix...or, well, more acts like a client (as tox doesn't have multidevice). Basic chatting was already functioning with only around 300 lines of code! The node toxcore bindings seem to only include support for 1:1 chats (and not the new group chats), so only that is implemented.

  • ghost name and icon bridging
  • file senidng in both directions
  • presence and typing notifs
  • matrix -> tox name and avatar syncing

There is already substantial documentation available, and a Matrix room at #mx-puppet-bridge:sorunome.de.

Dept of Clients 📱

RiotX (Android)

  • We are finalizing the MVP of RiotX. Many new features, along with many bug fixes this week:
    • Notifications for version with or without Firebase Cloud Messaging
    • Reply in e2e rooms
    • Change of DI tool (We are now using dagger2)
    • New settings, split into categories
    • New set of Emojis for quick reactions
    • New application icon
    • And many other little features
    • New disclaimer screen, displayed at first startup
    • New suggestion screen (based on bug report screen)
    • Min SDK version has been set to API 19 (Kitkat), mainly for security reasons, but also because we are using MotionLayout which is available only on API 18+.
  • Remaining work to do before we can release the first beta version on the PlayStore:
    • Encrypt/Decrypt attachment in e2e rooms
    • Last event display in the room list
    • Test, test, test, and fix, fix, fix :)

Integration of Matrix into Delphus

Pneumaticat:

Our company, Scintillating, has integrated Riot as an end-to-end encrypted chat, video, and voice call provider for our decentralized scientific study management system Delphus. We have created a method of linking Matrix IDs with Ethereum addresses to allow scientific researchers to look up participants and create chat rooms to talk with individuals in a privacy-preserving manner.

Spectral

We didn't get a Spectral update for a few weeks! Black Hat reported:

Quite a few changes in Spectral in the past few weeks. The room list filter is improved, and it only shows rooms with unread notifications by default. User can optionally hide join/leave events. Empty avatar in direct chats is fixed. Each user now has a unique message bubble background color in the timeline.

Pattle: version 0.8.0

Wilko, chief Pattler:

A new version of Pattle has been pushed to F-droid!

Although this isn't the biggest release, it's still a big step: the first release of iOS will be available! The build is currently still in review by Apple.

You can download the iOS app via TestFlight soon, join #app:pattle.im to get the link immediately when it's available!

Other changes

  • Add .well-known support!
  • Automatically update homeserver property in 'Advanced' while typing username
  • Fix messages being wrongly grouped by sender
  • Fix direct chats staying marked as direct when someone else joins

Install this release

F-Droid:

  1. Add the following repo in F-droid:
    https://fdroid.pattle.im/?fingerprint=E91F63CA6AE04F8E7EA53E52242EAF8779559209B8A342F152F9E7265E3EA729
  2. Install 'Pattle'

APK: Download from the assets of this release

Issues

If you stumble upon any issues, please report them! You can login via GitHub and Gitlab.com, so it's really easy to do!

Follow Pattle

Follow development in #app:pattle.im!

Support me

If you would like to support me, you can now do so via Liberapay and Patreon.

I've invested a lot of money in making Pattle happen on iOS: MacBook, Apple Developer Program, and an iPhone. Pretty costly, so any donations will be greatly appreciated!

continuum updates placeholder avatars

yuforia:

continuum tweaked the appearance of placeholder avatars. To make most users appear visually distinct, continuum has always used colors based on checksums and usernames to generate placeholders if any user doesn't have an image as avatar. In previous versions, it always used two characters of the name. In the new version, if the username contains ideographic (usually east-asian) characters, a single character would be used. The reason is that the number of ideographic characters is vast and duplicates are less common, and most of them are close to a square or circle in shape so a single one would fit the GUI component better.

FluffyChat edges closer to E2E

Krille:

Last weekend hummlbach (from the UBports community) visited me and we worked 18 hours on implementing end2end encryption. We are now able to send encrypted messages. Key sharing and decrypting will follow.

Not available in the released version yet, but join #fluffychat:matrix.org for more info. Also: 18 hours! Woah.

Quaternion

Quaternion received several updates recently, check out #quaternion:matrix.org for more info.

Fractal released 4.1 dev version

Alexandre Franke:

Fractal released a 4.1 development version, which was added to the beta channel of flathub. danigm is eager to get 4.2 out soon and is trying to fix the last few bugs we want to see gone before then. He already opened a few merge requests.

riot-web

  • Updated the reactions UX with a new tooltip-style interaction
  • Added edit history dialogue and other small editing tweaks
  • Riot Desktop config options (such as default HS, theme, etc.) can now be overridden for easy customisation

riot-iOS

  • New reactions in the event contextual menu
  • Edits in e2e rooms
  • Still refining reactions and edits

matrix-enact, read-only client which performs the contents of rooms with Web Audio API

Some time ago I made a toy: https://play.matrix.org/matrix-enact/

This is a read-only Matrix client, which takes the contents of a public room and "enacts" it, that is, it performs it using the Web Audio API in your browser

The original intention was to be a demonstration of what can be done with /context endpoint, but the project scope expanded a little. Hopefully people find it fun!

Get the source code here: https://github.com/benparsons/matrix-enact

Dept of Ops 🛠

matrix-docker-ansible-deploy

Slavi and his many helpers have been working on matrix-docker-ansible-deploy:

matrix-docker-ansible-deploy has seen a lot of work on bridging lately.
All currently existing bridges (Discord, Facebook, IRC, Telegram, Whatsapp) have been redone in a way that makes their configuration completely playbook-managed, as well as extensible.
Besides this, with Synapse v1.0 already out, we've taken the opportunity to simplify the installation instructions a bit.
If you haven't upgraded recently, now would be a great time. As always, be sure to take a look at the CHANGELOG before doing so.

Update from the Matrix on Debian team

https://matrix-team.pages.debian.net/blogue/2019/06/26/june-2019-matrix-on-debian-update/

This is an update on the state of Matrix-related software in Debian

Dept of Identity 🛂

mxisd forked

Following the announcement that mxisd would not longer be worked on, ma1uta has stepped up to provide support:

I forked mxisd (https://github.com/ma1uta/mxisd) and will provide support this project. You can ask about help in a new room #ma1sd:ru-matrix.org
A new temporary name will be ma1sd (thanks Dandellion ).
Due to changing maintainers I start to prepare the new 2.0.0 release and should audit code and dependencies.
Also I forked matrix-synapse-rest-password-provider (https://github.com/ma1uta/matrix-synapse-rest-password-provider) because it often uses with mxisd. Docker image, ansible support, debian, nixos and archlinux packages are temporary unavailable due to code auditing and changing maintainers.

Cos created an article detailing how to link existing unix accounts with accounts on a Synapse homeserver.

Dept of Bots 🤖

poll-bot

Brendan:

I made a Matrix bot that uses reactions to do polls! The code is available at https://github.com/babolivier/matrix-poll-bot (with a screenshot of how it works) and you can invite @poll-bot:abolivier.bzh in your room if you want to try it out 🙂

Bot works by taking a list of emoji + responses from a user, then makes a new message event with those emojis each voted for once. In this way, you can quickly make a reaction-based poll.

reactbot, a maubot

tulir, never enough maubots:

The reactbot I announced last week has been updated to support arbitrary response content instead of just reactions. As examples, the repo now has a stallman interjection bot (ported from this and a replacement for jesaribot. Reactions as responses are still supported and the repo still has the TWIM cookie bot example too.

Final thoughts 💭

Ananace has been looking again at a release tracker they'd previously been working on.

kernel.org have set up an ActivityPub instance (see https://people.kernel.org/about.) Not strictly Matrix but interesting that they decided to move to a federated platform.

First GSOC evaluation submissions were due this week, all four Matrix projects are proceeding well. See Eisha's update above, and the other three last week.

red_sky, nheko maintainer, was seen to say: "I know there hasn't been much activity from me lately. I was on vacation last week. I'll be getting back to work on 0.7.0 today"

The Europas awards ceremony was held at a venue next to my old flat. Small world! Small flat too.

That's all I know 🏁

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