News News feed (Atom)

This Week in Ruma

› published on by

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

This Week in Ruma

› published on by

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 www.ruma.io

  • 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)

This Week in Ruma

› published on by

Notable changes to ruma

  • Add initial version of the /createRoom endpoint.

    This preliminary version of room creation takes no parameters and just returns the ID of the newly created room.

Notable changes to ruma-events

  • Remove event traits.

    Event, RoomEvent, and StateEvent are no longer traits. Instead, each event type just has the necessary fields. This will be revised to use RFC #1546 if it is accepted.

  • Make all event type fields public.

  • Derive Debug, Deserialize, and Serialize for all types.

  • Add types for all m.room.message and all its subtypes.

Matrix at large

Next week, some of the Matrix core team will be visiting San Francisco (from London) for Decentralized Web Summit. Some bay area Matrix developers are planning to get together to meet in person and chat about Matrix. If you live in the bay area and would like to join us, please come chat in #sv:matrix.org and help pick a time and place!

This Week in Ruma

› published on by

From the editor

In addition to the changes to ruma enumerated below, there was some great progress on the future user-facing documentation for Ruma. My partner, who works as a technical writer, helped me brainstorm and outline what information people would need to understand Matrix and Ruma, how to get a copy of Ruma, configure it, and deploy it. As always, needing to explain something simply to someone else forces you to understand it at a deeper level yourself. I think the project is going to benefit greatly from some longer form explanations of of the what, why, and how of Matrix that aren't targeted at technical people.

Notable changes to ruma

  • Usage of the try! macro has been converted to using the new question mark syntax.

    Use of this unstable feature is one nice benefit of Ruma targeting nightly Rust.

  • Added support for authentication with an access token.

    This is the mechanism which almost all endpoints that require authentication use.

  • Added the /logout endpoint which revokes all access tokens associated with the user.

  • Added the /account/password endpoint which lets the user change their account password.

    This endpoint uses both user-interactive authentication and access token authentication. The reasons for this were not clear to me, so I discussed it in #matrix-dev:matrix.org, and was able to distill the results of the discussion into SPEC-407.

  • Moved and renamed various free functions into static methods on the types that they manipulate.

  • Filled in some missing API documentation and added the #![deny(missing_docs)] attribute to make sure docs are added as new items are.

Matrix at large

This week there was a story posted to Hacker News about how Google failed to recognize the value of Gchat, which resulted in the usual discussion of chat services that exist today. I left a comment encouraging people to look at Matrix, and it generated a good amount of discussion and publicity for the project. Be sure to read the thread!

This Week in Ruma

› published on by

From the editor

Lots of progress this week! As expected, I finished the /login endpoint, so I can now move on to the real stuff: rooms and the event stream. This week also saw two nice milestones: Ruma's first pull request was merged, and I successfully registered an account with a locally running Ruma server via a locally running Vector client. (The latter also uncovered an undocumented API that Vector was attempting to use which I've brought up with the Matrix team.)

Before taking the plunge into rooms and events, I'm taking some time to think and plan about how to structure the data, and have been talking with the Matrix team about how Synapse handles things, lessons learned, and the trade offs of different approaches. A few months ago, Erik Johnston of the core team wrote up some notes on data storage in Matrix which has been very useful in this planning stage. It's a great read if you're interested in some of the tricky issues in Matrix development.

There was also a little discussion on how difficult it is to represent certain JSON structures in the API as Rust types. There are several data structures in the API that are effectively enums, but can't be automatically deserialized by Serde because of two things: how Serde currently handles enums and the fact that variants can only be determined by examining the values of some of their fields. The latter currently requires manual implementation of deserialization, which gets cumbersome very quickly. The way I'm probably going to address this is to deserialize these types of data structures to an intermediate type so simple deserialization from JSON can be separated from higher level detection and validation logic. To that end, I built the validations library, which provides both an interface for validating a type, and types for representing validation errors.

Notable changes to ruma

  • Finished a simple working version of the /login API endpoint.
  • Added CORS support to all endpoints.
  • Reexported the Iron handlers for API endpoints from their parent module to make imports a little less verbose.
  • Renamed the FinalConfig type to Config, and the previously named Config to the now private RawConfig type.
  • Revised the README with full documentation of the configuration file's format along with some other improvements.

New contributors