Gooey is an experimental Graphical User Interface (GUI) crate for the Rust programming language. It is powered by:
Kludgine
, a 2d graphics library powered by:winit
for windowing/inputwgpu
for graphicscosmic_text
for text layout + rasterization
palette
for OKLab-based HSL color calculationsarboard
for clipboard supportfigures
for integer-based 2d math
The Widget
trait is the building block of Gooey: Every user
interface element implements Widget
. The Widget
trait
documentation has an overview of how Gooey works. A list of built-in
widgets can be found in the gooey::widgets
module.
Gooey uses a reactive data model. To see an example of how reactive data models work, consider this example that displays a button that increments its own label:
fn main() -> gooey::Result {
// Create a dynamic usize.
let count = Dynamic::new(0_isize);
// Create a dynamic that contains `count.to_string()`
let count_label = count.map_each(ToString::to_string);
// Create a new button whose text is our dynamic string.
count_label
.into_button()
// Set the `on_click` callback to a closure that increments the counter.
.on_click(move |_| count.set(count.get() + 1))
// Run the application
.run()
}
A great way to learn more about Gooey is to explore the examples directory. Nearly every feature in Gooey was initially tested by creating an example.
This project is early in development, but is quickly becoming a decent framework. It is considered alpha and unsupported at this time, and the primary focus for @ecton is to use this for his own projects. Feature requests and bug fixes will be prioritized based on @ecton's own needs.
If you would like to contribute, bug fixes are always appreciated. Before working on a new feature, please open an issue proposing the feature and problem it aims to solve. Doing so will help prevent friction in merging pull requests, as it ensures changes fit the vision the maintainers have for Gooey.
This project, like all projects from Khonsu Labs, is open-source. This repository is available under the MIT License or the Apache License 2.0.
To learn more about contributing, please see CONTRIBUTING.md.