Skip to content

[Research] System Tray Icon Limits & UX Best Practices Across Platforms #39

@insign

Description

@insign

💡 Suggestion

This is a research document to inform design decisions for the "Separate" tray mode. The primary objective is to understand platform-specific limitations, user expectations, and UX best practices when displaying multiple system tray icons simultaneously.

🎯 Objective

Document the practical and technical limits for system tray icons across all desktop platforms (Linux, macOS, Windows) to inform:

  1. Maximum icon count before implementing overflow/collapse logic
  2. Default settings recommendations
  3. Fallback strategies for constrained environments
  4. Warning messages for users exceeding limits

Key Questions:

  • What's the hard technical limit (OS/API enforced)?
  • What's the soft UX limit (where UI becomes unusable)?
  • How do popular apps handle many tray icons?
  • What happens when limits are exceeded?

🪟 Windows (10/11)

Technical Limits

  • Hard Limit: No documented API limit on number of tray icons [web:32][web:33]
  • Display Limit: Taskbar overflows into "hidden icons" area automatically
  • Icon Size: 16×16px standard (32×32 for high DPI) [web:36]

Observed Behavior

  • Windows 11 shows ~3-6 icons by default in notification area
  • Additional icons go to overflow menu (clicking ^ arrow)
  • User Configurable: Settings → Personalization → Taskbar → "Select which icons appear on the taskbar" [web:36]
  • No strict maximum, but performance degrades with 50+ icons (anecdotal)

UX Considerations

  • Users expect overflow behavior (industry standard)
  • Windows 11 has more aggressive hiding than Windows 10
  • Spacing issues reported when many icons present [web:32][web:42]

Recommendations

  • Default: Show 5 most recent/active plugins in tray
  • Max: 10-15 icons before forcing overflow
  • UI: Provide settings to pin specific plugins (like Windows native)

🍎 macOS

Technical Limits

  • Hard Limit: No API limit, but constrained by menu bar width
  • Display Limit: Depends on screen size and notch (MacBook Pro 14"/16") [web:37][web:43]
  • Icon Size: 16×16pt (@1x), 32×32pt (@2x Retina) [web:40]

Observed Behavior

  • MacBook Pro 16" with notch: ~12 icons max before clipping [web:37]
  • iMac/Mac mini (no notch): ~20-25 icons depending on resolution
  • Icons hidden by notch are inaccessible (major UX issue)
  • Workaround: Hold ⌘ (CMD) and drag icons to reorder [web:37]
  • Third-party solutions: Bartender 5, Dozer (hide/show icons) [web:37][web:48]

macOS Sequoia (15+) Improvements

  • Native menu bar management in System Settings [web:48]
  • Apps can request permission to show in menu bar
  • User can rearrange with ⌘+Drag
  • Custom spacing via Terminal:
    defaults -currentHost write -globalDomain NSStatusItemSpacing -int 12
    defaults -currentHost write -globalDomain NSStatusItemSelectionPadding -int 8
    killall SystemUIServer
    [web:43]

UX Considerations

  • Notch is a disaster for apps with many tray icons
  • Users actively use tools like Bartender to manage clutter
  • Apple's design philosophy: fewer icons = better

Recommendations

  • Default: Show 3-5 icons max on macOS (notch consideration)
  • Max: 8 icons (safe for all screen sizes)
  • Warning: Display notification on MacBook Pro when >5 icons active
  • Future: Integrate with Bartender API if possible

🐧 Linux (GNOME/KDE/XFCE)

Technical Limits - Highly Desktop Environment Dependent

GNOME (Default on Ubuntu, Fedora)

  • Hard Limit: GNOME removed native tray support in 3.26 (2017) [web:38][web:47]
  • Extensions Required:
    • "Tray Icons: Reloaded" [web:44][web:49]
    • "AppIndicator and KStatusNotifierItem Support"
  • Icon Limit in Extension: Configurable (default ~10) [web:38][web:49]
  • Status: Legacy tray is deprecated, StatusNotifierItem is preferred

KDE Plasma

  • Hard Limit: No technical limit
  • Display: System Tray widget can expand/collapse
  • UX: Handles 20+ icons gracefully with overflow

XFCE

  • Hard Limit: No technical limit
  • Plugin: xfce4-indicator-plugin for system tray
  • Performance: Handles 15-20 icons well

Critical Issues

  • GNOME: Tray icons disappear when screen locks [web:47]
  • Wayland: Legacy X11 tray protocol doesn't work reliably
  • Ubuntu: Uses AppIndicator (different API than StatusIcon)

Observed Behavior

  • Most GNOME users rely on extensions (not default experience)
  • Extensions allow setting max visible icons with "..." overflow [web:38]
  • Apps that require tray on GNOME are heavily criticized [web:47]

UX Considerations

  • GNOME users expect apps to NOT use tray (design philosophy)
  • Many apps hide tray icon by default on GNOME
  • KDE/XFCE users are more tray-friendly

Recommendations

  • GNOME Detection: Check if tray extensions installed, warn if not
  • Default: 5 icons on GNOME (with extension), 10 on KDE/XFCE
  • Max: 8 icons (GNOME), 15 icons (KDE/XFCE)
  • Fallback: If no tray available, use notifications + widgets only
  • Documentation: Explain GNOME limitation in setup guide

📊 Comparative Analysis

Platform Hard Limit Recommended Max Overflow Behavior User Control
Windows 10/11 None (API) 10 icons Native overflow (^ menu) Settings UI
macOS Screen width 8 icons (notch-safe) Icons disappear CMD+Drag, Bartender
Linux (KDE) None 15 icons System tray expands Widget settings
Linux (GNOME) Extension-dependent 5 icons Extension overflow Extension settings
Linux (XFCE) None 10 icons Panel expands Manual

🎨 Popular Apps Analysis

How They Handle Multiple Icons

Docker Desktop:

  • Single unified icon
  • Menu shows container status
  • No multi-icon mode

Slack/Discord/Teams:

  • One icon per workspace/server
  • Users commonly have 3-5 icons
  • No built-in overflow (relies on OS)

Spotify/iTunes/Media Players:

  • Single icon with playback controls
  • Updates tooltip/icon dynamically

Dropbox/OneDrive/Google Drive:

  • Single icon
  • Status shown via icon overlay (syncing/synced)

Observation: Most apps use single unified icon even when managing multiple resources. Multi-icon approaches are rare.


🚦 Recommended Implementation Strategy

Phase 1: Unified Mode (Current - v1.4.0)

✅ Single icon, all plugins in menu
✅ Works everywhere without limits

Phase 2: Separate Mode with Smart Limits (v1.6.0)

Default Behavior

final int maxIconsByPlatform = {
  'windows': 10,
  'macos': 5,      // Notch-safe
  'linux-gnome': 5, // Extension limit consideration
  'linux-kde': 15,
  'linux-xfce': 10,
};

User Settings

tray:
  mode: unified | separate | smart
  max_icons: 5  # Override platform default
  priority_plugins: [cpu, memory, battery]  # Always visible
  overflow_behavior: collapse | hide_least_recent

Smart Mode Logic

if (enabledPlugins.length <= platformMax) {
  // Show all
  for (plugin in enabledPlugins) {
    createTrayIcon(plugin);
  }
} else {
  // Show priority + most recent
  final visible = priorityPlugins + recentlyUpdated;
  createUnifiedIcon("Crossbar (${enabledPlugins.length} plugins)");
  // Menu shows all, tooltip shows count
}

Phase 3: Advanced Overflow (v1.7.0+)

  • Collapsible groups ("System", "Network", "Media")
  • Dynamic icon addition/removal on hover
  • Integration with platform-specific tools (Bartender API)

⚠️ Warnings & User Education

Warning Messages

macOS (>5 icons on notch MacBook):

⚠️ Warning: Your MacBook has a notch. With 8 plugins enabled,
some tray icons may be hidden. Consider:
- Using Unified mode (Settings → Tray)
- Installing Bartender 5 for better icon management
- Disabling non-essential plugins

GNOME (no extension detected):

❌ System tray not available on GNOME.

To use Separate mode, install one of these extensions:
- Tray Icons: Reloaded (recommended)
- AppIndicator Support

Or switch to Unified mode (Settings → Tray).

Windows/Linux (>15 icons):

ℹ️ You have 18 plugins enabled.
For better performance, consider:
- Pinning only essential plugins to tray
- Using Unified mode for others

🔬 Testing Checklist

Per-Platform Tests

  • Windows 11: Test with 5, 10, 20, 50 icons (observe performance)
  • macOS Sequoia (notch): Verify icon clipping at 6, 8, 10, 12 icons
  • macOS (no notch): Test limit on 27" iMac
  • Ubuntu 24.04 (GNOME): Test with/without Tray Icons Reloaded
  • Fedora 40 (GNOME + Wayland): Verify AppIndicator compatibility
  • KDE Plasma 6: Test overflow behavior at 15, 20, 30 icons
  • XFCE 4.18: Verify panel expansion

Edge Cases

  • User enables 25 plugins at once (should show warning + fallback)
  • Rapid enable/disable (icon flickering?)
  • Desktop environment switch (GNOME → KDE)
  • External monitor disconnect (icons reorganize?)

📚 References

Windows

macOS

Linux

Cross-Platform


✅ Acceptance Criteria

  • Document hard/soft limits for Windows 10/11
  • Document macOS limits with/without notch
  • Test GNOME behavior with 3 different extensions
  • Test KDE Plasma with 20+ icons
  • Benchmark memory usage: 1 vs 5 vs 10 vs 20 icons
  • Create decision matrix: "When to show warning?"
  • Draft user-facing documentation for each platform
  • Propose default max_icons values per platform

📝 Deliverables

  1. Research Report (this issue, updated with findings)
  2. Platform Compatibility Matrix (markdown table)
  3. Recommended Defaults (config values)
  4. Warning Message Templates (for UI)
  5. Test Plan (edge cases per platform)

Related Issues:

Milestone: v1.5.0 (inform design) / v1.6.0 (apply findings)
Priority: Medium
Type: Research & Documentation
Estimated Effort: 1 week (testing + documentation)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions