# 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