Natiny 0.10.1
A stability-focused release polishes existing features with reliable multi-window lifetime, safe handles, and predictable rendering across desktop and web.
Natiny 0.10.1 is focused on stability and polishing the features already in the engine. Multiple windows now behave correctly throughout their lifetime, destroyed handles cannot silently point at new resources, and several offscreen, Vulkan, and web failures are fixed.
The last window closes the application
Natiny already supported opening several windows, but their lifetime was not handled consistently. Applications now keep running until the last window closes. Closing the first window used to end the frame loop on Vulkan and Direct3D 12; a remaining window now takes over immediately and continues to render on every backend.
Secondary windows also rebuild their swapchains when resized, so they no longer
turn black after their first resize. A destroy request takes effect immediately
through natiny.window.get_alive, while the render thread safely releases the
window at a frame boundary. Existing single-window projects need no changes.
Destroyed handles stay destroyed
A handle kept after its resource is destroyed no longer starts referring to a different resource that later reuses the same slot. This applies to windows and all pooled assets, including textures, meshes, shaders, materials, models, and audio resources.
Lua window handles are now preserved at their full width too. Previously, a
window created after another had been destroyed could receive a handle that
natiny.window.* calls truncated and could not resolve. Existing projects do
not need to change how they store or pass handles.
Clears and offscreen passes produce a defined frame
natiny.render.clear now clears the active target
where the call appears, even when no draw follows it. Empty render targets no
longer begin with leftover image data, and a clear issued after drawing starts
a fresh pass as requested.
Vulkan now preserves earlier offscreen passes when a target is drawn more than once per frame and correctly orders a pass that samples the output of the one before it. This fixes ping-pong effects and surfaces used between window passes. Updating a material texture during a frame is safe as well, removing an intermittent Vulkan crash seen by the Waterpool example.
Web builds reach their first frame
A web program can now follow the usual synchronous cleanup pattern without its window being destroyed before the browser draws the first frame. Explicitly closing a window from a frame callback still stops the browser loop.
When WebGPU is unavailable, the shipped page now explains that the program must
run on HTTPS or localhost instead of failing later with a missing canvas
context. Shader constants and textures also keep the names written in NSL even
when GLSL reserves those names; for example, a uniform named filter can now be
set as filter on every backend.
Documentation is available offline
The complete API reference and guides can now be downloaded as offline documentation. The archive contains a self-contained HTML file, so search, navigation, styles, and code examples work without a network connection.
Natiny 0.10.1 bundles for every platform are on the download page.