Browse Source

Stop advertising MatrixRTC transports in the client well-known

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
Slavi Pantaleev 1 day ago
parent
commit
421b592690
6 changed files with 30 additions and 23 deletions
  1. +24
    -0
      CHANGELOG.md
  2. +1
    -1
      docs/configuring-playbook-jwt-service.md
  3. +0
    -8
      group_vars/matrix_servers
  4. +0
    -10
      roles/custom/matrix-static-files/defaults/main.yml
  5. +5
    -0
      roles/custom/matrix-static-files/tasks/validate_config.yml
  6. +0
    -4
      roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2

+ 24
- 0
CHANGELOG.md View File

@@ -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

## The homeserver root path redirects to clients other than Element Web


+ 1
- 1
docs/configuring-playbook-jwt-service.md View File

@@ -40,7 +40,7 @@ After configuring the playbook and potentially [adjusting your DNS records](#adj

## 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



+ 0
- 8
group_vars/matrix_servers View File

@@ -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.
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.


+ 0
- 10
roles/custom/matrix-static-files/defaults/main.yml View File

@@ -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: {}


# 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.
#


+ 5
- 0
roles/custom/matrix-static-files/tasks/validate_config.yml View File

@@ -28,3 +28,8 @@
when: "lookup('ansible.builtin.varnames', ('^' + item.old + '$'), wantlist=True) | length > 0"
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_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)'}

+ 0
- 4
roles/custom/matrix-static-files/templates/public/.well-known/matrix/client.j2 View File

@@ -55,8 +55,4 @@
{% 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 %}
}

Loading…
Cancel
Save