Crate cushy

source ·
Expand description

Cushy is considered alpha and unsupported crate version Documentation for main branch

Cushy is an experimental Graphical User Interface (GUI) crate for the Rust programming language. It features a reactive data model and aims to enable easily creating responsive, efficient user interfaces. To enable easy cross-platform development, Cushy uses its own collection of consistently-styled Widgets.

Cushy is powered by:

Getting Started with Cushy

The Widget trait is the building block of Cushy: Every user interface element implements Widget. The Widget trait documentation has an overview of how Cushy works. A list of built-in widgets can be found in the cushy::widgets module.

Cushy 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() -> cushy::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.
        // Set the `on_click` callback to a closure that increments the counter.
        .on_click(move |_| count.set(count.get() + 1))
        // Run the application

A great way to learn more about Cushy is to explore the examples directory. Nearly every feature in Cushy was initially tested by creating an example.

Project Status

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 Cushy.

Open-source Licenses

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



  • Types for creating animations.
  • Types that provide access to the Cushy runtime.
  • Types for styling widgets.
  • Types for storing and interacting with values in Widgets.
  • Types for creating reusable widgets (aka components or views).
  • Built-in Widget implementations.
  • Types for displaying a Widget inside of a desktop window.



  • A handle to a Cushy application.
  • Shared resources for a GUI application.
  • A 2d graphics context
  • The current state of input during the execution of a Tick.
  • A OnceLock-based lazy initializer.
  • A smart-string type that is used as a “name” in Cushy.
  • A Cushy application that has not started running yet.
  • A fixed-rate callback that provides access to tracked input on its associated widget.



  • A type that is a Cushy application.
  • An extension trait for Size<ConstraintLimit>.
  • A type that can be opened as a window in an application.
  • A type that can be run as an application.
  • Invokes a function with a clone of self.

Type Aliases

  • A result alias that defaults to the result type commonly used throughout this crate.