element-hq / element-hq/element-web
Keep timeline read position marker
- 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
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