Cross-platform GUI library for V. Inspired by the syntax of Java's Swing/FX & Fluent/WinUI3 Style.
Example: (examples/demo/)
Example
fn main() { mut window := ui.Window.new( title: 'My App' width: 640 height: 480 ) // Create Button mut btn := ui.Button.new( text: 'My Button' on_click: on_click_event ) // Add Button to Window & Run window.add_child(btn) window.gg.run() } fn on_click_event(e &ui.MouseEvent) { println('Button clicked!') }
Install
Install via VPM:
v install https://github.com/pisaiah/ui
then
Components, Containers, & Layouts
| Components | Containers | Panel Layouts |
|---|---|---|
| Button | Window | Flow Layout |
| Checkbox | Panel | Border Layout |
| Hyperlink | Tabbox | Box Layout |
| Image | Modal | Grid Layout |
| InternalFrame | Page | Card Layout |
| Label | ButtonGroup | |
| Menubar | ScrollView | |
| MenuItem | Splitview | |
| NavPaneItem | TitleGroup | |
| ProgressBar | Popup | |
| Selectbox | DesktopPane | |
| Slider | NavPane | |
| Switch | ||
| Textbox | ||
| TextField | ||
| Treeview |
- Components are the elements of the UI (buttons, inputs, etc).
- Containers are components that are designed to contain other components (known as children).
- Layouts define how the Panel container positions it's children.
More details about Layout: A Visual Guide to Layout Managers - docs.oracle.com
Themes
Included Examples
| BorderLayout Demo | Internal Frames | Navigation Pane |
|---|---|---|
![]() |
![]() |
![]() |
| Border Layout Demo | Internal Frames | Navigation Pane |
| Notepad | Calculator | Clock | Video Player |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| See: Notepad | Calculator | Clock | Video Player (requires libmpv) |
| Mines | (Tic Tac Toe)^2 | Snake |
|---|---|---|
![]() |
![]() |
![]() |
| Code: 1-Minesweeper Demo: Play online (via WASM) |
2-Tic-Tac-Toe-Squared Play online (WASM) |
3-Snake |
Used in
- Vide
- Verminal
- vPaint - Demo: https://vpaint.app
License
This project is licensed under MIT OR Boost.











