The small 3.5 inch USB screen in my PC case runs a tray app I wrote called PanelOS. It shows CPU and GPU temps, watts, RAM and VRAM, a fan, and the song that is playing in the Spotify desktop app with its cover. The most requested thing was simple: show the FPS of the game I am playing.
Where the number comes from
I did not want an overlay or to inject anything into games. Windows already reports every frame a program presents through ETW (Event Tracing for Windows). PanelOS listens to those present events, keeps only the ones from the app in the foreground, and counts them per second. No hooks, no game files touched.
If the trace can't start (for example without the needed rights), the screen shows "--" instead of a made up number. I would rather show nothing than a wrong FPS.
Keep it optional
Not everyone wants FPS on a screen that is mostly about temps and music, so it is a "Show FPS" toggle in Settings and every theme has a spot for it. On the Gallery theme it sits right next to NOW PLAYING.
The bug that shipped with it
After the release, the tray "Update" item stayed grey even though "Check for updates" said a new version existed. The updater only enables Update when the newest release actually has an installer attached with a valid size and a SHA-256 in the notes. The release was there, the installer was not, so the button did the safe thing and refused.
Two fixes came out of it. The release flow now always attaches the installer and its hash before a release is marked latest. And the menu now tells you why it is grey: "Update (no installer published)" or "Update (check failed)". Also, the menu is now rebuilt on the tray thread, which removed a rare case where the label did not refresh.
One thing I can't fix with code
Windows 11 Smart App Control and SmartScreen are suspicious of new unsigned installers. SmartScreen lets you click "More info" and "Run anyway", Smart App Control does not. The real fix is code signing, which I am working on.
Try it
PanelOS Lite is free, and Pro is a one-time $6.99 on Gumroad.
Site: https://emirmrkaljevic.github.io/panelos-site/
Pro: https://emirmk.gumroad.com/l/vmhopx
If you have one of these little screens, I would love to hear which stats you actually look at while gaming.

Top comments (1)
A live FPS display is a nice example of a tiny feature exposing a real systems boundary: sampling cadence, state ownership, and rendering cadence do not have to be the same loop. Keeping the measurement in one monotonic source of truth and letting the display consume a bounded snapshot makes update bugs easier to diagnose than trying to synchronize every frame directly.