libui: a portable GUI library for C
Runtime Requirements
- Windows: Windows Vista SP2 with Platform Update or newer
- Unix: GTK+ 3.10 or newer
- Mac OS X: OS X 10.8 or newer
Arch Linux
Can be built from AUR: https://aur.archlinux.org/packages/libui-git/
Documentation
Needs to be written. Consult ui.h
and the examples for details for now.
Language Bindings
libui was originally written as part of my package ui for Go. Now that libui is separate, package ui has become a binding to libui. As such, package ui is the only official binding.
Other people have made bindings to other languages:
Language | Bindings |
---|---|
C++ | libui-cpp, cpp-libui-qtlike |
C# / .NET Framework | LibUI.Binding |
C# / .NET Core | DevZH.UI, SharpUI, TCD.UI |
CHICKEN Scheme | wasamasa/libui |
Common Lisp | jinwoo/cl-ui |
Crystal | libui.cr, hedron |
D | DerelictLibui (flat API), libuid (object-oriented) |
Euphoria | libui-euphoria |
Harbour | hbui |
Haskell | haskell-libui |
JavaScript/Node.js | libui-node, libui.js (merged into libui-node?), proton-native, vuido |
Julia | Libui.jl |
Kotlin | kotlin-libui |
Lua | libuilua, libui-lua, lui, lui |
Nim | ui |
Perl6 | perl6-libui |
PHP | ui |
Python | pylibui |
Ruby | libui-ruby, libui |
Rust | libui-rs |
Scala | scalaui |
Swift | libui-swift |
Frequently Asked Questions
Why does my program start in the background on OS X if I run from the command line?
OS X normally does not start program executables directly; instead, it uses Launch Services to coordinate the launching of the program between the various parts of the system and the loading of info from an .app bundle. One of these coordination tasks is responsible for bringing a newly launched app into the foreground. This is called “activation”.
When you run a binary directly from the Terminal, however, you are running it directly, not through Launch Services. Therefore, the program starts in the background, because no one told it to activate! Now, it turns out there is an API that we can use to force our app to be activated. But if we use it, then we’d be trampling over Launch Services, which already knows whether it should activate or not. Therefore, libui does not step over Launch Services, at the cost of requiring an extra user step if running directly from the command line.
Screenshots
From examples/controlgallery: