Skip to content

v2.2.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 14:36
· 18 commits to main since this release
b557d96

The live dashboard no longer flickers. Each repaint is now wrapped in
synchronized output (DEC private mode 2026), so the terminal holds its display
still and presents the panel as one finished frame.

Nothing about what zrk measures changes. Requests, pacing, latency recording
and every number in the report are identical to 2.2.0.

What you were seeing

The panel repaints by moving to its first line, erasing everything below, and
drawing the whole thing again. Between the erase and the last cell there is a
window where the terminal is free to put a blanked or half-filled panel on
screen — and it takes that window on every frame, twelve and a half times a
second at the default --refresh 80ms.

How bad it looked scaled with the panel. A colored spectrogram cell costs
about 17 bytes once the SGR and its reset are counted, so a wide terminal
sends up to ~15KB of cells per frame, landing wherever the terminal happens to
draw them. Narrow terminals and NO_COLOR runs got off lighter, which is part
of why this survived as long as it did.

Mode 2026 closes that window: the terminal buffers everything between the
opening and closing sequences and swaps it in at once.

If your terminal doesn't support it

Then nothing changes for you. Both sequences are unknown private modes to a
terminal that doesn't implement them, and unknown private modes are ignored —
so there is no capability query, no TERM sniffing, and no fallback path to
get wrong.

--plain, a piped stdout, and --output are untouched, as before: those
paths emit no escape sequences at all, and the redirectable report still
carries none.

Also

zig build test covers 243 tests. One is new, and it pins that a frame is
opened and closed exactly once, that the erase happens inside that bracket
rather than before it, and that the bracket adds no lines — the in-place
repaint depends on knowing exactly how tall the last frame was, and a stray
newline in the wrong place is how that gets silently wrong.