Skip to the content.

TrayIconGuard

Keep every notification-area (system tray) icon visible on Windows 10/11 — and keep it that way. One native executable (~1 MB), zero dependencies, zero telemetry.

Download the latest release Knowledge base (wiki) Source code


The problem it solves

Windows remembers tray-icon visibility per icon and forgets it constantly: every time an application (re)registers its notification icon, Explorer recreates HKCU\Control Panel\NotifyIconSettings\{id} with IsPromoted = 0 — and the icon drops back into the ^ overflow flyout. One-shot .reg tweaks decay within hours.

TrayIconGuard writes the same store the Windows Settings toggle uses, then keeps a RegNotifyChangeKeyValue watcher on it: as soon as Explorer hides a promoted icon, the guard restores it (typically well under a second). Per user, no admin rights, no telemetry.

Install in three steps

  1. Download TrayIconGuard.exe (or the zip with docs and installer helpers) from the latest release.
  2. Right-click the exe → Properties → Unblock (Mark-of-the-Web) → OK.
  3. Run it. The first-run wizard asks for the install scope — Only for me (no UAC), For all users (one UAC prompt) — or pick just run once for portable use.

Verify your download: Get-FileHash .\TrayIconGuard.exe -Algorithm SHA256 and compare it with the sha256 field of update/stable.json.

Highlights

Command line at a glance

TrayIconGuard.exe                     # tray-resident GUI
TrayIconGuard.exe --minimized         # start hidden in the tray
TrayIconGuard.exe --promote-all       # fix everything now, then exit
TrayIconGuard.exe --watch             # headless guard (Task Scheduler / GPO logon script)
TrayIconGuard.exe --status --json     # machine-readable state for RMM/monitoring
TrayIconGuard.exe --check-update      # ask the feed whether a newer version exists
TrayIconGuard.exe --uninstall         # remove shortcuts, autostart and the installed copy

Full list: Command-Line Interface · exit codes · --install-machine for elevated fleet installs.

Documentation

Guide What’s inside
Getting Started first run, the wizard, portable vs installed
How Tray Visibility Works the registry mechanics, the decay problem, the do-not-touch list
The Guard Watcher event-driven re-promotion, debounce, polling fallback
GUI Pages Guide every page of the app
Command-Line Interface all flags, exit codes, automation recipes
Configuration Reference settings.json and registry values, in full
Self-Updater Guide the feed contract, SHA-256 pinning, verification
Security and Privacy what the program touches, threat model
Installation and Deployment per-user and machine scope, Task Scheduler, RMM
Troubleshooting the failures we have actually seen and their fixes
Comparison with Alternatives TrayIconGuard vs registry scripts, StartAllBack, ExplorerPatcher, Windhawk
Building from Source mingw-w64 cross-build and native MSVC
Localization and Themes 30 locales, adding a language, theming
Architecture module map, threading model, IPC
Changelog and Versioning release history and the publication contract
Roadmap and Ideas what is planned next
FAQ · Glossary quick answers and vocabulary

Security & privacy

Reporting a vulnerability: see SECURITY.md.

License

PolyForm Noncommercial License 1.0.0 — free for noncommercial use; commercial licensing: contact the author.

Mikhail Deynekin · icons@Deynekin.com · Deynekin.com · GitHub

TrayIconGuard is not affiliated with Microsoft. Windows is a trademark of Microsoft Corporation.