Unison v0.93.0 - Table Layout and DPI Fixes

Unison v0.93.0 was published on June 28, 2026, with table layout control, dock rendering fixes, and native window handling changes that matter to teams building desktop data tools. The main change for data engineering interfaces is Table.SyncRowHeights(), which gives callers a public way to refresh cached row heights after direct column width changes.

The full release notes and downloads are on the GitHub release page.

Table layout and dock behavior

The table change is small, but it is the part most likely to matter in data heavy tools. Unison v0.93.0 adds Table.SyncRowHeights(), a public method that recalculates cached row heights from the current column widths. That logic used to live inside the three SizeColumns* methods.

That matters when an application adjusts table column widths directly. A grid that displays job runs, source records, validation results, or catalog entries can now ask the table to refresh its row height cache without routing the change through a sizing helper. The release does not claim a new table model or new rendering engine. It exposes a previously internal step that application code already needed in some layouts.

The release also adds table theme fields that control whether the first and last divider lines are drawn. The default keeps both enabled. For dense operator screens, that is a useful distinction because outer divider lines can affect how table groups read next to side panels or docked inspectors.

There are two dock fixes in the same release. The dock header now calls FlushDrawing() after MarkForRedraw() during drag-update and drag-exit events, so the tab insertion indicator is painted during native drag and drop. The dock divider position is also clamped only for layout. If a view is shrunk and later expanded, the divider can return to its prior position instead of keeping the temporary clamped value.

LabelContentSizes now reports the same height for an empty line as for a line containing text. The old path could use the passed in font for empty text while text lines used the text object’s TextDecoration font. In forms and tables with optional labels, that kind of mismatch can become visible as uneven row spacing.

Linux window geometry

The Linux change is about avoiding bad assumptions around frame extents. Unison now sends and waits for _NET_REQUEST_FRAME_EXTENTS only when the window manager advertises support through _NET_SUPPORTED. That avoids a needless stall at window creation under managers that ignore the request, including bare xwayland.

When the request is supported, the wait timeout is higher so a busy window manager has time to respond. Border widths are not cached as valid until the window manager has reported them, which avoids treating a zero placeholder as a real frame size. The content rect is held at its last known value while waiting for the ConfigureNotify event tied to a pending resize.

For platform operators, the practical point is predictability. Native desktop tools used for data inspection often run across mixed Linux setups, remote sessions, and window managers with uneven protocol support. This release narrows one class of startup and resize issues without asking application code to special case the window manager.

Windows DPI and monitor fixes

The Windows fixes are centered on multi monitor correctness. Mouse wheel events now work when a display is positioned to the left of or above the primary display. That is a concrete bug for operators who keep dashboards, table views, or queue monitors spread across several screens.

Custom cursors are no longer baked once at the primary display scale and reused everywhere. Unison now produces a cursor sized for the DPI of the monitor where it is shown, and refreshes it when a window moves between monitors. The same theme appears in the window sizing fix: when a window moves between monitors with different DPI, the response to WM_GETDPISCALEDSIZE now scales the client area rather than the whole window rectangle.

Packaged Windows apps also now declare Per-Monitor V2 DPI awareness in their manifest. The release notes call out that the previous manifest declared system DPI awareness, which could override the runtime request and leave distributed apps blurry or incorrectly scaled on secondary monitors. That is not a data pipeline feature, but it affects the daily usability of native tools that sit beside pipelines.

Where to get it