Skip to main content

mscs

What Spindle serves of the Matrix spec proposals, held to the code by scripts/msc-ledger.py --check: an advertised flag or an unstable/ route with no served entry here fails CI, and so does a served entry with no test that names the MSC. The weekly upkeep run asks upstream what became of each proposal.

Served​

MSCTitleStable inFlagsEvidenceNotes
MSC1227Lazy-loading room membersv1.1—lazy_members.rs
MSC2174Move the redacts key into contentv1.8—redaction.rs
MSC2246Asynchronous media uploadsv1.7—spec_wave2.rsPOST /media/v1/create mints the mxc:// URI; PUT /media/v3/upload/{server}/{id} fills it once; a reader in between gets 504 M_NOT_YET_UPLOADED. Reservations lapse after 24 hours, twenty live per user.
MSC2409Appservices receive to-device messages and ephemeral eventsv1.13—appservice_transactions.rs
MSC2659Appservice pingv1.7—appservice_ping.rs
MSC2666Mutual rooms——spec_wave2.rsGET /_matrix/client/v1/mutual_rooms, one page: the rooms both users are joined to.
MSC2675Serverside aggregations of relationsv1.3—aggregation.rs
MSC2965OAuth 2.0 server metadata discoveryv1.15—delegated_auth.rsServed at /v1/auth_metadata and the unstable path js-sdk asks first.
MSC2967OAuth 2.0 API scopesv1.15—delegated_auth.rsThe v1.15 scope spelling and the draft one older clients still send.
MSC3083Restricted room joinsv1.2—restricted_join.rs
MSC3202Appservice E2EE: device masquerading and OTK counts——appservice_transactions.rs, appservice_key_proxy.rs
MSC3266Room summary APIv1.15im.nheko.summaryroom_summary.rs
MSC3757Restricting state keys to a user's own ID——rtc_membership.rsWhat lets m.rtc.member state keys carry the sender. Closed unmerged upstream; MatrixRTC clients send the underscore-prefixed keys regardless, so the rule stays served.
MSC3771Read receipts for threadsv1.4—thread_badges.rsA receipt names its thread (main or a root) and is echoed with it; a threaded receipt moves only its thread's count.
MSC3773Notifications for threadsv1.4—thread_badges.rsWith unread_thread_notifications on the timeline filter, /sync counts the main timeline apart and each thread under unread_thread_notifications. Counts are what the reader's push rules notify for.
MSC3787knock_restricted join rulev1.3—federation_knock.rs
MSC3814Dehydrated devices—org.matrix.msc3814dehydrated_devices.rs
MSC3820Room version 11v1.8—redaction.rsWith its parts: MSC2174 (redacts in content), MSC2175, MSC2176, MSC3821, MSC3989.
MSC3856Threads list APIv1.4—threads.rs
MSC3861Delegated authentication (OIDC)v1.15—delegated_auth.rs, delegated-auth.mdBoth ways: the built-in provider, or a real MAS through the /_synapse/mas/* surface.
MSC3881Remotely toggling push notifications for another client—org.matrix.msc3881pushers.rsPushers carry enabled and device_id under the unstable and the plain names; a disabled pusher stays registered and receives nothing.
MSC3882Login tokens for a second clientv1.7—spec_wave2.rsPOST /login/get_token behind the password UIA stage, m.login.token on /login, the m.get_login_token capability and the get_login_token flow flag. Tokens are single use and live two minutes.
MSC3916Authenticated mediav1.11—federation_media.rs, media.rs, spec_wave2.rs
MSC3983Appservices claim one-time keys——appservice_key_proxy.rs
MSC3984Appservices answer key queries——appservice_key_proxy.rs
MSC4075MatrixRTC ringing (m.rtc.notification)——push_delivery.rs, rate-limits.mdRings are pushed and budgeted per sender (rings_per_minute).
MSC4140Delayed events—org.matrix.msc4140delayed_events.rs, rtc_membership.rsAll four endpoints; the dead-man's switch MatrixRTC members rely on.
MSC4143MatrixRTC transport discovery (rtc/transports)—org.matrix.msc4143rtc_transports.rs, matrix-rtc.mdServed under the unstable and the v1 path; answers an empty list when no backend is configured. Absorbed MSC4158.
MSC4186Simplified sliding syncmerged, unreleased—sliding_sync.rsLists, room subscriptions, required_state, timeline, extensions, invites in the list, heroes and bump_stamp. What Element X syncs with.
MSC4190Appservice device managementmerged, unreleased—appservice_devices.rs, appservice_transactions.rs
MSC4195LiveKit as a MatrixRTC transport——livekit_jwt.rs, matrix-rtc.mdThe built-in JWT service, or the OpenID round trip for an external one.
MSC4196Push rule defaults——push_rules.rs
MSC4222use_state_after in syncv1.16org.matrix.msc4222.use_state_afterstate_after.rs, sync.rs
MSC4242State DAGs (Hydra phase 2)——state_dag_rooms.rs, surface.rs, mesh-federation.mdState-DAG rooms are built, ingested and served; proven across the seam to a Neutrino mesh node by the loopback rig.
MSC4289Explicitly privilege room creators (room v12)v1.16—restricted_join.rs, rtc_membership.rs
MSC4291Room IDs as hashes of the create event (room v12)v1.16—rooms.rs, federation_remote_join.rs
MSC4309Finalised delayed events in sync——delayed_events.rsThe org.matrix.msc4140.finalised_delayed_events sync section.
MSC4310MatrixRTC ring decline——push_delivery.rs
MSC4354Sticky events—org.matrix.msc4354sticky_events.rs, rtc_membership.rssticky_duration_ms on a send, the key on the event, the sync section, federation push, and delayed+sticky. What MatrixRTC 2.0 makes m.rtc.member.

Planned​

MSCTitleStable inFlagsEvidenceNotes
MSC3706Faster joins: partial state on send_join——SPEC.mdSPEC.md says partial-state joins are accepted on the receive side; nothing in the code or the tests handles members_omitted, so this ledger does not repeat the claim. Not started.
MSC4038Key backup for MLS——SPEC.md
MSC4244MLS over Matrix——SPEC.md, ROADMAP.mdMilestone M6, behind a feature flag, deliberately last. The linear index is epoch order for free.
MSC4256MLS mode with deterministic epochs——SPEC.md, ROADMAP.md
MSC4428Hydra: stable member identifiers——mesh-federation.mdNamed with MSC4242 as the phase-2 set; not started.
MSC4430Hydra: member keys——mesh-federation.mdNamed with MSC4242 as the phase-2 set; not started.

Design basis​

MSCTitleStable inFlagsEvidenceNotes
MSC3995Linearized Matrix——SPEC.md, divergence.mdThe design basis: an append-only per-room log with materialized state and no state resolution on the hot path. Hub mode is opt-in per room.

Superseded​

MSCTitleStable inFlagsEvidenceNotes
MSC3575Sliding sync (original)——sliding_sync.rsSuperseded by MSC4186, which kept the org.matrix.simplified_msc3575 route prefix; that is why the route names this number.
MSC4158MatrixRTC foci (earlier form)——rtc_transports.rsAbsorbed into MSC4143.

Declined​

MSCTitleStable inFlagsEvidenceNotes
MSC3401Native group VoIP signalling——p2p-calls.mdThe full-mesh branch built on it is frozen; MatrixRTC (MSC4143 and friends) is the direction.