BUI Turns Blender's UI into a Standalone Multi-Language Library
BUI extracts Blender's interface drawing and interaction rules into a C-core library with bindings for Python, Rust, JavaScript/React, and more, preserving damage rendering and widget behavior.
A C core and multiple bindings
BUI takes the widget drawing, interaction rules, and look of Blender and turns them into a standalone UI library. Its foundation is a small C runtime called the kit. The kit keeps all widgets in one tree, handles layout, mouse and keyboard input, and draws them the way Blender does. The drawing code is a C port of Blender’s own widget code, and the interaction follows Blender’s rules. BUI is not Blender, and it is not a browser engine; no Blender installation or prior Blender knowledge is required.
Bindings sit on top of the kit. Python developers can run existing tkinter programs unchanged; the project covers all 7,846 public names of tkinter and ttk and reports nine real programs behave identically on the standard library and BUI. Qt-style Python code supports a partial subset of widgets. A Blender components API provides 45 native widgets and editors, including panels, number sliders, pie menus, and a node editor; ten of them are also available from Rust and JavaScript. Rust bindings support HTML, CSS, Tailwind, rsx!/view! markup, and gpui or zopra syntax. JavaScript and React run on Node.js or Bun through napi-rs, with a DOM-like API or JSX. C bindings are available through BUI_kit.h, and Dear ImGui can be used from C++, C, Python, or Rust.
Preserved interaction details
BUI carries over several Blender interaction patterns. Number fields support dragging with a hidden, continuous cursor; Shift gives precision and Ctrl snaps. Fields accept math expressions such as 2*pi, min(4, 3), or round(1.7), using Blender’s expression evaluator. Ctrl+Wheel steps values, Ctrl+C / Ctrl+V copy and paste, and Backspace resets. Users can drag across checkboxes to set them all. Menus implement fuzzy search: typing “ad cu” finds “Add Cube”, typos are forgiven, and recent picks rank first. Undo and redo work with Ctrl+Z / Ctrl+Shift+Z for UI edits and inside text fields, with Tab moving between fields. The HSV color wheel, color ramps, curves, trees, lists, text areas, canvases, node editor, and file browser are included, and dark and light themes can be switched at runtime.
Damage rendering and reported benchmarks
The rendering path is built around damage rendering. An idle UI costs 0% CPU, and a hover redraws only the widget it touches. The GPU renderer is opt-in, using Direct3D 11 on Windows and OpenGL 3.3 on Linux, modeled on Blender’s instanced widget drawing and producing the same pixels as the CPU rasterizer. Text uses Blender’s UI font Inter, rendered with FreeType; on GPU, glyphs are drawn from outlines with Slug, falling back to a per-glyph atlas as Blender does. On the image side, BUI provides a unified C decoder for PNG, GIF, BMP, TGA, QOI, JPEG, WebP, HDR, and SVG, decoding off the UI thread at the drawn size, with DCT scaling for JPEG thumbnails and a default memory-budgeted cache of 256 MiB.
The project’s benchmarks report 2–4× less CPU per frame than gpui-fast, lower RAM usage, and a first frame time around 5 ms. These figures come from the project’s own README and have not been independently verified. The repository includes instructions for running the benchmarks, which may be useful for teams evaluating the library.