tping: comparing three Windows frontends
2026-06-11
https://tinksoft.com/log/tping-the-tiny-frontend-quest/
----------------------------------------

TPing displays 23 store devices in one compact monitoring window. I tested
three Windows frontend approaches to reduce the window size without hiding
rows or adding a scrollbar.

## what I tried

### Walk

The Walk version uses native Windows controls. It is pure Go, 9.3 MB, and builds
in under a second. The native list control adds row spacing that cannot be
removed through the available style and spacing flags.

### Dear ImGui

The ImGui version uses Cgo and `github.com/AllenDang/cimgui-go`. The binary is
14.7 MB and statically linked. It runs at 30 FPS while active, 5 FPS while idle,
and 2 FPS while minimized. A scratch buffer, pushed IDs, and cached text sizes
reduce each frame to one slice allocation and no string formatting.

This is the production frontend.

### Direct2D

The Direct2D version uses a Cgo wrapper around the COM interfaces. It creates
the factory, render target, brush, text format, and window procedure directly.
The window renders and handles input, but resizing leaves the render target at
the original dimensions.

Fixing resize correctly requires either swap-chain management through
`ID2D1DeviceContext` or reliable render-target recreation. That work is not
finished. The Direct2D package remains in the tree as an experiment.

## result

Walk remains the simplest build. ImGui provides the smallest usable window and
is the version I run. Direct2D is not used in production.
