Files
ThreadNet-Web/docs/labs.md
T
Florian DurosandGitHub b68ecdb860 Remove legacy room list (#34040)
* refactor(room-list): migrate SpaceStore off the legacy room list store

SpaceStore.setActiveRoomInSpace iterated the legacy RoomListStore's
`orderedLists` in `TAG_ORDER`; switch it to the space-aware
RoomListStoreV3.getSortedRoomsInActiveSpace() accessor. This drops the
last non-UI dependency on the legacy store and on `TAG_ORDER` (exported
from LegacyRoomList, deleted next).

* feat(room-list)!: remove the legacy room list UI

Delete the old sublist-based room list and its components now that the
new RoomListPanel is the default. Removed: LegacyRoomList,
LegacyRoomListHeader, RoomSublist, ExtraTile, RoomTile (+ Subtitle/
CallSummary), RoomBreadcrumbs and RoomSearch, plus their styles and
tests.

LeftPanel collapses to the RoomListPanel-only path. The shared
`contextMenuBelow` helper is relocated into RoomResultContextMenus (its
only remaining consumer).

* feat(room-list)!: remove the legacy RoomListStore

The legacy sublist-based room list UI is gone, so the old
`stores/room-list` store (Algorithm, sorters, filters, layout store,
space
watcher) has no remaining consumers. Delete the directory and its tests.

MatrixChat.forgetRoom no longer calls the legacy `manualRoomUpdate`; the
new room list store removes the room on the `AfterForgetRoom` dispatch
that still fires. Drop the `mxRoomListStore`/`mxRoomListLayoutStore`
globals and the now-dead test imports.

* feat(room-list)!: remove the feature_new_room_list labs flag

The new room list is now the only room list, so remove the
feature_new_room_list labs flag and make its enabled behaviour
unconditional everywhere it was gated:

- LoggedInView: always use the resizable layout and
NEW_ROOM_LIST_MIN_WIDTH;
  drop the collapsible/minimized legacy path.
- SpaceStore: People and Favourites are dropped from metaSpaceOrder (per
the
  long-standing TODO on the removed accessor).
- MessagePreviewStore: stop appending thread replies to previews.
- Settings, SidebarUserSettingsTab, PreferencesUserSettingsTab,
  QuickSettingsButton, SpacePanel, LandmarkNavigation: drop the flag
reads and
  legacy branches.

Update the tests that toggled the flag; the People/Favourites meta space
tests covered behaviour that the flag (default on) already disabled.

* feat(room-list)!: remove the dead legacy left-panel resizer

LoggedInView still built the old `Resizer`/`CollapseDistributor` over an
`lp-resizer` ResizeHandle and persisted `mx_lhs_size`. That handle is no
longer rendered (the resizable layout is now driven by
LeftResizablePanelView + ResizerViewModel, which persists its own state
via RoomList.panelSize/RoomList.isPanelCollapsed), so the old resizer
was
inert dead code left over from the legacy room list.

Remove createResizer/loadResizer/loadResizerPreferences, the
_resizeContainer/resizeHandler refs, the ResizeHandle render, the
mx_lhs_size handling and NEW_ROOM_LIST_MIN_WIDTH, plus the unit tests
that
exercised the mocked resizer.

* feat(room-list)!: update i18n files

* refactor(room-list): remove the now-unused collapseLhs state

`collapseLhs` is write-only since the left panel no longer collapses: it
was last read by LoggedInView's `shouldUseMinimizedUI`, removed with the
feature_new_room_list flag. Drop it from MatrixChat's IState (and its
assignments), collapsing the hide/show_left_panel handlers to just the
`notifyLeftHandleResized()` call they still need, and from
LoggedInView's
IProps and the test props.

* fix(room-list): instantiate message previewers lazily

Removing the unused SettingsStore import from MessagePreviewStore (when
the
feature_new_room_list flag was dropped) changed module load order and
exposed a latent circular dependency: ReactionEventPreview imports
MessagePreviewStore, which eagerly did `new ReactionEventPreview()` at
module-eval — so importing ReactionEventPreview first (as its unit test
does) hit "ReactionEventPreview is not a constructor".

Construct the previewers lazily on first use (cached) instead of at
module
load, so nothing dereferences a mid-evaluation module. Fixes
ReactionEventPreview-test.

* test(room-list): remove `feature_new_room_list` labs flag in e2e tests

* chore: remove remaining `newRoomList` flag

* chore: cleanup theme files

* fix: restore the re-resizable TouchEvent polyfill

* chore: remove usage of breadcrumbs settings in BreadcrumbStore

* Revert "fix(room-list): instantiate message previewers lazily"

This reverts commit 4e6eedfff0449c68a96c0470a4eb425b5aec5512.

* chore: remove unused function in BreadCrumbStore

* test: remove unused fuction of BreadcrumStore in tests

* test: add tests for RoomResultContextMenu
2026-07-02 09:07:37 +00:00

7.0 KiB

Labs features

If Labs is enabled in the Element config, you can enable some of these features by going to Settings->Labs. This list is non-exhaustive and subject to change, chat in #element-web:matrix.org for more information.

If a labs features gets more stable, it may be promoted to a beta feature (see Betas).

Be warned! Labs features are not finalised, they may be fragile, they may change, they may be dropped. Ask in the room if you are unclear about any details here.

Render LaTeX maths in messages (feature_latex_maths)

Enables rendering of LaTeX maths in messages using KaTeX. LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).

Message pinning (feature_pinning)

Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message and select "Pin".

Jump to date (feature_jump_to_date)

Note: This labs feature is only visible when your homeserver has MSC3030 enabled (in Synapse, add experimental_features -> msc3030_enabled to your homeserver.yaml) which means GET /_matrix/client/versions responds with org.matrix.msc3030 under the unstable_features key.

Adds a dropdown menu to the date separator headers in the timeline which allows you to jump to last week, last month, the beginning of the room, or choose a date from the calendar.

Also adds the /jumptodate 2022-01-31 slash command.

New ways to ignore people (feature_mjolnir)

When enabled, a new settings tab appears for users to be able to manage their ban lists. This is a different kind of ignoring where the ignored user's messages still get rendered, but are hidden by default.

Ban lists are rooms within Matrix, proposed as MSC2313. Mjolnir is a set of moderation tools which support ban lists.

Verifications in DMs (feature_dm_verification)

An implementation of MSC2241. When enabled, verification might not work with devices which don't support MSC2241.

This also includes a new implementation of the user & member info panel, designed to share more code between showing community members & room members. Built on top of this new panel is also a new UX for verification from the member panel.

The setting will be removed in a future release, enabling it non-optionally for all users.

Bridge info tab (feature_bridge_state)

Adds a "Bridge Info" tab to the Room Settings dialog, if a compatible bridge is present in the room. The Bridge info tab pulls information from the m.bridge state event (MSC2346). Since the feature is based upon a MSC, most bridges are not expected to be compatible, and users should not rely on this tab as the single source of truth just yet.

Custom themes (feature_custom_themes)

Custom themes are possible through Element's theme support, though normally these themes need to be defined in the config for Element. This labs flag adds an ability for end users to add themes themselves by using a URL to the JSON theme definition.

For some sample themes, check out aaronraimist/element-themes.

Live location sharing (feature_location_share_live) [In Development]

Enables sharing your current location to the timeline, with live updates.

Video rooms (feature_video_rooms) [Beta]

Enables support for creating video rooms, which are persistent video chats that users can jump in and out of.

Element Call video rooms (feature_element_call_video_rooms) [In Development]

Enables support for video rooms that use Element Call rather than Jitsi, and causes the 'New video room' option to create Element Call video rooms rather than Jitsi ones.

This flag will not have any effect unless feature_video_rooms is also enabled.

New group call experience (feature_group_calls) [In Development]

This feature allows users to place native MSC3401 group calls in compatible rooms, using Element Call.

If you're enabling this at the deployment level, you may also want to reference the docs for the element_call config section.

Disable per-sender encryption for Element Call (feature_disable_call_per_sender_encryption)

The default for embedded Element Call in Element Web is per-participant encryption. This labs flag disables encryption for embedded Element Call in encrypted rooms.

Under the hood this stops Element Web from adding the perParticipantE2EE flag for the Element Call widget url.

This is useful while we experiment with encryption and to make calling compatible with platforms that don't use encryption yet.

Enable the notifications panel in the room header (feature_notifications)

Unreliable in encrypted rooms.

Knock rooms (feature_ask_to_join) [In Development]

Enables knock feature for rooms. This allows users to ask to join a room.

Exclude insecure devices when sending/receiving messages (feature_exclude_insecure_devices)

Do not send or receive messages to/from devices that are not properly verified. Users with unverified devices will not receive your messages at all on those devices, and if they send messages, you will not be able to read them, but you will be aware that a message exists.

Encrypted state events (MSC4362) (feature_msc4362_encrypted_state_events)

Encrypt most of the state events in the room, including the room name and topic.

WARNING: this means that users joining a room who do not have access to its history will not be able to see the name or topic of the room, or any other room state information. It also means the room name and topic are not available before joining a room.

New notifications settings (feature_notification_settings2) [Beta]

Replaces the legacy notification settings with a new one to manage push rules.

User status (feature_user_status)

Enables setting a status message in your profile and to be able to view other's statuses. Requires MSC4429 and MSC4426.

Warning This feature has options which are not backwards compatible, disabling it may have unintended consequences.

Log in with QR (feature_login_with_qr)

Enables logging in to Element Web/Desktop by using Element X to scan a QR code. Requires server support, based on the v2024 edition of MSC4108. Can only be configured via config.json, as labs flags cannot be set until after login, and are cleared on log out. The UI option is disabled. Note, this does not affect the existing Link new device flow using the same MSC.