From 2a71b7aeee775ac68f6fdf0aa7de67ba8c7297ef Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Thu, 20 Aug 2026 13:13:48 +0300 Subject: [PATCH] Revert "Stop advertising MatrixRTC transports in the client well-known" This reverts commit 421b5926908c999da79a252ff625ef0cb3c22d6a. The org.matrix.msc4143.rtc_foci property is indeed gone from MSC4143 and Element Call v0.24.0 no longer reads it, but Element Web does not ship that version of Element Call yet. v1.12.26 embeds Element Call v0.22.0, which discovers transports through the well-known property. That embedded copy cannot consult the homeserver's RTC transports API instead: it runs as a widget, a widget holds no access token and the API requires authentication, so its own discovery code skips the API branch outright. Newer Element Call versions ask their host client over the widget API (MSC4515) and Element Web already implements that side of it, but the widget has to speak it too. Dropping the property therefore left Element Web and Element Desktop users with MISSING_MATRIX_RTC_TRANSPORT when starting a call. The restored variables carry a comment about why the property stays, and the changelog entry is rewritten to announce the revert. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 22 +++++-------------- group_vars/matrix_servers | 8 +++++++ .../matrix-static-files/defaults/main.yml | 17 ++++++++++++++ .../tasks/validate_config.yml | 5 ----- .../public/.well-known/matrix/client.j2 | 4 ++++ 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7aa393fc..e3bcc14d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,16 @@ -# 2026-08-19 +# 2026-08-20 -## MatrixRTC transports are no longer advertised in the client well-known +## MatrixRTC transports are advertised in the client well-known again This only affects you if you have the [Matrix RTC stack](docs/configuring-playbook-matrix-rtc.md) or [Element Call](docs/configuring-playbook-element-call.md) enabled. -Your MatrixRTC transport (the URL of your [LiveKit JWT Service](docs/configuring-playbook-livekit-jwt-service.md)) used to be advertised in two places: the `org.matrix.msc4143.rtc_foci` property of the `/.well-known/matrix/client` file, and the homeserver's own `/_matrix/client/unstable/org.matrix.msc4143/rtc/transports` API ([MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)). +Yesterday's changelog entry announced that the `org.matrix.msc4143.rtc_foci` property was gone from the `/.well-known/matrix/client` file. That turned out to be premature and has been reverted, so the property is published again as it always was. -The well-known property has since been dropped from the spec proposal and [Element Call v0.24.0](https://github.com/element-hq/element-call/releases/tag/v0.24.0) has stopped reading it, so the playbook stops publishing it as well. The homeserver API is now the single source of truth. Every homeserver that the playbook can point at a MatrixRTC stack (Synapse, continuwuity and tuwunel) already announces your transport there, so calls keep working. +The property is indeed dropped from [MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143) and [Element Call v0.24.0](https://github.com/element-hq/element-call/releases/tag/v0.24.0) no longer reads it, but Element Web (and likely other clients who move slowly or are otherwise outdated) does not ship that version of Element Call yet. Element Web v1.12.26 bundles Element Call v0.22.0, which still discovers your transport through the well-known property. It cannot use the homeserver's `/_matrix/client/unstable/org.matrix.msc4143/rtc/transports` API instead, because Element Call runs as a widget there and a widget holds no access token, while that API requires authentication. Newer Element Call versions ask their host client for the transports over the widget API ([MSC4515](https://github.com/matrix-org/matrix-spec-proposals/pull/4515)), which is what will eventually make the property unnecessary. -If your configuration defines `matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_custom` or one of its companion variables, the playbook will tell you about it. Should you wish to keep publishing the property regardless, you can do so yourself: +Dropping the property therefore broke Element Call for Element Web and Element Desktop users, with a `MISSING_MATRIX_RTC_TRANSPORT` error when starting a call. Re-running the playbook (`just install-all`) brings the property back and fixes calls. -```yaml -matrix_static_files_file_matrix_client_configuration_extension_json: | - { - "org.matrix.msc4143.rtc_foci": [ - { - "type": "livekit", - "livekit_service_url": "https://matrix.example.com/livekit-jwt-service" - } - ] - } -``` +If you worked around this by publishing the property yourself via `matrix_static_files_file_matrix_client_configuration_extension_json`, you can drop that from your `vars.yml` file now. The `matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_custom` variable and its companions are back as well. # 2026-08-13 diff --git a/group_vars/matrix_servers b/group_vars/matrix_servers index addf82b88..9f1c73173 100755 --- a/group_vars/matrix_servers +++ b/group_vars/matrix_servers @@ -6286,6 +6286,14 @@ matrix_static_files_file_matrix_client_property_m_tile_server_map_style_url: "{{ # We set this regardless of whether Ketesa is enabled, because people may wish to use a hosted (externally) Ketesa installation and still have it auto-configured. matrix_static_files_file_matrix_client_property_cc_etke_ketesa_auto: "{{ matrix_ketesa_configuration if matrix_homeserver_implementation == 'synapse' else {} }}" +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled: "{{ matrix_livekit_jwt_service_enabled }}" +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto: |- + {{ + ( + [{'type': 'livekit', 'livekit_service_url': matrix_livekit_jwt_service_public_url}] if matrix_livekit_jwt_service_enabled else [] + ) + }} + # Advertise all enabled and exposed mautrix bridges for auto-discovery by tools like Mautrix Manager. # A bridge's public address is only reachable when the playbook attaches its Traefik labels and emits the exposure router, # so we gate on these in addition to the bridge being enabled. diff --git a/roles/custom/matrix-static-files/defaults/main.yml b/roles/custom/matrix-static-files/defaults/main.yml index 9e057de27..813fad1ca 100644 --- a/roles/custom/matrix-static-files/defaults/main.yml +++ b/roles/custom/matrix-static-files/defaults/main.yml @@ -201,6 +201,23 @@ matrix_static_files_file_matrix_client_property_cc_etke_ketesa_auto: {} matrix_static_files_file_matrix_client_property_cc_etke_ketesa_custom: {} +# The `org.matrix.msc4143.rtc_foci` property has been dropped from MSC4143 in favor of the homeserver's own RTC transports API, +# but remains the only way to reach clients which cannot consult that API. +# Element Call running as a widget (which is how Element Web and Element Desktop invoke it) is one such client, +# because a widget holds no access token of its own and the API requires authentication. +# Newer Element Call versions ask their host client for the transports over the widget API (MSC4515) instead, +# so this property can go away once such versions are widely deployed. +# +# Controls whether `org.matrix.msc4143.rtc_foci`-related entries should be added to the client well-known. +# By default, if there are entries in `matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci`, we show them (by enabling this). +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled: "{{ matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci | default({}) | dict2items | length > 0 }}" + +# Controls the org.matrix.msc4143.rtc_foci property in the /.well-known/matrix/client file. +# See `matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled` +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci: "{{ matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto + matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_custom }}" +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto: [] +matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_custom: [] + # Default /.well-known/matrix/client configuration template which covers the generic use case. # You can customize it by controlling the various variables inside it. # diff --git a/roles/custom/matrix-static-files/tasks/validate_config.yml b/roles/custom/matrix-static-files/tasks/validate_config.yml index 1cd029505..889fb1a31 100644 --- a/roles/custom/matrix-static-files/tasks/validate_config.yml +++ b/roles/custom/matrix-static-files/tasks/validate_config.yml @@ -28,8 +28,3 @@ when: "lookup('ansible.builtin.varnames', ('^' + item.old + '$'), wantlist=True) | length > 0" with_items: - {'old': 'matrix_static_files_container_image_force_pull', 'new': ' (the new community.docker.docker_image_pull module handles this natively)'} - - - {'old': 'matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled', 'new': ' (the client well-known no longer advertises MatrixRTC transports; the homeserver announces them over its /_matrix/client/unstable/org.matrix.msc4143/rtc/transports API)'} - - {'old': 'matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci', 'new': ' (the client well-known no longer advertises MatrixRTC transports; the homeserver announces them over its /_matrix/client/unstable/org.matrix.msc4143/rtc/transports API)'} - - {'old': 'matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto', 'new': ' (the client well-known no longer advertises MatrixRTC transports; the homeserver announces them over its /_matrix/client/unstable/org.matrix.msc4143/rtc/transports API)'} - - {'old': 'matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_custom', 'new': ' (the client well-known no longer advertises MatrixRTC transports; the homeserver announces them over its /_matrix/client/unstable/org.matrix.msc4143/rtc/transports API)'} diff --git a/roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2 b/roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2 index d0176b57a..75fbff472 100644 --- a/roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2 +++ b/roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2 @@ -55,4 +55,8 @@ {% if matrix_static_files_file_matrix_client_property_cc_etke_ketesa_enabled %}, "cc.etke.ketesa": {{ matrix_static_files_file_matrix_client_property_cc_etke_ketesa | to_json }} {% endif %} + + {% if matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled %}, + "org.matrix.msc4143.rtc_foci": {{ matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci | to_json }} + {% endif %} }