RocketChat / RocketChat/Rocket.Chat

Enhancement: Time-Based Pinning for Messages (with Optional Auto-Unpin)

Open
#39,067 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type: feature
Dominant language
TypeScript
Stars
46.1k
Forks
13.9k
Avg merge
3d 3h
Merged PRs (30d)
130

Description

Summary

While Rocket.Chat already supports message pinning, I would like to propose an enhancement:
introducing time-based pinning with optional auto-expiry.

This would allow users to pin a message not just permanently, but for a defined duration
(e.g., 4 hours, 7 days, 30 days, or custom).


Problem / Motivation

In regular conversations (especially 1:1 chats), users often pin messages as reminders —
meeting links, tasks, temporary announcements, or follow-ups.

However:

  • Pinned messages stay indefinitely unless manually unpinned.
  • Over time, the pinned section can become cluttered.
  • Many pinned messages are temporary by nature.

A time-based pin option would help keep conversations clean and more intentional.


Proposed Solution

When pinning a message, provide an optional duration selector:

  • 4 hours
  • 24 hours
  • 7 days
  • 30 days
  • Custom duration
  • Forever (default behavior)

Once the duration expires:

  • The message is automatically unpinned.
  • Optionally, a small notification could inform the user.

Possible UI Approach

When a user clicks "Pin Message":

Add an additional modal or dropdown:

Pin Duration:

  • ⏳ Temporary
  • 📌 Permanent

If Temporary is selected:

  • Show duration options.

This keeps the existing UX intact while adding flexibility.


Technical Considerations

  • Store pinnedAt and pinExpiresAt timestamps.
  • A scheduled job or background task could check for expired pins.
  • Default behavior remains unchanged if no duration is selected.
  • Should work consistently across:
    • Channels
    • Private groups
    • Direct messages

Why This Matters

  • Keeps conversations organized.
  • Reduces manual cleanup.
  • Improves usability for reminder-style workflows.
  • Makes pinned messages more dynamic and purposeful.

Scope Clarification

Before proceeding, I would appreciate feedback on:

  • Whether this aligns with the product direction.
  • If expiration logic should be handled server-side only.
  • Whether this should be optional at workspace level (admin setting).

I would be happy to work on the implementation if this direction is considered valuable.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue does not name specific files, tests, or entry points. Start by tracing the existing message-pinning flow across channels, private groups, and direct messages, then resolve the open product and server-side expiration questions before defining implementation scope and completion criteria.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.