Skip to content

[Feature Request] Message Draft Auto-Save Per Room #38217

@Devnil434

Description

@Devnil434

Summary

Automatically save unsent message drafts per room / channel / DM so users do not lose typed messages when switching rooms, navigating away, or refreshing the page.


Problem Statement

Currently, if a user types a message in a room and:

  • switches to another room,
  • accidentally refreshes the page,
  • navigates away and comes back,

the unsent message draft is lost.

This can be frustrating, especially for:

  • long messages,
  • technical discussions,
  • support conversations,
  • multi-room workflows.

Most modern chat platforms (e.g., Slack, Discord) preserve drafts per conversation, and users expect similar behavior.


Proposed Solution

Implement per-room message draft persistence on the client side.

Basic Behavior

  • Save the message input content automatically as the user types.
  • Store drafts separately for each room / DM / thread.
  • Restore the draft when the user revisits the same room.

Suggested Initial Scope

  • Client-side only implementation (no server changes required initially).
  • Use localStorage or IndexedDB for persistence.
  • Key drafts by roomId (and optionally threadId).
  • Clear the stored draft once the message is successfully sent.

Why This Feature Matters

  • Prevents accidental data loss.
  • Improves overall user experience and reliability.
  • Aligns Rocket.Chat with modern chat UX standards.
  • Low-risk, incremental improvement with high user impact.

Acceptance Criteria

  • Draft text is preserved when switching between rooms.
  • Draft text is restored on page refresh.
  • Drafts are isolated per room (no cross-room leakage).
  • Draft is cleared after successful message send.
  • No impact on message sending performance.

Possible Enhancements (Future Work)

  • Sync drafts across devices (server-side persistence).
  • Support drafts in message threads.
  • Add an indicator when a draft exists in a room.

Willingness to Contribute

I am willing to work on this feature and submit a pull request if the maintainers agree with the approach.


Additional Context

This feature can be implemented incrementally and is suitable as a good first issue while still delivering meaningful value to end users.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions