Introduction
UIng is a Crystal binding for libui-ng, a portable library for native desktop interfaces. It gives Crystal applications access to windows, buttons, text fields, menus, tables, drawing areas, and other standard controls without shipping a browser engine or a custom widget toolkit.
The same application source can target:
- Linux and other Unix-like systems through GTK 3
- macOS through AppKit
- Windows through Win32, Direct2D, and DirectWrite
The basic window example shows how the same code takes on each platform's native look:
This guide focuses on the small set of concepts needed to create an application. Interfaces can be written with the regular API or the block-based DSL; see Coding Styles for details. For the complete list of types and methods, use the API Reference.
Project focus
UIng aims to provide a small, sustainable foundation for simple native GUIs. Its priority is to remain stable and maintainable over the long term rather than grow into a full-featured GUI framework.
Limitations
- Layout is intentionally based on native containers. Controls cannot be positioned with arbitrary pixel coordinates, which helps preserve a native appearance across platforms.
- Table columns cannot be removed after they have been added.


