This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain

Overview

Nuklear

ALL DEVELOPMENT MOVED ELSEWHERE

Dear visitor,

this repository, issue tracker, etc. is abandoned in favor of https://github.com/Immediate-Mode-UI/Nuklear . Any activity in this issue tracker, any pull requests, etc. will be ignored.

Looking forward to hearing from you in https://github.com/Immediate-Mode-UI/Nuklear

Nuklear community

Build Status

This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window and input handling but instead provides a very modular library approach by using simple input state for input and draw commands describing primitive shapes as output. So instead of providing a layered library that tries to abstract over a number of platform and render backends it only focuses on the actual UI.

Features

  • Immediate mode graphical user interface toolkit
  • Single header library
  • Written in C89 (ANSI C)
  • Small codebase (~18kLOC)
  • Focus on portability, efficiency and simplicity
  • No dependencies (not even the standard library if not wanted)
  • Fully skinnable and customizable
  • Low memory footprint with total memory control if needed or wanted
  • UTF-8 support
  • No global or hidden state
  • Customizable library modules (you can compile and use only what you need)
  • Optional font baker and vertex buffer output
  • Documentation

Building

This library is self contained in one single header file and can be used either in header only mode or in implementation mode. The header only mode is used by default when included and allows including this header in other headers and does not contain the actual implementation.

The implementation mode requires to define the preprocessor macro NK_IMPLEMENTATION in one .c/.cpp file before #includeing this file, e.g.:

#define NK_IMPLEMENTATION
#include "nuklear.h"

IMPORTANT: Every time you include "nuklear.h" you have to define the same optional flags. This is very important not doing it either leads to compiler errors or even worse stack corruptions.

Gallery

screenshot screen screen2 node skinning gamepad

Example

/* init gui state */
struct nk_context ctx;
nk_init_fixed(&ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &font);

enum {EASY, HARD};
static int op = EASY;
static float value = 0.6f;
static int i =  20;

if (nk_begin(&ctx, "Show", nk_rect(50, 50, 220, 220),
    NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {
    /* fixed widget pixel width */
    nk_layout_row_static(&ctx, 30, 80, 1);
    if (nk_button_label(&ctx, "button")) {
        /* event handling */
    }

    /* fixed widget window ratio width */
    nk_layout_row_dynamic(&ctx, 30, 2);
    if (nk_option_label(&ctx, "easy", op == EASY)) op = EASY;
    if (nk_option_label(&ctx, "hard", op == HARD)) op = HARD;

    /* custom widget pixel width */
    nk_layout_row_begin(&ctx, NK_STATIC, 30, 2);
    {
        nk_layout_row_push(&ctx, 50);
        nk_label(&ctx, "Volume:", NK_TEXT_LEFT);
        nk_layout_row_push(&ctx, 110);
        nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f);
    }
    nk_layout_row_end(&ctx);
}
nk_end(&ctx);

example

Bindings

There are a number of nuklear bindings for different languges created by other authors. I cannot atest for their quality since I am not necessarily proficient in either of these languages. Furthermore there are no guarantee that all bindings will always be kept up to date:

Credits

Developed by Micha Mettke and every direct or indirect contributor to the GitHub.

Embeds stb_texedit, stb_truetype and stb_rectpack by Sean Barrett (public domain) Embeds ProggyClean.ttf font by Tristan Grimmer (MIT license).

Big thank you to Omar Cornut ([email protected]) for his imgui library and giving me the inspiration for this library, Casey Muratori for handmade hero and his original immediate mode graphical user interface idea and Sean Barrett for his amazing single header libraries which restored my faith in libraries and brought me to create some of my own. Finally Apoorva Joshi for his singe-header file packer.

License

------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
------------------------------------------------------------------------------
ALTERNATIVE A - MIT License
Copyright (c) 2017 Micha Mettke
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------------------------------------------------------------------------------
ALTERNATIVE B - Public Domain (www.unlicense.org)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-----------------------------------------------------------------------------
Comments
  • Making zahnrad touch screen friendly.

    Making zahnrad touch screen friendly.

    I am right now toying around building an interface for iOS and Android and potentially other touch screen devices. Getting a rough port up running on iOS was pretty easy, thanks to the clean structure of zahnrad. I have discovered only one major show stopper and this is the mouse pointer centric approach. On a touch screen there is no concept of hovering for example. And most widgets (those that do not involve dragging) do fire on touch up and not down.

    As a workaround I am sending a motion event right before a touch down.

    zr_clear(&gui.ctx);
    
    zr_input_begin(&gui.ctx);
    zr_input_motion(&gui.ctx, location.x, location.y);
    zr_input_end(&gui.ctx);
    
    zr_input_begin(&gui.ctx);
    zr_input_button(&gui.ctx, b, location.x, location.y, zr_true);
    zr_input_end(&gui.ctx);
    
    run_demo(&gui);
    

    and again a motion event right after a touch up

    zr_clear(&gui.ctx);
    
    zr_input_begin(&gui.ctx);
    zr_input_button(&gui.ctx, b, location.x, location.y, zr_false);
    zr_input_end(&gui.ctx);
    
    zr_input_begin(&gui.ctx);
    zr_input_motion(&gui.ctx, 0, 0);
    zr_input_end(&gui.ctx);
    
    run_demo(&gui);
    

    This does work surprisingly well, but of course feels quite hackish and does not solve the touch up vs. down issue.

    Another issue is the hit test. On a touch screen it is rather difficult to hit small widgets and the solution usually is to extend the hit area virtually to at least 40 x 40 pixel.

    I see a huge potential for zahnrad on touch devices.

    What do you think?

    Cheers, richi

    enhancement 
    opened by richi 27
  • Sample code not working?

    Sample code not working?

    Hey, I have many questions/comments about your sample code under the README. (this is all c++)

    1. Firstly it seems that the first line needs to be changed to this: struct gui_command_buffer *buffer = new gui_command_buffer; or else it doesn't work on this line:gui_foreach_command(cmd, buffer) {
    2. In reference to void *memory = malloc(MEMORY_SIZE); What is memory size? I noticed that in the demo it was set to 64 * 1024... what is the significance of this?
    3. In reference to len = gui_panel_edit(&layout, buffer, len, 256, &active, GUI_INPUT_DEFAULT); What is len? what is active?
    4. I have been trying for a very long time for your example to work but its always crashing on "gui_panel_begin" I have confirmed that the assert statements are returning properly, beyond that I didn't want to have to debug your code to see where it crashes. Do you think you could point me in the right direction here?
    bug enhancement question 
    opened by ktb92677 24
  • Split to multiple headers for development

    Split to multiple headers for development

    I think that having one header deployment is the best way to ship C/C++ libraries (aka stb way), but it makes development a bit clumsy in a way. In my case I would like to contribute to the library, but having 15kloc file is just too bulky to work on and takes time to figure out the mental model behind the code. In some other projects like tigr and buildfox they have source as separate files which gets amalgamated into final files in the end.

    Would be nice to have nuklear source divided across multiple files just for sake of making development a bit easier.

    discussion 
    opened by jimon 18
  • [request] Add Raspberry Pi accelerated Open GL output (8$)

    [request] Add Raspberry Pi accelerated Open GL output (8$)

    sdl_opengles2 already supports Open GL ES 2 and Web GL. It can be compiled on Raspberry Pi (Raspbian Linux), but gives black square only. Please fix it to have an ability to have accelerated Open GL ES output on Raspberry Pi.

    8$ bounty

    opened by DeXP 17
  • OpenGL rendering produces ugly font

    OpenGL rendering produces ugly font

    All examples and GL based demos for me produces pretty awful font.

    See this screenshot: screenshot This is from example/overview.c demo on Linux with Iris Pro 5200. And I get same output also on Windows with Nvidia 970.

    Is this expected? Because fonts in screenshots on nuklear github page looks much prettier.

    bug 
    opened by mmozeiko 16
  • Cyrillic issue

    Cyrillic issue

    There is still no text. I provide the code, you can find my error.

    #define NK_INCLUDE_FIXED_TYPES
    #define NK_INCLUDE_STANDARD_IO
    #define NK_INCLUDE_STANDARD_VARARGS
    #define NK_INCLUDE_DEFAULT_ALLOCATOR
    #define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
    #define NK_INCLUDE_FONT_BAKING
    #define NK_INCLUDE_DEFAULT_FONT
    #define NK_IMPLEMENTATION
    
    #include "nuklear.h"
    
    nk_context *ctx;
    
    NK_INTERN void gui_device_upload_atlas(const void *image, int width, int height)
    {
        struct gui_device *dev = &glgui.ogl;
        glGenTextures(1, &dev->font_tex);
        glBindTexture(GL_TEXTURE_2D, dev->font_tex);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
        glBindTexture(GL_TEXTURE_2D, 0);
    	
        // Here the texture contains the Cyrillic, checked "xxx.bmp"
        // void *color = malloc(width * height * 4);
        // glBindTexture(GL_TEXTURE_2D, dev->font_tex);
        // glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, color);
        // glBindTexture(GL_TEXTURE_2D, 0);
        // save_image("xxx.bmp", width, height, 4, color);
        // free(color);
    }
    
    struct nk_context *gui_init(nk_user_font *font)
    {
        nk_init_default(&glgui.ctx, font);
        glgui.ctx.clip.copy = gui_clipbard_copy;
        glgui.ctx.clip.paste = gui_clipbard_paste;
        glgui.ctx.clip.userdata = nk_handle_ptr(0);
        nk_buffer_init_default(&glgui.ogl.cmds);
    
        glgui.is_double_click_down = nk_false;
        glgui.double_click_pos = nk_vec2(0, 0);
    
        return &glgui.ctx;
    }
    
    void gui_font_stash_begin(struct nk_font_atlas **atlas)
    {
        nk_font_atlas_init_default(&glgui.atlas);
        nk_font_atlas_begin(&glgui.atlas);
        *atlas = &glgui.atlas;
    }
    
    void gui_font_stash_end()
    {
        int w = 0, h = 0;
        const void *image = NULL;
        image = nk_font_atlas_bake(&glgui.atlas, &w, &h, NK_FONT_ATLAS_RGBA32);
        gui_device_upload_atlas(image, w, h);
        nk_font_atlas_end(&glgui.atlas, nk_handle_id((int)glgui.ogl.font_tex), &glgui.ogl.null);
        if(glgui.atlas.default_font) nk_style_set_font(&glgui.ctx, &glgui.atlas.default_font->handle);
    }
    
    void CreateGUI()
    {
        ctx = gui_init(NULL);
    
        struct nk_font_atlas *atlas;
        struct nk_font_config cfg = nk_font_config(14);
        gui_font_stash_begin(&atlas);
        cfg.range = nk_font_cyrillic_glyph_ranges();
        struct nk_font *font = nk_font_atlas_add_from_file(atlas, "Roboto-Regular.ttf", 14, &cfg);
        gui_font_stash_end();
    
        nk_style_set_font(ctx, &font->handle);
    }
    
    void RenderGUI()
    {
    	if(nk_begin(ctx, "Окно", nk_rect(50, 50, 200, 200), 31))
    	{
    		nk_layout_row_static(ctx, 30, 80, 1);
    		if(nk_button_label(ctx, "Кнопка"))
    			printf("button pressed!\n");
    	}
    }
    

    I hope for your help, for a long time I have not been able to display the text with the Cyrillic. image

    opened by RomanJdikin777 15
  • Investigating the mouse-hover problem in emscripten nuklear+Oryol

    Investigating the mouse-hover problem in emscripten nuklear+Oryol

    I'm currently debugging the mouse-hover problem I'm seeing in my integration of nuklear for Oryol here: http://floooh.github.io/oryol-samples/asmjs/NuklearUIAdvanced.html, and I'm opening this bug to record my findings, may be at one point you can jump in and point me in the right direction :)

    The buttons in the left most window, starting at the second row, don't get 'hovered' when the mouse is over them. Moving the window to the middle fixes the problem, but when moving towards the right, the problem happens again. This happens only in emscripten, so I'm limited to printf-debugging.

    Here's what I found out so far:

    The button doesn't get hovered because: in nk_button_behaviour(), the incoming nk_input* is null, moving up the callstack to nk_button_text(), this will happen when the widget is in state NK_WIDGET_ROM, which seems to be the 'partially visible' (or occluded?) state...

    Another interesting thing: up in the 'button_demo()' function, I have commented everything out except that first Push Button, and it looks like this:

        ui_widget(ctx, media, 35);
        if (nk_button_label(ctx, "Push me"))
            fprintf(stdout, "pushed!\n");
    

    The ui_widget() function looks like this:

    static void
    ui_widget(struct nk_context *ctx, struct media *media, float height)
    {
        static const float ratio[] = {0.15f, 0.85f};
        nk_style_set_font(ctx, &media->font_22->handle);
        nk_layout_row(ctx, NK_DYNAMIC, height, 2, ratio);
        nk_spacing(ctx, 1);
    }
    

    If I'm commenting out the call to nk_spacing(ctx, 1), the button becomes smaller, and the mouse hover works in emscripten.

    That is all so far, I'll try to find out now why the button is in NK_WIDGET_ROM state.

    Btw, how does nuklear detect the current canvas size, in Imgui I'm explicitely setting this at the start of a frame, but I haven't seen something similar in nuklear. I'm mentioning this because this might be a difference between emscripten and other platforms in Oryol, the size of the WebGL canvas might change, if nuklear uses the 'display resolution/canvas size', this might one potential cause for the problem.

    bug 
    opened by floooh 14
  • "Vector" scalability of the whole UI

    Is there any simple way to scale the whole UI in a "vector" way (i.e. not scaling the resulting bitmap, but every single part of the UI separately in a consistent way)? I found just several scaling options, but only for some containers (e.g. panel).

    Without scaling, the whole UI is currently not suitable for many deployments (high-res displays of wildly varying sizes - e.g. 5" mobile devices having higher resolution than my 15.4" notebook display).

    Also, the sizes differ in the pixel shapes etc., so a separate scaling factor for x and y would be much better than just one common scaling factor.

    enhancement 
    opened by dumblob 14
  • Fix panel clipping

    Fix panel clipping

    layout->bounds cannot be used (loc 16615) since we modify it up here: layout->bounds.x += panel_padding.x; (16471) layout->bounds.w -= 2*panel_padding.x; (16472) Because of it there was no ability to nk_draw_image attached to window's edge. There alway was empty lines of right and left.

    This code breaks the other's code. Popups, for example. My paddings are 10px. To show popup at (20,20) without this patch I must use nk_rect(10, 20, .... With this patch I must use nk_rect(20, 20, ..., not depending on paddings. I think (20,20) is a correct constant for (20,20) coordinate.

    opened by DeXP 13
  • nk_combo not sizing lists correctly

    nk_combo not sizing lists correctly

    I'm having problems with nk_combo. The lists in the combo box are not sized correctly. This usually results in the list being too short for the box and weird rendering problems happen at the bottom of the box. Sometimes there seems to be garbage, sometimes it just stops short, sometimes the backing layer stops too short and you can see through the box. \

    Also, sometimes this causes the last item in the list to be unselectable.

    Also, the scrollbar appears, but it really shouldn't because it only scrolls a few pixels. If things were sized correctly, there wouldn't need to be a scrollbar. Scrolling all the way down doesn't help the unselectable problem.

    The first picture shows a stop-short. screen shot 2016-08-28 at 7 49 17 pm

    The second picture shows part of the missing backing. screen shot 2016-08-28 at 7 47 58 pm

    A related question: is there a way to control the size of the list box? As you can see in the second picture, it is getting really long.

    bug 
    opened by ewmailing 13
  • X11 demo fails in X_PolyFillRectangle

    X11 demo fails in X_PolyFillRectangle

    X Error of failed request:  BadMatch (invalid parameter attributes)
      Major opcode of failed request:  70 (X_PolyFillRectangle)
      Serial number of failed request:  29
      Current serial number in output stream:  102
    
    opened by nzjrs 13
  • ALL DEVELOPMENT MOVED ELSEWHERE

    ALL DEVELOPMENT MOVED ELSEWHERE

    Dear visitor,

    this repository, issue tracker, etc. is abandoned in favor of https://github.com/Immediate-Mode-UI/Nuklear . Any activity in this issue tracker, any pull requests, etc. will be ignored.

    Looking forward to hearing from you in https://github.com/Immediate-Mode-UI/Nuklear

    Nuklear community


    Are you a volunteer? Please see TODO in https://github.com/vurtun/nuklear/pull/913#issuecomment-558565788 .

    @vurtun, could you please remove the current description of this original repository and instead place the following text there and then archive this original repository?

    Repository moved to https://github.com/Immediate-Mode-UI/Nuklear
    

    (btw. you're also an admin in the new organization)

    enhancement question 
    opened by dumblob 0
  • Option for component shadow

    Option for component shadow

    I think that one big differencial in one GUI component be the shadows. Example:

    https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_box-shadow2

    This example is exagerated, but "small shadows" be nice, the google desgin really like to use the "small shadows", so if you have an android you already have seen it.

    how would i do this in Nuklear? Is it possible, if not yet, how difficult it would be to implement something like this?

    opened by noloop 0
  • the GDI+ version make the nk_button_color draw the rectangle with inner black lines

    the GDI+ version make the nk_button_color draw the rectangle with inner black lines

    the GDI+ fix make the nk_button_color draw the rectangle with inner black lines, while the original one is ok. I found the PR make change of the GDI+, maybe it's the reason of problem. https://github.com/vurtun/nuklear/pull/527 The GDI+ fix version NuklearGdipImage The Original Version NuklearGdipImage2

    opened by litlight 0
  • Get rid of scissors?

    Get rid of scissors?

    Hello. Thanks for a great project. What are the reasons behind using scissor command? For which purposes it's used? Why can't it be evaded? Scissors are stopping one from combining multiple draw calls into instanced one or force to implement them in the shader.

    Just adjust UV coords for elements when it's needed. Thanks.

    opened by Temtaime 0
Owner
Micha Mettke
Micha Mettke
ImTui: Immediate Mode Text-based User Interface C++ Library

ImTui is an immediate mode text-based user interface library. Supports 256 ANSI colors and mouse/keyboard input.

Georgi Gerganov 2.1k Jan 1, 2023
A single-header ANSI C immediate mode cross-platform GUI library

Nuklear This is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed a

Immediate Mode UIs, Nuklear, etc. 6.7k Dec 24, 2022
FlatUI is a immediate mode C++ GUI library for games and graphical applications.

FlatUI is a immediate mode C++ GUI library for games and graphical applications. Go to our landing page to browse our documentation.

Google 610 Dec 23, 2022
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

omar 44.5k Jan 7, 2023
GTK is a multi-platform toolkit for creating graphical user interfaces.

GTK — The GTK toolkit General information GTK is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets,

GNOME Github Mirror 1.1k Dec 31, 2022
ROS_Melodic_Qt_GUI_Template is a Graphical User Interface programmed with Qt framework.

This is a GUI template for ros to control your robot and read data from sensors.

null 28 Nov 15, 2022
AnUI is a powerful Graphical User Interface framework made for people that actually care about design!

What's AuUI ** Project is not finished ** AuUI, an abbreviation for "Actual Understandable User Interface" is a graphical user interface framework to

Goat 4 Jun 17, 2022
raygui is a simple and easy-to-use immediate-mode-gui library.

raygui is a simple and easy-to-use immediate-mode-gui library.

Ray 2k Dec 30, 2022
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI

ImGui Goodies This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI. Currently, th

null 95 Nov 19, 2022
Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui

ImGuizmo Latest stable tagged version is 1.83. Current master version is 1.84 WIP. What started with the gizmo is now a collection of dear imgui widge

Cedric Guillemet 2.3k Dec 27, 2022
This is a thin c-api wrapper programmatically generated for the excellent C++ immediate mode gui Dear ImGui.

cimgui This is a thin c-api wrapper programmatically generated for the excellent C++ immediate mode gui Dear ImGui. All imgui.h functions are programm

Victor Bombi 22 Jul 5, 2021
The HorusUI library allows you to quickly develop GUIs for your applications by leveraging the ease of use provided by immediate mode GUI concepts.

Immediate Mode Graphical User Interface for Tools OVERVIEW The HorusUI library allows you to quickly develop GUIs for your applications by leveraging

null 133 Dec 12, 2022
GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.

GacUI GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features. Read the LICENSE first

Vczh Libraries 2.1k Jan 7, 2023
A permissively licensed markdown single-header library for Dear ImGui.

Support development of imgui_markdown through GitHub Sponsors or Patreon imgui_markdown Markdown For Dear ImGui A permissively licensed markdown singl

Juliette Foucaut 853 Jan 8, 2023
RmlUi - The HTML/CSS User Interface library evolved

RmlUi - The HTML/CSS User Interface Library Evolved RmlUi - now with added boosters taking control of the rocket, targeting your games and application

Michael R. P. Ragazzon 1.6k Jan 7, 2023
An efficient graphical Minecraft seed finder and map viewer.

Cubiomes Viewer provides a graphical interface for the efficient and flexible seed-finding utilities provided by cubiomes and a map viewer for the Minecraft biomes and structure generation.

null 492 Jan 7, 2023
A minimalist andf platform-agnostic application layer for writing graphical applications, with a strong emphasis on simplicity and ease of use.

SlimApp A minimalist(*) and platform-agnostic application layer for writing graphical applications. Available as either a single header file or a dire

Arnon Marcus 34 Dec 18, 2022
Material Design GUI Toolkit

GUI toolkit in Material Design style

Maks Makuta 2 Sep 28, 2022
AttoUI – minimalistic C UI toolkit for Wayland

AttoUI – minimalistic UI toolkit for Wayland AttoUI is library that makes creating GUI programs for Wayland in C as simple and bloatless as it can. Th

MasFlam 5 Jan 8, 2022