The org.matrix.msc4143.rtc_foci property has been dropped from MSC4143 and Element Call v0.24.0 no longer reads it, so the homeserver's own RTC transports API is left as the single source of truth. Synapse, continuwuity and tuwunel all serve it at the unstable path which clients request. Keeping both around also made Element Web list the same LiveKit transport twice, as it merges the two sources without deduplicating them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>pull/5552/head
| @@ -1,3 +1,27 @@ | |||||
| # 2026-08-19 | |||||
| ## MatrixRTC transports are no longer advertised in the client well-known | |||||
| 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)). | |||||
| 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. | |||||
| 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: | |||||
| ```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" | |||||
| } | |||||
| ] | |||||
| } | |||||
| ``` | |||||
| # 2026-08-13 | # 2026-08-13 | ||||
| ## The homeserver root path redirects to clients other than Element Web | ## The homeserver root path redirects to clients other than Element Web | ||||
| @@ -40,7 +40,7 @@ After configuring the playbook and potentially [adjusting your DNS records](#adj | |||||
| ## Usage | ## Usage | ||||
| Once installed, a new `org.matrix.msc4143.rtc_foci` section is added to the Element Web client to point to your JWT service URL (e.g., `https://matrix.example.com/livekit-jwt-service`). | |||||
| Once installed, the homeserver announces your JWT service URL (e.g., `https://matrix.example.com/livekit-jwt-service`) as a MatrixRTC transport over its `/_matrix/client/unstable/org.matrix.msc4143/rtc/transports` API, which is where Matrix clients discover it. | |||||
| ## Additional Information | ## Additional Information | ||||
| @@ -6286,14 +6286,6 @@ 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. | # 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_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. | # 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, | # 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. | # so we gate on these in addition to the bridge being enabled. | ||||
| @@ -201,16 +201,6 @@ matrix_static_files_file_matrix_client_property_cc_etke_ketesa_auto: {} | |||||
| matrix_static_files_file_matrix_client_property_cc_etke_ketesa_custom: {} | matrix_static_files_file_matrix_client_property_cc_etke_ketesa_custom: {} | ||||
| # 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. | # Default /.well-known/matrix/client configuration template which covers the generic use case. | ||||
| # You can customize it by controlling the various variables inside it. | # You can customize it by controlling the various variables inside it. | ||||
| # | # | ||||
| @@ -28,3 +28,8 @@ | |||||
| when: "lookup('ansible.builtin.varnames', ('^' + item.old + '$'), wantlist=True) | length > 0" | when: "lookup('ansible.builtin.varnames', ('^' + item.old + '$'), wantlist=True) | length > 0" | ||||
| with_items: | with_items: | ||||
| - {'old': 'matrix_static_files_container_image_force_pull', 'new': '<removed> (the new community.docker.docker_image_pull module handles this natively)'} | - {'old': 'matrix_static_files_container_image_force_pull', 'new': '<removed> (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': '<removed> (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': '<removed> (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': '<removed> (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': '<removed> (the client well-known no longer advertises MatrixRTC transports; the homeserver announces them over its /_matrix/client/unstable/org.matrix.msc4143/rtc/transports API)'} | |||||
| @@ -55,8 +55,4 @@ | |||||
| {% if matrix_static_files_file_matrix_client_property_cc_etke_ketesa_enabled %}, | {% 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 }} | "cc.etke.ketesa": {{ matrix_static_files_file_matrix_client_property_cc_etke_ketesa | to_json }} | ||||
| {% endif %} | {% 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 %} | |||||
| } | } | ||||