RocketChat / RocketChat/Rocket.Chat

[Feature] Add ability to "Snooze" channels/rooms for a specific duration

Open
#39,064 3 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

Description:

What is the current behavior?
Currently, when a user's sidebar becomes cluttered, their only option is to completely "Hide" a channel or "Mute" it. If they hide it, the channel disappears entirely until they manually search for it again or someone mentions them. If they mute it, it stays in the sidebar but doesn't notify them. There is no middle ground for temporarily dismissing a channel.

What is the proposed feature?
We should add a "Snooze" feature that allows users to temporarily hide a channel from their sidebar. After the selected duration expires, the channel should automatically reappear in their sidebar.

Current Hide Feature:
Image
New Snooze Feature:
Image
Step-by-step Implementation Plan:

1. Database Typings:

  • I will update the ISubscription model to include an optional snoozedUntil Date property.

2. Backend Logic:

  • And then create a Subcriptions.snoozeByRoomIdAndUserId method that sets open: false and saves the snoozedUntil timestamp.
  • And then add a server-side Cron Job that checks for subscriptions where snoozedUntil has elapsed and resets them back to open: true.

3. Frontend UI:

  • In the Sidebar Context Menu (and Room Header), i will add a new Snooze option next to "Hide".
  • When clicked, open a Modal giving the user options for duration: 1 Hour, 8 Hours, 24 Hours, 1 Week.
  • Trigger the new snooze endpoint with the calculated expiration date.
Server Setup Information:
  • Version of Rocket.Chat Server: 8.3.0-develop
  • License Type: Community
  • Number of Users: 1
  • Operating System: Linux
  • Deployment Method: Local Development / yarn dsv
  • Number of Running Instances: 1
  • DB Replicaset Oplog: Enabled
  • NodeJS Version: 22.18.0 - x64
  • MongoDB Version: 7.0.16
Client Setup Information
  • Desktop App or Browser Version: Google Chrome
  • Operating System: Linux
Additional context

Hello there, I am Ayush Kumar a GSoC 2026 applicant working on a proposal for Rocket.Chat. While exploring the project, I noticed that channels and rooms often receive a large volume of messages, but there was no way to temporarily hide a channel. The existing 'Hide' button removes a channel indefinitely until it is manually unhidden, which doesn’t address the need for short-term relief from message overload. To solve this, I proposed a 'Snooze' feature that allows users to temporarily hide channels for a set period of time, helping them manage distractions more effectively.

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

Start with the ISubscription model and the proposed Subcriptions.snoozeByRoomIdAndUserId method, then trace the subscription endpoint and sidebar behavior. Review the server-side cron job, Sidebar Context Menu, Room Header, and duration Modal entry points. Done means a room can be snoozed for each listed duration, disappears temporarily, and reappears when snoozedUntil expires.

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
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.