This Week in Ruma

by Jimmy Cuadra

Ruma is a Matrix homeserver, client, and supporting libraries written in the Rust programming language. Matrix is an open specification for an online communication protocol. For an overview of the project, visit the home page. This Week in Ruma is a weekly summary of the development of Ruma, published on Sunday nights.

From the editor

I forgot to provide an update last week, so this week we've got two weeks of stuff to cover. The revamp of ruma-events I mentioned several times previously was released as 0.13.0, followed shortly by an update to 0.14.0 to bump the url crate (which is a re-exported dependency) to version 2.0. When trying to integrate the new ruma-events into ruma-client-api, Jonas quickly discovered that it wasn't actually possible, because API requests/responses that contain events need to be deserialized, and can't because the events don't have a public implementation of serde::Deserialize anymore. I felt like an idiot for not foreseeing this seemingly obvious problem, but that's the way it goes sometimes. I'll be working on addressing this next week.

A new version of ruma-api, 0.10.0, was released this week. This release contains two significant changes: The first is that the Endpoint trait has been revised to be implemented in terms of the endpoint's request type, rather than having the request be specified via an associated type. This creates a more straightforward mapping between request and response types for each endpoint, removes a bunch of unnecessary unit structs that were only used to link associated request and response types together, and lets us remove some use of the turbofish operator in ruma-client. The second change in this release is that ruma-api-macros has been merged into the repo, and now exists in a Cargo workspace. The ruma_api procedural macro is now included and re-export from ruma-api itself under a default feature. The macro has also been updated to refer to its dependencies via a hidden module in ruma-api. The result is that downstream crates like ruma-client-api no longer have to specify dependnecies on all the crates referenced by the code generated by the macro.

Another exiciting update: This past week, both Jonas and I started live streaming our development on Twitch. I made a separate post on my own blog about this, but the short version is that I intend to live stream most of my work on Ruma from now on to help people learn about both Rust and Matrix. You can find my live streams on my Twitch channel, and you can watch the recordings of past streams on my YouTube channel. I'll announce my streams in #ruma:matrix.org as well as on my Twitter feed. Jonas's live streams can be watched on his Twitch channel.

In the last update, I mentioned that Ruma finally accepts donations via Liberapay. Thank you very much to the people who have already signed on to donate to the project! I thought it wouldn't hurt to mention again in case anyone missed it. :}

The source code and content of this website are free and available under the MIT license: www.ruma.io