News News feed (Atom)

This Week in Ruma

› published on by

From the editor

Work is underway to bring Ruma up to date with version r0.5.0 of the Matrix specification. Starting with the most foundational libraries and working up towards the higher-level ruma-client, this work should be done in the next week or two. The bulk of the work since the last update has been on ruma-events, adding all of the events that were previously missing, and doing a full pass through existing events to make sure our definitions match the specification.

In addition, community members Florian and Luca identified an issue regarding the use of Rust's u64 and i64 for numeric values and potential interoperability problems with JavaScript. After some discussion, Ruma team member jplatte created a new crate called js_int to address this. It has already been integrated with ruma-client-api and ruma-events, and will be used for all integer values in Ruma from now on.

Notable changes to ruma-api

  • Released version 0.8.0.
    • Simplified the Error type.
    • Updated to the latest ruma-identifiers (0.13).

Notable changes to ruma-api-macros

  • Released version 0.5.0
    • Generated documentation now includes the names and descriptions of API endpoints.
    • Updated to the latest ruma-api (0.5).

Notable changes to ruma-client-api

  • Integrated the new js_int crate to ensure numeric types conform to the requirements stated in the specification.

Notable changes to ruma-events

  • Added new events and updated existing events to cover everything in version r0.5.0 of the client-server specification. Notably, this includes events for end-to-end encryption and push notifications.
  • Integrated the new js_int crate to ensure numeric types conform to the requirements stated in the specification.

Notable changes to ruma-identifiers

  • Released version 0.13.0
    • EventId::hostname and EventId::port now return Option because they are only applicable for the original event ID format.
    • All methods named opaque_id are now named localpart.
    • EventId now supports multiple formats according to the different room versions.
    • RoomVersionId was added.
    • DeviceId and a function for generating a DeviceId were added.
  • Released version 0.13.1
    • Added support for room version 5 with RoomVersionId::version_5 and RoomVersionId::is_version_5.

Matrix at large

In the last post I mentioned that Matrix 1.0 was coming soon, and it has now happened! A hearty congratulations to everyone who works on Matrix! This is a huge milestone. You can read the details about Matrix 1.0, as well as the new Matrix.org Foundation, over on the Matrix blog: Introducing Matrix 1.0 and the Matrix.org Foundation.

This Week in Ruma

› published on by

From the editor

Ruma has largely been on hiatus while we wait for async networking in Rust to mature. We now have a project status page which gives the full story. Please refer people here if they wonder about the project's activity.

The stabilization of async/await syntax is now on the horizon, so this week I worked on bringing the Ruma homeserver up to date. I updated all its dependencies to their latest versions, which took a bit of work, primarily due to updating from pre-1.0 Diesel to Diesel 1.4, as well as some breaking changes in ruma-events. The good news is that the homeserver is now a Rust 2018 edition crate and compiles on stable Rust! That means that the entire Ruma project is now running on stable Rust.

I made some other relatively minor updates to the other Ruma libraries, adding rustfmt and clippy to their builds and addressing lots of clippy warnings. Several of the Ruma libraries now have substantially more internal documentation, which should help anyone who wants to work on them in the future. ruma-client also has some new crate-level documentation which should make it much more friendly to new users.

Matrix at large

The Matrix team is getting ready to release 1.0 versions of the Matrix specifications. This is great news, as it means things are going to stabilize. When this happens, we'll be able to bring the various Ruma libraries up to date without having to worry about any more major changes. We'll also begin implementing the other APIs (e.g. federation) after the 1.0 specs are released.

Rust at large

As noted above, there is now an expected date for the stabilization of async/await syntax. It's expected to become stable with the release of Rust 1.37 in August. Once this happens, the Rust ecosystem will begin to adopt the new syntax, as well as the new version of futures provided by the standard library. Eventually, the dust will settle, and we'll be in a good position to choose a new web framework to replace Iron, which is what the Ruma homeserver currently uses but is no longer an active project.

New contributors

This Week in Ruma

› published on by

From the editor

It's been more than a year since the last This Week in Ruma. The project has been mostly on hiatus while waiting for revisions to the Matrix spec and maturity of the Rust ecosystem. Ruma is not dead, however, and small improvements have continued over the last year. The Matrix spec has advanced quite a bit and many of the blocking issues for Ruma have been resolved. Rust's maturity is another story. async/await is still under development and this is the most significant blocking issue to progress on Ruma. For a longer analysis of why we're waiting, this reddit comment puts it very well.

The main announcement to make at this point is that there is now a crates.io release of ruma-client, the high-level client library most developers will use to build Matrix-enabled software.

Thank you to all the new contributors since the last This Week in Ruma, and for everyone who has continued to show interest in the project despite the lull in development.

New contributors

This Week in Ruma

› published on by

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

› published on by

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.