Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Intro - Developer docs

This section is for developers willing to build and modify the imgui_bundle library. It covers topics such as building the library, updating dependencies, and adding new features or bindings.

Architecture Overview

ImGui Bundle implements a four-layer architecture:

  1. Rendering Backends – GLFW/SDL + OpenGL/Metal/DirectX/Vulkan

  2. Dear ImGui Core – immediate-mode widget system

  3. Hello ImGui Framework – window lifecycle, docking, DPI handling, asset management

  4. ImmApp Layer – simplified runner with automatic add-on initialization

Users can work at their preferred abstraction level, from raw ImGui calls to the high-level immapp.run() API.

Python Bindings

The bindings are auto-generated using litgen, a code generator that transforms C++ headers into:

All 23+ C++ libraries compile into a single _imgui_bundle native extension, with submodules conditionally available based on build configuration.

Key Concepts

Glossary

Terms used throughout the developer docs:

TermMeaning
Dear ImGuiThe core C++ immediate-mode GUI library by Omar Cornut
Hello ImGuiFramework layer on top of Dear ImGui: window lifecycle, docking, DPI, asset management, multi-platform deployment
ImmAppHigh-level runner that wraps Hello ImGui and auto-initializes add-ons (ImPlot, Markdown, etc.) via simple flags
litgenLiterate Generator — the tool that reads C++ headers and generates Python bindings (nanobind C++ code + .pyi stubs)
nanobindC++ library used to create Python extension modules. Successor to pybind11; used by litgen’s generated code
srcMLXML representation of C++ source code; used internally by litgen to parse headers
.pyi stubsPython type stub files providing IDE autocompletion and type checking for the native extension
pybindLegacy naming seen in generated filenames (pybind_*.cpp). These files actually use nanobind, not pybind11 — the name is historical
ibexAbbreviation fo Dear ImGui Bundle Explorer — the full demo app showcasing all libraries, used in just recipes (just ibex_...)
imexAbbreviation for Dear ImGui Explorer - source code in external/imgui_explorer. Used just recipes just imex_...
_imgui_bundleThe single compiled native extension (.so/.pyd) containing all 23+ C++ libraries
justfileTask runner config at repo root; provides shortcuts like just libs_bindings, just test_pytest, etc.

More Resources

In This Section