Ruma has a new logo!
You can see it on the home page, the GitHub organization, and the Twitter account.
For a few weeks I've been experimenting with implementing additional parts of the room creation API, and have learned a lot about how I will approach it, but nothing has landed on master yet.
Some of my work has resulted in new issues for the spec, detailed below.
- Following the new version of the spec which provides formal definitions of Matrix IDs, this new crate was added to the Ruma organization on GitHub to isolate the logic for Matrix IDs.
Notable changes to ruma.dev
- Add new logo to the home page.
Matrix at large
- A new stable version of the client-server specification was released: r0.2.0.
Notable improvements include an explicit licensing of the spec and a formal definition of Matrix ID grammar.
The blog post has links to more.
- SPEC-429: Create room API: details of handling initial_state.
This issue will move important details currently only in the implementation of Synapse into the spec itself.
Rust at large
- rustup.rs#586: Allow any toolchain to be specified as the default during rustup installation.
Once this is released, it will unblock docker-ruma-dev#1, which will allow for the version of nightly Rust used by Ruma to be pinned.
Three major milestones happened for Ruma this week!
- Support for events, the basic unit of data in Matrix, landed on the master branch.
This is very important, because it's the foundation for almost all the core functionality of the homeserver.
The initial implementation of events does not support federation, to keep the scope small, and because the details of federation are still not well specified.
- Ruma's documentation website was launched, with its first guide, the Introduction to Matrix, which provides a great explanation of Matrix targeted at non-technical users.
- Ruma reached the top of the Hacker News front page.
Be sure to read the comment thread.
Notable changes to ruma
- Add support for events.
- Add partial support for additional parameters to the room creation endpoint:
name
, topic
, preset
, and invite
.
- Create some of the necessary events when a room is created:
m.room.create
, m.room.name
, m.room.topic
, m.room.history_visibility
, m.room.join_rules
, and m.room.member
.
Notable changes to ruma-events
- All event types were restructured to include two generic parameters, one for the primary "content" payload, and one for optional "extra content."
This was done to support certain events in the specification that have non-standard key-value pairs at the top level of the data structure.
- Remove the
EventKind
trait.
- Add support for custom event types.
Notable changes to ruma.dev
- Add new documentation site and Introduction to Matrix guide. (Contributed in part by Leah Scampoli.)
New contributors
Matrix at large
-
SYN-720: Validation of event content from user input
Note that this is a bug filed against Synapse, not the spec itself.
This was discovered while working on support for the room creation API endpoint's initial_state
parameter.
Ruma will do proper validation of state events created through this mechanism.
There was a lot of work on documentation and code this week, but almost nothing landed on master, so unfortunately there is little to show.
An initial draft of the Introduction to Matrix overview document has been pushed to a branch, but a few changes are still planned before it is released.
On Ruma itself, a lot of work happened on a branch (currently unpublished) to add support for events to the system.
Events are the primary object in the Matrix system, so the addition of this foundational layer will open the gates for all the other major features.
The event system is not simple, however, and it's taking some time to figure out a good architecture for data persistence.
Because events are involved in both the client-server and federation APIs, and the federation API has not yet had a stable release, it's very difficult to design the system properly.
One issue (noted below) has been opened on the Matrix spec requesting clarification that may help to decide on a suitable architecture.
Notable changes to ruma
- Add
PUT /directory/room/:room_alias
endpoint. (Contributed by Johannes Oertel.)
Notable changes to ruma-events
- Use generic types for
Event
, RoomEvent
, and StateEvent
.
- Add unsigned field to
RoomEvent
and StateEvent
.
- Add
EventKind
trait.
(The event kinds are basic events, room events, and state events.
This trait can be useful to constrain a generic parameter that must be a Matrix event.)
Matrix at large
- SPEC-416: Document all event keys shown in examples
The effort last week to make it easy to identify ways to contribute to Ruma has already paid off with two new API endpoints being implemented by the community this week!
Leah and I finished a draft of the "introduction to Matrix" document that will appear on the forthcoming Ruma documentation website, and we are very pleased with it.
Hopefully everyone who reads it will find it useful in understanding Matrix (and those who already understand Matrix well will get some new ideas about how to explain it to the uninitiated.)
The documentation section for the website now exists on a Git branch, but the content isn't filled in quite yet.
The Matrix guide is probably another week or two away, as we still need to proofread the draft of the overview and create the other documents (a feature overview and a long-form explanation of what problems Matrix is intended to solve.)
Notable changes to ruma
- Added
GET /directory/room/:room_alias
endpoint. (Contributed by Johannes Oertel.)
- Added
DELETE /directory/room/:room_alias
endpoint. (Contributed by Lee Hinman.)
- Updated the development setup to run entirely in Docker containers.
- Started running Ruma's test suite on Travis CI.
New contributors
In addition to the bulleted highlights listed below, major work was done this week to help the community get involved in Ruma development.
The Git repository now includes contribution guidelines, as well as a document with a chart detailing all the API endpoints in the Matrix specification and the current status of support for each in Ruma.
Each endpoint in the chart links to a tracking issue on GitHub, offering a place for contributors to announce their interest in working on the endpoint and to discuss implementation.
A few additional issues were added to the issue tracker to give additional ideas for ways people interested in contributing can help.
These issues are listed below in the "contribution opportunities" section.
Lastly, my partner Leah (who works professionally as a technical writer) and I spent most of the weekend working on a new documentation website for Ruma.
The site will include Ruma's user guide, as well as a section dedicated to introducing and explaining the concepts of Matrix.
With the launch of Vector (see "Matrix at large" below) this week, word about Matrix is going to start to spread faster, and Matrix is in dire need of very clear explanations that are targeted at non-technical users.
We are being extremely careful with the content of this Matrix concept documentation, choosing our terminology, analogies, and examples in a way that won't assume too much about the reader's knowledge and won't overload them with buzzwords without explaining what they mean using words and concepts commonly understood by everyone.
I'm really excited to launch this new documentation site because I think it's going to be very effective in helping both technical and non-technical people understand what Matrix is, how it works, and why someone would want to use it.
Notable changes to ruma
POST /createRoom
: Add support for the room's initial canonical alias.
POST /createRoom
: Add support for setting the room's visibility in the server's public room directory.
- Add support for configuration files in TOML and YAML formats.
- Add CONTRIUBTING and STATUS documents as well as revised README content.
Notable changes to ruma.dev
- Revised the website's style in preparation for the documenation sub-site.
New contributors
Contribution opportunities
- 66: Add test helper for creating a user and returning its access token
- 67: Create test database and run migrations from Rust
Matrix at large
Two members of the Matrix team were in San Francisco this week for Decentralized Web Summit.
The most exciting announcement was that Vector, a slick Matrix client available as a web app, iOS app, and Android app, is now in open beta!
A blog post, Say Hello To Vector! was published alongside the announcement at the conference.
You can try Vector by chatting with us in the room for Ruma!
On Wednesday evening, I met the Matrix team and some other Matrix enthusiasts in the area for dinner near the Internet Archive's office.
It was great to meet everyone in person.
We had some good discussions about Matrix, especially about how to address the risk of spam and abuse in the Matrix network using a reputation system.
New issues opened for the Matrix specification:
-
SPEC-409: Enumerate all events created when a room is created
-
SPEC-411: Directory list API missing from the spec
(I later learned this was already reported in SPEC-370: We need to spec the new /directory/room/list API)