# Audio Plugin UI Toolkits ## Desirable Traits In descending order of importance * FLOSS (at least copyleft, better BSD/MIT style or CC0) * Provides easy way to embed UI in existing window * Allows hooking into UI main loop or substituting your own * Provides widgets suitable for audio plugins (e.g. dials, sliders, select menus/boxes, lists, file selection) out of the box or makes it very easy to implement them yourself. * No process-global state * Is still actively maintained * Cross-platform (at least accross major desktop platforms, including Linux) * Can be used with C and C++ * Supports static linking * Supports themes / skins * Supports fully scalable UI ### Nice-to-have * Advanced layout schemes (box, grid/table, anchors) * Bindings for other programming languages (e.g. Lua, Rust, Nim, JS) or easily wrappable with FFI libraries * Android support * iOS support * Web(asm) support * Widgets for envelope editors, meters, waveform display, frequency spectrums (whether in core or as add-ons) * Developer documentation other than sources / headers or generated API docs ## DPF (DGL) Widgets: * Image * ImageKnob * ImageSlider * ImageSwitch * ImageAboutWindow * FileBrowser Plus: https://github.com/DISTRHO/DPF-Widgets/ ### NanoVG * Source: https://github.com/DISTRHO/DPF/tree/main/dgl * Documentation: n.A. * Cross-platform: yes * License: ISC * Language: C++ * Themable: Notes: * Based on its own NanoVG fork. * Needs OpenGL ### Cairo * Source: https://github.com/DISTRHO/DPF/tree/main/dgl * Documentation: n.A. * Cross-platform: yes * License: ISC (cairo: LGPL/MPL1.1) * Language: C++ * Themable: ### Imgui *TBD...* ## Nuklear * Website: https://immediate-mode-ui.github.io/Nuklear/ * Source: https://github.com/Immediate-Mode-UI/Nuklear * Cross-platform: yes * License: MIT or Public domain * Language: C89 (ANSI C) * Themable: Notes: * Immediate-mode * Single-header library * No dependencies (not even the standard library if not wanted) * Fully skinnable and customizable * Many language bindings seem outdated / abandoned. * Implements its own drawing primitives and does not rely on cairo, nanovg, skia or sth similar. * Needs a rendering backend library like glfw, SDL, X11 etc. ## LibXputty * Source: https://github.com/brummer10/libxputty * Documentation: https://brummer10.github.io/libxputty-doc * Cross-platform: Linux, Windows * Language: C * License: 0BSD * Themable: Widgets: * xbutton * xcombobox * xdrawing_area * xframe * xknob * xlabel * xlistbox * xlistview * xmenu * xmeter * xmultilistview * xplayhead * xslider * xtabbox * xtooltip * xtuner * xvaluedisplay * xwaveview * xdirectory-dialog * xfile-dialog * xmessage-dialog * xmidi_keyboard * xsavefile-dialog Notes: * Not the most pretty (imho) ## brummer10's CairoWidgets * Source: https://github.com/brummer10/StompTuner/tree/main/plugins/CairoWidgets * License: OBSD * Cross-platform: * Language: C++ * Themable (color): yes Widgets: * CairoButton * CairoColourTheme * CairoKnob * CairoLabel * CairoLed * CairoPeekMeter [sic!] * CairoProgressBar * CairoPushButton * CairoSwitch * CairoToolTip * CairoTunerWidget * CairoValueDisplay Notes: * Not a library ## NanoGUI * Webseite: https://github.com/mitsuba-renderer/nanogui * Source: https://github.com/mitsuba-renderer/nanogui * Documentation: https://nanogui.readthedocs.io/en/latest/ (still has links to old repo) * License: BSD-3-Clause style * Cross-platform: * Language: C++11, Python Widgets: * Button * CheckBox * ColorPicker * ColorWheel * ComboBox * Graph * ImagePanel * ImageView * Label * Popup * PopupButton * ProgressBar * Slider * StackedWidget * TabHeader * TabWidget * TextBox * ToolButton Notes: * Based on GLFW, GLAD, and NanoVG/MetalNanoVG. * Successor to https://github.com/wjakob/nanogui * Supports OpenGL 3+, GLES 2/3, and Metal * Many PRs, which nobody seems to look at :disappointed: ## x42's robtk * Source: https://github.com/x42/robtk *TBD...* ## uhhyou LV2 plugins widgets * Source: https://github.com/Wasted-Audio/ryukau_LV2Plugins/tree/master/common/gui * License: GPLv3 * Cross-platform: ?? * Language: C++ * Themable: Notes: * Based on DPF/DGL NanoVG * Not a library ## wolf-plugins widgets * Source: https://github.com/wolf-plugins/wolf-shaper/tree/master/src/Widgets * License: GPL3 * Cross-platform: ?? * Language: C++ * Themable: Notes: * Based on DPF/DGL NanoVG * Not a library ## Geonkick's redkite * Source: https://codeberg.org/Geonkick-Synthesizer/geonkick/src/branch/main/src/redkite * License: GPL3 *TBD...* Notes: * Not a library ## VCV Rack SVG widgets * Source: https://github.com/VCVRack/Rack/tree/v0.6/src/widgets * License: BSD (until v0.6?) * Cross-platform: yes (?) * Language: C++ * Themable: ? Notes: * Not a library * Uses SVG images ## To investigate * https://gitlab.com/riribreizh/nk_pugl_cairo * Nuklear immediate-mode GUI using pugl configured with Cairo as backend. * single header-only library * It is based on the excellent work of: * Hanspeter Portner with nk_pugl for the pugl platform backend (using OpenGL) * Adriano Grieb with nuklear_xcb for the Cairo rendering backend
{}