Skip to content
/ imguinz Public

Examples project using Dear Imgui (CImGui), ImPlot (CImPlot), ImPlot3D(CImPlot3D) and many additional libraries with Zig language

License

Notifications You must be signed in to change notification settings

dinau/imguinz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ImGuinZ

This project aims to simply and easily build Dear ImGui (CImGui) / ImPlot (CImPlot), Raylib, rlImGui and many other libaries and examples in Zig with less external dependencies.

  • ImGui / CImGui version 1.92.4 dock (2025/11)

  • OS: Windows11 and Linux

  • Frontends and Backends

    GLFW SDL3 Win32
    OpenGL3
    backend
    YES YES -
    SDLGPU3
    backend
    - YES -
    DirectX 11
    backend
    - - YES
  • Features

    • Included Font Awesome Icon fonts.
      alt
    • Included GLFW 3.4.0 static library (for Windows)
    • Included SDL3 libraries (for Windows)
    • Included STB libraries (only stb_image) for Load / Save images
    • Available ImPlot (CImPlot) with ImDrawIdx="unsigned int"
    • Enabled Input method (IME) flag with IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS

Zig fetch


  1. Zig fetch imguinz

    mkdir myapp
    cd myapp
    zig init
    
    zig fetch --save git+https://github.com/dinau/imguinz
  2. Add dependencies to build.zig

    const imguinz = b.dependency("imguinz", .{});
    const dependencies = .{
        "appimgui",      // Simple app framework
        "imspinner",     // ImSpinner
        "imknobs",       // ImKnobs
        "imtoggle",      // ImToggle
     // "another_lib",
    };
    inline for (dependencies) |dep_name| {
        const dep = imguinz.builder.dependency(dep_name, .{
            .target = target, 
            .optimize = optimize, 
        });
        exe.root_module.addImport(dep_name, dep.module(dep_name));
    }
    exe.subsystem = .Windows; // Hide console window

    You can set dependencies (additional libraries), see imguinz/build.zig.zon

    "appimgui"     <- Simple app framework for GLFW and OpenGL backend
    "imspinner"    <- ImSpinner
    "imguizmo"     <- ImGuizmo
    "imknobs"      <- ImKnobs 
    "imnodes"      <- ImNodes
    "implot"       <- ImPlot
    "implot3d"     <- ImPlot3D
    "imtoggle"     <- ImToggle
    "rlimgui"      <- rlImgui
    ... snip  ...
  3. Edit src/main.zig

    const app = @import("appimgui");
    const ig = app.ig;
    const spinner = @import("imspinner");
    const knobs = @import("imknobs");
    const tgl = @import("imtoggle"); // ImToggle
    
    // gui_main()
    pub fn gui_main(window: *app.Window) void {
        var col: f32 = 1.0;
        var fspd: bool = false;
        var speed: f32 = 2.0;
        var spn_col: spinner.ImColor = .{ .Value = .{ .x = col, .y = 1.0, .z = 1.0, .w = 1.0 } };
        while (!window.shouldClose()) { // main loop
            window.pollEvents();
            window.frame(); // Start ImGui frame
    
            ig.igShowDemoWindow(null); // Show demo window
                                       //
            ig.igSetNextWindowSize(.{ .x = 0.0, .y = 0.0 }, 0); // Fit window size depending on the size of the widgets
            _ = ig.igBegin("Spinner", null, 0); // Show Spinner window
            spinner.SpinnerAtomEx("atom", 16, 2, spn_col, speed, 3);
            ig.igSameLine(0.0, -1.0);
            _ = tgl.Toggle("Speed", &fspd, .{ .x = 0.0, .y = 0.0 });
            if (fspd) speed = 6.0 else speed = 2.0;
            if (knobs.IgKnobFloat("Mix", &col, -1.0, 1.0, 0.1, "%.1f", knobs.IgKnobVariant_Stepped, 0, 0, 10, -1, -1)) {
                spn_col.Value.x = col;
            }
            ig.igEnd();
    
            window.render(); // render
        } // end while loop
    }
    
    pub fn main() !void {
        var window = try app.Window.createImGui(1024, 900, "ImGui window in Zig lang.");
        defer window.destroyImGui();
    
        _ = app.setTheme(.dark); // Theme: dark, classic, light, microsoft
    
        gui_main(&window); // GUI main proc
    }
  4. Build and run

    pwd
    myapp
    
    zig build run

    myapp.png

Prerequisites


  • Zig compiler version confirmed

  • WindowsOS

    • Windows11

    • MSys2/MinGW basic commands (make, rm, cp, strip ...)

      pacman -S make 
  • Linux OS (Ubuntu / Debian families)

     sudo apt install lib{opengl-dev,gl1-mesa-dev,glfw3,glfw3-dev,xcursor-dev,xinerama-dev,xi-dev} git make
    • SDL3
      If you are using Debian13 Trixie, add sdl3 library,

      sudo apt install libsdl3-dev

      otherwise install SDL3 manually

Build and run


git clone https://github.com/dinau/imguinz
cd imguinz/examples/glfw_opengl3              # cd one of examples
make run                                      # or  zig build --release=fast run

Available libraries list at this moment


Library name / C lang. wrapper

Additional examples

Examples screenshots

ImGui-Toggle / CImGui-Toggle


ImGui-Toggle / CImGui-Toggle

main.zig

alt

ImGui-Knobs / CImGui-Knobs


ImGui-Knobs / CImGui-Knobs

main.zig

alt

ImSpinner / CImSpinner


ImSpinner / CImSpinner

main.zig

alt

Raylib example


raylib_basic

alt

raylib_cjk: Showing multi byte(CJK) fonts

alt

Raylib + ImGui + rlImGui


main.zig

alt

ImPlot3D / CImPlot3D


ImPlot3d / CImPlot3d

main.zig

alt

ImGuiFileDialog / CImGuiFileDialog


ImGuiFileDialog / CImGuiFileDialog

main.zig

alt

ImGuiColorTextEdit / cimCTE


ImGuiColorTextEdit / cimCTE

main.zig

alt

ImNodes / CImNodes


ImNodes / CImNodes

main.zig

alt

ImGuizmo / CImGuizmo


ImGuizmo / CImGuizmo

main.zig

alt

imgui_markdown / cimgui_markdown


WIP

imgui_markdown / cImgui_markdown

main.zig

alt

Image load


Image load and magnifying glass

glfw_opengl3: main.zig / sdl3_opengl3: main.zig / sdl3_sdlgpu3: main.zig

alt

Showing CJK multi byte fonts and input UTF-8 text


main.zig

alt

Icon font viewer


main.zig, magnifying glass, incremental search

alt

Image load / save


Image load / save and magnifying glass.
Image file captured would be saved in .the folder ./zig-out/bin.
Image can be saved as JPEG / PNG / BMP / TGA file.

main.zig

alt

glfw_opengl3_implot


main.zig

alt

ImPlot Demo written in Zig lang.


Now work in progress.

Build and run

pwd
examples/imPlotDemo
make run   # or zig build --release=fast run

ImPlot demo source in Zig lang.


demoAll.zig

Plots Tab


LinePlots (Dynamic)

alt

BarGroups

alt

BarStacks

alt

PieCharts

alt

Heatmaps

alt

Histogram2D

alt

Images

alt

Axes Tab / LogScale


alt

Subplots Tab / Tables


alt

Tools Tab / DragRects


alt

Show / Hide console window


Open build.zig in each example folder and
Hide console window: Default,
Show console window: Comment out this line as follows,

... snip ...
//exe.subsystem = .Windows;  // Hide console window
... snip ...

and rebuild example.

SDL libraries


https://github.com/libsdl-org/SDL/releases

Similar project ImGui / CImGui


Language Project
Lua Script LuaJITImGui
NeLua Compiler NeLuaImGui / NeLuaImGui2
Nim Compiler ImGuin, Nimgl_test, Nim_implot
Python Script DearPyGui for 32bit WindowsOS Binary
Ruby Script igRuby_Examples
Zig, C lang. Compiler Dear_Bindings_Build
Zig Compiler ImGuinZ

SDL game tutorial Platfromer


ald

Language SDL Project
LuaJIT Script SDL2 LuaJIT-Platformer
Nelua Compiler SDL2 NeLua-Platformer
Nim Compiler SDL3 / SDL2 Nim-Platformer-sdl2/ Nim-Platformer-sdl3
Ruby Script SDL3 Ruby-Platformer
Zig Compiler SDL2 Zig-Platformer

Notes:

  • Using ImPlot3D / ImPlot with Zig
  • Zig + ImGui + ImPlot3D / ImPlot demo
  • Build with ImPlot3D / ImPlot / Raylib / rlImGui
  • ImPlot3D integration example
  • This project builds and runs Dear ImGui + ImPlot3D / ImPlot / Raylib / rlImGui using Zig.
  • ImPlot3D is compiled from source (implot3d.h / implot3d.cpp)
  • ImPlot is compiled from source (implot.h / implot.cpp)

1

Footnotes

  1. Windows11
    [Settings] - [Privacy & Security] - [For developers] - [Developer Mode]: [ON]

About

Examples project using Dear Imgui (CImGui), ImPlot (CImPlot), ImPlot3D(CImPlot3D) and many additional libraries with Zig language

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages