This Week in Ruma

Ruma is a collection of Matrix applications and 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

It's been several months since the last This Week in Ruma. There has been some work on Ruma during this time, but development has largely been on hiatus while we wait for the dust to settle on two things:

  1. Stabilization and release of hyper 0.11 (the tokio-based async rewrite).
  2. A new version of the Matrix specification that includes the many changes since the current version.

The former has been in the "nearly done" state for a while now, so we've been doing a bit of development against hyper's master branch. As far as I know, no significant API changes are expected at this point. The latter has been delayed significantly because the Matrix team has been up to their eyeballs in work on Riot, particularly in squashing issues with end-to-end encryption as they try to move it out of beta. While we would like a new spec to help in moving Ruma forward, the Matrix team has our full support on their current priorities, as fully working encryption for messages is simply way more important for the world right now.

A change in the Ruma project worth noting is that I've decided to end my policy of "no new unstable features," effectively deprioritizing moving Ruma's crates to stable Rust. The simple reaosn for this is that there are still unstable features that change what the ideal API for some of our crates would be. Having the best possible API should take priority over which version of Rust is required, especially with how easy it is to install Rust with rustup.

Personally, I've been more focused on the client-side libraries recently. The past week I've made a lot of progress on finalizing and implementing the API for ruma-api, ruma-client-api, and ruma-client. In the last update back in February, I mentioned working on a custom derive to make the implementation of Matrix APIs easier. That has evolved into a full Macros 2.0 procedural macro that offers a very succinct, declarative API that will make the client libraries much simpler. This work is still very much in progress, but having finally figured out an approach for this is a big milestone in having a usable Matrix client library for Rust. We're excited to see what Rust developers build with it when it's ready.

Notable changes to ruma

  • Added the /rooms/:room_id/kick API endpoint.
  • Added initial implementation for the room states in the /sync API endpoint.
  • Corrected the structure of authentication parameters in login requests.
  • Fixed the behavior of the next_batch token when there are no new events for the /sync API endpoint.
  • Added basic implementation for the pushers API endpoint.
  • Return empty JSON objects as the default response for Riot compatibility.

Notable changes to ruma-api

  • Revised the API into a simpler form that specifies conversions between hyper's types and its own.

Notable changes to ruma-identifiers

  • Published versions 0.10.0 and then 0.11.0 with small changes, most notably updating to serde 1.0.

Notable changes to ruma-events

  • Published versions 0.7.0 and then 0.8.0 with small changes, most notably updating to serde 1.0.

New contributors

Call for participation

Interested in getting involved with Ruma? Here are some good places to start:

Previously featured and still available:

There are also plenty of API endpoints that still need to be implemented. Check the status document for a list.

This Week in Ruma

Ruma is a collection of Matrix applications and 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

Progress on ruma-api and ruma-client-api, converting ruma-client-api over to the new approach ruma-api is using. After converting several of the modules using macros, I decided to take another stab at using a macros 1.1 procedural macro for automatically implementing the details of each request and response type. The result is the new ruma-api-derive. So far it handles only a couple of simple variations, but with some of the groundwork laid, it should be easier now to fill out the remaining functionality. The result will be that ruma-client-api will be completely declarative, and won't have to resort to manual trait implementation for a few odd cases that didn't fit the pattern of the "macros by example" macros.

Notable changes to ruma

  • Updated Diesel to the 0.11 series.

Notable changes to ruma-identifiers

  • Published version 0.9.0, which updates Diesel to the 0.11 series.

Notable changes to ruma-events

  • Published version 0.6.0, which updates ruma-identifiers to the 0.9 series.

Call for participation

Interested in getting involved with Ruma? Here are some good places to start:

Previously featured and still available:

There are also plenty of API endpoints that still need to be implemented. Check the status document for a list.

This Week in Ruma

Ruma is a collection of Matrix applications and 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

Progress on the Ruma homeserver has slowed a bit while we wait for the next version of the Matrix specification to be published. There have been some significant changes to Synapse (the reference implementation homeserver) and Riot (the flagship Matrix client) that are not yet reflected in the spec, and as such, releasing an initial version of Ruma would not be of much value since it could have significant breakage with Riot.

Progress on ruma-api, ruma-client-api, and ruma-client continues, however. We're pushing ahead on one of the new API designs (codenamed "Ralith" after the community member of the same name, whose ideas it is based on) and it's working well so far. You can see the in-progress changes to ruma-api, the in-progress changes to ruma-client-api, and the in-progress changes to ruma-client that we're using to test out this new design. Further review and comments on these changes are welcome!

Notable changes to ruma

  • Added support for transaction IDs for event creation.
  • Added the GET /rooms/:room_id/state endpoint.
  • Updated to the Macros 1.1 version of code generation crates.
  • Updated Serde to the 0.9 series and Diesel to the 0.10 series.
  • Added a version number field to Ruma's configuration to allow for future changes to the schema.
  • Changed the behavior of the deprecated /tokenrefresh endpoint to match the behavior of Synapse.

Notable changes to ruma-identifiers

  • Published version 0.8.1, which adds missing Diesel trait implementations needed for the homeserver.

New contributors

Call for participation

Interested in getting involved with Ruma? Here are some good places to start:

Previously featured and still available:

There are also plenty of API endpoints that still need to be implemented. Check the status document for a list.

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