element-hq / element-hq/element-web

Keep timeline read position marker

Open
#34,717 1 comment 1 reaction 0 assignees View on GitHub
A-Read-Marker A-Timeline O-Frequent T-Enhancement X-Needs-Product
Dominant language
TypeScript
Stars
13.5k
Forks
2.8k
PR merge metrics
PR metrics pending

Description

### Your use case

#### What would you like to do?

**Situation**
When a user enters a room, the newest message is shown at the end of the timeline. If the user scrolls up, the timeline shows a horizontal line where the user has stopped reading messages in the past. In Element X this line will stay until the user leaves the room. In Element Web, the line disappears with a nice animation the moment the user has scrolled to it.

**Complication**
The disappearing line leaves the user lost when scrolling around.

**Solution**
The line should persist for the whole visit to the room — Element X is right, Element Web is wrong. It should clear when the user leaves the room, not when they scroll to it.

#### Why would you like to do it?

**Principles applied**
_Trust over new features_: the line is a positional anchor for catch-up, not a transient notification. Users scroll back and forth while reading; removing it mid-task destroys the only way to answer "have I seen everything since here?" Two clients disagreeing on the same marker is itself a trust bug, independent of which behaviour wins.

_Familiarity over Novelty_: Teams keeps a persistent "Last read" line, and since mid-2025 lands you on the last read message by default with a jump-to-newest button (the default landing point moved to the last read message, with a jump button to the newest). Slack's default is "Start me where I left off". WhatsApp and Signal both show an unread divider and land there.

_Defaults over Choice_: Make the behaviour consistent and predictable across clients without adding another option that only risks user confusion and would rarely be used.

#### How would you like to achieve it?
Copy the Element X logic.

#### Bonus track
Open at the line when the room has unread messages, with a persistent "jump to latest" pill. Open at the live edge when there is nothing unread. No setting.

### Have you considered any alternatives?

_No response_

### Additional context

_No response_

Contributor guide

Open the contributing guide

Research direction

The issue names no files or tests. Start by locating Element Web’s timeline read-position marker and the corresponding Element X behavior, then trace when the marker is cleared. Done means the marker remains visible while scrolling during a room visit, clears on leaving the room, and the lifecycle is covered by tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
66/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.