Hey all,

Todayโ€™s release of Matrix 1.18 brings a total of 16 MSCs to the protocol. Many of those proposals improve Trust & Safety in Matrix, introducing features like invite blocking, policy servers, account suspension & locking, and general quality of life improvements to the reporting APIs. This blog post covers those safety features in a bit more detail - read on to the full changelog at the bottom for full details of everything in Matrix 1.18.

๐Ÿ”—Policy servers

After about a year of development, policy servers have made their way into the stable spec. Typically paired with reactive tooling like moderation bots, these servers can optionally be added to a room when needed to provide proactive moderation. When enabled, all servers in a room ask the policy server for an opinion on their events before sending them with normal full mesh routing. If the policy server refuses to sign the event due to unwelcome content, it will not be delivered to other homeservers or local users.

How and what policies a policy server uses is left as an implementation detail. Some policies might be simple, like limiting the number of mentions allowed in a message, or more complex. Policy servers also do not need to track the underlying room DAG, allowing them to be relatively lightweight to build.

For more information on what policy servers can be used for, read the announcement post for the Foundationโ€™s own implementation, named policyserv.

๐Ÿ”—Invite blocking

Several proposals (tracked largely by MSC4192) have been opened over the years to limit the ability for unknown users to send invites to another user. These proposals often try to add safety features that are incredibly desirable, but are hard to put a UI on top of. In an effort to get something into the spec, MSC4380 boiled the feature down to its essential component: a single on/off toggle for invites. Future expansion to block based on servers, user IDs, Space members, etc is possible and tracked in other MSCs like MSC4155.

We look forward to seeing design teams take on those more advanced safety controls to expand the capabilities of invite blocking beyond MSC4380โ€™s simple toggle!

๐Ÿ”—Account suspension & locking

Account suspension and locking were introduced back around Matrix 1.13, but API endpoints to manage the states were not introduced at the time. As the new account states continue to gain popularity in server implementations, MSC4323 added those missing endpoints. Security and safety tooling can now use the new standard endpoints instead of having implementation-specific logic and switch statements.

๐Ÿ”—Reporting improvements

Though small, MSC4277 harmonizes the various reporting endpoints to be similar in functionality, making it a little easier for clients to predict what happens when submitting reports. This is a highly welcome change ahead of the Foundationโ€™s T&S team working on โ€œReporting v2โ€ to modernize submitting reports (and appeals) to communities, servers, and federated locations later this year - stay tuned to the blog for updates on that project!

๐Ÿ”—The full changelog

The full changelog for Matrix 1.18 is:

๐Ÿ”—Client-Server API

New Endpoints

  • Add GET /_matrix/client/v1/admin/suspend/{userId}, as per MSC4323. (#2278)
  • Add PUT /_matrix/client/v1/admin/suspend/{userId}, as per MSC4323. (#2278)
  • Add GET /_matrix/client/v1/admin/lock/{userId}, as per MSC4323. (#2278)
  • Add PUT /_matrix/client/v1/admin/lock/{userId}, as per MSC4323. (#2278)

Removed Endpoints

  • The score request parameter on /_matrix/client/v3/rooms/{roomId}/report/{eventId} was removed as per MSC4277. (#2311)

Backwards Compatible Changes

  • Add the account management capabilities for the OAuth 2.0 authentication API, as per MSC4191. (#2270)
  • Add OAuth 2.0 aware clients, as per MSC3824. (#2272)
  • Add administrator endpoints to lock and suspend server-local users and add the m.account_management capability, as per MSC4323. (#2278)
  • Add m.recent_emoji account data event to track recently used emoji as per MSC4356. (#2291)
  • Add m.forget_forced_upon_leave capability for servers to transparently auto-forget rooms that the user leaves as per MSC4267. (#2292)
  • Add support for m.room.redaction events at the PUT /rooms/{roomId}/send/{eventType}/{txnId} endpoint, as per MSC4169. (#2298)
  • Clients supporting the ol HTML element must also support the start attribute, as per MSC4313. (#2299)
  • Add recommendation about excluding non-cross-signed devices from encrypted conversations, as per MSC4153. (#2301)
  • Add invite blocking, as per MSC4380. (#2305)
  • /_matrix/client/v3/rooms/{roomId}/report and /_matrix/client/v3/rooms/{roomId}/report/{eventId} may respond with HTTP 200 regardless of the reported subject's existence or add a random delay when generating responses as per MSC4277. (#2311)
  • Add M_USER_LIMIT_EXCEEDED common error code, as per MSC4335. (#2315)
  • Add the OAuth 2.0 Device Authorization Grant (RFC 8628) as a supported grant type, as per MSC4341. (#2320)
  • Add the is_animated flag to the info object of the m.image msgtype and the m.sticker event, as per MSC4230. (#2328, #2338)
  • Add a "Policy Servers" module, as per MSC4284. (#2332)

Spec Clarifications

  • The optional submit_url response parameter of the /requestToken endpoints uses the same request and response parameters and error codes as the Identity Service API's POST /_matrix/identity/v2/validate/email/submitToken, as per MSC4183. (#2277)
  • Update non-historic mentions of matrix-doc repo to matrix-spec/-proposals. Contributed by @HarHarLinks. (#2280)
  • Remove unintended TeX formatting. Contributed by @HarHarLinks. (#2283)
  • Clarify the requiredness of event_id in predecessor. (#2304)
  • Clarify terminology for keys in cross-signing module. (#2306)
  • Add 404 responses to the OpenAPI of GET /login and GET /auth_metadata endpoints. The responses were already defined in text but not written in OpenAPI. (#2316)
  • Fix various typos throughout the specification. Contributed by @HarHarLinks. (#2318)
  • Clarified attachment encryption to require secure generation of keys and hash verification. (#2324)
  • Order the common and other error codes alphabetically and remove duplicate M_THREEPID_IN_USE definition. (#2336)
  • Fix various typos throughout the specification. (#2337)

๐Ÿ”—Server-Server API

Removed Endpoints

  • Remove /v1/send_join and /v1/send_leave, as per MSC4376. (#2319)

Backwards Compatible Changes

  • Add a concept of "Policy Servers", as per MSC4284. (#2332)

Spec Clarifications

  • Clarify what the minimum_valid_until_ts field means when it is set in key queries. (#2191)
  • Specify validation for PDUs passed to and returned from federation membership endpoints. (#2284)
  • Specify that callers of /_matrix/federation/v1/openid/userinfo must validate the returned user ID. (#2288)
  • Change m.signing_update typo to m.signing_key_update. Contributed by @velikopter (#2300)
  • Add link to JSON signing algorithm in server-server auth section for clarity. Contributed by @thetayloredman. (#2329)
  • Fix various typos throughout the specification. (#2338)

๐Ÿ”—Application Service API

Spec Clarifications

  • Fix various typos throughout the specification. (#2330)

๐Ÿ”—Identity Service API

Spec Clarifications

  • Clarify the error codes that can be returned with a 400 HTTP status code by the POST /_matrix/identity/v2/validate/email/submitToken and POST /_matrix/identity/v2/validate/msisdn/submitToken endpoints, introducing the M_TOKEN_INCORRECT error code, as per MSC4183. (#2277)
  • Order the standard error codes alphabetically. (#2336)

๐Ÿ”—Push Gateway API

No significant changes.

๐Ÿ”—Room Versions

Spec Clarifications

  • Clarify meaning of floating-point powerlevels. (#2297)
  • Remove the post-1.16 release note for room version 12. (#2303)

๐Ÿ”—Appendices

Spec Clarifications

  • Add identifier pronunciation guidelines. Contributed by @HarHarLinks. (#2307)

๐Ÿ”—Internal Changes/Tooling

Backwards Compatible Changes

  • Include the spec release version in the filenames in the tarballs generated by CI. (#2276)

Spec Clarifications

  • Clarify vendor prefixing requirements. (#2222)
  • Auto-create draft releases when building release tags. (#2275)
  • Replace the Twitter link in the footer with our BlueSky and Mastodon socials. (#2282)
  • Upgrade to docsy v0.13.0. (#2287)
  • Updates to the release documentation. (#2289)
  • Remove unused leftover CSS files. (#2290)
  • Update the footer social links to match matrix.org. Contributed by @HarHarLinks. (#2317)
  • Fix various typos throughout the specification. Contributed by @HarHarLinks. (#2318)
  • Render error code sections as definition lists to improve readability. (#2323)

The Foundation needs you

The Matrix.org Foundation is a non-profit and only relies on donations to operate. Its core mission is to maintain the Matrix Specification, but it does much more than that.

It maintains the matrix.org homeserver and hosts several bridges for free. It fights for our collective rights to digital privacy and dignity.

Support us