Repository navigation
[FEATURE] Cross-room Starred Messages view in the navigation #42689
Description
Activity
cc @rodrigok — happy to implement this if it fits the roadmap.
- addedtype: featurePull requests that introduces new featurePull requests that introduces new feature
on Oct 10, 2026 @deepak0x it's a nice idea. Can you define the design and backend changes needed for this? Remember that the control of the user access to the messages of a room is made via the subscription.
Thanks for taking a look. Here's how I'd approach it.
Backend
The current
chat.getStarredMessagesendpoint requires aroomId, and its handler (findStarredMessagesinapps/meteor/server/api/lib/messages.ts) checks access throughcanAccessRoomAsyncfor that one room. For the cross-room view I'd add a new endpoint rather than makingroomIdoptional, so the existing contract stays untouched:GET /v1/chat.getAllStarredMessageswithcount,offset, and an optionaltextfilter.Access control via subscriptions, as you said: resolve the user's room ids first with
Subscriptions.findByUserId(userId)projected torid, then query messages against that set. New model method next to the existingfindStarredByUserAtRoom:findStarredByUser(userId, rids, options) { return this.findPaginated( { 'starred._id': userId, rid: { $in: rids }, _hidden: { $ne: true } }, options, ); }
A message only shows while the user holds a subscription to its room, so leaving a room or losing access drops those messages from the view automatically. Messages already has a sparse index on
starred._id, so the query stays cheap, and starred counts per user are small in practice.One wrinkle on sort order:
starredis stored as{ _id: userId }[]with no timestamp, so "most recently starred first" isn't possible today. I'd sort by messagetsdescending for the first version. If star-time ordering matters, the follow-up would be storing{ _id, ts }on star inupdateUserStarByIdand sorting on that for new stars, with old entries falling back to messagets. I'd keep that out of scope initially.Unstarring from the view reuses the existing star action and invalidates the list query.
Frontend
- New route
/starred-messagesregistered inapps/meteor/client/startup/routes.tsx, page wrapped inMainLayout, same as/directory. - Nav entry in
NavBarPagesGroupfollowing theNavBarItemDirectoryPagepattern, with thestaricon. - The page itself is close to the existing
StarredMessagesTabcontextual bar: same paginated query loop against the new endpoint, same message rendering. Each row adds the room name and links to the message through the existing jump-to-message path. - The text filter runs client side over loaded pages at first; a server-side
textparam can come later if lists get long. - The room-level panel stays as is.
If this sounds right I'll start on a PR: backend endpoint plus model method with tests first, then the view.
- New route
i would like to work on it. please assign it to me
Context
Rocket.Chat lets users star individual messages, and each room's contextual bar has a "Starred Messages" panel that surfaces those messages — but only for that one room. There is no way to see all starred messages across rooms in a single view.
Users frequently star messages as lightweight bookmarks or follow-up reminders. When those messages live in different rooms, there is no way to review them without opening each room and its contextual bar individually. This friction discourages use of starring as a personal productivity tool.
Most comparable messaging platforms (Slack Saved Items, Teams Saved Messages, Mattermost Saved Posts) provide exactly such a cross-room collection.
Feature description
Add a Starred Messages entry to the main navigation sidebar — consistent with the placement of existing cross-room views like Discussions or Favorites.
Opening this view shows a scrollable list of every message the current user has starred, across all rooms they have access to. Each entry displays:
The list is ordered by most-recently-starred first and includes a lightweight text filter to narrow results by message content or room name. Unstarring a message from this view removes it from the list immediately, consistent with the existing room-level behavior.
No existing behavior changes; the room-level Starred Messages panel continues to work as it does today.
Value