DVUI Devlog 2026

RSS Feed

Archive

February 03, 2026

January 2026

3 people contributed this month with 65 commits.

Accesskit Text Runs

Giant thanks to Paul Hatchman for adding text run support to our Accesskit integration!

Screen readers can now navigate normally through textLayout and textEntry content.

This is the last large piece needed for decent screen reader support. Wohoo!

While we will continue work in this area for bugs and enhancements, this is a huge milestone.

Big thanks to Arnold Loubriat for helping us use Accesskit properly and for loads of testing!

Shout out to Ethin Probst for excellent reporting and testing!

Retaining Textures and Data

dvui implements a form of garbage collection for textures and data. If you don’t reference a texture or call dataGet/Set for a frame, we free that memory. But sometimes you want to keep things around a bit longer.

Now we provide functions textureRetain, dataRetain, and retainClear.

These give a way to keep dvui from freeing these things, while associating them with a “retain key”. That key can be passed later to retainClear to tell dvui to stop retaining them.

This was motivated by the demo’s stuttering when reshowing the demo buttons (which trigger regenerating a bunch of textures). It’s now fixed by:

So the flow is:

These features all come together to allow retaining data to match the lifetime of some higher level widget.

More Improvements:

January 01, 2026

December 2025

6 people contributed this month with 56 commits.

Fonts

Font selection got a major upgrade. Until now we had to refer to an individual font ttf.

Now Font acts like a query that searches for a matching Font.Source:

dvui.Theme has 4 fonts (body, heading, title, mono) and grew an embedded_fonts field so that font sources can be tied to the theme that requires them.

For now we still only have a single pool of Font.Source that is internal to dvui. In the future we hope to extend this to be able to query for system fonts.

Syntax Highlighting

We are now bundling the tree-sitter library, and TextEntryWidget gained a tree_sitter option.

The usage code is responsible for providing:

Right now an example is only in the main window of the “app” example (like zig build sdl3-app), but eventually we will figure out a way to integrate it into the demo window.

This integrates with .cache_layout = true to provide incremental edit parse updates and good performance on large documents.

Any feedback would be welcome!

More Improvements:

Thank you to everyone who asked questions, filed issues, and contributed!