Unread Filter#
The Unreads filter is a toggle in Element Web's room list (v3) that narrows the visible rooms to those with unread notifications. It is one of several filter chips shown above the room list. When active, sections containing no matching rooms are hidden , keeping the list clean.
Current behavior: The filter surfaces rooms with notifications (highlights/mentions and message notifications), not every room with any unread activity. This mismatch with user expectations is the source of most open issues.
Known Bugs#
Current room disappears when read (issue #30979)#
Opening a room while the Unreads filter is active causes it to be marked as read and immediately removed from the list. Consequences:
- The room's context menu (mark as unread, notification settings, copy link) becomes unreachable.
Alt+Up/Alt+Downkeyboard navigation breaks because the active room is no longer in the list.
Maintainers have proposed special-casing the currently active room so it always appears regardless of filter state, matching Slack's behavior.
Unreads invisible when another filter is applied (issue #32725)#
When a user is viewing a filter (e.g., Favourites), new unread DMs in other sections are not surfaced. The space panel notification badge was the intended indicator, but it aggregates all rooms and is not actionable. A "more unreads below" scroll indicator was added (PR #33961) but was reported to be buggy (showing/hiding arbitrarily on scroll, stacked behind section headers).
This specific problem was partially mitigated by converting Favourites from a filter into a persistent section (PR #32785), so unread rooms below the Favourites section stay visible.
Section Expansion / Collapse Interactions#
Several PRs shipped and were revised to address how sections behave while a filter is active:
| PR | What it does | Status |
|---|---|---|
| #33024 | Adds an activity marker (bold header + updated aria-label) to section headers when any child room has unread activity | Merged |
| #33077 | Auto-expands collapsed sections containing filter matches when a filter is toggled | Merged, then reverted in #33785 based on design feedback |
| #33747 | Hides empty sections when any filter is enabled (rooms.length === 0 β excluded) | Merged |
| #33826 | Adds notification badges to collapsed section headers, aggregating child-room notification states | Merged |
The net result: empty sections are hidden under a filter, and collapsed sections show aggregated notification badges so users know activity exists even without expanding.
Design Debate: What Should "Unreads" Include?#
Issue #32902 tracks the ongoing discussion. The core tension:
- Current implementation: filter shows rooms with notifications only.
- User expectation (with "Show all activity in the room list" setting enabled): filter should also include rooms with any unread messages, not just notification-level activity.
Proposed resolutions (all open/debated as of July 2026):
- New settings toggle (product owner proposal): add a second toggle that makes the Unreads filter include activity. Concern: adds yet another setting on top of an already-complex notification tab, with up to 7 filters available.
- Two separate filters (maintainer counter-proposal): "Unread" (all new activity) and "Important" (notifications). Concern: further increases the already-crowded filter barβ5β7 filters depending on whether sections are enabled.
- User suggestion: decouple notifications from the unread concept entirely; put notifications in a separate bell/activity panel (Γ la Slack), leaving "Unreads" to mean strictly unread messages.
Issue #32902 is explicitly called out as a blocker for the proposed "automatic unread section" feature (issue #34346), which would provide a persistent, auto-populated section for unread rooms without requiring users to toggle the filter on and off.
Key Source Files#
| File | Role |
|---|---|
RoomListStoreV3.ts | getSections(filterKeys) β filters out empty sections when filter keys are provided |
RoomListViewModel.ts | onToggleFilter β drives filter state and section updates |
RoomListSectionHeaderViewModel.ts | Tracks Set<RoomNotificationState> per section to compute isUnread and notification badge state |
RoomListSectionHeaderView.tsx | Renders bold header when isUnread, notification badge when collapsed |