Here is a list of the documentation for the different modules:

Information before you start

Shared modules

Shared modules are modules that are comprised of third party libraries that do not need to be compiled statically into the framework.

The following modules are library modules:

  1. OS/Exec module
  2. OS/Unix/XDGBasedir module
  3. OS/Unix/DBusUtils module
  4. CLIParser module
  5. OS/Open module

When compiling in non-vendored mode, make sure that those libraries are available system-wide.

Additionally, package maintainers using source-based packaging formats should make sure that all library features are enabled.

Modules interface and config

Modules also have an interface related to them, the Modules interface. It controls the modules and their settings. There are 2 functions under it:

  1. data or UImGui_Modules_data in C
  2. save or UImGui_Modules_save in C - Saves the module settings to Config/Core/Modules.yaml
  3. get - Returns a reference to the backend class

The data returns a reference of type ModuleSettings that looks like this:

struct ModuleSettings
{
    size_t maxTransactions = 100;
    
    bool os;
    bool dbus;
    bool uexec;
    bool theming;
    bool ufont;
    bool i18n;
    bool undo_redo;
    bool plotting;
    bool knobs;
    bool spinners;
    bool toggles;
    bool text_utils;
    bool cli_parser;
    bool xdg;
    bool open;
};

Every module entry contains information on how to use the different data presented here.


The booleans, at the bottom of the struct, can be used to check if a module is enabled at runtime. On Unix systems, where the 3-library layout is used(more information here), distributions may package the framework as a system-wide library. Because of this, however, all modules need to be enabled at compile time, as this may break specific applications.

For exactly this reason, runtime module checking is needed for per-project module settings. These booleans map almost 1:1 to the ones in uvproj.yaml.