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

 

History

165 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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