We are happy to launch The Matrix Conference on Oct 15-18 in Strasbourg, France. Learn more about it, or submit a proposal!

We are holding our Governing Board elections. Find all the information on the elections page.

Bridging Matrix with WhatsApp running on a VM

2019-02-26 โ€” Tutorials โ€” Ben Parsons

This guide will live with the documentation at https://matrix.org/docs/guides/whatsapp-bridging-mautrix-whatsapp, but you can find the text below.


Matrix is:

an open standard for interoperable, decentralised, real-time communication.

In this article we'll benefit from all three of these attributes:

  • interoperable: we'll see how Matrix can be made to interact with WhatsApp
  • decentralised: you can perform this on your own server while still enjoying the benefits of being connected to the rest of the Matrix federation
  • real-time communication: we'll see how to send and receive messages in real-time

๐Ÿ”—Install your homeserver and install mautrix-whatsapp, the WhatsApp bridge

Firstly, you need to have a Matrix homeserver installed. If you don't currently have one, take a look at the instructions at Installing Synapse, and also in the Synapse README.

Next, install mautrix-whatsapp by following the instructions at mautrix-whatsapp/wiki.

If you are starting from scratch, I suggest you take a look at matrix-docker-ansible-deploy, as this project will enable you to deploy Synapse, mautrix-whatsapp and other components easily.

For example, if you have an existing deployment using matrix-docker-ansible-deploy, you can add mautrix-whatsapp simply by adding the following line to your configuration file:

matrix_mautrix_whatsapp_enabled: true

... and re-running the setup:

ansible-playbook -i inventory/hosts setup.yml --tags=setup-all

Either way, you will soon have a functioning Matrix Synapse homeserver and mautrix-whatsapp installed with it. Next, we will set up an Android VM.

๐Ÿ”—Set up an Android VM

The best way to run an Android Virtual Machine is to use the Android Studio tools from Google. First, install Android Studio, making sure to follow the post-install steps, as they will install additional tools we need, including AVD Manager.

Once installed, run AVD manager by choosing Tools -> AVD Manager from the menu.

Follow the steps to create a new virtual machine, in this example I have a Nexus 5X running Android 9, but almost any configuration is fine here. Make sure that you give the device access to the Play Store.

๐Ÿ”—Install WhatsApp and sign-in

Launch the Virtual Device, the open the Play Store and sign in. Now use the Play Store to install WhatsApp on the Virtual Device.

You will be asked to verify your phone number, use your number on another device to complete this step.

๐Ÿ”—Setup mautrix-whatsapp bridge

Now that you have WhatsApp working in a VM, and Matrix working on your server, it's time to bridge them together!

Per the instructions at mautrix-whatsapp/wiki, you must start a new chat with @whatsappbot:<yourdomain>. Type login to begin the authentication process.

mautrix-whatsapp operates by using the WhatsApp Web feature of WhatsApp - which means it uses a QR code that you must now scan on the device running WhatsApp - which in your case is the AVD. In order to scan the presented QR code, set your AVD camera to passthrough the camera device on your host machine - see the images below.

Once this is complete, you can type sync, to start bridging contacts, and sync --create to automatically create room invites.

And that's it! You may need to take a little time to watch the sync happen, particularly if you have a very large number of chats on the WhatsApp side, but there is no further configuration needed.

๐Ÿ”—Demo!

This Week in Matrix 2019-02-22

2019-02-22 โ€” This Week in Matrix โ€” Ben Parsons

๐Ÿ”—Matrix Live S03E15 - Push To Talk and XMPP Gatewaying!

(sorry that the audio from Nad & Half-Shot went missing from the recording... :( )

๐Ÿ”—nheko_reborn roadmap

red_sky has continued to work on nheko, and shared a general roadmap in #nheko-reborn:matrix.org:

The remainder of 0.6.x is expected to be bug fixes. This includes bug fixes in mtxclient as well as nheko.
0.7.0 will be the next feature release. The end goal here is to add some of the capabilities that people have been requesting, and other things that people haven't been requesting.
AFTER 0.7.0 releases, I will then focus on updating the encryption to include more than just text messages.

๐Ÿ”—libQMatrixClient project, Quaternion

kitsune has been writing the codes this week, Quaternion now supports room upgrades and more:

Master branch of Quaternion can now store access token in your secure storage/keychain, better integrating into frameworks of GNOME and KDE, as well as macOS and Windows.
Also, you can see the room version and upgrade rooms in Quaternion (just like Matthew said on FOSDEM ;) ) - this feature is enabled by libQMatrixClient, so other clients are welcome to support room versions/upgrades too!

All this is within the work on the upcoming release of libQMatrixClient 0.5 and Quaternion 0.0.9.4 - stay tuned!

Oh we will. Spectral support for these new features when?

๐Ÿ”—Matrix Ruby SDK

Ananace has continued his work on Ruby Matrix SDK:

Just tagged and pushed a new version (0.0.4) of the Ruby SDK, since I've completely forgotten to do that for a while now.

What's new?

A whole bunch of small stuff I did, mostly just additional exposed methods and parameters, and some fixed issues as well. I did add support for HS URL discovery using both SRV and .well-known though, which I think is probably the largest new feature.

As if all this wasn't enough, a room on Matrix!

Created a discussion room for the Ruby SDK - since it seems like there are now people who have actually used it apart from me; #ruby-matrix-sdk:kittenface.studio

๐Ÿ”—synapse-netcore-workers

A project rarely seen has received a lot of attention this week!

Half-Shot has been working on federation workers:

I've been working on a federation worker for synapse written in .NET to improve outgoing federation performance. It's still pretty barebones, but progress can be followed at https://github.com/turt2live/synapse-netcore-workers/pull/5

TravisR too has been working on the project:

I'm also working on my own netcore workers project by setting up an appservice sender. It's also very barebones (doesn't even send a transaction), but is being tracked here: https://github.com/turt2live/synapse-netcore-workers/pull/6
Also, if you'd like to follow along with the project from the comfort of Matrix, head on over to #synapse-netcore-workers:t2bot.io

๐Ÿ”—koma project

yuforia is working on koma:

Fix txnId generation that made sending messages unreliable. Work around a bug in OkHttp that crashed the dispatcher thread when the server certificate was not received in time.

Good thing to fix! Here's a screenshot of Continuum-desktop, the client from koma:

yuforia continues:

Fix text processing in the bot avecho, feel free to try it out in #koma-im:matrix.org

๐Ÿ”—mxisd v1.3.1 released

Max:

mxisd v1.3.1 is out. It is a maintenance release that fixes a set of regressions following the changes in v1.3.0 to massively improve performance. If you haven't updated to the v1.3 branch, now is the time!

๐Ÿ”—Construct progresses toward Matrix 1.0 Spec

Over the past three weeks Construct has made rapid progress with covering the Matrix 1.0 specification!
Last week we implemented room version 1 and room version 2 authentication rules.
This week we implemented device support and management, and have nearly wrapped up successful End-To-End Encryption testing.
The Construct is a community-driven server implementation written in C++ for maximum performance. To all experienced C++ developers out there: we need your contributions to accelerate and test the 1.0 release!
Please check out https://github.com/matrix-construct/construct and stop by #test:zemos.net / #zemos-test:matrix.org today!

๐Ÿ”—uMatriks planning

mariogrip announced his plans for going ahead with uMatriks:

  • Clean up c++ code
  • Make the c++ code less heavy, we should focus on speed
  • Offload js code to direct qml binding, with this i mean instead of having ablock if-else code that modifies qml object that runs on component load, we do this directly in qml: see 0a800fc and https://github.com/uMatriks/uMatriksblob/0a800fcdc0af4fa2e08526dbff88e06bcb591779/uMatriks/componentsChatItem.qml as an example for a cleaner code
  • Make all ui depended calls async, we should NEVER block ui
  • Offload heavy js logic to c++
  • Cleaner UI, with less crust
  • Async everything
  • Merge our WIP call support
  • Finish impl of call support (maybe move to a standalone webrtc module)
  • Slowly start moving to QQC2
  • Implement reply
  • Implement sending of media

๐Ÿ”—Riot Android

  • Finalising version and delivery of Riot 0.8.23 on the Play Store.
  • RiotX: testing library to render events in the timeline.

๐Ÿ”—Debian packaging

andrewsh:

Since Debian has entered soft freeze, updates to Synapse have been slow lately, but nevertheless we've got 0.99.1.1 in

๐Ÿ”—matrix-archive-keyring

Linda is continuing to prepare matrix-archive-keyring:

matrix-archive-keyring (from last week's TWIM) is ready to be uploaded to Debian. Attempting to get it uploaded to unstable right now as I speak.

๐Ÿ”—Riot breadcrumbs

We linked to the announcement last week, and have been using it for even longer, but somehow I missed a great labs feature that shipped with Riot 1.0: "room breadcrumbs", which you can enable from the Labs page of Riot settings. This gives you a series of quick links with the history of rooms you were most recently in. So if you're like me, clicking between rooms all day, you can get where you're going a little faster.

๐Ÿ”—mautrix-whatsapp

There is no big news about mautrix-whatsapp this week, other than that I installed it on my own server and found that it works really really well. I'd love to switch to this as a main interface for my less-decentralised friends, but like others, I've been stung by this issue in an upstream project. If there are go-fans reading (and I know there are), I wonder if it's an issue which can be fixed?

๐Ÿ”—Around the Web

A tidy little article on "non-centralised" applications. Article by Jontheniceguy helps pin down some of the terminology around decentralisation and the like. https://jon.sprig.gs/blog/post/1041

joenas wrote an article on configuring Synapse with Traefik: Matrix homeserver (Synapse v0.99.1.1) with Traefik

๐Ÿ”—That's it

All good things must come to an end - and here we are!

Matrix is getting a lot of attention recently (has it been on the front page of HN every day this week? I remember that I used to be excited seeing that happen), and seeing a lot of growth as well.

If you have something to say here, something to add, come chat to us in #twim:matrix.org - I love that this is a supportive and engaged project ecosystem, so come share what you have!

Welcome to Matrix, KDE!

2019-02-20 โ€” General โ€” Matthew Hodgson

Hi all,

We're very excited to officially welcome the KDE Community on to Matrix as they announce that KDE Community is officially adopting Matrix as a chat platform, and kde.org now has an official Matrix homeserver!

You can see the full announcement and explanation over atย https://dot.kde.org/2019/02/20/kde-adding-matrix-its-im-framework.ย  It is fantastic to see one of the largest Free Software communities out there proactively adopting Matrix as an open protocol, open network and FOSS project, rather than drifting into a proprietary centralised chat system.ย  It's also really fun to see Riot 1.0 finally holding its own as a chat app against the proprietary alternatives!

This doesn't change the KDE rooms which exist in Matrix today or indeed the KDE Freenode IRC channels - so many of the KDE community were already using Matrix, all the rooms already exist and are already bridged to the right places.ย  All it means is that there's now a shiny new homeserver (powered by Modular.im) on which KDE folk are welcome to grab an account if they want, rather than sharing the rather overloaded public matrix.org homeserver.ย  The rooms have been set up on the server to match their equivalent IRC channels - for instance, #kde:kde.org is the same as #kde on Freenode; #kde-devel:kde.org is the same as #kde-devel etc.ย  The rooms continue to retain their other aliases (#kde:matrix.org, #freenode_#kde:matrix.org etc) as before.

There's also a dedicated Riot/Web install up at https://webchat.kde.org, and instructions on connecting via other Matrix clients up atย https://community.kde.org/Matrix.

This is great news for the Matrix ecosystem in general - and should be particularly welcome for Qt client projects like Quaternion, Spectral and Nheko-Reborn, who may feel a certain affinity to KDE!

So: welcome, KDE!ย  Hope you have a great time, and please let us know how you get on, so we can make sure Matrix kicks ass for you :)

  • the Matrix Core Team

This Week in Matrix 2019-02-15

2019-02-16 โ€” This Week in Matrix โ€” Ben Parsons

๐Ÿ”—Matrix Live, Synapse roadmap and Synapse 0.99.1.1

As you may have seen, Matrix Live this week features Neil and Matthew discussing the newly announced backend roadmap.

We also have Synapse v0.99.1.1 available, as the race to Synapse v1.0 gets closer and closer and closer!

Brendan also said, regarding low-bandwidth:

Some of the week has been spent finalising the components used in the low-bandwidth demo we did at FOSDEM. This required polishing some internal developments, which are now almost ready to be published to the wide world! This should happen in the next few days so stay tuned :)

๐Ÿ”—Riot 1.0.0, and hotfix 1.0.1

If you're following Matrix much at all, you will surely have seen it by now: Riot, the most popular client, has announced the v1.0 milestone. I won't reiterate the features and improvements here, but do check out the blog post, or just head over to https://riot.im/app and see for yourself!

Particularly exciting is the new encryption verification process, involving sharing a list of emojis out-of-band:

thank you @matrixdotorg @RiotChat - with the new update the office is full of people yelling names of emoji at each other

โ€” Russell Currey (@russelldotcc) February 15, 2019

๐Ÿ”—MSCs update provided by MSCBot

๐Ÿ”—In Progress MSCs

Work has continued on trying to resolve MSC1194.

๐Ÿ”—Riot iOS

  • Last iteration on key backup UX
  • Finish reskin
  • Support Room v3 events ids
  • Key import (manual or backup restore) has been optimised. It is now 30x > quicker
  • An RC candidate will be available over the weekend

Scheduling, holidaying and illness means no update from Riot Android this week.

๐Ÿ”—Artificial Intelligence Chat Bot tutorial

I like this short series on creating a Chat Bot using textgenrnn:

๐Ÿ”—New(ish!) Python SDK: matrix-nio

Since we haven't featured their work here at all I wanted to give some space to poljar. They've been working on a Weechat-Matrix protocol script, but as part of this project they created a new Matrix client library, matrix-nio, "designed according to sans I/O principles".

As if this wasn't enough! python-olm is a library providing Python bindings for Olm (enabling E2E encryption for Matrix.)

๐Ÿ”—FluffyChat v11 preview

FluffyChat is a pure QML Matrix client, designed to be used on smartphones running Ubuntu Touch. Krille, the author is working on:

boring refactoring stuff :-( at the moment to prepare everything for e2e encryption work

. . .which seems to me not boring at all - we can expect, in the next few months, another Matrix Client with E2EE support, and on mobile!

In my role as editor of this particular blog post, I enjoy certain luxuries that others might envy. For example, today, I tried a new preview build of FluffyChat. This I installed on my barely-repaired OnePlus One running Ubuntu Touch 16.04.

๐Ÿ”—Fractal

Chris from Fractal:

Over the past week, Fractal has adapted its main view and room settings views for mobile phones, and implemented long-press for right-clicks on messages for touch devices. It's also received some changes in the backend to use the serde_derive Rust crate instead of parsing JSON by hand.

๐Ÿ”—matrix-tag-manager

To celebrate tags being available again in riot-web, TravisR has created matrix-tag-manager:

If you're a power user which uses room tagging to organize your rooms, I've made a web UI for you: https://tags.t2bot.io/

๐Ÿ”—mxisd v1.3.0 released

Max:

mxisd v1.3.0 is out! This release brings the massive performance improvements, bug fixes and enhancements. This release also marks the two years anniversary of the project. Thank you to all our users for your undying support!

๐Ÿ”—EdimCoder new room

krixano reports that:

I made a room for my ed-inspired modern line editor called EdimCoder. Come check it out at #edimcoder:amorgan.xyz!

๐Ÿ”—avecho

yuforia reports that:

a new bot avecho is created using the koma-library. It's a simple bot that echos text messages prefixed with avecho, but renders it into an image and include the sender's avatar.

๐Ÿ”—Half-Shot's .NET SDK

Half-Shot reports that:

More improvements to the .NET sdk, to make it stable in this 0.4.0 world. To that end, I've written a room archiver app (for moving "old" rooms into a archive tag without removing them) and a simple caching project for bridges https://github.com/Half-Shot/matrix-cache. Progress as always can be followed in #dotnet:half-shot.uk

๐Ÿ”—mautrix-telegram now at 0.5.0rc2

tulir has been working on the venerable Matrix<->Telegram bridge, mautrix-telegram:

mautrix-telegram got a bunch of changes and a release candidate.\nMain changes this week:

  • Added Matrix room upgrade handling
  • Fixed bugs
  • Added new admin commands and config options
  • Added new bugs to fix later
  • Stopped using the ORM part of SQLAlchemy

Get release notes for v0.5.0-rc1 and v0.5.0-rc2.

๐Ÿ”—QMatrixClient project: libQMatrixClient and Quaternion

kitsune finds time to work on QMatrixClient!

QMatrixClient project has been busy merging PRs from contributors (close to tray and middle-click in room list and user list, to mention a couple) and streamlining the translation process before the upcoming releases of libQMatrixClient 0.5 and Quaternion 0.0.9.4. At the same time the feature branch to support room versions and room upgrades is at an advanced stage; expect the features to land in master next week.

๐Ÿ”—matrix-archive-keyring

Linda has been working on new Debian package called matrix-archive-keyring:

I've paused porting Synapse to OpenBSD this week, while I attempt to both fix and revert some security issues caused by sudo apt-key add for Matrix.org and Riot.im packages for Debian-based GNU/Linux distribution users.
matrix-org/synapse PR #4609 was my first attempt to fix the problem, however I fell short this time in ease-of-use and my implementation had other issues. (Read: The repo-key.asc downloaded from Matrix.org Debian repository should go to /usr/share/keyrings, and must not be added by apt-key add or added to /etc/apt/trusted.gpg.d directly. I attempted the latter with my first PR; but that would've allowed the Matrix.org signing key to also be used to verify packages from Debian's main repositories. Yikes!)
As my second attempt, I'm now creating a new Debian package called matrix-archive-keyring. There's multiple things this package intends to do:

  • A post-install script to remove any previously added Matrix.org package signing keys from /etc/apt/trusted.gpg. (This is the file apt-key add most commonly uses, and the most commonly found bad advice on the Internet.)
  • Convert repo-key.asc to a de-armorized .gpg format, understood better by apt(8). (Essentially, gpg --dearmor.)
  • Install the converted .gpg key to /usr/share/keyrings.
  • Make sure apt(8) uses the newly added key for Matrix.org repository only?
  • Deliver any updates to repo-key.asc directly to you via apt upgrade. Your operating system might then also do it automatically for you if unattended-upgrades(8) is installed on your system. ?
  • Make sure everything goes away when this keyring package is uninstalled. No more sudo sh -c 'apt-key del C35EB17E1EAE708E6603A9B3AD0592FE47F0DF61; rm /etc/apt/sources.list.d/matrix-org.list to get rid of the repository.

I have one more interesting enhancement to disclose.
We can ask you with debconf if you want to install deb https://matrix.org/packages/debian $(lsb_release -cs) main to /etc/apt/sources.list.d/matrix-org.list while you're installing the new keyring with apt install matrix-archive-keyring.
You'll most likely notice the difference in install instructions, as a result of this package. Before and after:

# Before
sudo apt install -y lsb-release curl apt-transport-https
echo "deb https://matrix.org/packages/debian `lsb_release -cs` main" |
    sudo tee /etc/apt/sources.list.d/matrix-org.list
curl "https://matrix.org/packages/debian/repo-key.asc" |
    sudo apt-key add -
sudo apt update
sudo apt install matrix-synapse-py3
# After
sudo apt install matrix-archive-keyring
sudo sh -c 'apt update && apt install matrix-synapse-py3

If you are a Debian or Ubuntu user and Synapse homeserver operator using Matrix.org repositories, I'll be towncrying when this package becomes available as much as I can. All you should need to do then is apt install matrix-archive-keyring and it should patch the security holes in your operating system if you've formerly installed packages from Matrix.org or Riot.im! (The command may change a bit, because next Debian operating system release "Buster" has entered soft-freeze just today (2019-02-12) and not accepting new packages into that release.)
PS: I'm at #debian-matrix:matrix.org, please come talk to us if Debian packaging interests you!

For the eager early testers not afraid of building from source, matrix-archive-keyring version 2015.12.09+debian0.10 is available for early testing (attached).

# Something like this!
sudo apt install devscripts
tar -xfvJ matrix-archive-keyring_2015.12.09+debian0.10.tar.xz
cd matrix-archive-keyring_2015.12.09+debian0.10
debuild -us -uc
sudo dpkg -i dpkg -i ../matrix-archive-keyring_2015.12.09+debian0.10_all

Please follow Debian Bug#922155 for updates. Debian binary packages will be available later sometime this/next week from Debian's unstable distribution (contrib), if all goes well and there are no remaining Debian policy violations or serious bugs.

See also:

๐Ÿ”—Gridepo

Max again:

Gridepo, as a Matrix Homeserver, is gaining basic support for Matrix Client API. We have basic login, room creation, message sending and sync working! A little screen recording of the progress can be viewed here for live action with Riot. As a reminder, Gridepo is a clean rewrite of mxhsd.

This is not usable yet outside of a dev environment but we should have a first usable version with federation in a couple of weeks!

๐Ÿ”—Mention Bots page

We have a new location for listing bots: https://matrix.org/docs/projects/bots, message benpa with any you think should be included!

๐Ÿ”—That's all I know

That's all we have for now, but come join us in #twim:matrix.org to share your project and share the fun, and I'll see you back here next week.

Publishing the Backend Roadmap

2019-02-15 โ€” Tech โ€” Neil Johnson

Good people,

2019 is a big year for Matrix, in the next month we will have shipped:

  • Matrix spec 1.0 (including the first stable release of the Server to Server Spec)
  • Synapse 1.0
  • Riot 1.0
This is huge in itself, but is really only the beginning, and now we want to grow the ecosystem as quickly as possible. This means landing a mix of new features, enhancing existing ones, some big performance improvements as well as generally making life easier for our regular users, homeserver admins and community developers.

Today we are sharing the Matrix core team's backend roadmap. The idea is that this will make it easier for anyone to understand where the project is going, what we consider to be important, and why.

To see the roadmap in its full glory, take a look here.

๐Ÿ”—What is a roadmap and why is it valuable?

A roadmap is a set of high level projects that the team intend to work on and a rough sense of the relative priority. It is essential to focus on specific goals, which inevitably means consciously not working on other initiatives.

Our roadmap is not a delivery plan - there are explicitly no dates. The reason for this is that we know that other projects will emerge, developers will be needed to support other urgent initiatives, matrix.org use continues to grow exponentially and will require performance tweaking.

So simply, based on what we know now, this is the order we will work on our projects.

๐Ÿ”—Why are we sharing it?

We already share our day to day todo list, and of course our commit history, but it can be difficult for a casual observer to see the bigger picture from such granular data. The purpose of sharing is that we want anyone from the community to understand where our priorities lie.

We are often asked โ€˜Why are you not working on X, it is really important' where the answer is often โ€˜We agree that X is really important, but A, B and C are more important and must come first'.

The point of sharing the roadmap is to make that priority trade off more transparent and consumable.

๐Ÿ”—How did we build it?

The core contributors to Synapse and Dendrite are 6 people, of 5 nationalities spread across 3 locations. After shipping the r0 release of the Server to Server specย last month we took some time to step back and have a think about what to do after Synapse 1.0 lands. This meant getting everyone in one place to talk it through.

We also had Ben (benpa) contribute from a community perspective and took input from speaking to so many of you at FOSDEM.

In the end we filled a wall with post-its, each post-it representing a sizeable project. The position of the post-it was significant in that the vertical axis being a sense of how valuable we thought the task would be, and the horizontal axis being a rough guess on how complex we considered it to be.

We found this sort of grid approach to be really helpful in determining relative priority.

After many hours and plenty of blood, sweat and tears we ended up with something we could live with and wrote it up in the shared board.

๐Ÿ”—And this is written in blood right?

Not at all (it's written in board marker). This is simply a way to express our plan of action and we are likely to make changes to it dynamically. However, this means that at any given moment, if someone wants to know what we are working on then the roadmap is the place to go.

๐Ÿ”—But wait I want to know more!

Here is a video of myself and Matthew to talk you through the projects

๐Ÿ”—Interesting, but I have questions ...

Any feedback gratefully received, come and ask questions in #synapseย or #dendrite or feel free to ping me direct at @neilj:matrix.org

Synapse 0.99.1.1 Released!

2019-02-14 โ€” Releases โ€” Neil Johnson

Hey, everyone, today is the day we release Synapse 0.99.1.1

This release contains improved ACME support to make it even easier to get going with TLS certs on your federation end points, plus some tweaks to make the room version upgrade path easier.

Just as a reminder that the 0.99.x series is precursor for our 1.0 release (which will land in early March, exact date to be confirmed) - it is really important that all server admins are aware that self signed certificates on the Server to Server API will no longer be accepted by >= Synapse 1.0. If you have not already done so, now is the time to configure your certificate. For more info see our FAQย and if you get stuck come and join us in #Synapse.

As ever, you can get the new updateย hereย or any of the sources mentioned atย https://github.com/matrix-org/synapse. Note, Synapse is now available from PyPI, pick it upย here. Also, check out our newย Synapse installation guide page.

๐Ÿ”—Synapse 0.99.1.1 Changelog

๐Ÿ”—Bugfixes

  • Fix "TypeError: '>' not supported" when starting without an existing certificate. Fix a bug where an existing certificate would be reprovisoned every day. (#4648)

๐Ÿ”—Synapse 0.99.1 Changelog

๐Ÿ”—Features

  • Include m.room.encryption on invites by default (#3902)
  • Federation OpenID listener resource can now be activated even if federation is disabled (#4420)
  • Synapse's ACME support will now correctly reprovision a certificate that approaches its expiry while Synapse is running. (#4522)
  • Add ability to update backup versions (#4580)
  • Allow the "unavailable" presence status for /sync. This change makes Synapse compliant with r0.4.0 of the Client-Server specification. (#4592)
  • There is no longer any need to specifyย no_tls: it is inferred from the absence of TLS listeners (#4613,ย #4615,ย #4617,ย #4636)
  • The default configuration no longer requires TLS certificates. (#4614)

๐Ÿ”—Bugfixes

  • Copy over room federation ability on room upgrade. (#4530)
  • Fix noisy "twisted.internet.task.TaskStopped" errors in logs (#4546)
  • Synapse is now tolerant of theย tls_fingerprintsย option being None or not specified. (#4589)
  • Fix 'no unique or exclusion constraint' error (#4591)
  • Transfer Server ACLs on room upgrade. (#4608)
  • Fix failure to start when not TLS certificate was given even if TLS was disabled. (#4618)
  • Fix self-signed cert notice from generate-config. (#4625)
  • Fix performance ofย user_ipsย table deduplication background update (#4626,ย #4627)

๐Ÿ”—Internal Changes

  • Change the user directory state query to use a filtered call to the db instead of a generic one. (#4462)
  • Reject federation transactions if they include more than 50 PDUs or 100 EDUs. (#4513)
  • Reduce duplication ofย synapse.appย code. (#4567)
  • Fix docker upload job to push -py2 images. (#4576)
  • Add port configuration information to ACME instructions. (#4578)
  • Update MSC1711 FAQ to clarify .well-known usage (#4584)
  • Clean up default listener configuration (#4586)
  • Clarifications for reverse proxy docs (#4607)
  • Move ClientTLSOptionsFactory init out ofย refresh_certificatesย (#4611)
  • Fail cleanly if listener config lacks a 'port' (#4616)
  • Remove redundant entries from docker config (#4619)
  • README updates (#4621)

This Week in Matrix 2019-02-08

2019-02-08 โ€” This Week in Matrix โ€” Ben Parsons

Huge week! Let's go!

๐Ÿ”—Matrix Live: Riot Redesign Chat (2019-02-08 - Season 3, Episode 13)

Riot-web new version coming out so soon. So soon! It looks and runs great, you can use it today at https://riot.im/develop. Includes a labs flag for displaying custom tags, which I love. Watch the vid.

๐Ÿ”—FOSDEM 2019

FOSDEM happened.

  • two Matrix-themed packed-room talks
  • lots of people coming to chat at the stall to say things like "hi" or "I like Matrix" or "what is Matrix? โ€ฆ wow that sounds amazing, how can I get involved?"
  • 1000s of stickers decentralised out of my bag onto people's laptops
If you didn't yet, take a look at the summary blogpost, which also contains videos of both talks.

๐Ÿ”—Synapse 0.99.0

With the release of Server to Server Spec r0.1, Synapse 0.99.0 is shipping now.

Synapse 1.0.0 will be compliant with r0.1 and the goal of Synapse 0.99.0 is to act as a stepping stone to Synapse 1.0. Synapse 0.99.0 supports the r0.1 release of the server to server specification, but is compatible with both the legacy Matrix federation behaviour (pre-r0.1) as well as post-r0.1 behaviour, in order to allow for a smooth upgrade across the federation.
It is critical that all admins upgrade to 0.99.0 and configure a valid TLS certificate. Admins will have 1 month to do so, after which 1.0.0 will be released and those servers without a valid certificate will no longer be able to federate with >= 1.0.0 servers.

Please read the announcement post and be sure to come and chat in #synapse:matrix.org if you need help!

๐Ÿ”—GSOC 2019

Cadair has been helping admin this year's GSOC application:

Matrix.org has applied to be a GSOC (Google Summer of Code) mentoring organisation. If your matrix project has a feature a summer student could tackle and you have the time to mentor them over the summer, why not add a project idea to our website by submitting a PR to this repo. Feel free to ask questions in #gsoc:matrix.org as well.

๐Ÿ”—Latest MSCs

๐Ÿ”—Approved MSCs

๐Ÿ”—In Progress MSCs

๐Ÿ”—matrix-puppet-hangouts 0.1.0 released, with bidirectional image support

tom reports that:

matrix-puppet-hangouts version 0.1.0 has been released!
This release adds bidirectional (Hangouts -> Matrix and Matrix -> Hangouts) image support!
It also bumps the version of matrix-puppet-bridge (the common core of matrix-puppet-bridge bridges, which handles most of the stuff that's the same between different third-party service bridges, and makes implementing new matrix-puppet-bridge bridges easier) required to 1.16.2, the current latest, for recent bugfixes that improve all matrix-puppet-bridge bridges.
0.1.0 also requires Python 3.5+, for async. Older versions of python3 won't work. PRs getting python3 < 3.5 working again are welcome.

tom also gives credit to d3m3vilurr:

These changes are also brought to us by d3m3vilurr, Honored Hero of Matrix Puppet Bridge

Praise indeed!

๐Ÿ”—matrix-media-repo from TravisR now supports .well-known server delegation

TravisR reports that:

matrix-media-repo now supports .well-known server delegation (compatible with Synapse 0.99 and r0.1 of the server-server specification), among many other bug fixes and improvements. Actually validating the certificates presented by servers will be implemented alongside Synapse 1.0's requirement for it.

๐Ÿ”—Dimension from TravisR now supports .well-known server delegation

Similar to matrix-media-repo above, TravisR has been implementing .well-known server delegation in Dimension:

Dimension now supports .well-known server delegation (compatible with Synapse 0.99 and r0.1 of the server-server specification). Actually validating the certificates presented by servers will be implemented alongside Synapse 1.0's requirement for it.

๐Ÿ”—mxisd v1.3.0-rc.3

Max:

mxisd v1.3.0-rc.3 is out. This is hopefully the last RC before release, but we would like as much testing as possible! the v1.3 branch is a big enhancement on the previous release with big performance and privacy improvements. It's smaller, faster, stronger and protects you privacy even better than before! You know you want it!

๐Ÿ”—matrix-docker-ansible-deploy now supports Synapse v0.99

Slavi reports that:

matrix-docker-ansible-deploy now supports Synapse v0.99 and should be ready for Synapse v1.0.
If you're using the playbook to manage your Matrix server you should upgrade soon.
Depending on how you've customized your setup, you may not even have to do anything for the big Synapse v0.99/v1.0 transition, besides upgrading and re-running the playbook. A good place to start is the changelog entry: Synapse v0.99 support and preparation for Synapse v1.0

I have been using these playbooks to test my own homeserver deployment and am happy.

๐Ÿ”—Tchap Android client

Willem reports that:

After seeing a demo at FOSDEM of Tchap, the app the French government uses to access their Matrix network, I decided to try to get it to work as a general-purpose Matrix client. The app uses email and password to log in, and infers the homeserver address from the homeserver name. So to get it to work, I had to patch the app and write a little proxy so it gets the proper homeserver (and optionally identity server) from an email address.
A patched version of Tchap can be found at https://github.com/14mRh4X0r/tchap-android, code for the proxy at https://git.snt.utwente.nl/14mRh4X0r/tchap-proxy. At the moment it's very crude, and images/files don't work since the virus scan API is unimplemented, but at least it can be used outside the French government. ?

๐Ÿ”—Riot iOS

From the team:

  • Still iterating on key backup UX
  • Fix various share extension bugs (image sending failure, links share as text, etcโ€ฆ)

๐Ÿ”—Riot Android

  • Still iterating on the key backup UX, changes concern Riot and the Matrix SDK
  • Valere has worked on Riot Android Notifications, we intend to merge this work on develop at the beginning of the next Sprint.
  • RiotX: no update this week due to Franรงois being out of the office

๐Ÿ”—.NET SDK

Half-Shot, working on "not bridging":

I opened up the .NET SDK project for the first time in two years and revived it to just about work with a r0.4.0 home server. Its now based on .NET core 2.0.

Related .NET lovin'.

๐Ÿ”—Spectral, soon for KDE Plasma Mobile

Black Hat is clearing:

I'm porting Spectral to KDE Plasma Mobile with Kirigami framework. This provides full convergence and mobile support.

Some progress pictures below, desktop and mobile version.

๐Ÿ”—Preparing for Synapse on OpenBSD

Linda has been making progress on a project to get Synapse running on OpenBSD, and to that end has been preparing and improving the dependencies that we take for granted on Linux. To summarise the current status:

This week I've been porting Synapse's dependencies to OpenBSD -current distribution. There is no port yet for Synapse in OpenBSD. Ports missing from OpenBSD 6.4 for Synapse's dependencies were:

  • py-frozendict: ok'd, waitingโ€ฆ
  • py-unpaddedbase64: TBD
  • py-canonicaljson: TBD
  • py-signedjson: TBD
  • py-treq: WIP (this will take a while, lots of dependencies)
  • py-daemonize: ok'd, waitingโ€ฆ
  • py-pymacaroons: TBD
  • py-phonenumbers: 8.10.4 done, waiting to be importedโ€ฆ
  • py-prometheus_client done, needs to be tested/importedโ€ฆ
  • coturn: TBD, maybe?
waiting = usually waiting for an OpenBSD developer to "ok" and import

Of those, py-phonenumbers was added to OpenBSD
-snapshots (-current) distribution. py-phonenumbers (?) and py-service_identity received updates to ports. py-prometheus_client, py-daemonize and py-frozendict are ported ready and waiting to be given "ok" at OpenBSD's ports@ mailing list.
There is an unofficial up-to-date Synapse port exists at GitHub maintained by someone else, which I've not yet tested. (At glance, I can take a guess the devel/tz port may not be required.)
(coturn doesn't have a port yet, may have to look at it later.)

๐Ÿ”—c u l8r

Phew! That was a lot! See you next week, and if you have a project you'd like to see featured in This Week in Matrix, come chat to us in #twim:matrix.org!

Synapse 0.99.0

2019-02-05 โ€” Releases โ€” Neil Johnson

Hey hey, Synapse 0.99.0 is here!

You may have heard that we recently published the first stable release of the Server to Server Spec (r0.1). The spec makes some changes which are not compatible with the protocol of the past - particularly,ย self-signed certificates are no longer valid for homeservers.ย Synapse 1.0.0 will be compliant with r0.1 and the goal of Synapse 0.99.0 is to act as a stepping stone to Synapse 1.0. Synapse 0.99.0 supports the r0.1 release of the server to server specification, but is compatible with both the legacy Matrix federation behaviour (pre-r0.1) as well as post-r0.1 behaviour, in order to allow for a smooth upgrade across the federation.

It is critical that all admins upgrade to 0.99.0 and configure a valid TLS certificate. Admins will have 1 month to do so, after which 1.0.0 will be released and those servers without a valid certificate will no longer be able to federate with >= 1.0.0 servers.

First of all, please don't panic :) We have taken steps to make this process as simple as possible - specifically implementing ACME support to allow servers to automatically generate free Let's Encrypt certificates if you choose to. What's more, it is not necessary to add the certificate right away, you have at least a month to get set up.

For more details on exactly what you need to do (and also why this change is essential), we have provided an extensive FAQย as well as the Upgrade notes for Synapse

As ever, you can get the new updateย hereย or any of the sources mentioned atย https://github.com/matrix-org/synapse. Note, Synapse is now available from PyPI, pick it upย here. Also, check out our newย Synapse installation guide page.

This was a huge effort! Congratulations to all involved, especially those of you in the community who contributed to spec MSCs and tested our release candidates. Thank you for bearing with us as we move the whole public Matrix Federation onto r0.1 compliant servers.

Onwards!

๐Ÿ”—Changelog

Synapse v0.99.x is a precursor to the upcoming Synapse v1.0 release. It contains foundational changes to room architecture and the federation security model necessary to support the upcoming r0 release of the Server to Server API.

๐Ÿ”—Features

  • Synapse's cipher string has been updated to require ECDH key exchange. Configuring and generating dh_params is no longer required, and they will be ignored. (#4229)
  • Synapse can now automatically provision TLS certificates via ACME (the protocol used by CAs like Let's Encrypt). (#4384,ย #4492,ย #4525,ย #4572,ย #4564,ย #4566,ย #4547,ย #4557)
  • Implement MSC1708 (.well-known routing for server-server federation) (#4408,ย #4409,ย #4426,ย #4427,ย #4428,ย #4464,ย #4468,ย #4487,ย #4488,ย #4489,ย #4497,ย #4511,ย #4516,ย #4520,ย #4521,ย #4539,ย #4542,ย #4544)
  • Search now includes results from predecessor rooms after a room upgrade. (#4415)
  • Config option to disable requesting MSISDN on registration. (#4423)
  • Add a metric for tracking event stream position of the user directory. (#4445)
  • Support exposing server capabilities in CS API (MSC1753, MSC1804) (#4472,ย 81b7e7eed))
  • Add support for room version 3 (#4483,ย #4499,ย #4515,ย #4523,ย #4535)
  • Synapse will now reload TLS certificates from disk upon SIGHUP. (#4495,ย #4524)
  • The matrixdotorg/synapse Docker images now use Python 3 by default. (#4558)

๐Ÿ”—Bugfixes

  • Prevent users with access tokens predating the introduction of device IDs from creating spurious entries in the user_ips table. (#4369)
  • Fix typo in ALL_USER_TYPES definition to ensure type is a tuple (#4392)
  • Fix high CPU usage due to remote devicelist updates (#4397)
  • Fix potential bug where creating or joining a room could fail (#4404)
  • Fix bug when rejecting remote invites (#4405,ย #4527)
  • Fix incorrect logcontexts after a Deferred was cancelled (#4407)
  • Ensure encrypted room state is persisted across room upgrades. (#4411)
  • Copy over whether a room is a direct message and any associated room tags on room upgrade. (#4412)
  • Fix None guard in calling config.server.is_threepid_reserved (#4435)
  • Don't send IP addresses as SNI (#4452)
  • Fix UnboundLocalError in post_urlencoded_get_json (#4460)
  • Add a timeout to filtered room directory queries. (#4461)
  • Workaround for login error when using both LDAP and internal authentication. (#4486)
  • Fix a bug where setting a relative consent directory path would cause a crash. (#4512)

๐Ÿ”—Deprecations and Removals

  • Synapse no longer generates self-signed TLS certificates when generating a configuration file. (#4509)

๐Ÿ”—Improved Documentation

  • Update debian installation instructions (#4526)

๐Ÿ”—Internal Changes

  • Synapse will now take advantage of native UPSERT functionality in PostgreSQL 9.5+ and SQLite 3.24+. (#4306,ย #4459,ย #4466,ย #4471,ย #4477,ย #4505)
  • Update README to use the new virtualenv everywhere (#4342)
  • Add better logging for unexpected errors while sending transactions (#4368)
  • Apply a unique index to the user_ips table, preventing duplicates. (#4370,ย #4432,ย #4434)
  • Silence travis-ci build warnings by removing non-functional python3.6 (#4377)
  • Fix a comment in the generated config file (#4387)
  • Add ground work for implementing future federation API versions (#4390)
  • Update dependencies on msgpack and pymacaroons to use the up-to-date packages. (#4399)
  • Tweak codecov settings to make them less loud. (#4400)
  • Implement server support for MSC1794 - Federation v2 Invite API (#4402)
  • debian package: symlink to explicit python version (#4433)
  • Add infrastructure to support different event formats (#4437,ย #4447,ย #4448,ย #4470,ย #4481,ย #4482,ย #4493,ย #4494,ย #4496,ย #4510,ย #4514)
  • Generate the debian config during build (#4444)
  • Clarify documentation for theย public_baseurlย config param (#4458,ย #4498)
  • Fix quoting for allowed_local_3pids example config (#4476)
  • Remove deprecated --process-dependency-links option from UPGRADE.rst (#4485)
  • Make it possible to set the log level for tests via an environment variable (#4506)
  • Reduce the log level of linearizer lock acquirement to DEBUG. (#4507)
  • Fix code to comply with linting in PyFlakes 3.7.1. (#4519)
  • Add some debug for membership syncing issues (#4538)
  • Docker: only copy what we need to the build image (#4562)

Matrix at FOSDEM 2019

2019-02-04 โ€” Events, FOSDEM โ€” Matthew Hodgson

Hi all,

We just got back from braving the snow in Brussels atย FOSDEM 2019 - Europe's biggest Open Source conference. I think it's fair to say we had an amazing time, with more people than ever before wanting to hang out and talk Matrix and discuss their favourite features (and bugs)!

The big news is thatย we released r0.1 of Matrix's Server-Server APIย late on Friday night - our first ever formal stable release of Matrix's Federation API, having addressed the core of the issues which have kept Federation in beta thus far. We'll go into more detail on this in a dedicated blog post, but this marks the first ever time thatย all of Matrix's APIs have had an official stable release.ย  All that remains before we declare Matrix out of beta is to release updates of the CS API (0.5) and possibly the IS API (0.2) and then we can formally declare the overall combination as Matrix 1.0 :D

We spoke about SS API r0.1 at length in our main stage FOSDEM talkย on Saturday - as well as showing off the Riot Redesign, the E2E Encryption Endgame and giving an update on the French Government deployment of Matrix and the focus it's given us on finally shipping Matrix 1.0! For those who weren't there or missed the livestream, here's the talk!ย ย Slides are available here.

Full house for @ara4n talking about @matrixdotorg and the French State @fosdem It was a packed presentation full of lots exciting progress demos. So sorry for practically yanking you offstage in the end! pic.twitter.com/idshDcSRhv

— Rob Pickering (@RobinJPickering) February 2, 2019

Then, on Sunday we had the opportunity to have a quick 20 minute talk in the Real Time Comms dev room, where we gave a tour of some of the work we've been doing recently to scale Matrix down to working on incredibly low bandwidth networks (100bps or less).ย  It's literally the opposite of the Matrix 1.0 / France talk in that it's a quick deep dive into a very specific problem area in Matrix - so, if you've beenย looking forward to Matrix finally having a better transport than HTTPS+JSON, here goes!ย  Slides are available here.

Full house for @matrixdotorg ? #FOSDEM #RTCsevroom pic.twitter.com/dDQnD3mzmc

— Saรบl Ibarra Corretgรฉ (@saghul) February 3, 2019

Huge thanks to everyone who came to the talks, and everyone who came to the stand or grabbed us for a chat! FOSDEM is an amazing way to be reminded in person that folks care about Matrix, and we've come away feeling more determined than ever to make Matrix as great as possible and provide a protocol+network which will replace the increasingly threatened proprietary communication silos. :)

Next up: Matrix 1.0...

This Week in Matrix 2019-02-01

2019-02-01 โ€” This Week in Matrix โ€” Ben Parsons

๐Ÿ”—MSC (spec) updates

r0, the first stable release of the Server-Server (Federation) Specification is extremely close! We of course will make a big splash and let you know when this comes!

Even apart from that, let's take a look at the MSCs (Matrix Spec Changes) that are currently in progress.

๐Ÿ”—Approved MSCs

๐Ÿ”—Final Comment Period

๐Ÿ”—In Progress MSCs

๐Ÿ”—Synapse

Neil and the team have been working frantically on getting a new Synapse release out this week:

This week has been all about gearing up for v0.99.0 and if you would like to help us test it, our latest release candidate lives here
We've taken the decision to bump up to v0.99.0 because it is very much a precursor to v1.0. When v1.0 lands it will contain a breaking change that means all homeservers will need a valid certificate for their server to server endpoint, self signing will no longer be possible.
v0.99.0 contains support to help you do this, but once it lands all admins will need to upgrade, failure to do so will mean losing the ability to federate with > v1.0 servers.
We'll have detailed docs ready to go alongside the full v0.99.0 release, and we plan to leave at least 1 month between v0.99.0 and v1.0, but for now please be aware that the change is coming.
Huge thanks to Rich, Erik, Hawkowl and Anoa for all their work in getting us to rc stage.

๐Ÿ”—nheko_reborn

If you haven't already heard, then I envy that you get to learn about it now: there is a credible new project which forks nheko and seeks to maintain and continue the project.

Nheko-Reborn is a new project headed by red_sky, who told me:

I think I'm getting pretty close to having another release ready. Need to clean up some things here and there and get the CI packages uploading correctly
It'd be good to have more community engagement

Come chat about the project in #nheko-reborn:matrix.org.

๐Ÿ”—Riot iOS

  • New app icons
  • Most of e2ee keys backup screens are done. We are only missing the sign out warning which invited the user to back up their keys before logging out
  • A Beta release is on its way to TestFlight

๐Ÿ”—Riot Android

  • Finishing e2ee keys backup screen
  • Integrate new app icons, and splash
  • Release in Beta
  • Riotx: improvement in room list, read marker management

๐Ÿ”—journal

lukebarnard has continued work on journal, a matrix-backed blog engine:

I've posted another blog on journal about the next steps for the project, including my thoughts on verifying blog content.

https://journal.lukebarnard.co.uk/journal/26-jan-2019

I'm planning to start work on the component that will scrape blog content from a matrix room. This will most likely involve a dedicated bot that syncs new journal blog events, verifies the blog signature and then writes the blog content to a file on the blog server.

I'll probably ramble about the details of that at some point.

๐Ÿ”—matrix-docker-ansible-deploy

Slavi had two big updates for matrix-docker-ansible-deploy this week, improved security and IRC bridging:

matrix-docker-ansible-deploy now has much-improved security. All services now run in containers with a non-root user from the very beginning, without capabilities and with a read-only filesystem. To learn more, see the relevant changelog entry.
Thanks to a contribution by Devon Maloney (@Plailect), matrix-docker-ansible-deploy now has IRC bridging support via matrix-appservice-irc. To learn more, see the Setting up Appservice IRC documentation page.

๐Ÿ”—neo

f0x again, now with an update on neo:

Not too much work on Neo this week, but there's some smooth animations for the roomlist now video, with music, which is surprisingly complicated in css
https://git.lain.haus/f0x/iris

๐Ÿ”—libaqueous - Matrix SDK in Dart

Black Hat is working on a Matrix SDK in Dart:

libaqueous (the Matrix SDK in Dart) is progressing nicely. A reference implementation is also planned.
The repo is at https://gitlab.com/b0/libaqueous, and I also set up a room at #libaqueous:encom.eu.org

๐Ÿ”—ma1uta's Matrix projects: Jeon, JMSDK, matrix-jabber-java-bridge

ma1uta has been working on his ecosystem of Matrix tooling:

Not much changes in jeon, jmsdk and matrix-jabber-java-bridge (mjjb).

  • Jeon: improved mxid with a new validation, support of the 11 java. And preparing the new release.
  • Jmsdk: fixed few bugs.

๐Ÿ”—matrix-jabber-java-bridge

The bridge is being re-written. I excluded the jabber server (still need to setup SRV records) and implementing the xmpp s2s api in the bridge. Done:

  • rfc6120 in s2s part;
  • almost server dialback (XEP-0220);
Remaining:
  • MUC (XEP-0045);
  • stabilize.
New version will allow:
  • 1:1 conversations between matrix and jabber users;
  • group chats by double-puppet mapping rooms to conferences;
  • additionally xmpp users can join directly to rooms via double-puppet bots.
Also I started breaking the bridge to modules. And the next module will be ActivityPub S2S module which allows communicate matrix servers with other fedivers.

๐Ÿ”—mxisd

Max reports that:

mxisd v1.3.0-alpha.3 is out! This one works further towards protecting your privacy and we strongly recommend it if you already are using an alpha release. We have written our stance on privacy with how it affects mxisd here.

We also consider this release to be as stable as v1.2.2. Feel free to upgrade following the Upgrade notes and benefits from all the v1.3.0 work so far, especially the massive improvements on resources usage.

๐Ÿ”—Purism working on Fractal integration

update on @gnome @matrixdotorg client for #PureOS: "I am pleased to announce that over the next week I will be working to make Fractal's UI adaptive for the Librem 5's launch. This contract began last week, and I already have some results to show off." https://t.co/iX47u1Bdb1 pic.twitter.com/Hnr7ZVpYd1


โ€” Purism (@Puri_sm) January 30, 2019

Definitely take a look at the linked blog post for more.

๐Ÿ”—What else is there?

What there mainly is is FOSDEM. A lot of Matrix-folk are currently near me as I write this, sat in a hotel bar in sunny Brussels. Matrix live is not available today, but will incorporate some of the event, which kicks of tomorrow.

If you will be attending, comeย /join us at the Matrix table, where there will be stickers and t-shirts and merriment, and definitely come and attend the talks: