A GNOME Shell extension that brings back the system tray for applications using StatusNotifierItem (AppIndicator/SNI) protocol.
Note
This project voluntarily adheres to The Friendly Manifesto. Read more here
- Zero Configuration - Works out of the box, no external daemon required
- Automatic Discovery - Finds and displays all tray icons automatically
- Native Menus - Full support for application context menus via DBusMenu
- Dual Icon Modes - Choose between symbolic (monochrome) or original (colored) icons
- Highly Customizable - Per-app icon overrides, effects, and ordering
- Drag & Drop Reordering - Arrange tray icons in your preferred order
- Panel Overflow - Optionally collapse extra icons into a single overflow button
- Live Updates - All changes apply instantly without restart
| GNOME Version | Status |
|---|---|
| GNOME 45 | Supported |
| GNOME 46 | Supported |
| GNOME 47 | Supported |
| GNOME 48 | Supported |
| GNOME 49 | Supported |
| GNOME 50 | Supported |
- Nextcloud
- Discord
- Slack
- Bitwarden
- Dropbox
- Telegram
- Steam
- And many more...
-
Clone the repository:
git clone https://github.com/keithvassallomt/status-tray.git cd status-tray -
Run the install script:
./install.sh
-
Restart GNOME Shell:
- X11: Press
Alt+F2, typer, press Enter - Wayland: Log out and log back in
- X11: Press
-
Enable the extension:
gnome-extensions enable status-tray@keithvassallo.com
Once installed and enabled, Status Tray automatically appears in your GNOME panel whenever an application registers a tray icon. Simply:
- Click on a tray icon to open its menu
- Select menu items to interact with the application
Access settings through GNOME Extensions app or by running:
gnome-extensions prefs status-tray@keithvassallo.comChoose how tray icons are displayed:
| Mode | Description |
|---|---|
| Symbolic | Monochrome icons that match your shell theme (default) |
| Original | Full-color icons as provided by applications |
- Enable/Disable Apps - Toggle visibility for individual applications
- Drag & Drop - Reorder apps by dragging the handle on the left
Override any app's icon with a system icon or custom image:
- Click the icon picker button next to an app to open the picker dialog
- Search for a system icon or click "Choose File..." for a custom image
- Optionally toggle Use as Fallback Only, Ignore App Status Icons, or Match by App Name for this app
- Close the dialog when you're done — changes are saved as you pick them
Tight on panel space? Enable Panel Overflow from preferences to keep only the first N tray icons inline; the rest collapse under a single overflow button at the right of the tray. Click it to get a menu that lists each collapsed app, with each app's full menu available inline as a submenu.
- Enable overflow icon - Turn the feature on or off (disabled by default)
- Inline icon limit - Choose how many icons stay directly in the panel (0-20) before the rest overflow. Set it to 0 to keep every tray item in the overflow menu.
The overflow button honours the global Icon Style setting, showing a symbolic or a full-colour glyph to match your other tray icons.
Fine-tune how icons appear in symbolic mode:
- Desaturation - Control grayscale conversion (0% = color, 100% = grayscale)
- Brightness - Adjust icon brightness
- Contrast - Adjust icon contrast
- Tint - Apply a custom color tint
Status Tray implements the StatusNotifierItem (SNI) protocol, the modern replacement for the legacy XEmbed system tray. It provides its own org.kde.StatusNotifierWatcher D-Bus service, allowing applications to register tray icons directly with the extension.
- Self-contained - No dependency on external daemons like
snixembedor AppIndicator libraries - DBusMenu Integration - Fetches dynamic menus directly from applications
- Electron Support - Handles Electron/Chromium apps that use custom icon paths
- Flatpak Compatible - Gracefully handles sandboxed applications
- SNI proxy first - Uses
Gio.DBusProxywith interface XML, falls back to direct calls for non-standard implementations - Name owner resolution - Resolves well-known bus names to unique owners during registration, with sender fallback
- Menu refresh - Calls
AboutToShowbeforeGetLayoutand keeps a placeholder until layout succeeds - Icon pipeline - Prefers
IconName, thenIconThemePathfile lookup, thenIconPixmap
-
Ensure the extension is enabled:
gnome-extensions list --enabled | grep status-tray -
Check if the app is disabled in settings
-
Restart the application after enabling the extension
Some applications may take a moment to initialize their menus. If clicking has no effect:
- Wait a few seconds and try again
- Check application logs for errors
- Try switching between Symbolic and Original icon modes
- Use the icon override feature to set a custom icon
- Adjust icon effects for better visibility
journalctl -f -o cat /usr/bin/gnome-shell 2>&1 | grep -i status-tray- Install and reload GNOME Shell (X11:
Alt+F2→r, Wayland: log out/in). - Launch a known SNI app (e.g., Dropbox, Slack, Telegram) and confirm the icon appears.
- Click the icon and verify the menu opens and actions trigger.
- Toggle Icon Mode in preferences and confirm the icon restyles immediately.
- Disable the app in preferences and confirm the icon hides, then re-enable.
Contributions are welcome! Please see the developer documentation for technical details.
-
Clone and install in development mode:
git clone https://github.com/keithvassallomt/status-tray.git cd status-tray ./install.sh --dev -
Make your changes
-
Restart GNOME Shell to test
-
Submit a pull request
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- The GNOME Shell team for the excellent extension API
- The KDE team for the StatusNotifierItem specification
- The AppIndicator project for pioneering modern system tray support
Made with care for the GNOME community



