Skip to content

Show read markers in small private rooms #1453

Open

Description

@mremond

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

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.

Activity

  1. added this to the 0.18.0 milestone on Sep 17, 2026
  2. modified the milestones: 0.18.0, 0.19.0 on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions