Repository navigation
Show read markers in small private rooms #1453
Copy link
Copy link
Open
Milestone
Description
Show, in small private rooms, how far each participant has read, so a message's audience is visible without asking.
Goal
In a small, members-only room, such as a team or family group, each participant can see who has read up to which message, the way other group messengers show read avatars under the latest message.
Protocols
- XEP-0333: Chat Markers in group chats. The specification advises sending markers only in small private rooms, not in large or public ones, because every marker is a message fanned out to all occupants.
- XEP-0421: Anonymous Unique Occupant Identifiers, already recognized by the SDK (
NS_OCCUPANT_ID), to attribute a marker to a stable participant across nickname changes. - XEP-0490: Message Displayed Synchronization, for our own read position, which stays the single source of our own read state. Room markers only describe other participants.
Scope
- Eligible rooms only: members-only and non-anonymous rooms, under a size threshold to decide, for example 20 occupants. Never send markers in public or large rooms.
- A user setting (and possibly a per-room one) controls sending markers.
- Sending follows the same rule as one-to-one: only when the room is actually viewed with the window focused, derived from the canonical read pointer, cumulative, never repeated for a position already reported.
- Display: small participant avatars under the latest message each participant has read, grouped and capped, with the full list on demand. The UI hides markers from occupants who have left, and from ourselves.
- Occupant identity comes from occupant-id, not the nickname, so a renamed participant keeps their position and a reused nickname is not confused with a previous occupant.
- Load: received markers must not trigger a full re-render of the room timeline. They are recorded as per-participant positions.
Out of scope
- One-to-one conversations, tracked in Support ack / read in 1-to-1 conversations #5.
- Changing how our own room read state is computed or synced, which is XEP-0490's job.
Dependencies
Build after the current room read-state fixes have landed: clearing room unread badges at the live edge, and releasing stale XEP-0490 pending markers that lock a room. It also relates to #855, remembering read state in rooms. Positions carry a MessageRowRef, not a raw message id (docs/MESSAGE_IDENTIFIERS.md). Participant positions are forward-only.
Acceptance
- Markers are sent only in eligible rooms, only on real focused viewing, and never in public or large rooms.
- Received markers are attributed by occupant-id and survive nickname changes, and a reused nickname is not confused with a previous occupant.
- Display stays cheap in a busy room, measured with the existing render-performance checks.
- Tests cover: room eligibility, cumulative and out-of-order markers, markers received through MAM, occupant changes, and the setting off.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity