2026-08-21 12:04:24 +02:00
|
|
|
# MatrixRTC modes
|
|
|
|
|
|
|
|
|
|
Element Call is in the middle of a transition of how a call session is
|
2026-08-26 17:53:06 +02:00
|
|
|
represented: from room _state_ events (`org.matrix.msc3401.call.member`) to
|
|
|
|
|
_sticky_ events
|
|
|
|
|
([MSC4354](https://github.com/matrix-org/matrix-spec-proposals/pull/4354)),
|
|
|
|
|
which are a much better fit for the short lived, per-device nature of call
|
|
|
|
|
memberships.
|
|
|
|
|
|
|
|
|
|
Not every homeserver supports sticky events yet. The two MatrixRTC modes
|
|
|
|
|
controls whether Element Call uses them.
|
2026-08-21 12:04:24 +02:00
|
|
|
|
|
|
|
|
## The modes
|
|
|
|
|
|
|
|
|
|
| Mode | Membership events | SFU selection | JWT endpoint |
|
|
|
|
|
| --------------- | ----------------- | ------------- | ---------------------------- |
|
|
|
|
|
| `compatibility` | state events | multi SFU | legacy |
|
|
|
|
|
| `matrix_2_0` | sticky events | multi SFU | Matrix 2.0 (hashed identity) |
|
|
|
|
|
|
2026-08-26 17:53:06 +02:00
|
|
|
**`compatibility`** — multi SFU, but still state events. Use it when the
|
|
|
|
|
homeserver does not support sticky events. This is the default.
|
2026-08-21 12:04:24 +02:00
|
|
|
|
|
|
|
|
**`matrix_2_0`** — the target state. Requires a homeserver that advertises
|
|
|
|
|
MSC4354 and all clients on v0.17.0 or later. The local membership requests its
|
|
|
|
|
token from the Matrix 2.0 JWT endpoint of the
|
|
|
|
|
[MatrixRTC Authorization Service](https://github.com/element-hq/lk-jwt-service)
|
|
|
|
|
and identifies the room by a hashed identity instead of a `livekit_alias`.
|
|
|
|
|
(Remote memberships always try the new endpoint first and fall back to the
|
|
|
|
|
legacy one, so remote participants can be on either.)
|
|
|
|
|
|
|
|
|
|
## Selecting a mode
|
|
|
|
|
|
|
|
|
|
Users can choose a mode under **Settings → Developer → MatrixRTC mode**. The
|
|
|
|
|
Matrix 2.0 option is disabled if the homeserver does not support sticky events.
|
|
|
|
|
|
|
|
|
|
A deployment can pin the mode for all its clients in `config.json`, which
|
|
|
|
|
disables the Developer Settings choice:
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"matrix_rtc_mode": "compatibility"
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2026-08-26 17:53:06 +02:00
|
|
|
Valid values are `compatibility` and `matrix_2_0`; an invalid value is
|
2026-08-21 12:04:24 +02:00
|
|
|
ignored (with a warning) and the user's choice applies. Pinning `matrix_2_0` on a
|
|
|
|
|
homeserver without sticky event support makes joining fail with a "sticky events
|
|
|
|
|
required" error.
|