Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Tuwunel MSC Implementation Status

Columns

  • Inv: inventory status (matrix-spec-proposals state). One of merged, open, closed, unknown.
  • Status: βœ… yes / 🟨 partial / ❌ no / ⬛ n/a / ❔ ? (never assessed; a question not yet asked, which is not the same claim as no), followed by a confidence glyph (● high / ◐ med / β—‹ low / Β· unknown) that reflects confidence in the assessment, not in the implementation.
  • Impl: two percentages, correct/impl, e.g. 70/80.
    • correct: the share Tuwunel adheres to correctly.
    • impl: the share with any code path attempting adherence, so correct never exceeds impl. Either may be ?.
    • denominator: the MSC’s homeserver-applicable scope, the requirements a homeserver itself must satisfy.
    • requirement: any requirement-shaped statement, not just MUST/SHOULD. Proposals are loosely normative, so β€œthe server returns X” and β€œthis field is added to Y” both count.
  • Spec: the Matrix spec version that first published the MSC, in the Spec compliance gaps section only. next is queued for the release after 1.19. Blank means no changelog from 1.1 on cites the MSC, so it was either adopted into the pre-1.1 spec or has not landed in a release.

Counts

βœ… yes🟨 part❌ no⬛ n/atotal
255544363301075

Status by inventory bucket

Invyespartnon/atotal
merged182151260269
open4227337198604
closed31128772202

Merged

Sorted by MSC number, highest first. Out-of-scope rows are listed in the Out of scope section.

MSCStatusImplTitleNote
MSC4436βœ… ●100/100Make server ACLs case insensitiveacl_check.rs:39 uses ruma is_allowed, which matches case insensitively
MSC4423βœ… ●100/100Undefine order of room directorydirectory.rs:331 member-count order stays valid once ordering is undefined
MSC4402βœ… ◐100/100Consistent redirects for .well-known-files[β†’ MSC2499?] Global CORS layer covers any 30x; well-known client returns 200 …
MSC4380βœ… ●100/100Invite blockingsrc/api/client/sync/{v3.rs,v5/selector.rs} suppress stored invites; createRoo…
MSC4376βœ… ●100/100Remove /v1/send_join and /v1/send_leavev1 send_join and v1 send_leave routes are not registered
MSC4341βœ… ●95/100Support for RFC 8628 Device Authorization Grantsrc/api/oidc/device.rs:62; RFC 8628 device grant advertised, minted, polled
MSC4335❌ ●0/0M_USER_LIMIT_EXCEEDED error codeM_USER_LIMIT_EXCEEDED error code not used
MSC4326βœ… ●100/100Device masquerading for appservicesappservice query device_id asserted; M_UNKNOWN_DEVICE-equivalent on missing
MSC4323βœ… ●100/100User suspension & locking endpointssrc/api/client/admin.rs four routes at stable v1 paths; m.account_moderation …
MSC4319🟨 ●50/50Room member events for invite and knock rooms in the /sync responsestate/mod.rs:464 puts inviter member in stripped state; no state key
MSC4312βœ… ●85/85Resetting cross-signing keys in the OAuth worldcross-signing reset via OAuth account deep-link; dual-stage advertise deferred
MSC4311βœ… ●85/95Ensuring the create event is available on invitesfull-PDU invite/knock state; create-event validation + M_MISSING_PARAM + 5xx
MSC4307βœ… ●100/100Validate that auth_events are in the correct roomauth_event room_id mismatch rejected
MSC4304βœ… ●100/100Room Version 12V12 stable and the default room version
MSC4297βœ… ●100/100State Resolution v2.1src/service/rooms/state_res/resolve.rs:257 conflicted state subgraph; tests pass
MSC4291βœ… ●100/100Room IDs as hashes of the create eventv12 upgrade create event omits deprecated predecessor.event_id
MSC4289βœ… ●100/100Explicitly privilege room creatorsRoom v12 creator privilege; complement 22 pass, 0 fail across six named tests
MSC4284🟨 ●70/90Policy Serversoutbound /sign, inbound verify, fetch-on-missing, reversible soft-fail
MSC4277βœ… ●100/100Harmonizing the reporting endpointsall 3 wired; score removed; user report 200 regardless to deter enumeration
MSC4267βœ… ●90/100Automatically forgetting rooms on leaveauto-forget on Leave/Ban; stable + unstable capability advertised
MSC4260βœ… ●85/90Reporting users (Client-Server API)src/api/client/report.rs:63; admin notification, 404 M_NOT_FOUND on unknown u…
MSC4254βœ… ●95/100Usage of [RFC7009] Token Revocation for Matrix client logoutsrc/api/oidc/revoke.rs:37; RFC7009 form-urlencoded; revokes both tokens; 200 …
MSC4239βœ… ●100/100Room version 11 as the default room versiondefault is V12, at or above the v11 the MSC suggests
MSC4225βœ… ●100/100Specification of an order in which one-time-keys should be issuedOTKs issued in upload order via count_be prefix; src/service/users/keys.rs:99
MSC4222βœ… ●95/100Adding state_after to /syncdialects honored; lazy-loaded state_after carries changed members
MSC4213βœ… ●90/90Remove server_name parameterjoin/knock use via; server_name still accepted via Ruma fallback
MSC4210βœ… ●100/100Remove legacy mentionsdeprecated mention push rules removed at /pushrules read time
MSC4191βœ… ●100/100Account management for OAuth 2.0 APIall six actions advertised and handled; stable names alias prototypes
MSC4190βœ… ●100/100Device management for application services201 on create; M_APPSERVICE_LOGIN_UNSUPPORTED on AS login+register
MSC4189βœ… ◐80/100Allowing guests to access uploaded mediaguest tokens accepted on authenticated media routes
MSC4186βœ… ●85/88Simplified Sliding Syncsync v5 served with lists, filters, extensions; no expanded_timeline or stubs
MSC4183❌ ●0/0Additional Error Codes for submitToken endpointsmixed MSC; the submit_url half is homeserver scope and we emit no submit_url
MSC4180βœ… ●100/100Add a stable flag to MSC3916stable feature flag for MSC3916 advertised
MSC4178🟨 ●75/90Error codes for requestTokenmsisdn returns M_THREEPID_MEDIUM_NOT_SUPPORTED; bad email returns M_INVALID_P…
MSC4175βœ… ●100/100Profile field for user time zonetimezone PUT/DELETE/GET routes; m.tz aliased in profile and over federation
MSC4170βœ… ◐100/100403 error responses for profile APIsprofile lookup unrestricted; MUST minimum satisfied
MSC4169βœ… ●100/100Backwards-compatible redaction sending using /sendsrc/api/client/send.rs:42; lifts content.redacts into PduBuilder.redacts; adv…
MSC4163βœ… ●100/100Make ACLs apply to EDUsACLs applied on receipt and typing EDUs
MSC4156βœ… ●100/100Migrate server_name to viavia parameter handled via Ruma
MSC4151βœ… ●100/100Reporting rooms (Client-Server API)POST /rooms/{roomId}/report implemented and routed
MSC4140❌ ●0/0Cancellable delayed eventsNo delayed_event routes, no m.delayed_events capability, no delay_id anywhere
MSC4138βœ… ●100/100Update allowed HTTP methods in CORS responsesCORS METHODS list includes HEAD and PATCH; excludes CONNECT/TRACE
MSC4133βœ… ●90/100Extending User Profile API with Custom Key:Value Pairsendpoints + caps/errcodes; unset legacy 200 omit by choice, 404 key-scoped
MSC4127❌ ●0/0Removal of query string authsrc/api/router/auth.rs:78 still falls back to request.query.access_token
MSC4126βœ… ●100/100Deprecation of query string authdeprecation of query string auth; server still accepts both
MSC4115βœ… ●100/100membership metadata on eventssrc/core/matrix/pdu/unsigned.rs add_membership; src/service/rooms/state_acces…
MSC4041βœ… ◐90/90Use http header Retry-After to enable library-assisted retry handlingRuma error type emits Retry-After header for LimitExceeded responses.
MSC4040βœ… ●100/100Update SRV service name to IANA registrationTuwunel queries _matrix-fed first then falls back to _matrix.
MSC4026βœ… ◐80/90Allow /versions to optionally accept authenticationversions endpoint accepts optional auth via Ruma
MSC4025βœ… ●95/100Local user erasure requestsphase B landed: erased senders serve pruned to clients and federation
MSC4010βœ… ●100/100Push rules and account datam.push_rules and m.fully_read rejected on /account_data
MSC4009βœ… ●100/100Expanding the Matrix ID grammar to enable E.164 IDsE.164 + character allowed via Ruma localpart validation
MSC3989βœ… ●100/100Redact origin property on eventsV11 redaction drops origin via Ruma RedactionRules
MSC3987βœ… ●90/90Push actions clean-upunknown push actions ignored as no-ops
MSC3981βœ… ●100/100/relations recursion/relations recurse parameter implemented with depth 3
MSC3980βœ… ●90/90Dotted Field Consistencyevent_fields trim on /sync; dotted paths use the MSC3873 escape grammar
MSC3970🟨 ◐70/80Scope transaction IDs to devicestxn key is user, device, txn with no path; redact untracked; echo user scoped
MSC3967βœ… ●100/100Do not require UIA when first uploading cross signing keyskeys/device_signing/upload skips UIA when user has no existing cross-signing …
MSC3966βœ… ●100/100event_property_contains push rule conditionevent_property_contains supported via Ruma push conditions
MSC3958βœ… ●100/100Suppress notifications from message editsSuppressEdits push rule provided via Ruma server_default ruleset
MSC3952βœ… ◐80/90Intentional MentionsIntentional mentions push rules ride on Ruma server_default; flag advertised.
MSC3943βœ… ●100/100Partial joins to nameless rooms should include heroes’ memberships.send_join partial-state response includes hero memberships and their auth chains
MSC3939βœ… ●90/90Account lockingLogin gate landed; /refresh and OIDC token paths still mint for locked accounts
MSC3938βœ… ●100/100Remove deprecated keyId parameters from /keys endpointsonly the keyless /key/v2/server is routed; no notary /query left to change
MSC3930βœ… ●100/100Polls push rules/notificationsDefault poll push rules via ruma server_default; seeded at registration
MSC3925🟨 ●70/70m.replace aggregation with full eventFull m.replace fold; off by default (bundle_edit_relations); backfill unindexed
MSC3916βœ… ●90/100Authentication for media access, and new endpoint namesNew /client/v1/media and /federation/v1/media auth endpoints implemented.
MSC3905βœ… ●100/100Application services should only be interested in local userssrc/service/appservice/append.rs:66; local-user guard at the three event-inte…
MSC3904βœ… ●100/100Room version 10 as the default room versiondefault is V12, at or above the v10 the MSC suggests
MSC3882βœ… ●90/100Allow an existing session to sign in a new sessionPOST /login/get_token implemented with UIA
MSC3873βœ… ●100/100event_match dotted keysdotted-key escape semantics handled in ruma flattened JSON
MSC3861βœ… ●90/95Next-generation auth for Matrix, based on OAuth 2.0/OIDCAdvertised as org.matrix.msc3861; cores 2964-2967 + merged periphery all yes
MSC3860βœ… ◐95/100Media Download RedirectsEmits 307 to presigned object-store URL on allow_redirect; default-off gate
MSC3856βœ… ●90/100Threads List APIsrc/api/client/threads.rs:81 roots retained; full API, residual fallbacks
MSC3844βœ… ●100/100Remove β€œMjolnir” (policy room) sharing mechanismremoval of unused Mjolnir share endpoint; Tuwunel never implemented it
MSC3828βœ… ●100/100Content Repository Cross Origin Resource Policy (CORP) Headersmedia endpoints return Cross-Origin-Resource-Policy: cross-origin
MSC3827βœ… ●100/100Filtering of /publicRooms by room type/publicRooms supports room_types filter and returns room_type
MSC3824βœ… ◐90/100OAuth 2.0 API aware clientsoauth_aware_preferred set; SSO redirect action forwards as OIDC prompt (opt-in)
MSC3823βœ… ●100/100Account SuspensionM_USER_SUSPENDED maps to 403; route and handler suspension gates remain
MSC3821βœ… ●90/100Update redaction rules, againredact_in_place uses Ruma RedactionRules.V11 with keep third_party_invite.signed
MSC3820βœ… ●90/100Room Version 11v11 stable; redaction and auth rules dispatch via Ruma RoomVersionRules
MSC3818βœ… ●100/100Copy room type on upgradeupgrade reuses old m.room.create content; type preserved by default
MSC3816βœ… ●100/100Clarify Thread Participationcurrent_user_participated recomputed per requester at read time on all paths
MSC3787βœ… ●100/100Allowing knocks to restricted roomsKnock-restricted fully wired; remote re-knock reconciles the room server
MSC3786βœ… ●100/100Add a default push rule to ignore m.room.server_acl eventsserver_acl predefined push rule via Ruma defaults
MSC3773βœ… ●100/100Notifications for threadssrc/service/pusher/notification.rs:143 per-thread counts; src/api/client/sync…
MSC3771βœ… ●100/100Read receipts for threadssrc/api/client/read_marker.rs validates+routes thread; receipt and private_re…
MSC3765βœ… ●90/100Rich text in room topicsreader prefers m.topic text/plain; topic text now indexed for search
MSC3758βœ… ●90/100Add event_property_is push rule condition kindevent_property_is dispatched via Ruma Ruleset::get_actions
MSC3743βœ… ●90/100Standardized error response for unknown endpointsM_UNRECOGNIZED 404/405 fallback wired in router
MSC3715βœ… ●100/100Add a pagination direction parameter to /relationsdir parameter on /relations is parsed and used
MSC3706βœ… ●90/100Extensions to /_matrix/federation/v2/send_join/{roomId}/{eventId} for parti…send_join supports omit_members, members_omitted, servers_in_room
MSC3667βœ… ●100/100Enforce integer power levelsinteger_power_levels enforced via RoomVersionRules from V10+
MSC3666βœ… ●90/100Bundled aggregations for server side searchresult + context events bundled; thread always, edit/ref gated default-off
MSC3604βœ… ●100/100Room Version 10V10 supported; integer_power_levels and knock_restricted enforced
MSC3589βœ… ●100/100Room version 9 as a defaultdefault_room_version defaults to V12 (exceeds V9)
MSC3582βœ… ●100/100Remove m.room.message.feedbackfeedback removal; tuwunel never produces or dispatches on m.room.message.feed…
MSC3567βœ… ●100/100Allow requesting events from the start/end of the room historyfrom is optional; defaults to start/end based on dir
MSC3550❌ ◐0/0Add HTTP 403 to possible profile lookup responsesCS /profile returns 403 M_FORBIDDEN when outbound profile lookup disabled
MSC3442βœ… ●100/100move the prev_content key to unsignedprev_content placed under unsigned in created/appended PDUs
MSC3440βœ… ●80/88MSC3440 Threading via m.thread relation[β†’ MSC3856] related_by_* filters on /messages+/context; .stable advert; neste…
MSC3419βœ… β—‹100/100Guest State Eventsno guest-specific gate on state-event send path; PL/auth_check applies unifor…
MSC3383βœ… ●100/100Include destination in X-Matrix Auth HeaderX-Matrix destination field validated on inbound federation
MSC3375βœ… ●100/100Room Version 9room v9 stable; redaction keeps join_authorised_via_users_server
MSC3316βœ… ●100/100Proposal to add timestamp massaging to the specappservice ts honored on /send and /state
MSC3289βœ… ●100/100Room Version 8room v8 listed stable; restricted join rule auth implemented
MSC3288❌ ●0/0Add room type to /_matrix/identity/v2/store-invite APIsole clause is addressed to homeservers, so not n/a; no 3PID invite at all
MSC3283βœ… ●100/100Expose enable_set_displayname, enable_set_avatar_url and enable_3pid_changes …src/api/client/capabilities.rs explicitly emits m.set_displayname, m.set_avat…
MSC3267🟨 ◐60/80reference relationshipsm.reference bundle added; gated default-off; no ignore/visibility filter
MSC3266βœ… ●100/100Room Summary APIsummary endpoint routed at unstable and (via Ruma) stable paths
MSC3231βœ… ●100/100Token Authenticated Registrationregistration token UIA + validity endpoint implemented
MSC3173βœ… ●100/100Expose stripped state events to any potential joinersummary_stripped includes recommended events incl create
MSC3083βœ… ●100/100Restricting room membership based on membership in other roomsrestricted_join_rule auth via RoomVersionRules; v8/v9
MSC3069βœ… ◐80/100Allow guests to use /account/whoamiwhoami returns is_guest; uses is_deactivated heuristic
MSC3030βœ… ●90/100Jump to date API endpointclient+fed handlers, outbound fallback + same-ts order; 3 leaves AS-blocked
MSC2998βœ… ●100/100Room Version 7V7 listed in STABLE_ROOM_VERSIONS; full knock support present
MSC2967βœ… ●80/90API scopessrc/api/oidc/token.rs:96; stable+unstable device scope honored, surfaced, req…
MSC2966βœ… ●85/95Usage of OAuth 2.0 Dynamic Client Registration in MatrixFull RFC 7591/8252 metadata validation; drops unknown grant/response
MSC2965βœ… ●90/100OAuth 2.0 Authorization Server Metadata discoveryauth_issuer and auth_metadata routes return OAuth provider metadata
MSC2964βœ… ●88/100Usage of OAuth 2.0 authorization code grant and refresh token grantsrc/api/oidc/authorize.rs:57; S256 PKCE now required on the auth-code grant
MSC2946βœ… ●90/100Spaces Summaryclient and federation hierarchy endpoints implemented
MSC2918βœ… ●90/100Refresh tokens/refresh, expires_in_ms, refresh_token in /login and /register
MSC2870βœ… ◐100/100Protect server ACLs from redactionredaction dispatches on RoomVersionRules.redaction; ruma MSC2870 enabled
MSC2867βœ… ◐100/100Marking rooms as unreadclient convention; account data type stored generically
MSC2858βœ… ●100/100Multiple SSO Identity Providersidentity_providers in /login flows; /login/sso/redirect/{idpId} routed
MSC2844βœ… ●90/90Using a global version number for the entire specificationsrc/api/client/versions.rs advertises v1.1 through v1.15
MSC2832βœ… ●100/100Homeserver -> Application Service authorization headersrc/service/appservice/request.rs sends Bearer header and query
MSC2788βœ… ●100/100Room version 6 as a defaultdefault_default_room_version is V12 in src/core/config/mod.rs:5752
MSC2778βœ… ●100/100Providing authentication method for appservice userssrc/api/client/session/appservice.rs implements m.login.application_service
MSC2732βœ… ●100/100Olm fallback keyssrc/api/client/keys/claim_keys.rs:86; upload, claim-fallback, sync-unused-lis…
MSC2705βœ… ●90/90Animated thumbnailsanimated honored and animated GIF generated; webp output preference unmet
MSC2702βœ… ●100/100Content-Disposition usage in the media repoContent-Disposition and inline allowlist enforced for media downloads, thumbn…
MSC2701βœ… ◐80/90Media and the Content-Type relationshipOptional Content-Type accepted; stored and returned
MSC2689βœ… ◐100/100Allow guests to operate in encrypted roomsAuth treats guests like users; /members open
MSC2677βœ… ●80/90Annotations and ReactionsDuplicate annotation rejected; reactions plumbed
MSC2676🟨 ●50/60Message editingedits accepted/relayed; no m.replace bundle or new_content apply
MSC2675🟨 ◐60/75Serverside aggregations of message relationshipsthread+edit+reference bundled (edit/ref gated); reactions unbundled
MSC2674βœ… ●90/100Event relationshipsrelates_to handled in append; rel_type tracked
MSC2666βœ… ●92/100Get rooms in common with another userv1 stable path + count + cursor pagination; self-query/non-compliant 400
MSC2663βœ… ●100/100Errors for dealing with non-existent push rulessrc/api/client/push.rs all 7 endpoints return NotFound
MSC2659βœ… ●95/100Application service ping endpointping surfaces M_CONNECTION_TIMEOUT/FAILED and M_BAD_STATUS per spec
MSC2611βœ… ●100/100Remove m.login.token User-Interactive Authentication type from the specific…AuthType::Token UIAA not advertised; m.login.token login is unrelated
MSC2610βœ… ●100/100Remove m.login.oauth2 User-Interactive Authentication type from the specifi…AuthType::OAuth2 not advertised; only Password/Sso/Jwt flows
MSC2604❌ ●0/0Parameters for Login Fallbacklogin fallback page is homeserver served, so not n/a; Tuwunel ships no page
MSC2540βœ… ◐80/80Stricter event validation: JSON compliancecanonical JSON enforced at the parse boundary, not keyed off room version
MSC2526βœ… ●100/100Add ability to delete key backupssrc/api/client/backup.rs:134 delete_backup_version_route
MSC2457βœ… ●100/100Invalidating devices during password modificationsrc/api/client/account.rs:41 honors body.logout_devices
MSC2454βœ… ●90/90User-Interactive Authentication for SSO-backed homeserversrc/api/router/auth/uiaa.rs:53 sso_flow; sso/uiaa.rs serves fallback
MSC2451βœ… ●100/100Remove the query_auth federation endpointNo /query_auth route registered in src/api/router.rs
MSC2432βœ… ◐80/90Updated semantics for publishing room aliasesalt_aliases wired; canonical_alias resolve check; rooms/{}/aliases route present
MSC2414βœ… ●100/100Make reason and score optional for reporting contentreason and score are Option in ruma report types; route accepts both
MSC2409🟨 ●70/70Proposal to send typing, presence and receipts to appservicestyping+receipt EDUs sent to AS; presence not forwarded
MSC2403βœ… ●90/90Add β€œknock” featureKnock CS+SS endpoints, sync key, public-rooms join_rule all wired
MSC2367βœ… ●100/100Allowing Reasons in all Membership Eventsreason field handled in invite/leave/kick/ban/unban/join membership routes
MSC2334βœ… ●100/100MSC2334 - Change defaul…Default room version is V12, well past V5
MSC2290🟨 ●65/55Separate Endpoints for Binding Threepidsadd endpoint (UIA+dupe) + HS email validation; IS-bind half out of scope
MSC2285βœ… ●90/100Private read receiptssrc/api/client/read_marker.rs handles ReadPrivate via private_read_set
MSC2265🟨 ●75/100Proposal for mandating case folding when processing e-mail addressesHS case-folds whole email (ss-fold) before storage; IS migration out of scope
MSC2264βœ… ●90/100Add an unstable feature flag to MSC2140 for clients to detect supportflag not advertised; r0.6.0 and later advertised instead, as Synapse does
MSC2263βœ… ●80/80Give homeservers the ability to handle their own 3PID registrations/password …HS email registration; binds the address in any UIA stage order
MSC2249βœ… ●90/100Require users to have visibility on an event when submitting reportssrc/api/client/report.rs:173 verifies sender is room member; PDU lookup gated
MSC2246βœ… ●100/100Asynchronous media uploadsasync media routes wired; create_pending, upload_pending, error codes present
MSC2244❌ ●0/0Mass redactionsSingle-target redactions only; no array redacts handling
MSC2240βœ… ●100/100Room Version 6V6 in STABLE_ROOM_VERSIONS; v6 auth rules and rules engine implemented
MSC2229🟨 ●0/20Allowing 3PID Owners to Rebind[β†’ MSC2290] owner exemption at 3pid/add only; requestToken still rejects the …
MSC2209βœ… ●100/100Update auth rules to check notifications key in m.room.power_levelslimit_notifications_power_levels enforced for v6+
MSC2197βœ… ●100/100Search Filtering in Public Room Directory over FederationPOST /_matrix/federation/v1/publicRooms with filter implemented
MSC2181βœ… ●100/100Add an Error Code for Signaling a Deactivated UserM_USER_DEACTIVATED returned by login paths
MSC2176βœ… ●100/100Update the redaction rulesredact_in_place uses room_version_rules.redaction
MSC2175βœ… ●100/100Remove the creator field from m.room.create eventscreator() falls back to sender when use_room_create_sender
MSC2174βœ… ●100/100move the redacts property to contentsrc/core/matrix/event/redact.rs handles redacts move per room rules
MSC2140🟨 ●50/60Terms of Service API for Identity Servers and Integration Managersno 3pid/unbind or IS relay; accepted_terms and register cleanup present
MSC2134❌ ●0/0Identity Hash Lookupsno IS lookup client; no hash_details, pepper or v1 fallback code
MSC2078βœ… ●90/100Sending Third-Party Request Tokens via the HomeserverHS sends and validates email request tokens itself via magic-link, no id server
MSC2077βœ… ●100/100Room version 5src/core/config/room_version.rs:7; v5 unstable but supported
MSC2076❌ ◐0/10Enforce key-validity periods when validating event signaturesminimum_valid_until_ts passed for fetches; per-event ts check absent
MSC2033βœ… ●100/100Proposal to include device IDs in /account/whoamisrc/api/client/account.rs:74 returns device_id in whoami response
MSC2002βœ… ●100/100MSC 2002 - Rooms V4v4 in supported_room_versions; ruma rules implement v4
MSC1983βœ… ●100/100Proposal to add reasons for leaving a roomsrc/api/client/membership/leave.rs:21 passes body.reason to leave
MSC1957🟨 ●50/50Integration manager discoveryaccount-data passthrough only; no m.integrations key in well-known client
MSC1954βœ… ●100/100Remove prev_content from the essential keys listmerged; identical to MSC1953; ruma redact omits prev_content
MSC1946βœ… ◐80/90Secure Secret Storage and Sharinggeneric account_data + to-device pipe carry secret storage/sharing
MSC1930βœ… ●100/100Proposal to add a default push rule for m.room.tombstone eventsruma Ruleset::server_default includes ConditionalPushRule::tombstone()
MSC1929βœ… ●100/100MSC1929 Homeserver Admin Contact and Support pagesrc/api/client/well_known.rs:42; multiple contacts via support_contact map
MSC1915🟨 ●60/55MSC 1915 - Add unbind 3PID APIsdelete + deactivate return id_server_unbind_result; IS unbind out of HS scope
MSC1884βœ… ●100/100Proposal to replace slashes in event IDsroom v4 supported via ruma EventIdFormatVersion::V3 (URL-safe base64)
MSC1866βœ… ◐100/100MSC 1866 - Unsupported Room Version Error Code for Invitesclient invite maps remote unsupported-version to M_UNSUPPORTED_ROOM_VERSION
MSC1831βœ… ●100/100Proposal to do SRV lookups after .well-known to discover homeserverssrc/service/resolver/actual.rs:79 well-known before SRV
MSC1819βœ… ●100/100Remove references to presence listsduplicate of MSC1818; presence lists not implemented
MSC1812βœ… ●100/100MSC 1813 - Federation Make Membership Room Versionsrc/api/server/make_leave.rs:34 and make_join.rs:52 set room_version
MSC1804βœ… ●100/100Proposal for advertising capable room versions to clientssrc/api/client/capabilities.rs sets RoomVersionsCapability
MSC1802βœ… ●100/100Remove the β€˜200’ value from some federation responsessrc/api/server/send_join.rs:30 and send_leave.rs:15 handle v2
MSC1794βœ… ●100/100MSC 1794 - Federation v2 Invite APIsrc/api/server/invite.rs:28 implements PUT /federation/v2/invite
MSC1772βœ… ●90/90Proposal for Matrix β€œspaces” (formerly known as β€œgroups as rooms (take 2)”)spaces implemented; src/api/client/space.rs hierarchy + room create with type
MSC1767❌ ◐0/0Extensible events in Matrixno extensible-events handling; relies on generic event relay
MSC1759❌ ◐10/20MSC 1759 - Rooms V2v2 algorithm in use for v3+; v2 itself not in supported_room_versions
MSC1756βœ… ●90/100Cross-signing devices with device signing keyssrc/api/client/keys/upload_signing_keys.rs and upload_signatures.rs implement…
MSC1753βœ… ●100/100client-server capabilities APIsrc/api/client/capabilities.rs handles GET /capabilities incl m.change_password
MSC1730βœ… ●100/100Mechanism for redirecting to an alternative server during loginsrc/api/client/session/mod.rs:176 sets well_known on login response
MSC1721βœ… ●100/100Rename m.login.cas to m.login.ssosrc/api/client/session/sso.rs and uiaa.rs advertise m.login.sso
MSC1711βœ… ◐100/100X.509 certificate verification for federation connectionsreqwest+rustls; tls_fingerprints not exposed; standard CA validation
MSC1708βœ… ●90/100.well-known support for server name resolutionsrc/service/resolver/well_known.rs; resolver/actual.rs ordering matches spec
MSC1693βœ… ●100/100Specify how to handle rejected events in new state resrejected event handling in iterative auth check matches MSC1442 amendment
MSC1692βœ… ●95/100Terms of service at registrationm.login.terms stage built from registration_terms config; UIA completes it
MSC1659βœ… ●90/100Changing Event IDs to be Hashesreference_hash event IDs; v3 in UNSTABLE_ROOM_VERSIONS; auth_events as list-o…
MSC1501βœ… ●90/90Room version upgradesupgrade endpoint present; tombstone, predecessor, PL freeze all implemented
MSC1466βœ… ●100/100Soft Remote Logout Proposalsoft_logout=true returned for expired tokens in 401 responses
MSC1442βœ… ●90/100State Resolution: Reloadedstate res v2 implemented in src/service/rooms/state_res/resolve.rs
MSC1219βœ… ●82/100Storing megolm keys serversidebetter-key compare in add_key (all PUT routes); 403 M_WRONG_ROOM_KEYS_VERSION

Spec compliance gaps

Merged MSCs (in the live Matrix spec) that Tuwunel does not fully implement. These are the highest-priority items to fix for spec compliance.

MSCStatusImplSpecTitleNote
MSC2265🟨 ●75/1001.1Proposal for mandating case folding when processing e-mail addressesHS case-folds whole email (ss-fold) before storage; IS migration out of scope
MSC4178🟨 ●75/901.13Error codes for requestTokenmsisdn returns M_THREEPID_MEDIUM_NOT_SUPPORTED; bad email returns M_INVALID_P…
MSC2409🟨 ●70/701.13Proposal to send typing, presence and receipts to appservicestyping+receipt EDUs sent to AS; presence not forwarded
MSC3925🟨 ●70/701.7m.replace aggregation with full eventFull m.replace fold; off by default (bundle_edit_relations); backfill unindexed
MSC3970🟨 ◐70/801.7Scope transaction IDs to devicestxn key is user, device, txn with no path; redact untracked; echo user scoped
MSC4284🟨 ●70/901.18Policy Serversoutbound /sign, inbound verify, fetch-on-missing, reversible soft-fail
MSC2290🟨 ●65/55Separate Endpoints for Binding Threepidsadd endpoint (UIA+dupe) + HS email validation; IS-bind half out of scope
MSC1915🟨 ●60/55MSC 1915 - Add unbind 3PID APIsdelete + deactivate return id_server_unbind_result; IS unbind out of HS scope
MSC2675🟨 ◐60/751.3Serverside aggregations of message relationshipsthread+edit+reference bundled (edit/ref gated); reactions unbundled
MSC3267🟨 ◐60/801.5reference relationshipsm.reference bundle added; gated default-off; no ignore/visibility filter
MSC1957🟨 ●50/50Integration manager discoveryaccount-data passthrough only; no m.integrations key in well-known client
MSC2140🟨 ●50/60Terms of Service API for Identity Servers and Integration Managersno 3pid/unbind or IS relay; accepted_terms and register cleanup present
MSC2676🟨 ●50/601.4Message editingedits accepted/relayed; no m.replace bundle or new_content apply
MSC4319🟨 ●50/50Room member events for invite and knock rooms in the /sync responsestate/mod.rs:464 puts inviter member in stripped state; no state key
MSC2229🟨 ●0/20Allowing 3PID Owners to Rebind[β†’ MSC2290] owner exemption at 3pid/add only; requestToken still rejects the …
MSC1759❌ ◐10/20MSC 1759 - Rooms V2v2 algorithm in use for v3+; v2 itself not in supported_room_versions
MSC1767❌ ◐0/0Extensible events in Matrixno extensible-events handling; relies on generic event relay
MSC2076❌ ◐0/10Enforce key-validity periods when validating event signaturesminimum_valid_until_ts passed for fetches; per-event ts check absent
MSC2134❌ ●0/0Identity Hash Lookupsno IS lookup client; no hash_details, pepper or v1 fallback code
MSC2244❌ ●0/0Mass redactionsSingle-target redactions only; no array redacts handling
MSC2604❌ ●0/01.1Parameters for Login Fallbacklogin fallback page is homeserver served, so not n/a; Tuwunel ships no page
MSC3288❌ ●0/01.2Add room type to /_matrix/identity/v2/store-invite APIsole clause is addressed to homeservers, so not n/a; no 3PID invite at all
MSC3550❌ ◐0/01.2Add HTTP 403 to possible profile lookup responsesCS /profile returns 403 M_FORBIDDEN when outbound profile lookup disabled
MSC4127❌ ●0/0Removal of query string authsrc/api/router/auth.rs:78 still falls back to request.query.access_token
MSC4140❌ ●0/0Cancellable delayed eventsNo delayed_event routes, no m.delayed_events capability, no delay_id anywhere
MSC4183❌ ●0/01.18Additional Error Codes for submitToken endpointsmixed MSC; the submit_url half is homeserver scope and we emit no submit_url
MSC4335❌ ●0/01.18M_USER_LIMIT_EXCEEDED error codeM_USER_LIMIT_EXCEEDED error code not used

Open

Sorted by MSC number, highest first. Out-of-scope rows are listed in the Out of scope section.

MSCStatusImplTitleNote
MSC4532❌ ●0/0Revised Social Presenceno m.presence.persistent or active/idle states; tuwunel still auto-idles
MSC4528❌ ●0/0M_INCOMPATIBLE_SERVER error codeM_INCOMPATIBLE_SERVER absent from Tuwunel and from the ruma fork
MSC4527❌ ●0/0State event power levelsno state map in power levels and no MSC4527 room version
MSC4526βœ… ◐80/100Improve OAuth 2.0 refresh token grant error handlinginvalid_grant on refresh failures, but every 4xx maps to it, bad params too
MSC4525❌ ●0/0Paginated Syncno paginated sync endpoint; only MSC4186 simplified sliding sync exists
MSC4524❌ ●0/0Federation Bi-directional Pingno federation ping or pong route; the cited commit is a Continuwuity branch
MSC4521❌ ●0/0Adaptive set reconciliationno PinSketch, minisketch or algebraic_v1 digest anywhere in the tree
MSC4519🟨 ●60/80MatrixRTC Transports Registrysrc/api/client/rtc.rs:7 serves the MSC4143-prefixed unstable transports route
MSC4517❌ ●0/0Federated thirdparty lookupsno server= parameter and no federation thirdparty routes; local lookups only
MSC4514❌ ●0/0EDU size limitno 65536 byte EDU cap; only the 24 MiB global request body limit applies
MSC4513βœ… ◐90/90Standard HTTP status codes for all endpoints, current and futurecentral kind to status map emits 413, 429, 502, 504 with Matrix error bodies
MSC4512❌ ●0/0Delegating parts of the Client-Server and Server-Server API to application se…no proxy_prefix/proxy_url in AS registration; no appservice/fed_proxy route
MSC4511❌ ●0/0Topological query API with sparse fieldsets and Merkleized metadatano topological query endpoint, sparse fieldsets or Merkleized metadata
MSC4509❌ ●0/0Auto join on accepted knockno auto-join on accepted knock; prev_sender emission is pre-existing
MSC4508🟨 ◐50/70Sliding Sync Extensions: Common format and Typingtyping extension present, but in the pre-MSC m.typing shape and unadvertised
MSC4507❌ ●0/0Return additional room state from /_matrix/federation/v1/hierarchy/{roomId}federation /hierarchy has no additional_state param or m.public_state
MSC4506❌ ●0/0Push Rules for Knockingno recipient_permission condition and no .m.rule.knock default rule
MSC4505❌ ●0/0Push Rules for Live Location Sharingno beacon push rules; ruma’s default ruleset defines none
MSC4503❌ ●0/0External Protocol Handlesm.external_handle unrecognized; generic MSC4133 passthrough only
MSC4502❌ ●0/0Targeted and unrestricted room member queriesno is_joined route, no scope token, no AS registration scopes
MSC4501❌ ◐0/0Social Media on Matrixno m.social.* handling; the plumbing it rides on is generic and pre-existing
MSC4500❌ ●0/0State accumulator endpoint and transaction digestsno LtHash accumulator, state_hashes payload or reconciliation endpoint
MSC4499🟨 ◐40/50Strict server signing key caching and key ID uniquenesskeys cached and persisted, but extend() overwrites so last seen wins
MSC4498❌ ●0/0Holding messages pending moderation (via policy servers)policy server client handles 200 and 400 only; no 202 M_HELD path
MSC4497❌ ●0/0Filter state events by type in /state endpoint/state returns full room state; no types query parameter
MSC4496❌ ●0/0Calendar Events, Invites, and Availability in Matrixno calendar rooms, RSVP handling or availability query endpoints
MSC4495❌ ●0/0Selective Presenceno sharing config, no EDU recipients or stream_id, no query endpoint
MSC4494❌ ●0/0Membership-based invite blockingno deny_public action; msc4380 filter has no mutual-room evaluation
MSC4492βœ… ◐90/100Clarify that pagination tokens are directionlessPduCount tokens already directionless and shared across the named endpoints
MSC4491❌ ●0/0Invite reasons in room creationcreateRoom passes reason None to invite; no invite_reason field
MSC4490❌ ●0/0Surfacing room contacts when a join or knock does not succeedno contact field on join or knock rejections; MSC4489 also absent
MSC4486❌ ●0/0Listing delayed events with filtering & paginationMSC4140 delayed events absent entirely, so the list endpoint has no base
MSC4485❌ ●0/0Homeserver feature controlsno .well-known/matrix/featured route
MSC4484❌ ●0/0Server Administration OAuth Scopeno OAuth scope gating on admin endpoints; no msc4484 flag
MSC4480❌ ●0/0MSC4480 Sliding Sync Extension: Sticky Eventsno sticky events; ruma unstable-msc4480 feature not enabled
MSC4473❌ ●0/0Proxied room alias resolutionNo federation v2 query/directory; no signing/proxy logic.
MSC4472❌ ●0/0Deprecated room version kindNo deprecated stability kind in room_versions capability.
MSC4470❌ ●0/0Routing reports to non-local destinations/report does not accept must_send_to; no fan-out.
MSC4469❌ ●0/0Reporting to remote servers (EDU approach)m.report EDU not defined or routed.
MSC4467❌ ●0/0Improved Room Upgrade APIv3 upgrade only; no v4 endpoint, capability, or migration_schema.
MSC4466βœ… ●90/100Altering profile change propagationprofile.rs:20 resolve_propagation; key-copy rules met via build.rs:184
MSC4464❌ ●0/0verifiable links in profileNo /verify_profile_connection endpoint or verification backend
MSC4462❌ ◐10/10Links in ProfileIncidental MSC4133 passthrough; no m.connections parsing.
MSC4461βœ… ◐100/100Storing per-message profiles for usersPure account data passthrough; generic CS account-data covers it
MSC4458βœ… ◐90/100Handling incoming JSON in the server-server APIFederation JSON parsed first; signatures checked on the parsed object
MSC4457❌ ●0/0Generic reporting APINo /_matrix/client/v1/safety/report endpoint or harm handling
MSC4453❌ ●0/0Deprecate old room versionsv3-v5 marked unstable; v6-v9 still stable; create/upgrade not gated
MSC4452βœ… ●100/100Preview URL capabilities APIcapabilities.rs:89 advertises io.element.msc4452.preview_url
MSC4450❌ ●0/0Identity Provider selection for User-Interactive Authentication with Legacy S…UIAA SSO fallback derives idp from session, not idp_id query
MSC4449❌ ●0/0Updated /members filteringSingle membership filter only; no array support, no mutual-exclusion error
MSC4448❌ ●0/0Preview URL Site LogosNo matrix:site_logo or msc4448:site_logo in preview_url response
MSC4447❌ ●0/0Move OpenID userinfo endpoint out of /_matrix/federationOld /federation/v1/openid/userinfo present; new /_matrix/openid/v1/userinfo n…
MSC4446❌ ●0/0Allow moving the fully read marker to older eventsNo allow_backward parsing; m.fully_read written with no order check
MSC4445❌ ◐0/0Clarify /sync timeline orderNo msc4445 unstable_features flags advertised
MSC4440❌ ●0/0Profile Biography via Global ProfilesGeneric MSC4133 passthrough only; no m.biography validation
MSC4439🟨 ●70/85Encryption key URIs in /.well-known/matrix/supportcheck.rs:780 validates URI and rejects raw keys; new https MUST unenforced
MSC4438βœ… ●100/100Message bookmarks via account dataPure account-data convention; existing endpoints store arbitrary types
MSC4437❌ ●0/0Endpoint to replace entire profileNo PUT /_matrix/client/v3/profile/{userId} replace-all endpoint
MSC4433❌ ●0/0Image Packs and Room UpgradesRoom upgrade does not transfer m.room.image_pack or update m.image_pack.rooms
MSC4432❌ ●0/0Server-wide room name overridesNo m.room.name.server_wide propagation; no capability
MSC4431❌ ●0/0Personalised room name overridesServer side passively allows m.room.name.private as account data
MSC4430❌ ●0/0Member KeysNo member-key room version, no /member_key federation endpoint
MSC4429βœ… ●85/85Profile Updates for Legacy SyncFiltered legacy profile updates; no atomic snapshots or whole-user drops.
MSC4428❌ ●0/0Stable identifiers for Room MembersNo member_info or unsigned.stable_id added to events or sync
MSC4427❌ ●10/10Custom banners for user profilesNo m.banner_url handling; MSC4133 plumbing accepts it opaquely
MSC4426βœ… ●90/90User Status Profile FieldsBoth budgets enforced with 400 M_TOO_LARGE; no rate limiting anywhere in the …
MSC4425❌ ●0/0Ephemeral mediano ephemeral query param; no DELETE on /_matrix/client/v1/media/…/….
MSC4420❌ ●0/0Duplicate one-time key error response for /keys/uploadadd_one_time_key silently overwrites; no M_DUPLICATE_ONE_TIME_KEY emitted.
MSC4417❌ ●0/0URL Previews via Appservicesclient preview_url exists; no appservice fan-out or namespace check.
MSC4416❌ ●0/0Optionally requiring policy server signatures in a roomdepends on MSC4284; no policy-server signature checks anywhere.
MSC4413βœ… ◐100/100Remove private join_ruleprivate join_rule treated as unknown; effective semantics already aligned.
MSC4406🟨 ●50/55M_SENDER_IGNORED error codesrc/api/client/{room/event.rs:74,context.rs:86,relations.rs:175}; M_SENDER_IG…
MSC4401❌ ◐0/0Publishing client capabilities via profilesgeneric profile keys exist; logout cleanup of client_capability missing.
MSC4396❌ ●0/0Inline linked mediano multipart/mixed event-with-media; no m.media mixin or M_GONE wired.
MSC4388βœ… ●90/100Secure out-of-band channel for sign in with QRrouter.rs:471 five MSC4388 routes; TTL default 600s exceeds SHOULD 300s
MSC4387❌ ●0/0M_SAFETY error codeM_SAFETY errcode not used anywhere in src/; no harms field handling.
MSC4383βœ… ●100/100Client-Server Discovery of Server Versionversions.rs:30 server object; :149 advertises net.zemos.msc4383
MSC4382❌ ●0/0Peppered hash verification for E2EE content moderationNo verification_hash check on report endpoint
MSC4371❌ ●0/0On the elimination of federation transactions.No PUT /_matrix/federation/v2/send/{eventId|eduId} endpoint
MSC4370❌ ●0/0Federation endpoint for retrieving current extremitiesNo /_matrix/federation/v1/extremities endpoint
MSC4369❌ ●0/10M_CAPABILITY_NOT_ENABLED error code for when capability is not enabled on an …Endpoints exist but return M_FORBIDDEN/Unknown not M_CAPABILITY_NOT_ENABLED
MSC4368❌ ●0/0Combine definitions of M_RESOURCE_LIMIT_EXCEEDED error code and m.server_noti…M_RESOURCE_LIMIT_EXCEEDED unused; no limit_type field
MSC4367❌ ●0/0via routes in the published room directoryPublishedRoomsChunk has no via field
MSC4366❌ ●0/0Resident servers in and around the room directorypublicRooms not filtered to rooms with joined members
MSC4365❌ ●0/0Canonical ignore list roomsNo ignored_user_list_rooms server-side filtering
MSC4363❌ ●0/0OAuth step up authenticationNo M_INSUFFICIENT_USER_AUTHENTICATION error or acr_values
MSC4361βœ… ●100/100Non-federating Membership Authorization Rule Amendmentssrc/service/rooms/state_res/event_auth/room_member.rs:56; reject m.room.membe…
MSC4360❌ ●0/0Threads extension to Sliding SyncNo /thread_updates endpoint or threads sliding sync extension
MSC4359🟨 ●50/50β€œDo not Disturb” notification settingsDnD account data passes through; device removal leaves the per device key
MSC4358❌ ●0/0Out of room server discoveryNo /discover_common_rooms federation endpoint
MSC4354❌ ●0/0Sticky EventsNo sticky object, sticky_duration_ms param, or sync sticky section
MSC4353❌ ●0/0Per-origin linear chainNo origin_predecessor field or per-origin chain validation
MSC4352❌ ●0/0Customizable HTTPS permalink base URLs via server discoveryNo permalink_base_url in /.well-known/matrix/client output
MSC4351βœ… ●100/100Odd Context LimitsContext handler biases remainder to events_after via div_ceil(2)
MSC4350❌ ●0/0Permitting encryption impersonation for appservicesNo impersonator field in device keys, no /keys/query handling
MSC4348❌ ●0/0Portable and serverless accounts in roomsportable accounts (account keys); not implemented
MSC4345❌ ●0/0Server key identity and room membershipserver key as room identity; massive auth-rule changes; not implemented
MSC4344❌ ●0/0Strike deprecated SRV service name.deprecated _matrix._tcp SRV still queried
MSC4343❌ ●0/0Making mass redactions use a new event typem.room.redactions (mass redactions) event not used; depends on MSC2244
MSC4342❌ ●0/0Limiting the number of devices per user ID30-device limit and M_TOO_MANY_DEVICES not enforced
MSC4339❌ ●0/0Allow the user directory to return full profilesuser_directory v4 with profile_fields not implemented
MSC4337❌ ●0/0Appservice API to supplement user profilesappservice profile supplement endpoint not queried
MSC4331❌ ●0/0Device Account Dataper-device account data routes not implemented
MSC4330🟨 ◐50/50specify HTTP and TLS versions which must be supportedHTTP/2 via axum/hyper available; TLS 1.2+ via rustls; not enforced as MUST
MSC4325❌ ●0/0Presence privacypresence privacy filtering by m.presence_sharing_config not implemented
MSC4322❌ ●0/0Simple Media Self-Redaction[β†’ MSC3911?] media self-redaction; no /media/redact endpoint or EDU
MSC4320❌ ●0/0Rich PresenceRich Presence m.rpc; no support for activity/media profile field
MSC4309❌ ●0/0Finalised delayed events on syncfinalised delayed events on /sync; depends on MSC4140; no impl
MSC4308❌ ●0/0Thread Subscriptions extension to Sliding SyncNo thread_subscriptions sliding sync extension; MSC4306 store absent
MSC4306❌ ●0/0Thread SubscriptionsNo thread subscription endpoints, push condition or postcontent kind
MSC4305❌ ●0/0Pushed Authorization Requests (PARs) for OAuth authenticationOIDC auth_metadata lacks PAR endpoint fields
MSC4303❌ ●0/0Disallowing non-compliant user IDs in roomsno future room version banning non-compliant user IDs
MSC4298❌ ●0/0Room version components for β€˜Redact on ban’no future room version protecting redact_events from redaction
MSC4293❌ ●0/0Redact on kick/banMSC4293 commit lives only on Continuwuity branches; current tree has no redac…
MSC4282❌ ●0/0Hint that a /rooms/{room_id}/messages request is interactiveno interactive query parameter on /messages
MSC4279❌ ●0/0Server notice roomsno notice room presets, no leave_rules, no server_notice room type filter
MSC4271❌ ◐0/0Recommended enabled-ness for default push rulesno admin override knob; uses Ruma defaults verbatim
MSC4266🟨 ●75/75Policies in /.well-known/matrix/supportmulti-lang policies reachable from config; wire key not unstable-prefixed
MSC4265❌ ◐10/10Data Protection Officer contact in /.well-known/matrix/supportsupport_role configurable; MSC role string accepted as Custom
MSC4264❌ ●0/0Tokens for Contacting Accounts or Joining Semi-Public RoomsTokens for contact / semi-public-room joins not implemented
MSC4263❌ ◐10/10Preventing MXID enumeration via key queriesMUST floor met implicitly; MAY restriction unused
MSC4262🟨 ●70/70Sliding Sync Extension: Profile UpdatesVisible updates and selected initial bases; no atomic snapshots or user drops.
MSC4261βœ… ◐80/100β€œDo not encrypt for device” flagDeviceKeys stored and served raw, so do_not_encrypt survives upload and query
MSC4259❌ ●0/0Profile Update EDUs for Federationm.profile EDU broadcast not implemented
MSC4258❌ ●0/0Federated User DirectoryFederated user_directory/search not implemented
MSC4257❌ ●0/0Profiles Arent Auth: Move profile contents to a separate eventm.room.member.profile separate event not supported
MSC4256❌ ●0/0RFC 9420 MLS mode MatrixMLS mode rooms not implemented
MSC4255❌ ●0/0Bulk Profile UpdatesBulk PUT/PATCH /profile not implemented
MSC4250❌ ●0/0Authenticated media v2 (Cookie authentication for Client-Server API)set_auth_cookie media auth not implemented
MSC4249βœ… ●100/100Removal of legacy media endpointsallow_legacy_media defaults to false; legacy disabled
MSC4247❌ ◐10/10User PronounsMSC4133 generic profile fields cover m.pronouns transparently
MSC4246❌ ●0/0Sending to-device messages as/to a serverEmpty-localpart server addressing for to-device absent
MSC4245❌ ●0/0Immutable encryption algorithmencryption_algorithm in m.room.create not honored
MSC4244❌ ●0/0RFC 9420 MLS for MatrixMLS for Matrix not implemented
MSC4243❌ ●0/0User ID localparts as Account KeysAccount keys / federation query/accounts not implemented
MSC4242❌ ●0/0State DAGsState DAGs not implemented; uses standard auth chain
MSC4235❌ ●0/0via query param for hierarchy endpointhierarchy endpoint lacks via query parameter
MSC4234❌ ●0/0Update app badge counts when rooms are readcleared_notifs read-receipt flag not handled
MSC4233❌ ●0/0Remembering which server a user knocked throughKnocked-through server not remembered; leave and rejection paths unchanged
MSC4232❌ ●0/0Attribute-Based Access Control (ABAC)ABAC permissions model; no room version implements it
MSC4228❌ ●0/0Search Redirectionoptional 403 search redirection not used
MSC4226❌ ●0/0Reports as roomsreports-as-rooms (m.report room type) not implemented
MSC4224❌ ●0/0CBOR Serializationapplication/cbor content negotiation not implemented
MSC4223❌ ●0/0Error code for disallowing threepid unbinding3pid unbind/delete endpoints not implemented at all
MSC4218❌ ●0/0Improving performance of profile changessynthetic events / m.room.user_profile not implemented
MSC4208🟨 ◐40/50Adding User-Defined Custom Fields to User Global ProfilesMSC4133 fields carry u.* generically; no 512B cap, no disallowed list
MSC4207❌ ●0/0Media identifier moderation policym.policy.rule.mxc not interpreted
MSC4204❌ ●0/0m.takedown moderation policy recommendationno m.takedown recommendation handling
MSC4203βœ… ●95/100Sending to-device events to appservicesto_device in AS txns with to_user_id/to_device_id; retain (dual /sync)
MSC4201❌ ●0/10Profiles as Rooms v2only generic /profile/{user} exists; no roomID profile lookup
MSC4198❌ ●0/0Usage of OIDC login_hintlogin_hint not parsed on authorization, device or account-management paths
MSC4196❌ ●0/0MatrixRTC voice and video calling application m.callm.rtc.slot not replicated on room upgrade; slot and intent are client scope
MSC4195🟨 ●10/10MatrixRTC Transport using LiveKit BackendMSC4143 transport advertised; no get_token, derivation, salt or delayed leave
MSC4194❌ ●0/0Batch redaction of events by sender within a room (including soft failed events)POST /rooms/{}/redact/user/{} not wired
MSC4188❌ ●0/0Handling HTTP 410 Gone Status in Matrix Server Discovery410 Gone not specially handled in well-known resolver
MSC4185❌ ●0/0Event Visibility APIno can_user_see_event endpoint
MSC4179❌ ●0/0Moderation event hidingNo m.moderation_hidden; edit fold demands same sender and type as the parent
MSC4177❌ ●0/0Add upload location hints proposalno m.upload.locations or location query param
MSC4176❌ ●0/0Translatable Errorsno localized error messages map
MSC4174❌ ●0/0Web pushNo webpush pusher kind, no /pushers/ack endpoint, no VAPID capability
MSC4173❌ ●0/0test pusherno /pushers/push test endpoint
MSC4168🟨 ●30/40Update m.space.* state on room upgradesrc/api/client/room/upgrade.rs:447; copies m.space.parent always plus m.space…
MSC4167❌ ●0/0Copy bans on room upgradebans not copied during room upgrade
MSC4166βœ… ●100/100Specify /turnServer response when no TURN servers are availableturnServer returns 404 M_NOT_FOUND when no TURN URIs configured
MSC4165βœ… ●100/100Remove own power level on deactivationpower level entry removed for self on deactivation
MSC4164βœ… ●100/100Leave all rooms on deactivationdeactivation leaves all joined/invited/knocked rooms
MSC4162❌ ◐10/10One-Time Key Reset Endpointno /keys/reset; claim ordering is implicit via key prefix iter
MSC4155βœ… ●90/100Invite filteringSix glob lists evaluated per sender; blanket block outranks the ignore list
MSC4154βœ… ●100/100Request max body sizemax_request_size default 24MB, M_TOO_LARGE returns 413
MSC4152❌ ●0/0Room labeling and filteringroom labels and /rooms/{roomId}/labels not implemented
MSC4149βœ… ●100/100Update CSP Directives for Media RepositoryMSC policy available; frame denial defaults off for attachment compatibility
MSC4145❌ ●0/0Simple verified accountsm.verified profile field and endpoint not implemented
MSC4143🟨 ◐60/60MatrixRTCGET rtc/transports served; slots and sticky membership are client and MSC4354
MSC4141❌ ●0/0Time based notification filteringtime_and_day push rule condition not supported
MSC4136❌ ●0/0Shared retry hints between serversretry_hints in /send_join response not implemented
MSC4128βœ… ●100/100Error on invalid auth where it is optionalinvalid token returns error even on optional auth endpoints
MSC4125βœ… ●90/100Specify servers to join via for federated invitesfederation invite via field used both inbound and outbound
MSC4121βœ… ●100/100m.role.moderator /.well-known/matrix/support role.m.role.moderator served via Ruma ContactRole alias and config
MSC4120❌ ●0/0Allow HEAD on /downloadHEAD on /download not wired; routes mounted via Ruma metadata GET only
MSC4117❌ ●0/0Reinstating Events (Reversible Redactions)m.room.reinstate (reversible redactions) not implemented
MSC4109❌ ●0/0Appservices & soft-failed eventsappservice v2/transactions endpoint with soft-failed events absent
MSC4108βœ… ●100/100Mechanism to allow OAuth 2.0 API sign in and E2EE set up via QR codesrc/api/oidc/device.rs:169 serves native or IdP approval; transports complete
MSC4106❌ ●0/0Join as Mutedjoin-as-muted default_membership not implemented
MSC4104❌ ●0/0Auth Lock: Soft-failure-be-gone!m.auth_lock event and auth-rule not implemented
MSC4103❌ ◐0/0Make threaded read receipts opt-in in /syncthreaded_read_receipts sync filter not implemented
MSC4102❌ ◐0/0Clarifying precedence in threaded and unthreaded read receipts in EDUsunthreaded-takes-precedence aggregation rule not enforced
MSC4100❌ ●0/0Scoped signing keysscoped signing keys / X-Matrix-Scoped not implemented
MSC4096❌ ●0/0Proposal to make forceTurn option configurable server-sideforceTurn not advertised in well-known
MSC4094❌ ●0/0Sync Server and Client Times with endpointGET /_matrix/client/v3/get_server_now endpoint missing
MSC4089❌ ●0/0Delivery Receiptsm.delivery receipts not implemented
MSC4086❌ ●0/0Event media reference countingevent-media reference counting not implemented
MSC4084❌ ●0/0Improving security of MSC2244v4 send endpoint with UIA for redactions not implemented
MSC4083❌ ●0/0Delta-compressed E2EE file transfersdelta-compressed media transfers not implemented
MSC4081❌ ●0/0Eagerly sharing fallback keys with federated serverseager fallback key sharing not implemented
MSC4080❌ ●0/0Cryptographic Identities (Client-Owned Identities)cryptographic identities/send_pdus endpoint not implemented
MSC4079❌ ●0/0Server-Defined Client Landing Pageslanding_page in well-known not implemented
MSC4078❌ ●0/0Registering pushers against push notification services should forward back fa…upstream_errcode/upstream_error not surfaced from /pushers/set
MSC4076🟨 ●60/100Let E2EE clients calculate app badge counts themselves (disable_badge_count)disable_badge_count honored when sending push notifications
MSC4074❌ ●0/0Server side annotation aggregationserver-side annotation aggregation not implemented
MSC4071❌ ●0/0Pagination Token HeadersNo X-Matrix-Pagination-* header handling.
MSC4062🟨 ◐50/50Add a push rule tweak to disable email notificationCustom tweak round trips through ruma; no email pusher to honour dont_email
MSC4060❌ ●0/0Accept room rules before speakingNo m.room.rules state event or acceptance gating.
MSC4057❌ ●0/0Static Room AliasesNo .well-known/matrix/rooms lookup before federation directory.
MSC4056❌ ●0/0Role-Based Access Control (mk II)No m.role / m.role_map RBAC support.
MSC4053❌ ◐0/0Extensible Events - Mentions mixinNo mixin push rules with room_version_supports condition.
MSC4049❌ ●0/0Sending events as a server or roomNo room version permitting non-user-ID senders.
MSC4048❌ ●0/0Authenticated key backupNo m.backup.v2.curve25519-aes-sha2 algorithm or backup_mac handling.
MSC4047❌ ●0/0Send KeysNo m.room.send_key state event or send-key auth path.
MSC4046❌ ●0/0Make & send PDU endpointsNone of the four make_pdu/send_pdu endpoints implemented.
MSC4045❌ ●0/0Deprecating the use of IP addresses in server namesNo room version banning IP-literal server names.
MSC4044❌ ●0/0Enforcing user ID grammar in roomsNo room version enforcing strict user ID grammar.
MSC4043❌ ●0/0Presence Override APINo /presence/{userId}/override endpoint.
MSC4042❌ ●0/0Disabled Presence StateNo fourth presence state; Tuwunel serves online, offline, unavailable, busy
MSC4038❌ ●0/0Key backup for MLSNo MLS or m.dmls_backup.v1.aes-hmac-sha2 backup algorithm support.
MSC4034❌ ●0/0Media limitsNo /usage endpoint and no m.storage.* fields in /config.
MSC4033❌ ●0/0Explicit ordering of events for receiptsNo order field on events or receipts.
MSC4031❌ ●0/0Pre-generating invites and room invite codespre-generated invites and m.room.invite state event not implemented
MSC4029🟨 ◐40/50Fixing X-Matrix request authenticationX-Matrix verification covers basics; canonicalization rules not fully specified
MSC4028❌ ●0/0Push all encrypted events except for muted roomsNo .m.rule.encrypted_event override in the default ruleset Tuwunel serves
MSC4027❌ ●0/0Custom Images in Reactionsshortcode 100-byte limit unenforced on send; rendering itself is client scope
MSC4023❌ ●0/0Thread ID for second-order relationunsigned.thread_id not added to events
MSC4021❌ ●0/0Archive client controlsm.room.archive_controls not relayed in /publicRooms
MSC4020❌ ●0/0Room model configurationm.room.create model object flagging not supported
MSC4019❌ ●0/0Encrypted event relationshipsm.room.relationship_encryption flag not handled by server
MSC4016❌ ●0/0Streaming and resumable E2EE file transfer with random accessNo tus, no Range, no incremental serve; MSC2246 async upload still buffers
MSC4014❌ ●0/0Pseudonymous Identitiespseudonymous identities (sender_key, mxid_mapping) not implemented
MSC4011❌ ●0/0Thumbnail media negotiationthumbnail Accept header negotiation not implemented
MSC4005❌ ◐0/0Explicit read receipts for sent eventsServer does not auto-generate read receipt on send
MSC4002❌ ●0/0Walkie talkieNo server side speaker lock; walkie, ptt, floor lock absent from src and ruma
MSC4001❌ ●0/0Return start of room state at context endpointcontext returns state at LAST event, MSC asks for state at FIRST
MSC4000❌ ●0/0Forwards fill (/backfill forwards)forwards_fill federation endpoint not implemented
MSC3999❌ ●0/0Add causal parameter to /timestamp_to_eventtimestamp_to_event causal event_id parameter not supported
MSC3998❌ ●0/0Add timestamp massaging to /join and /knockjoin/knock ts query param not honored
MSC3997❌ ●0/0Add timestamp massaging to /createRoomcreateRoom ts query param not honored (always timestamp: None)
MSC3996❌ ●0/0Encrypted mentions-only roomsm.has_mentions cleartext flag and is_encrypted_mention rule not present
MSC3995❌ ●0/0Linearized MatrixLinearized Matrix hub/participant architecture not implemented
MSC3994❌ ●0/0Display why an event caused a notificationrule_kind/rule_id not added to /notifications
MSC3993❌ ●0/0Room takeoverroom takeover variants not implemented
MSC3991❌ ●0/0Power level up! Taking the room to new heightsraise own power level above max not allowed
MSC3984❌ ●0/0Sending key queries to appservicesSending key queries to appservices intentionally removed
MSC3983❌ ●0/0Sending One-Time Key (OTK) claims to appservicesOTK claim proxy to appservice intentionally removed
MSC3982❌ ●0/0Limit maximum number of events sent to an ASno 100-event cap on appservice transactions
MSC3964❌ ●0/0Notifications for room tagsroom_tag push condition not implemented
MSC3963❌ ●0/0Oblivious Matrix over HTTPSOblivious MoH endpoints absent
MSC3960βœ… ●90/100Sliding Sync Extension: Receiptssliding sync receipts extension implemented
MSC3959βœ… ●90/100Sliding Sync Extension: Account Datasliding sync account_data extension implemented
MSC3947❌ ●0/0Allow Clients to Request Searching the User Directory Constrained to Only Hom…exclude_sources parameter on user_directory/search not implemented.
MSC3946❌ ●0/0Dynamic room predecessorm.room.predecessor state event not handled.
MSC3944❌ ●0/0Dropping stale send-to-device messagesStale-to-device cancellation/dedup logic not implemented.
MSC3934❌ ●0/0Bulk push rules change endpointPUT /pushrules_bulk/…/actions and /enabled endpoints not implemented.
MSC3933❌ ●0/0Core push rules for Extensible EventsExtensible-event default underride push rules not added.
MSC3932❌ ●0/0Extensible events room version push rule feature flagExtensible-event room version push rule gating not enabled.
MSC3931❌ ●0/0Push rule condition for room version featuresroom_version_supports push condition not enabled in tuwunel.
MSC3926❌ ●0/0Disable server-default notifications for bot users by defaultenable_predefined_push_rules registration body field not implemented.
MSC3922❌ ●0/0Removing SRV records from homeserver discoverySRV record discovery still active; would need code removal.
MSC3917❌ ●0/0Cryptographically Constrained Room MembershipCryptographic membership (RRK / RSK / signed memberships) not implemented.
MSC3914❌ ●0/0Matrix native group call push rule.m.rule.room.call push rule + call_started condition not implemented.
MSC3911❌ ●0/0Linking media to eventsattach_media query, /media/copy, restrictions block in federation media not p…
MSC3909❌ ●0/0Membership based mutesMembership-based mutes via new mute/leave-mute states; not implemented.
MSC3901❌ ◐0/0Deleting Statemeta-MSC of sub-proposals; obsolete-state cleanup not implemented
MSC3896❌ ●0/0Appservice mediaappservice media namespace not implemented
MSC3895❌ ●0/0Federation API Behaviour of Partial-State Resident ServersM_UNABLE_DUE_TO_PARTIAL_STATE error code not implemented
MSC3890βœ… ●100/100Remotely silence local notificationsdevice removal deletes local_notification_settings via MSC3391 tombstone
MSC3885🟨 ●70/80Sliding Sync Extension: To-Deviceto_device extension uses its own opaque since token in v5 sync
MSC3884βœ… ●90/100Sliding Sync Extension: E2EEsliding sync e2ee extension implemented
MSC3883❌ ●0/0Fundamental state changesdraft proposal, no concrete API; would require new room version
MSC3881❌ ●0/0Remotely toggling push notifications for another clientpusher enabled and device_id fields not exposed
MSC3874❌ ●0/0MSC3874 Loading Messages excluding Threadsrel_types and not_rel_types filters absent; org.matrix.msc3874 not advertised
MSC3872❌ ◐0/0Order of rooms in Spacesmanual room ordering in spaces; vague proposal, no API defined
MSC3871❌ ●0/0Gappy timelineNo gaps field on /messages and no org.matrix.msc3871 versions flag
MSC3870❌ ●0/0Async media upload extension: upload to URLupload_url field and /complete endpoint not implemented
MSC3865βœ… ●100/100User-given attributes for usersclient-side; uses generic account_data endpoints already implemented
MSC3864βœ… ●100/100User-given attributes for roomsclient-side; uses generic account_data endpoints already implemented
MSC3851❌ ●0/0Allow custom room presets when creating a roomonly standard RoomPreset variants accepted; no custom string presets
MSC3848❌ ●0/0Introduce errcodes for specific event sending failures.no M_INSUFFICIENT_POWER/M_NOT_JOINED/M_ALREADY_JOINED errcodes emitted
MSC3847❌ ●0/0Ignoring invites with policy roomsno policy room handling for m.policies account data
MSC3843❌ ●0/0Reporting content over federationfederation /rooms/{}/report/{} endpoint not implemented
MSC3840❌ ◐0/0Ignore invitesclient-side ignored invites account data; no server behavior required
MSC3839❌ ●0/0primary-identity-as-keyNo public-key identity or challenge login; five login types, none key-based
MSC3837❌ ●0/0Cascading profile tags for push rulesno profile_tags array; only single profile_tag handled
MSC3834❌ ●0/0Opportunistic user key pinning (TOFU)TOFU signing key is client-side; no server hooks
MSC3814🟨 ●75/90Dehydrated devices with SSSSAll four routes wired; events endpoint is the deprecated POST, not the GET
MSC3767❌ ●0/0Time based notification filteringtime_and_day push condition not present
MSC3759❌ ●0/0Leave event metadata for deactivated usersdeactivation leaves omit m.deactivated metadata
MSC3744❌ ●0/0Support for flexible authenticationno flexible-auth /register or /account/authenticator endpoints
MSC3726❌ ●0/0Safer Password-based Authentication with BS-SPEKEopen MSC; no BS-SPEKE login/register/password flows
MSC3723❌ ●0/0Federation /versionsopen MSC; no /_matrix/federation/versions endpoint
MSC3713❌ ●0/0Alleviating ACL exhaustion with ACL Slotsopen MSC; no ACL slot state-key handling
MSC3682❌ ●0/0Sending Account Data to Application ServicesAS transactions do not include account_data field
MSC3673❌ ●0/0Encrypting ephemeral data unitsbranch MSC; no encrypted EDU envelope support
MSC3672❌ ●0/0Sharing ephemeral streams of location databranch MSC; no m.beacon EDU support or location streaming
MSC3664βœ… ●80/88Pushrules for relationsreply default, relation eval, rule repair; no insert-time lone-key reject
MSC3644🟨 ●50/100Extensible Events: Edits and repliesEdits fold with no m.new_content, but a type-changing edit is dropped
MSC3618❌ ◐0/0Simplify federation /send responsebranch MSC; tuwunel returns full pdus map per current spec
MSC3593❌ ●0/0Safety Controls through a generic Administration APInone of the proposed /admin/* endpoints exist; tuwunel uses admin room
MSC3571❌ ●0/0Aggregation paginationno /aggregations endpoint; no aggregation pagination
MSC3570❌ ◐0/0Relation history visibility changesno special history visibility for relations; new room version needed
MSC3547❌ ●0/0Allow appservice bot user to read any rooms the appservice is part ofmembers.rs:77 TODO stands; an appservice must still masquerade or be joined
MSC3488❌ ◐10/10m.location: Extending events with location datalocation event types pass through; no m.tile_server in well-known
MSC3480❌ ◐10/20Make device names privateallow_device_name_federation config gates device name exposure
MSC3469❌ β—‹0/0Mandate HTTP Range on Content Repository Endpointsdepends on object_store / hyper response writer for ranges
MSC3468❌ ●0/0MXC to Hashesno MXC-to-hash endpoints; no /clone or /hash routes
MSC3414❌ ●0/0Encrypted state eventsno encrypted state event handling or encrypted_state in publicRooms
MSC3395❌ ●0/0Synthetic Appservice Eventsno synthetic appservice events emitted on register/login/logout
MSC3394❌ ●0/0New auth rule that only allows someone to post a message in relation to anoth…no auth rule restricting top-level vs threaded messages
MSC3389❌ ●0/0Redaction changes for events with a relationno m.relates_to preservation in redactions
MSC3386❌ ●0/0Unified Join Rulesno unified allow_join/allow_knock; no new room version
MSC3385🟨 ◐30/40Bulk small improvements to room upgradesupgrade copies fixed list of state, not all m.* state nor account_data
MSC3361❌ ●0/0Opportunistic Direct Pushno direct pusher kind or notifications in sync
MSC3360❌ ●0/0Server Statusno /server/status endpoint or m.server.status event
MSC3359❌ ●0/0Delayed Pushno jitter pusher field; not advertised in versions
MSC3356❌ ●0/0Add additional OpenID user info fieldsopenid userinfo returns only sub
MSC3338❌ ●0/0Adding iframe specifics to preview jsonurl preview has no iframe/oEmbed support
MSC3325❌ ●0/0Upgrading invite-only roomsupgrade does not switch invite-only rooms to restricted
MSC3277❌ ●0/0Scheduled messagesno scheduled-message at= query param support
MSC3269❌ ●0/0An error code for busy serversno M_SERVER_BUSY error code
MSC3262❌ ●0/0aPAKE authenticationSRP6a aPAKE login/registration not implemented
MSC3219❌ ●0/0Space Flairspace flair events and member flag not implemented
MSC3216❌ ●0/0Synchronized access control for Spacesspace-level synchronized PL replication absent
MSC3214βœ… ◐90/100Allow overriding m.room.power_levels using initial_stateinitial_state PL effectively replaces default via later append
MSC3202βœ… ●88/95Encrypted Appservicesdevice_lists.changed, OTK counts, fallback types under org.matrix.msc3202
MSC3192❌ ●0/0Batch state endpointbatch_state endpoint not implemented
MSC3189❌ ●0/0Per-room/per-space profilesper-room/space scoped profile API not implemented
MSC3144❌ ●0/0Allow Widgets By Default in Private Roomsprivate_chat preset does not lower widgets PL
MSC3079❌ ●0/0Low Bandwidth Client-Server APIbranch; no CoAP/CBOR/DTLS support
MSC3051❌ ◐0/0A scalable relation formatopen; m.relations array not handled
MSC3038❌ ●0/0Typed Typing Notificationsbranch; no events field on typing
MSC3032❌ ◐20/20Thoughts on updating presenceeffective presence; busy supported, profile-as-rooms absent
MSC3020❌ ◐0/0Support for private federation networksbranch; same proposal as MSC3018, not implemented
MSC3018❌ ◐0/0Support for private federation networksbranch; no m.networks capability or network query
MSC3015βœ… ●100/100Room state personal overridesoverride.* room account data rides the generic per-room endpoint and sync
MSC3014❌ ●0/0HTTP Pushers for the full event with extra rooms informationopen; no full_event_with_rooms pusher format
MSC2970🟨 ◐40/50Remove pusher path requirementpath/scheme constraints relaxed; lacks fragment/userinfo/8000-char checks
MSC2962❌ ●0/0Managing power levels via Spacesno auto_users or m.room.power_level_mappings handling
MSC2961❌ ◐0/10External Signaturesendpoint accepts arbitrary signature keys; object form discarded
MSC2943❌ ●0/0Return an event ID for membership endpointsmembership endpoint responses lack event_id
MSC2938❌ ●0/10Report content to moderatorstarget field and room_moderators routing not implemented
MSC2923❌ ◐0/0Matrix to Matrix connectionsspeculative idea-stage; no concrete API
MSC2895🟨 ●20/30Improving the way membership lists are queriedmembership filter present but single valued; no /rooms, joined_* not deprecated
MSC2883❌ ●0/0[WIP] Matrix-flavoured MLSWIP MLS; no DMLS support
MSC2882❌ ◐0/0[WIP] Tempered Transitive TrustWIP; new public_user_signing key, m.device.signature EDU not implemented
MSC2855❌ ◐0/0Server-Initiated Client Clear-Cache & Reloadno clear-cache signal mechanism
MSC2848❌ ●0/10Globally unique event IDsonly legacy GET /event/:eventId; new room-scoped path absent
MSC2846❌ ●0/0Decentralizing media through CIDsopen; CID-based MXC URLs not implemented
MSC2845❌ ◐0/5Thirdparty Lookup API for Telephone Numberssrc/api/client/thirdparty.rs returns empty protocols TODO
MSC2836❌ ●0/0Threadingadvertises org.matrix.msc2836 in /versions but no event_relationships
MSC2828❌ ◐0/0Proposal to restrict allowed user IDs over federationno extended_user_id_char auth rule restriction
MSC2815βœ… ◐90/100Proposal to allow room moderators to view redacted event contentinclude_unredacted_content honored; admin or redact PL gates access
MSC2812❌ ●0/0Role-based power structuresrole-based power proposal still draft; no m.role events
MSC2802❌ ●0/0Full Room Abstractionopen meta proposal to redesign spec; not implementable as-is
MSC2787❌ ●0/0Portable Identitiesno UPK/UDK/attestation infrastructure
MSC2785❌ ●0/0Event notification attributes and actionsno notification_attribute_data or notifications_profile endpoints
MSC2782βœ… ●90/90Pushers with the full event contentfull_event opt-in works; membership absent, user_is_target now correct
MSC2772❌ ◐0/0Notifications for Jitsi Callsno .m.jitsi default underride push rules
MSC2757❌ ●0/0Sign EventsNo event_signing key type; no client signature plumbing
MSC2755❌ ●0/0Lazy load roomsNo room_limit_by_complexity filter handling
MSC2753❌ ●0/0Peeking via Sync (Take 2)No /peek or /unpeek; no peek section in sync
MSC2749❌ ●0/0Per-user E2EE on/off settingNo m.encryption capability; no force/preference logic
MSC2730❌ ●0/0Verifiable forwarded eventsNo /forward/{targetRoomId}; no signature validation
MSC2716❌ ●0/0Incrementally importing history into existing roomsNo /batch_send; no m.room.insertion/batch/marker handling
MSC2695🟨 ●40/40Get event by ID over federationFederation /event exists; no client /events/{eventId} revival
MSC2673❌ ●0/0Notification LevelsNo notification_levels concept; push rules used
MSC2596❌ ◐0/0Proposal to always allow rescinding invitesVendor room version net.maunium.msc2596 not registered; no rescind exception …
MSC2513❌ ◐0/10Allow clients to specify content for membership eventsMembership endpoints accept reason only; no content body param
MSC2499🟨 ◐10/30Fixes for Well-known URIssrc/service/resolver/well_known.rs follows redirects; 12288B cap; uses /versions
MSC2487❌ ◐0/0Filtering for AppservicesNo filter field on appservice registration
MSC2477❌ ◐0/0User-defined ephemeral events in roomsNo PUT /rooms/{roomId}/ephemeral/{type}/{txnId} route
MSC2448🟨 ●70/80Using BlurHash as a Placeholder for Matrix Mediablurhash on profile, federation query, media upload, member events
MSC2444🟨 ●30/30Proposal for implementing peeking over federation (peek API)world_readable allowed on some federation reads; no /peek subscription API
MSC2438❌ ●0/10Local and Federated User Erasure Requestsdeactivate present but no erase param, no fed/AS erase endpoints
MSC2437βœ… ◐100/100Store tagged events in Room Account Datam.tagged_events stored via existing room account_data routes
MSC2413❌ ●0/0Remove client_secretrequestToken routes served, but client_secret stays required by the ruma type
MSC2391❌ ●0/0Federation point-queries.No federation point-query state endpoint
MSC2388❌ ●0/0Toward the EDU-to-PDU transition: Read Receipts.Receipts are EDU only; no m.receipt PDU and no m.read rel_type in either tree
MSC2380❌ ●0/0Matrix Media Information APINo /media/r0/info/{origin}/{media_id} endpoint
MSC2379❌ ●0/0MSC 2379: Add /versions endpoint to Appservice API.No /_matrix/app/versions probe code
MSC2375❌ ◐0/0Appservice Invite StatesAppservice transactions send raw PDU JSON without invite_room_state injection
MSC2370❌ ●0/0Resolve URL APINo /resolve_url endpoint in source
MSC2326❌ ●0/0Label based filteringNo labels/not_labels EventFilter support; no m.label handling
MSC2316❌ ●0/0Federation queries to aid with database recoveryNo /_matrix/federation/v1/query/members route
MSC2301❌ ●0/0Proposal for an /info endpoint on the CS APINo /info merger of /versions; no branding fields exposed
MSC2300❌ ●0/0Proposal for a /ping endpoint on the CS APINo GET /_matrix/client/r0/ping route
MSC2278❌ ◐0/10Proposal for deleting content for expired and redacted messagesNo DELETE /media client API; only admin-only delete helper
MSC2270🟨 ●30/30Proposal for ignoring invitesm.ignored_room_list absent; generic account-data store only, no sync filter
MSC2228❌ ●0/0Proposal for self-destructing messagesself_destruct fields not honored
MSC2214❌ ●0/0Joining upgraded private roomsm.room.previous_member event not implemented
MSC2213❌ ●0/0Rejoinability of private roomsrejoin_rule field not implemented
MSC2212❌ ●0/0Third party user power levelsthird_party_users not present in PL handling or auth rules
MSC2199❌ ●0/0Canonical DMs (server-side middle ground edition)no m.kind in sync summary; uses legacy m.direct account data
MSC2190βœ… ◐80/80Allow appservice bots to use /syncappservice token defaults to sender_localpart user
MSC2162❌ ●0/0Signaling Errors at Bridgesno m.bridge_error on appservice delivery failure; absent in src and ruma
MSC2127❌ ●0/0Proposal for a federation capabilities APIfederation /capabilities and per-room capabilities not present
MSC2108❌ ●0/0Sync over Server Sent Eventsno /sync/sse or text/event-stream paths
MSC2102❌ ◐0/0Enforce Canonical JSON on the wire for the S2S APIno canonical-JSON wire enforcement on inbound S2S
MSC1974❌ ●0/0Crypto Puzzle Challengeopen; hashcash-style proof-of-work never adopted
MSC1973❌ ●0/0Hash Key User IDopen; speculative scheme never adopted
MSC1921❌ ◐0/0Cancellation of 3pid validation tokens3pid cancelToken endpoints not implemented; 3pid stack stubbed
MSC1862❌ ◐20/20Presence flag for capabilities APIpresence on/off enforced; m.presence not in /capabilities response
MSC1797❌ ●0/0Proposal for more granular profile error codesbranch; M_USER_NOT_FOUND/M_PROFILE_* error codes not used
MSC1780❌ ●0/0Add DIDs and DID names as admin accounts to HSopen; m.did medium not supported in 3pid endpoints
MSC1768❌ ●0/0Proposal to authenticate with public keysopen; m.login.proof.* not implemented
MSC1763❌ ●?/0Proposal for specifying configurable per-room message retention periods.no m.room.retention support; /retention/configuration endpoint absent
MSC1762❌ ●0/0Support user-owned identifiers as new 3PID typeno m.did mediums; ruma Medium is email or msisdn; 3PID invites rejected
MSC1740❌ ◐?/0Using the Accept header to select an encodingno Accept-based content negotiation; only application/json supported
MSC1607❌ ◐0/0Proposal for room alias grammaralias parsing delegated to Ruma RoomAliasId; no NFKC/punycode/blacklist logic
MSC1228❌ ●?/0Removing MXIDs from eventsremoving mxids never merged; no user_room_key or pseudo IDs in src

Closed

Sorted by MSC number, highest first. Out-of-scope rows are listed in the Out of scope section.

MSCStatusImplTitleNote
MSC4465❌ ●0/0On-Demand Fetch for Missing EventsGET /event/{eventId} returns M_NOT_FOUND; no federation fallback.
MSC4463❌ ◐0/0Backfilling Pinned EventsNo pinned-events backfill on join or on pinned_events update.
MSC4435❌ ●0/0Room slowmodeNo m.room.slowmode handling
MSC4418βœ… ●100/100Make destination a required server authentication fielddestination required on inbound and outbound; cited verbatim in MSC.
MSC4415🟨 ●0/50Make /_matrix/client/v3/admin/whois/{userId} only available to adminswhois is served, but a non admin may still look up their own user
MSC4403❌ ●0/0Forbid event_id on PDUs received over federationnew room version forbidding event_id on PDUs; com.nhjkl.msc4403.opt2 absent.
MSC4400❌ ●0/0Remove the depth field from PDUsnew room version removing depth field; com.nhjkl.msc4400.opt1 absent.
MSC4390❌ ●0/0Room Blocking API[β†’ MSC4375?] no client admin endpoints for room block/delete; only federation…
MSC4384🟨 ◐?/50Supporting alternative room directory sortingLargest-first sort is hardcoded; no alt-sort hook
MSC4375❌ ●0/0Admin Room ManagementNo /_matrix/client/v1/admin/rooms/* endpoints
MSC4373❌ ●0/0Server opt-out of specific EDU typesNo federation EDU-type preference endpoint is registered
MSC4329❌ ●0/0Inviting with authorizationfederation /v3/invite with create event in state not implemented
MSC4324βœ… ◐80/80Fixing MSC4289’s power level for tombstonestombstone PL=150 set; matches highest-anchored intent for default config
MSC4317❌ ●0/0Signed profile datasigned profile data; no m.signed profile field handling
MSC4316❌ ●0/0External cross-signing signatures with X.509 certificates and (semi-)automate…X.509 cross-signing; no external signature support
MSC4299βœ… ◐100/100trusted usersGeneric account data stores and syncs m.trusted_users; no trust logic to break
MSC4294❌ ●0/0Ignore and mass ignore invitesno ignored_inviters list, no auto invite cleanup
MSC4276❌ ●0/0Soft unfailure for self redactionsno self-redaction soft-fail bypass
MSC4214❌ ●0/0Embedding Widgets in Messagesclosed MSC; m.widget event/capability not implemented
MSC4202❌ ◐20/20Reporting User Profilesclient report endpoint exists; federation forwarding absent
MSC4184❌ ●0/0Dynamic Notification Suppressionno m.push_rules_executed field on events
MSC4158βœ… ◐80/100MatrixRTC focus information in .well-knownrtc_foci exposed in .well-known/matrix/client
MSC4148❌ ●0/0Permitting HTTP(S) URLs for SSO IdP iconsSSO IdP icon limited to mxc URIs in config; HTTP(S) not allowed
MSC4124❌ ●0/0Simple Server Authorizationm.server.knock/participation auth events not implemented
MSC4123❌ ●0/0Allow knock -> join transitionnew room version with knock to join transition not implemented
MSC4107❌ ●0/0Feature-focused versioningfeatures key on /versions not added
MSC4098❌ ●0/0Use the SCIM protocol for provisioningSCIM user provisioning endpoints absent (closed MSC)
MSC4097❌ ●0/0Interactions between media redirection and authenticationmedia redirect symmetric encryption not implemented
MSC4072❌ ●0/0Handling devices with no one-time keys in /keys/claimMissing/exhausted devices are filtered out, not returned as empty objects.
MSC4069❌ ●0/0Inhibit profile propagationNo ?propagate query parameter on profile endpoints.
MSC4059❌ ●0/0Mutable event contentNo mutable-event EDU or hashes-omitted detection.
MSC4058❌ ●0/0Additive EventsNo m.additive EDU or unsigned.m.additive metadata pipeline.
MSC4051βœ… ◐80/80Using the create event as the room IDV12 RoomVersionRules.room_create_event_id_as_room_id dispatched.
MSC4037βœ… β—‹90/100Thread root is not in the threadReceipts allowed for thread roots; spec wording is mostly client-facing.
MSC4018❌ ●0/0Reliable call membershipReliable call membership endpoints (PUT/DELETE) not present
MSC4015🟨 ◐70/70Voluntary Bot indicatorsMSC4133 profile serves the bot key; no copy into m.room.member on join
MSC3975❌ ●0/0rel_type for Repliesm.reply rel_type not handled
MSC3968❌ ●0/0Poorer featuresm.room.event_features state event not enforced
MSC3961βœ… ●90/100Sliding Sync Extension: Typing Notificationssliding sync typing extension implemented
MSC3945🟨 ◐50/50Private device namesFederation hides device names by default; CSAPI /keys/query still leaks them …
MSC3915❌ ●0/0Owner power levelPL150 owner role / creator-defaults-to-150 not implemented.
MSC3912❌ ●0/0Redaction of related eventswith_rel_types / with_relations on /redact not implemented.
MSC3902❌ ◐20/20Faster remote room joins over federation (overview)sends omit_members but immediately fetches full state
MSC3887❌ ◐0/0List matching push rulesclosed MSC; list-matching in event_match not implemented
MSC3866❌ ●0/0M_USER_AWAITING_APPROVAL error codeM_USER_AWAITING_APPROVAL error code not implemented
MSC3862❌ ●0/0event_match (almost) anythingevent_match only matches strings; non-string primitives not converted
MSC3859❌ ●0/0Add well known media domain proposalno m.media_server in well-known responses
MSC3852❌ ●0/0Expose user agent information on Devicelast_seen_user_agent not exposed on Device
MSC3782❌ ●0/0Matrix public key login specm.login.publickey login type not implemented
MSC3779❌ ●0/0β€œOwned” state eventsowned state events require new room version
MSC3772❌ ●0/0Push rule for mutually related eventsrelation_match push condition not implemented
MSC3761❌ ●0/0State event change controlm.event.acl ACL events for state not implemented
MSC3760❌ ●0/0State sub-keysstate_subkey requires new room version; not present
MSC3754βœ… ●95/100Removing profile information[β†’ MSC4133?] DELETE profile field route serves avatar_url and displayname; ke…
MSC3741❌ ●0/0Revealing the useful login flows to clients after a soft logoutlogin does not return per-user flows for soft-logout tokens
MSC3720❌ ●0/0Account status endpointbranch MSC; no /account_status endpoints (CS or federation)
MSC3659❌ ●0/0Invite Rulesclosed MSC; no invite_rules account data dispatch
MSC3613❌ ●0/0Combinatorial join rulesbranch MSC; no combinatorial join_rules array logic in tuwunel
MSC3588βœ… ●100/100WIP: MSC3588: Encrypted Stories As Roomsmsc3588.stories.block-list rides the generic account-data store and sync
MSC3585βœ… ●100/100Allow the base event to be omitted from /federation/v1/event_auth responseevent_auth handler omits the requested event itself per MSC
MSC3572❌ ◐0/0Relation aggregation cleanupno relations rename; m.relations only
MSC3523❌ ●0/0Timeboxed/ranged relations endpointno from_target/to_target query params on /relations
MSC3429❌ ●0/0Individual room preview APIno /rooms/{id}/preview endpoint
MSC3391βœ… ●100/100API to delete account datasrc/api/client/account_data.rs:126; both DELETE routes via Ruma<R>; tombstone…
MSC3306❌ ●0/0How to count unread messagesnotification_count uses push-rule Notify actions, not MSC3306 algo
MSC3302βœ… ●100/100Stories via To-Device-Messagingm.stories.blocklist and m.stories.ignore ride the generic account-data path
MSC3244❌ ●0/10Room version capabilitiescapabilities lacks room_capabilities knock/restricted info
MSC3174❌ ●0/0An error code for spam rejectionsM_ANTISPAM_REJECTION error code not used
MSC3137βœ… ●100/100Define space room type, subset of MSC1772type:m.space in m.room.create accepted; used in directory and spaces
MSC3125❌ ●0/0Limits API β€” Part 5: per-Instance limitsper-instance limits admin API absent
MSC3105❌ ●0/0Previewing user-interactive flowsOPTIONS preflight for UIA flows not implemented
MSC3073❌ ●0/0Role based access controlclosed; rbac/m.role not implemented
MSC3060❌ ●0/0Room labelsbranch; m.room.labels not surfaced in publicRooms
MSC3053❌ ●0/0Limits API β€” Part 2: per-Room limitsclosed; no admin/limits endpoints or m.limits.* events
MSC3026βœ… ●100/100busy presence statePresenceState::Busy and msc3026.busy_presence flag
MSC3013❌ ●0/0Encrypted Pushclosed; no encrypted-push algorithm support
MSC3012❌ ●0/0Post-registration terms of service APIbranched; no /terms endpoint or m.terms account data
MSC3007❌ ●0/0Forced insertion and room blocking by self-banningclosed; no insert_member power or /insert endpoint
MSC3006❌ ●0/0Bot Interactionsclosed; bot-interaction event types not implemented
MSC3005❌ ●0/0Streaming Federation Eventsclosed; no streaming federation transport
MSC2957❌ ●0/0Cryptographically Concealed CredentialsPAKE-style login flow; closed; not implemented
MSC2912❌ ●0/0Setting cross-signing keys during registrationno device_signing field accepted by /register
MSC2839❌ ◐0/0Dynamic User-Interactive Authenticationclosed; UIA flows are static in Tuwunel
MSC2835❌ ◐0/10Add UIA to the /login endpointclosed; /login does not consume UIA auth dict
MSC2821❌ ●0/0Test PusherPOST /pushers/push test endpoint not implemented
MSC2810🟨 ●70/70Consistent globs specificationACL and push globs go through wildmatch; the backslash escape is unimplemented
MSC2773❌ ◐0/0Room kindsclosed; no m.kind summary or m.room.kind handling
MSC2706❌ ●0/0IPFS as a media repositoryNo IPFS support; no m.ipfs capability
MSC2704βœ… ◐100/100Handling duplicate media on /upload + clarifying the origin of an MXC URIFresh MXC per upload; no dedup
MSC2703βœ… ●100/100Media ID grammar32-char alphanumeric media IDs; opaque
MSC2700🟨 ◐50/50Thumbnail requirements for the media repoimage crate handles png/jpeg/gif; no svg/video
MSC2697🟨 ●40/60Device dehydration[β†’ MSC3814] Dehydration served at the MSC3814 prefix; no claim and no token r…
MSC2654❌ ●0/0Unread countsNo unread_count in sync; no msc2654 markers
MSC2638❌ ●0/0Ability for clients to request homeservers to resync device listsNo /devices/refresh endpoint; no msc2638 marker in src
MSC2631βœ… ◐80/80Add default_payload to PusherDataruma HttpPusherData flattens custom data; default_payload accepted via passth…
MSC2625❌ ◐0/0Add mark_unread push rule actionNo mark_unread action; sync exposes only highlight/notification counts
MSC2579βœ… ●100/100Improved tagging supportGeneric account-data path carries m.tag.<tag>; ordering rules are client-side
MSC2463❌ ◐0/0Exclusion of MXIDs in push rules content matchingclosed MSC; no MXID exclusion in push rule content matching
MSC2416βœ… ●90/100Add m.login.jwt authentication typem.login.jwt fully wired in session module
MSC2389❌ ●0/0Toward the EDU-to-PDU transition: Typing.Typing is EDU only; no m.typing PDU; a later message does not end typing
MSC2356❌ ●0/0Bulk /joined_members endpointNo POST /joined_members bulk endpoint in src/api
MSC2314❌ ●0/40Backfilling Current Statesrc/api/server/state.rs:14 requires event_id; no current-state branch
MSC2306βœ… ◐100/100Removing MSISDN password resetsmsisdn pw reset endpoint absent; ThreepidDenied on msisdn
MSC2271❌ ●0/0Proposal for TOTP 2FANo TOTP endpoints, no m.login.totp UIA stage
MSC2261βœ… ●100/100Allow m.room.aliases events to be redacted by room adminsSubsumed by MSC2432/v6 redaction rules
MSC2260🟨 ●50/50Update the auth rules for m.room.aliases eventsSubsumed by MSC2432/v6 auth rules; aliases sender-domain check enforced
MSC2233❌ ●0/0Unauthenticated Capabilities APIno /capabilities/server unauthenticated endpoint
MSC2153βœ… ●100/100Add a default push rule to ignore m.reaction eventsRuleset::server_default() includes .m.rule.reaction via Ruma
MSC2061βœ… ●100/100make the trailing slash on GET /_matrix/key/v2/server/ optionalsrc/api/router.rs:250 routes both /key/v2/server and /server/{key_id}
MSC2000❌ ●0/0MSC 2000: Proposal for server-side password policiesbranch; no /password_policy endpoint or password validation
MSC1998❌ ●0/0Two-Factor Authentication Providersclosed; TOTP/recovery 2FA never adopted by spec
MSC1953βœ… ●100/100Remove prev_content from the essential keys listruma redact() does not retain prev_content
MSC1943βœ… ●100/100Set v3 to be the default room versiondefault room version V12 (>= v3)
MSC1935🟨 ●30/40Key validity enforcement[β†’ MSC2076] no valid_until_ts enforcement; v4 and v5 supported but listed uns…
MSC1888βœ… ●90/100Proposal to send EDUs to appservices[β†’ MSC2409] appservice receive_ephemeral with EDU push; src/service/sending/s…
MSC1840🟨 ●60/100Typed roomsroom_types filter on sliding sync only; v3 filter API unextended
MSC1818βœ… ●100/100Remove references to presence listspresence list endpoints absent (compliant by removal)
MSC1796❌ ◐0/0Proposal for improving notifications for E2E encrypted roomsbranch; m.mentions on encrypted events not honored server-side
MSC1777❌ ●0/0Proposal for implementing peeking over federation (server pseudousers)branch; server pseudouser peeking not implemented
MSC1776❌ ●0/0Proposal for implementing peeking via /sync in the CS APIbranch; POST /sync with peek not implemented
MSC1731❌ ◐0/0Mechanism for redirecting to an alternative server during SSO loginbranch; homeserver query param on sso loginToken redirect not added
MSC1714❌ ●0/0using the TLS private key to sign federation-signing keysbranch/abandoned 2018; no rsa key id, no TLS-cross-signing in src/api/server/…
MSC1687❌ ●?/0Proposal for storing an encrypted recovery key on the server to aid recovery …no PBKDF passphrase backup logic; auth_data passes through opaquely
MSC1597🟨 ◐20/30Grammars for identifiers in the Matrix protocolvalidate_strict is dispatched; ruma admits / and +; ID grammars unenforced
MSC1497βœ… ●100/100Advertising support of experimental features in the CS APIunstable_features map present in /_matrix/client/versions
MSC1425βœ… ●100/100Room Versioningroom versioning fully present; STABLE_ROOM_VERSIONS in core/config
MSC1227βœ… ●80/90Proposal for lazy-loading room members to improve initial sync speed and clie…lazy_load_members supported via filter; service in rooms/lazy_loading
MSC1194❌ ●0/0A way for HSes to remove bindings from ISes (aka unbind)no IS unbind; delete_3pid and deactivate always return no-support
MSC688βœ… ●80/100Room Summaries (was: Calculate room names server-side)sync summary with heroes and counts; v3 heroes capped at 5 members
MSC441🟨 ●20/20Support for Reactions / Aggregations[β†’ MSC2675/MSC2676] relations paging only; no vote coalescing, counts or QoS …

Out of scope

MSCs marked n/a: the homeserver-applicable scope is empty (addressed to an identity server, integration manager, widget or client only, or governance/process), or the MSC is unimplemented and superseded by another MSC. Scope is a property of the proposal, not of what Tuwunel has chosen to build. Listed here for audit; the Inv column carries each row’s inventory bucket in place of the (uniformly empty) Impl cell.

MSCStatusInvTitleNote
MSC4534⬛ ●openSimple room rulesclient-enforced room rules; the MSC avoids server-side changes by design
MSC4533⬛ ●openMatrixRTC widget actions for authenticated livekit realted endpointswidget API actions delegating MSC4195 endpoints; no homeserver scope
MSC4531⬛ ◐openDeprecate legacy VoIPspec deprecation of legacy VoIP; no server behaviour change is required
MSC4529⬛ ●openClient-side profile overridesaccount data read by clients; MSC states servers need no knowledge of it
MSC4522⬛ ◐openUsername colorsclient rendering rules; the server side is generic MSC4133 field storage
MSC4518⬛ ●openRegistriesprocess MSC for spec registries; no homeserver behaviour is defined
MSC4515⬛ ●openRTC Transports discovery for widgetswidget API action; the hosting client calls the endpoint, no server scope
MSC4504⬛ ●openUsing a global version number for the entire specification (v2)process MSC for the Spec Core Team; only the SCT may implement it
MSC4489⬛ ●openPer-room contact state eventclient and bot only; m.room.contact is ordinary room state
MSC4487⬛ ●openDeprecate internal use of matrix.to navigationclient-only; server sends no matrix.to or matrix: URIs
MSC4483⬛ ●openEncrypted Account Dataclient-only; server already stores account data opaquely
MSC4482⬛ ●openAbility to bookmark messagesclient-only; m.bookmarks room type and m.bookmark event are passthrough
MSC4481⬛ ●openNon-sigil matrix.toclient-only URL format; server emits no matrix.to links
MSC4476⬛ ●openImage pack roomsclient-only; m.image_pack room type needs no server-side handling
MSC4475⬛ ●openMedia galleries by inline MXC linksInline MXC gallery rendering is client-side; link tracking deferred
MSC4474⬛ ◐openClarify usage of content blocks in Extensible EventsSpec clarification for MSC1767 authors; no homeserver requirement
MSC4471⬛ ●openStreaming ephemeral event updates for room eventsMSC states no homeserver work required; to-device transport suffices
MSC4468⬛ ◐openReporting to communities (via to-device)Pure state-event plus to-device passthrough; no HS-specific work.
MSC4460⬛ ●openExtensible Events - Alternative unstable supportClient-side hybrid extensible-events rendering rules; no Tuwunel dispatch.
MSC4459⬛ ●openImage pack referencesClient-side image pack reference field; homeserver passes events through tran…
MSC4456⬛ ●openHarms taxonomyHarm identifier taxonomy; the server MUST is conditional on other MSCs
MSC4455⬛ ●openCatch-all property for spacesClient-only space catch-all state event; MSC says servers not required
MSC4454⬛ ●openDeprecating Spoiler Fallback In Media RepositoryClient spoiler body construction; no homeserver behavior
MSC4451⬛ ●openDeprecate notifications endpointSpec-only deprecation; endpoint still served per MSC
MSC4444⬛ ●closedMalicious PDUsApril Fools joke MSC, status closed
MSC4441⬛ ●openEncrypted User Profile Annotations via Account DataClient-side encrypted account data convention; no server change
MSC4421⬛ ●closedStandardize the spec on US Englishspec house-style proposal (en-US); no protocol surface.
MSC4414⬛ ●openDesign decision - Errorsdesign-direction proposal with no technical changes.
MSC4412⬛ ●openWidget Base PostMessage APIWidget postMessage negotiation; no homeserver footprint
MSC4411⬛ ●openWidget State EventWidget state event schema; server stores m.widget state opaquely
MSC4409⬛ ●mergedClarify thumbnailing behavior in E2EEClient thumbnail guidance in E2EE; no homeserver requirement
MSC4407⬛ ●openSticky Events (Widget API)widget API for sticky events; no homeserver involvement beyond MSC4354.
MSC4405⬛ ●openDeprecate the emoji method for SAS verificationdeprecates emoji SAS in favor of decimal; client-side method choice.
MSC4404⬛ ●closedCompare emoji by name rather than imageadds accept_languages to to-device verification; client SAS UI guidance.
MSC4397⬛ ●openTags as Spacesaccount_data key m.tag_space points at a private space; server is opaque.
MSC4392⬛ ●openEncrypted reactions and repliesclient puts m.relates_to inside encrypted payload; server forwards untouched.
MSC4391⬛ ●openSimplified in-room bot commandsin-room bot command UI; state and message events forwarded opaquely.
MSC4389⬛ ●openImage ordering within packsimage pack ordering is account-data; server passes through opaque blobs.
MSC4386⬛ ●openAutomatically sharing secrets after device verificationclient-to-client to-device verification protocol; server forwards opaque events.
MSC4385⬛ ●openPushing secrets to other devicesClient to-device convention; server forwards m.secret.push opaquely
MSC4381⬛ ◐mergedRemove plaintext sender keyRemoval of plaintext sender_key is client-side; server is opaque
MSC4377⬛ ●openClarify Image Pack OrderingImage pack ordering is client-side account/state data convention
MSC4362⬛ ●openSimplified Encrypted State EventsNo encrypt_state_events handling in m.room.encryption
MSC4357⬛ ●openLive Messages via Event ReplacementClient-only convention reusing m.replace; no server work
MSC4356⬛ ●mergedRecently used emojiPure client-side account data convention; no server work
MSC4349⬛ ●openCausal barriers and enforcementcausal barrier terminology and deferred authorization not adopted
MSC4347⬛ ●closedEmoji verification imagesclient-side emoji image rendering for SAS verification; not server
MSC4340⬛ ●openPrompts and partial commands for in room commands.bot command prompts; client-side concern, no server changes
MSC4334⬛ ●openAdd m.room.language state event.m.room.language state event; not whitelisted/handled specially
MSC4333⬛ ●openRoom state API for moderation botsmoderation bot state event; client-side concern
MSC4332⬛ ●openIn-room bot commandsin-room bot commands; client-side concern, no server changes
MSC4321⬛ ●openPolicy Room Upgrade Semanticspolicy room upgrade move/transition semantics not handled
MSC4313⬛ ●mergedRequire HTML <ol> start Attribute supportclient HTML rendering requirement; not applicable to homeserver
MSC4310⬛ ◐openMatrixRTC decline m.rtc.notificationevent-only MSC; ruma feature enabled, no homeserver-specific behavior
MSC4302⬛ ●openExchanging FHIR resources via Matrix eventsnew event type for FHIR, no server logic
MSC4301⬛ ●closedEvent capability negotiation between clientsclient-to-client capability negotiation
MSC4300⬛ ●openProcessing status requests & responsesclient-to-client status request/response in events
MSC4296⬛ ●openMentions for device IDsclient-side mentions field extension
MSC4295⬛ ●openBot bounce limit - a better loop prevention mechanismbot/client behavior; servers relay events unmodified
MSC4292⬛ ●openHandling incompatible room versions in clients[β†’ MSC4331]
MSC4287⬛ ●mergedSharing key backup preference between clientsclient-side account data for key backup preference
MSC4286⬛ ●openApp store compliant handling of payment links within eventsclient-side HTML rendering attribute
MSC4283⬛ ●openDistinction between Ignore and Blockterminology MSC, no implementation surface
MSC4281⬛ ●closedMitigating Membership Mistakes, or β€œInvisible” Cryptographyclosed April 1 joke MSC; client-only encryption mode
MSC4278⬛ ●mergedMedia preview controlsClient rendering preference in account data; the only server clause is a MAY
MSC4274⬛ ●openInline media galleries via msgtypesnew client msgtype m.gallery, no server logic
MSC4273⬛ ●openApprove and Disapprove ratings for moderation policiesnew event type for moderation tools, no server logic
MSC4270⬛ ●openMatrix Glossaryglossary/spec doc proposal, not an implementation feature
MSC4269⬛ ●openUnambiguous mentions in bodyclient-side message body composition
MSC4268⬛ ●mergedSharing room keys for past messagesclient-only E2EE key sharing; server only relays to-device and stores media
MSC4253⬛ ●openModifying or rejecting accepted MSCsSpec process MSC; no implementable behavior
MSC4252⬛ ●openExtensible Events modification: State event handlingClient-side guidance for extensible state events
MSC4238⬛ ●openPinned events read markerClient-set m.read.pinned_events account data only
MSC4231⬛ ●closedBackwards compatibility for media captionsClient-side caption fallback rendering; no server work
MSC4230⬛ ●mergedβ€˜Animated’ flag for imagesevent-only; passthrough; merged in spec
MSC4229⬛ ●closedPass through unsigned data from /keys/upload to /keys-querytemplate/example proposal; no real change
MSC4227⬛ ●openAudio based quick loginno MSC4108 rendezvous support; audio/DTMF login absent
MSC4221⬛ ●openRoom Bannersevent-only; passthrough
MSC4220⬛ ●openLocal call rejection (m.call.reject_locally)event-only; m.call.reject_locally not interpreted
MSC4211⬛ ●openWebXDC on Matrixevent-only; passthrough
MSC4209⬛ ●openUpdating endpoints in-placedeprecation policy clarification; no code
MSC4206⬛ ●openModeration policy auditing and contextm.policy.rule.context not interpreted server-side
MSC4205⬛ ●openHashed moderation policy entitieshashed entity policies not interpreted
MSC4197⬛ ●openCopy-Paste Hintsevent content field; passthrough
MSC4193⬛ ●openSpoilers on Mediaevent content field; passthrough; nothing for HS to do
MSC4192⬛ ●openComparison of proposals for ignoring invitescomparison/research document, not a feature
MSC4171⬛ ●openService membersClient-side name and avatar computation; server filtering explicitly rejected
MSC4161⬛ ●openCrypto terminology for non-technical userscrypto terminology guidance for clients
MSC4159⬛ ●mergedRemove the deprecated name attribute on HTML anchor elementsclient-side HTML rendering recommendation
MSC4157⬛ ●openDelayed Events (widget-api)widget-api only; not a homeserver concern
MSC4153⬛ ●mergedExclude non-cross-signed devicesclient-side cross-signing enforcement and to-device filtering
MSC4150⬛ ●openm.allow recommendation for moderation policy listsm.allow recommendation for policy lists is client-side
MSC4147⬛ ●mergedIncluding device keys with Olm-encrypted to-device messagessender_device_keys in Olm plaintext is client-side
MSC4146⬛ ●closedShared Message Draftsshared message drafts via m.drafts rooms is client-side
MSC4144⬛ ●openPer-message profilesm.per_message_profile is client-only event content
MSC4142⬛ ●mergedRemove unintentional intentional mentions in repliesclient-side guidance for m.mentions in replies
MSC4139⬛ ●openBot buttons & conversationsm.prompts mixin is client-only event content
MSC4132⬛ ●mergedDeprecate Linking to an Event Against a Room Alias.deprecation of event-on-room-alias URIs is client-only
MSC4131⬛ ●openHandling m.room.encryption eventsclient-side guidance on handling m.room.encryption events
MSC4119⬛ ●openVoluntary content flaggingclient-only m.room.context flagging mixin; server is content-agnostic
MSC4114⬛ ●openMatrix as a password managerclient-only password manager via rooms; no server-side requirements
MSC4113⬛ ●closedImage hashes in Policy Listsm.policy.media_hash unknown to server (closed MSC)
MSC4110⬛ ●openFewer Featuresm.room.event_features state event has no special server handling
MSC4101⬛ ●openHashes for unencrypted mediahashes field on unencrypted media info not consumed by server
MSC4095⬛ ●openBundled URL previewsClient-embedded preview data; the proposal asks a homeserver for nothing
MSC4092⬛ ●openEnforce tests around sensitive parts of the specificationprocess MSC about test enforcement; no protocol changes
MSC4077⬛ ●mergedImproved process for handling deprecated HTML featuresprocess MSC for HTML feature deprecation; no server work
MSC4075⬛ ◐openMatrixRTC Notification Event (call ringing)Client ring and notify semantics over ordinary timeline and to-device events
MSC4073⬛ ●openShepherd teamsprocess MSC about SCT shepherd teams; not protocol
MSC4052⬛ ●closedHiding read receipts UI in certain roomsPure client-side hint via m.hide_ui state event.
MSC4050⬛ ●openMXID verificationPure client/third-party signaling via custom event types.
MSC4039⬛ ●openAccess the Content repository with the Widget APIWidget API extension; entirely client-to-widget scope.
MSC4036⬛ ●closedRoom organization by promoting threadsPure client UI behavior toggled by m.promote_threads state event.
MSC4032⬛ ●openAsset CollectionsAsset Collections defines client-side data structures for 3D worlds; no serve…
MSC4013⬛ ●openPoll history cacheclient convention using existing relations API
MSC4006⬛ ●openAnswered Elsewhere for VoIPVoIP m.call.hangup reason value, client concern
MSC4004⬛ ●openunified view of identity serviceidentity service API, not homeserver
MSC4003⬛ ●openSemantic table attributesHTML table sanitization is client concern
MSC3985⬛ ●openBreak-out roomsm.breakout state event not handled
MSC3979⬛ ●openRevised feature profilesclient feature profiles, not a homeserver concern
MSC3978⬛ ●closedDeprecate room taggingroom tagging not deprecated; still implemented
MSC3977⬛ ●openIntroductionIETF MIMI framework draft, not a Matrix MSC
MSC3973⬛ ●openSearch users in the user directory with the Widget APIwidget API extension; client/embedder feature
MSC3972⬛ ●closedLexicographical strings as an ordering mechanismclient-side ordering algorithm
MSC3971⬛ ●openSharing image packsimage pack sharing/links not implemented
MSC3969⬛ ●closedSize limitsm.room.size_limits state event not enforced
MSC3956⬛ ●openExtensible Events - Encrypted Eventsclient-side extensible encrypted event format
MSC3955⬛ ●openExtensible Events - Automated event mixin (notices)m.automated mixin for extensible events not implemented
MSC3954⬛ ●openExtensible Events - Text EmotesExtensible m.emote event type not specifically handled.
MSC3949⬛ ●openPower Level TagsPower-level tag state event is client UX; no server enforcement.
MSC3948⬛ ●openRepository room for ThirdroomThirdRoom 3D-asset repository room type; no homeserver semantics.
MSC3935⬛ ●openCute Events against social distancingClient-side cute event msgtype; no server behavior.
MSC3927⬛ ●openExtensible Events - AudioExtensible m.audio event type not specifically dispatched.
MSC3923⬛ ●mergedBringing Matrix into the IETF processSpec-process MSC about IETF coordination; no homeserver code.
MSC3919⬛ ●openMatrix Message Format (IETF/MIMI)IETF informational draft on Matrix message format; not a server feature.
MSC3918⬛ ●openMatrix Message Transport (IETF/MIMI)IETF informational draft about Matrix as MIMI transport; not a server feature.
MSC3910⬛ ●closedContent tokens for media[β†’ MSC3916]
MSC3908⬛ ●openExpiring Policy List Recommendationsexpiring policy field interpreted by clients/bots
MSC3907⬛ ●openMute Policy Recommendationmute policy recommendation enforced by clients/bots
MSC3906⬛ ●closedProtocol to use an existing Matrix client session to complete login and setup…[β†’ MSC4108] QR sign-in protocol depends on unimplemented rendezvous
MSC3903⬛ ●closedX25519 Elliptic-curve Diffie-Hellman ephemeral for establishing secure channe…[β†’ MSC4108] client-to-client X25519 ECDH; no server role
MSC3898⬛ ●openNative Matrix VoIP signalling for cascaded SFUsVoIP SFU signalling is opaque events between clients
MSC3892⬛ ●openCustom Emotes with Encryptioncustom emotes are pure client/state-event feature
MSC3888⬛ ◐openVoice Broadcastvoice broadcast is opaque events, no server change required
MSC3886⬛ ●closedSimple client rendezvous capability[β†’ MSC4108]
MSC3880⬛ ●opendummy replies for Olmclient-side Olm dummy event behavior
MSC3879⬛ ●openTrusted key forwardsE2EE key forwarding flag is client-side
MSC3869⬛ ●openRead event relations with the Widget APIWidget API extension; homeservers do not implement widget API
MSC3868⬛ ◐openRoom Contributioncustom state event for room contribution, no server requirements
MSC3857⬛ ●openWelcome messages/screeningno m.room.welcome state event handling
MSC3849⬛ ●openObservations and Reinforcementno observation/reinforcement event handling
MSC3846⬛ ●openAllowing widgets to access TURN serverswidget TURN access; client-widget API only
MSC3845⬛ ●openDraft: Expanding policy rooms to reputationno m.opinion recommendation handling
MSC3842⬛ ●openPower levels on message (extensible) eventsproposal body is TBD; nothing to implement
MSC3825⬛ ◐openObvious relation fallback locationis_falling_back location handled by Ruma types passively
MSC3819⬛ ●openAllowing widgets to send/receive to-device messageswidget to-device is client-widget API only
MSC3817⬛ ●openAllow widgets to create roomswidget API only, no server-side surface
MSC3815⬛ ●open3D Worlds3D worlds is client-side room type and state events; no server behavior
MSC3813⬛ ●openObfuscated eventsobfuscated events; client-side dummy traffic
MSC3812⬛ ●openHint buttons in messageshint buttons in messages; client UI
MSC3803⬛ ●openMatrix Widget API v2Widget API v2 issue placeholder
MSC3796⬛ ◐openAuth/linking for content repo (and enforcing GDPR erasure)[β†’ MSC3916]
MSC3790⬛ ●closedRegister Clientsclient launcher registry; client-only
MSC3784⬛ ●mergedUsing room type of m.policy for policy roomsRoom type string only; the text leaves all handling to clients
MSC3783⬛ ●mergedFixed base64 for SAS verificationSAS MAC scheme is client-to-client crypto
MSC3780⬛ ●openKnocking on action=joinmatrix-uri client UX fallback for knock
MSC3775⬛ ●openMarkup Locations for Audiovisual Mediaevent content schema for media markup
MSC3768⬛ ●openPush rule action for in-app notifications[β†’ MSC2625]
MSC3757⬛ ●closedRestricting who can overwrite a state event.[β†’ MSC4354]
MSC3755⬛ ●openMember pronounspronouns are client member-content fields
MSC3752⬛ ●openMarkup locations for textevent content schema for text markup locations
MSC3751⬛ ●openAllowing widgets to read account dataWidget API permission, not a homeserver concern
MSC3746⬛ ●closedRender image data in reactions[β†’ MSC4027] image reactions are client-only event content
MSC3735⬛ ◐openAdd device information to m.room_key.withheld messageclient-side to-device field; server relays unchanged
MSC3725⬛ ●openContent warningsclient-side content warning event content; no server changes
MSC3700⬛ ◐mergedDeprecate plaintext sender_keyclient-side ignoring of sender_key/device_id; server is transparent
MSC3676⬛ ◐mergedTransitioning away from reply fallbacks.client-side reply-fallback transition rules; no server gate
MSC3662⬛ ●openAllow Widgets to share user MxIds to the clientwidget-to-client API; no server involvement
MSC3647⬛ ●openBring Your Own Bridge - Decentralising BridgesWIP bridge negotiation; no spec-level details, no server impl
MSC3639⬛ ●openMatrix for the social media use caseclient-side social media room/event conventions; no server changes
MSC3635⬛ ●openEarly Media for VoIPclient-side VoIP signalling; no server changes required
MSC3592⬛ ●openMarkup locations for PDF documentsclient-side PDF markup event types; no server implementation required
MSC3575⬛ ●closedSliding Sync (aka Sync v3)[β†’ MSC4186]
MSC3574⬛ ●openMarking up resourcesno m.markup.resource or annotation handling
MSC3554⬛ ●openExtensible Events - Translatable Messagesno lang field handling; ruma feature not enabled
MSC3553⬛ ●openExtensible Events - Videosunstable-msc3553 not enabled in ruma features
MSC3552⬛ ●openExtensible Events - Images and Stickersunstable-msc3552 not enabled in ruma features
MSC3551⬛ ●openExtensible Events - Filesunstable-msc3551 not enabled; no extensible m.file event
MSC3531⬛ ●openLetting moderators hide messages pending moderationclient-only m.visibility event; server explicitly unchanged
MSC3517⬛ ●closedβ€œMention” Pushrule[β†’ MSC3952]
MSC3510⬛ ●closedLet users with the same power level kick/ban/demote each other.[β†’ MSC3915]
MSC3489⬛ ◐openm.beacon: Sharing streams of location data with historyBeacons are plain state and message events; no homeserver clause in the text
MSC3464⬛ ●closedAllow Users to Post on Behalf of Other Usersno m.on_behalf_of or m.allows_on_behalf_of handling
MSC3417⬛ ●openCall room room typecreation_content type=m.call passes through createRoom
MSC3401⬛ ●openNative Group VoIP signallingonly default PL for m.call/m.call.member; no to-device signaling
MSC3382⬛ ●closedInline message AttachmentsPR-style amendment to MSC2881, not a standalone proposal
MSC3381⬛ ●mergedChat PollsPolls are client-side by design; the poll push rules belong to MSC3930
MSC3368⬛ ●openMessage Content Tagsno message-content tag awareness
MSC3309⬛ ●openRoom Countersno m.room.counter event handling
MSC3291⬛ ●mergedMuting in VoIP callsserver passes call events opaquely; ruma has the type
MSC3286⬛ ●closedMedia spoilersserver passes events opaquely; no spoiler-aware code
MSC3282⬛ ●closedExpose enable_set_displayname in capabilities response[β†’ MSC3283]
MSC3279⬛ ●closedExpose enable_set_displayname in capabilities response[β†’ MSC3283]
MSC3270⬛ ●closedSymmetric megolm backupserver stores backup auth_data/session_data opaquely
MSC3265⬛ ●closedLogin and SSSS with a Single Passwordclient-only construction; explicitly no server-side changes
MSC3255⬛ ●closedUse SRV record for homeservers discovery by clientsclient-side discovery via SRV; closed proposal
MSC3246⬛ ●openAudio waveforms (extensible events)client message-content field; no server role
MSC3245⬛ ●openVoice messages (using extensible events)client message type; ruma feature enabled but server has no role
MSC3230⬛ ●openSpaces top level orderm.space_order is account_data; uses generic API
MSC3226⬛ ●mergedPer-room spell checkper-room spellcheck language is account_data; no server logic
MSC3217⬛ ●openClientside hints for a soft kickm.softkick hint on member event not implemented
MSC3215⬛ ●closedAristotle - Moderation in all thingsdecentralized moderation room scheme not implemented
MSC3184⬛ ●openChallenges Messagesclient-only challenge message types
MSC3160⬛ ●openAttach timezone metadata to time information in messagesclient-only HTML <time> markup in messages
MSC3131⬛ ●openVerifying with QR codes v2client-only QR verification v2 method names
MSC3124⬛ ●closedHandling spoilers in plain-text message fallbackclient-only spoiler fallback handling
MSC3122⬛ ●mergedDeprecate starting key verifications without requesting firstclient-only deprecation of to-device verification start
MSC3089⬛ ●openFile treesclient-only data trees on m.space; no server change required
MSC3088⬛ ●openRoom subtypingclient-only m.room.purpose state event; no server change required
MSC3086⬛ ●openAsserted Identity for VoIP Callsclient VoIP event content; server transparent
MSC3077⬛ ●mergedSupport for multi-stream VoIPmerged; sdp_stream_metadata is event content
MSC3074⬛ ●closedProposal for URIs conforming to RFC 3986 syntax.client URI scheme; not a server feature
MSC3068⬛ ●closedCompliance tiersinformational compliance terminology only
MSC3067⬛ ●closedPrevent/remove legacy groups from being in the specmeta MSC; spec-process decision to drop legacy groups
MSC3062⬛ ●openBot verificationclient-only verification method
MSC3061⬛ ●mergedSharing room keys for past messagesclient-only; sender-flagged room key property
MSC3009⬛ ●openWebsocket transport for client <–> widget communicationsclient to widget transport; not server-side
MSC3008⬛ ●openScoped access for widgetswidget client/UA concern; obsoleted by OIDC scopes
MSC2997⬛ ●openAdd t-shirtjoke proposal; t-shirt design
MSC2974⬛ ●openWidgets: Re-exchange capabilitieswidget-side request_capabilities; client-only
MSC2949⬛ ●openProposal to clarify β€œRequires auth” and β€œRate-limited” in the specspec-text clarification; no homeserver behavior
MSC2931⬛ ●openWidget navigate permissionwidget navigate capability; client-only
MSC2881⬛ ●closedMessage Attachmentsnew event content schema (m.attachment relation); generic event passthrough
MSC2876⬛ ●closedAllowing widgets to read events in a roomwidget read_events action; client-only
MSC2874⬛ ●mergedSingle SSSSclient interpretation of SSSS default key; account data passthrough
MSC2873⬛ ●openIdentifying clients and user settings in widgetswidget URL template variables and theme_change; client-only
MSC2872⬛ ●openMove the widget title to the rootwidget definition field reorder; client-only
MSC2871⬛ ●openSending approved capabilities back to the widgetwidget-only feature; homeserver not involved
MSC2813⬛ ●openHandling invalid Widget API requestsclient/widget error handling rules
MSC2801⬛ ●mergedMake it explicit that event bodies are untrusted dataspec note: clients should treat events as untrusted
MSC2790⬛ ●openWidgets - Prompting for user input within the clientclient-side widget modal API
MSC2781⬛ ●mergedRemove reply fallbacks from the specificationremoves client-side reply fallback; client behavior change
MSC2779⬛ ●closedClarify that event IDs are globally uniquespec clarification issue; closed; no server behavior change
MSC2775⬛ ◐closedLazy loading room membership over federation[β†’ MSC3706/MSC3902]
MSC2774⬛ ●mergedGiving widgets their ID so they can communicateclient widget URL template variable
MSC2771⬛ ●closedBookmarksclient-side bookmarks via account_data; closed
MSC2765⬛ ●mergedWidget avatarsclient-side widget definition field
MSC2762⬛ ●openAllowing widgets to send/receive eventsclient-side widget API; homeserver not involved
MSC2758⬛ ●mergedCommon grammar for textual identifiersmeta grammar guideline for future identifiers; not directly implementable
MSC2747⬛ ●openTransferring VoIP CallsClient-only m.call.replaces event semantics
MSC2746⬛ ●mergedImproved Signalling for 1:1 VoIPClient-side VoIP; HS relays m.call.* and serves unsigned.age on all read paths
MSC2723⬛ ●openForwarded message metadataClient-side m.forwarded content field only
MSC2713⬛ ●mergedRemove deprecated Identity Service endpointsIdentity Service endpoints; not a homeserver feature
MSC2644⬛ ●openmatrix.to URI syntax v2matrix.to URI syntax; client-only
MSC2630⬛ ◐mergedChecking public keys in SAS verificationClient SAS verification crypto; server transports key.verification events
MSC2618⬛ ●closedHelping others with mandatory implementation guidesSpec process MSC; no homeserver behavior
MSC2589⬛ ◐closedImprove repliesClient reply rendering; closed MSC; server ignores reply_body fields
MSC2582⬛ ◐mergedRemove mimetype from EncryptedFile objectRemoves mimetype example from spec; pure spec/client cleanup
MSC2557⬛ ◐mergedClarifications on spoilersClient-only spoiler rendering clarification
MSC2545⬛ ◐mergedImage Packs (Emoticons & Stickers)Client pack UX; HS clauses are a federation no-reject plus an optional check
MSC2530⬛ ◐mergedBody field as media captionClient rendering of body+filename for media msgtypes
MSC2529⬛ ◐closedUse existing m.room.message/m.text events as captions for images[β†’ MSC2530] Client-only relation/caption rendering; superseded by MSC2530
MSC2516⬛ ◐closedAdd a new message type for voice messagesClient-only msgtype; server does no msgtype-specific handling
MSC2475⬛ β—‹closedAPI versioningSpec process meta-MSC about API version naming; closed
MSC2474⬛ ◐openAdd key backup version to SSSS account dataClient-side SSSS field; server stores account_data opaquely
MSC2472⬛ ◐mergedSymmetric SSSSClient-side SSSS crypto; server only stores account_data
MSC2461⬛ ◐closedProposal for Authenticated Content Repository API[β†’ MSC3916]
MSC2427⬛ ◐openProposal for JSON-based message formattingClient-only message formatting alternative to HTML
MSC2425⬛ ●closedRemove Authentication on /submitToken Identity Service APIIdentity Server endpoint; not a homeserver concern
MSC2422⬛ ◐mergedAllow color as attribute for <font> in messagesClient HTML sanitizer change for <font color>
MSC2399⬛ ◐mergedReporting that decryption keys are withheldClient-only m.room_key.withheld to-device event
MSC2398⬛ ◐openproposal to allow mxc:// in the β€œa” tag within messagesClient HTML rendering policy for <a href=mxc:>
MSC2390⬛ ◐closedOn the EDU-to-PDU transition.Process MSC; closed; recommends no further EDU use
MSC2385⬛ ◐openDisable URL Previews, alternative methodClient-only url_previews array on m.room.message
MSC2376⬛ ◐closedDisable URL PreviewsClient-only HTML attribute hint; server has no role
MSC2366⬛ ◐mergedKey verification flow additions: m.key.verification.ready and `m.key.verifi…Client-side verification flow over to-device; server transports
MSC2359⬛ ◐closedE2E Encrypted SFU VoIP conferencing via Matrix[β†’ MSC3401] Architectural sketch for client+SFU; no homeserver requirements
MSC2354⬛ ◐openDevice to device streaming file transfersClient-only WebRTC signaling over event types; server transports opaquely
MSC2346⬛ ●openMSC 2346: Bridge information state eventm.bridge state event; bridge/client concern
MSC2324⬛ ●mergedFacilitating early releases of software dependent on specProcess change about FCP and stable prefixes
MSC2320⬛ ●mergedVersions information for identity serversIdentity server endpoint, not homeserver
MSC2315⬛ ●openAllow users to select β€œnone” as an integration managerClient account_data m.integrations toggle
MSC2313⬛ ●mergedModeration policies as rooms (ban lists)State events m.policy.rule.*; no homeserver enforcement
MSC2312⬛ ●mergedURI scheme for MatrixClient-side URI scheme; no homeserver endpoint required
MSC2299⬛ ●openProposal to add m.textfile msgtypeClient-only msgtype m.textfile
MSC2291⬛ ●openConfiguration to Control CrawlingBot-only advisory state event; no homeserver behavior
MSC2284⬛ ●mergedMaking the identity server optional during discoveryClient-side .well-known FAIL_PROMPT behavior
MSC2241⬛ ◐mergedKey verification in DMsClient-side verification flow over m.room.message; server passes events trans…
MSC2232⬛ ●closedExpose Homeserver Email Configuration in Registration Parametersproposal text is the empty MSC template
MSC2230⬛ ◐mergedStore Identity Server in Account Dataclient behavior over generic account data; HS already supports account data
MSC2211⬛ ●openIdentity Servers Storing Threepid Hashes at Restidentity server storage details; not HS
MSC2192⬛ ●openInline widgetsclient extensible event m.embed; no server logic
MSC2191⬛ ●mergedMarkup for mathematical messagesclient formatted_body rendering only
MSC2184⬛ ●mergedAllow the HTML <details> tag in messagesclient HTML rendering; no server impact
MSC2063⬛ ◐closedAdd β€œserver information” public API proposalclosed; no real proposal text (template file only)
MSC2010⬛ ●mergedMSC 2010: Proposal to add client-side spoilersclient-side rendering of data-mx-spoiler in formatted_body
MSC1961⬛ ●mergedIntegration manager authenticationmerged; integration-manager auth API is on the manager, not homeserver
MSC1960⬛ ●mergedOpenID Connect information exchange for widgetsOpenID Connect exchange for widgets; the new flow is widget-to-client, server…
MSC1959⬛ ●openSticker picker APIbranch; sticker picker API on integration manager, not homeserver
MSC1958⬛ ●closedWidget architecture changesclient widget account_data shape; servers do not interpret widget content
MSC1956⬛ ●openIntegrations APIbranch; integrations API is integration-manager scope, not homeserver
MSC1951⬛ ◐closedCustom emoji and sticker packs in Matrixbranch; client/integration manager concept; uses generic rooms
MSC1920⬛ ◐closedAlternative texts for stickersbranch; client-side rendering field on m.sticker; no server logic
MSC1902⬛ ●closedSplitting the media repo into a client-side and server-side component[β†’ MSC3916]
MSC1849⬛ ◐closedProposal for aggregations via relations[β†’ MSC2674/MSC2675/MSC2676]
MSC1781⬛ ●openProposal for associations for DIDs and DID namesidentity-server endpoints for DID validation; not a homeserver concern
MSC1779⬛ ●mergedProposal for Open Governance of Matrix.orggovernance/foundation document; not a homeserver feature
MSC1769⬛ ●openProposal for extensible profiles as roomsbranch; profile-as-rooms not implemented
MSC1722⬛ ●closedSupport for displaying math(s) in messagesclient-side rendering of MathML in formatted_body; servers do not interpret
MSC1719⬛ ●mergedOlm unwedgingclient-only behavior (m.dummy, session re-creation rate-limit)
MSC1717⬛ ◐mergedKey verification mechanismsto_device transport carries m.key.verification.* events
MSC1716⬛ ●openOpen on device APIclient-only m.openondevice event type; nothing server-side to implement
MSC1704⬛ ●mergedmatrix.to permalink navigationserver-side requirement is via= on /join; src/api/client/membership/join.rs:79
MSC1703⬛ ●closedencrypting recovery keys for online megolm backupsamendment PR to MSC1687; closed without merge
MSC1700⬛ ◐closedImproving .well-known discovery of homeserverswell-known client+server discovery served from config
MSC1680⬛ ●closedcross-signing of devices to simplify key verificationempty Google-doc stub; cross-signing specified in MSC1756
MSC1544⬛ ●mergedKey verification using QR codesamendment PR to MSC1543; no separate proposal text
MSC1543⬛ ●mergedBi-directional Key verification using QR codesclient-only QR verification over send-to-device; server is opaque
MSC1318⬛ ●closedProposal for Open Governance of Matrix.org[β†’ MSC1779] governance proposal; not a homeserver feature
MSC1310⬛ ●closedProposal for a media information APIempty Google-doc stub; media info API never specified
MSC1301⬛ ◐closedProposal for improving authorization for the matrix profile APIlegacy 2018 issue (closed) tracked via redirect; profile-share-room limit not…
MSC1286⬛ ●openFormally spec an API for interacting with integration managerslegacy 2018 issue tracked via cross-repo redirect; integration manager API is…
MSC1267⬛ ●closedInteractive key verification using short authentication stringsstub Google doc; SAS verification specified later (MSC2241+); client-only fea…
MSC1236⬛ ●openMatrix Widget API v2legacy 2018 issue tracked via redirect; widget API v2 is a client-side concern
MSC1229⬛ ◐openMitigating abuse of the event depth parameter over federationlegacy 2018 issue tracked via redirect; depth-abuse mitigations not implement…
MSC1225⬛ ●closedExtensible event types & fallback in Matrixempty Google-doc stub; extensible events specified later in MSC1767
MSC1215⬛ ●closedGroups as Rooms[β†’ MSC1772] empty Google-doc stub; groups feature dropped in favor of Spaces
MSC971⬛ ●closedAdd groups stuff to spec[β†’ MSC1772] groups stuff superseded by Spaces (MSC1772); proposal is doc link…
MSC701⬛ ◐openAuth/linking for content repo (and enforcing GDPR erasure)legacy 2016 issue tracked via redirect; auth/linking for content repo address…
MSC455⬛ ●closedDo we want to specify a matrix:// URI scheme for rooms? (SPEC-5)[β†’ MSC2312] stub Google doc; matrix:// URI scheme superseded by matrix: URI (…