diff --git a/packages/web/src/components/layout/ChannelSidebar.tsx b/packages/web/src/components/layout/ChannelSidebar.tsx
index e125e1f5..d54eac9d 100644
--- a/packages/web/src/components/layout/ChannelSidebar.tsx
+++ b/packages/web/src/components/layout/ChannelSidebar.tsx
@@ -670,6 +670,10 @@ export function ChannelSidebar() {
{/* Categories with their channels */}
{sortedCategories.map((category) => {
const catChannels = channelsByCategory.get(category.id) ?? [];
+
+ // Hide empty categories for users without MANAGE_CHANNELS permission
+ if (!canManageChannels && catChannels.length === 0) return null;
+
const isCollapsed = collapsedCategories.has(category.id);
const hasUnread = isCollapsed && categoryHasUnread(category.id);
@@ -686,6 +690,11 @@ export function ChannelSidebar() {