RocketChat / RocketChat/Rocket.Chat
[Feature] Add ability to "Snooze" channels/rooms for a specific duration
Nobody has claimed this yet.
- 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:
New Snooze Feature:
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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