{"id":13753517,"url":"https://github.com/khonsulabs/cushy","last_synced_at":"2025-06-18T03:11:16.476Z","repository":{"id":47289078,"uuid":"366911357","full_name":"khonsulabs/cushy","owner":"khonsulabs","description":"An experimental cross-platform graphical user interface (GUI) crate for Rust.","archived":false,"fork":false,"pushed_at":"2025-03-25T23:14:36.000Z","size":3514,"stargazers_count":572,"open_issues_count":67,"forks_count":30,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-09T21:35:04.273Z","etag":null,"topics":["gui","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/khonsulabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-13T02:28:00.000Z","updated_at":"2025-05-05T21:46:01.000Z","dependencies_parsed_at":"2023-11-10T05:16:42.026Z","dependency_job_id":"9c025161-e371-4f0e-981c-467e8850a82f","html_url":"https://github.com/khonsulabs/cushy","commit_stats":null,"previous_names":["khonsulabs/cushy","khonsulabs/gooey"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/khonsulabs/cushy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khonsulabs%2Fcushy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khonsulabs%2Fcushy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khonsulabs%2Fcushy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khonsulabs%2Fcushy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/khonsulabs","download_url":"https://codeload.github.com/khonsulabs/cushy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khonsulabs%2Fcushy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260477932,"owners_count":23015066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","rust"],"created_at":"2024-08-03T09:01:23.766Z","updated_at":"2025-06-18T03:11:11.461Z","avatar_url":"https://github.com/khonsulabs.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# Cushy\n\n\u003c!-- This file is generated by `rustme`. Ensure you're editing the source in the .rustme/ directory --!\u003e\n\u003c!-- markdownlint-disable first-line-h1 --\u003e\n\n![Cushy is considered alpha and unsupported](https://img.shields.io/badge/status-alpha-orange)\n[![crate version](https://img.shields.io/crates/v/cushy.svg)](https://crates.io/crates/cushy)\n[![Documentation for `main`](https://img.shields.io/badge/docs-main-informational)](https://cushy.rs/main/docs/cushy/)\n[![Cushy User's Guide](https://img.shields.io/badge/user%27s%20guide-main-informational)][guide]\n\nCushy is an experimental Graphical User Interface (GUI) crate for the Rust\nprogramming language. It features a reactive data model and aims to enable\neasily creating responsive, efficient user interfaces. To enable easy\ncross-platform development, Cushy uses its own collection of consistently-styled\n[`Widget`s][widget].\n\nCushy is powered by:\n\n- [`Kludgine`][kludgine], a 2d graphics library powered by:\n  - [`winit`][winit] for windowing/input\n  - [`wgpu`][wgpu] for graphics\n  - [`cosmic_text`][cosmic_text] for text layout + rasterization\n- [`palette`][palette] for OKLab-based HSL color calculations\n- [`arboard`][arboard] for clipboard support\n- [`figures`][figures] for integer-based 2d math\n\n## Getting Started with Cushy\n\nThe [`Widget`][widget] trait is the building block of Cushy: Every user\ninterface element implements `Widget`. The `Widget` trait\n[documentation][widget] has an overview of how Cushy works. A list of built-in\nwidgets can be found in the [`cushy::widgets`][widgets] module.\n\nCushy uses a reactive data model. To see [an example][button-example] of how\nreactive data models work, consider this example that displays a button that\nincrements its own label:\n\n```rust,ignore\nfn main() -\u003e cushy::Result {\n    // Create a dynamic usize.\n    let count = Dynamic::new(0_isize);\n\n    // Create a new label displaying `count`\n    count\n        .to_label()\n        // Use the label as the contents of a button\n        .into_button()\n        // Set the `on_click` callback to a closure that increments the counter.\n        .on_click(move |_| count.set(count.get() + 1))\n        // Run the application\n        .run()\n}\n```\n\nHere are some ways to learn more about Cushy:\n\n- Explore the [examples directory][examples]. Nearly every feature in Cushy was\ninitially tested by creating an example. Many are focused on demonstrating a\nsingle feature, but there are some complex example such as a theme\neditor/previewer:\n\n  [![Theme Editor Example](https://cushy.rs/main/guide/examples/theme_editor.png)][theme-example]\n- Browse the [user's guide][guide]. The user guide is a work in progress, but\n  features CI-generated screenshots and animations for its examples:\n\n  [![Hello, World User Guide Example](https://cushy.rs/main/guide/examples/intro.png)][guide]\n- Ask questions [in Discussions][discussions] or [on Discord][discord].\n\n## Project Status\n\nThis project is early in development, but is quickly becoming a decent\nframework. It is considered alpha and unsupported at this time, and the primary\nfocus for [@ecton][ecton] is to use this for his own projects. Feature requests\nand bug fixes will be prioritized based on @ecton's own needs.\n\nIf you would like to contribute, bug fixes are always appreciated. Before\nworking on a new feature, please [open an issue][issues] proposing the feature\nand problem it aims to solve. Doing so will help prevent friction in merging\npull requests, as it ensures changes fit the vision the maintainers have for\nCushy.\n\n[widget]: https://cushy.rs/main/docs/cushy/widget/trait.Widget.html\n[widgets]: https://cushy.rs/main/docs/cushy/widgets/index.html\n[button-example]: https://github.com/khonsulabs/cushy/tree/main/examples/basic-button.rs\n[examples]: https://github.com/khonsulabs/cushy/tree/main/examples/\n[theme-example]: https://github.com/khonsulabs/cushy/tree/main/examples/theme.rs\n[kludgine]: https://github.com/khonsulabs/kludgine\n[figures]: https://github.com/khonsulabs/figures\n[wgpu]: https://github.com/gfx-rs/wgpu\n[winit]: https://github.com/rust-windowing/winit\n[cosmic_text]: https://github.com/pop-os/cosmic-text\n[palette]: https://github.com/Ogeon/palette\n[arboard]: https://github.com/1Password/arboard\n[ecton]: https://github.com/khonsulabs/ecton\n[issues]: https://github.com/khonsulabs/cushy/issues\n[guide]: https://cushy.rs/main/guide/\n[discussions]: https://github.com/khonsulabs/cushy/discussions\n[discord]: https://discord.khonsulabs.com/\n\n## Open-source Licenses\n\nThis project, like all projects from [Khonsu Labs](https://khonsulabs.com/), is open-source.\nThis repository is available under the [MIT License](./LICENSE-MIT) or the\n[Apache License 2.0](./LICENSE-APACHE).\n\nTo learn more about contributing, please see [CONTRIBUTING.md](./CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhonsulabs%2Fcushy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkhonsulabs%2Fcushy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhonsulabs%2Fcushy/lists"}