{"id":14992306,"url":"https://github.com/marek-g/rust-fui","last_synced_at":"2025-04-10T05:07:34.448Z","repository":{"id":39535780,"uuid":"284296076","full_name":"marek-g/rust-fui","owner":"marek-g","description":"MVVM Rust UI Framework Library","archived":false,"fork":false,"pushed_at":"2025-04-08T11:45:07.000Z","size":3042,"stargazers_count":76,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T05:07:29.534Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marek-g.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"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}},"created_at":"2020-08-01T16:22:50.000Z","updated_at":"2025-04-08T11:45:10.000Z","dependencies_parsed_at":"2024-05-30T18:20:16.311Z","dependency_job_id":"95e50a27-3bfb-4b70-833a-dff5e0ad5ab4","html_url":"https://github.com/marek-g/rust-fui","commit_stats":{"total_commits":622,"total_committers":8,"mean_commits":77.75,"dds":0.4790996784565916,"last_synced_commit":"dc81dc258a7351aa788c6189e9f73b85f86971bb"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marek-g%2Frust-fui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marek-g%2Frust-fui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marek-g%2Frust-fui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marek-g%2Frust-fui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marek-g","download_url":"https://codeload.github.com/marek-g/rust-fui/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248161273,"owners_count":21057555,"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":[],"created_at":"2024-09-24T15:00:56.828Z","updated_at":"2025-04-10T05:07:34.417Z","avatar_url":"https://github.com/marek-g.png","language":"Rust","funding_links":[],"categories":["GUI"],"sub_categories":[],"readme":"# fui\n\n[![Crates.io Version](https://img.shields.io/crates/v/fui_core.svg)](https://crates.io/crates/fui_core)\n[![Docs.rs Version](https://docs.rs/fui_core/badge.svg)](https://docs.rs/fui_core)\n[![GPL-3.0-or-later WITH Classpath-exception-2.0](https://img.shields.io/crates/l/fui_core.svg)](https://github.com/marek-g/rust-fui/blob/master/LICENSE.md)\n\n![FUI Logo](./doc/images/fui_logo_shadow.png)\n\nMVVM Rust UI Framework Library.\n\n## Documentation\n\n[FUI's documentation](./doc/SUMMARY.md)\n\n## Crates\n\n### `fui_core` [![Crates.io Version](https://img.shields.io/crates/v/fui_core.svg)](https://crates.io/crates/fui_core)\n\nCore library of FUI MVVM UI Framework.\n\n### `fui_macros` [![Crates.io Version](https://img.shields.io/crates/v/fui_macros.svg)](https://crates.io/crates/fui_macros)\n\nMacros for FUI UI Framework.\n\n### `fui_controls` [![Crates.io Version](https://img.shields.io/crates/v/fui_controls.svg)](https://crates.io/crates/fui_controls)\n\nStandard controls for FUI UI Framework.\n\n### `fui_controls_media` [![Crates.io Version](https://img.shields.io/crates/v/fui_controls_media.svg)](https://crates.io/crates/fui_controls_media)\n\nMedia controls for FUI UI Framework.\n\n### `fui_system` [![Crates.io Version](https://img.shields.io/crates/v/fui_system.svg)](https://crates.io/crates/fui_system)\n\nCross-platform windowing library focused on good desktop integration (dialogs, menus, tray icons etc.).\n\n### `fui_app` [![Crates.io Version](https://img.shields.io/crates/v/fui_app.svg)](https://crates.io/crates/fui_app)\n\nApplication backend of FUI UI Framework.\n\n## Screenshots\n\nNote! The visual aspect of the library is a subject to change. Margins are missing. You can also write your own styles and make it look completely different.\n\n![Screenshot1](./doc/images/screenshot1.png)\n![Screenshot2](./doc/images/screenshot2.png)\n\n## Features\n\n- cross-platform:\n  - [x] Linux (x11 \u0026 wayland using Qt)\n  - [x] Windows (using Qt)\n  - [ ] Android\n  - [ ] Wasm\n- renderer agnostic:\n  - [x] `OpenGL` backend\n- native elements:\n  - [x] multiple windows\n  - [x] tray icons\n  - [ ] native popup windows\n  - [x] fallback to simulated popup windows (rendered in parent window)\n- accessibility:\n  - [ ] keyboard support\n  - [ ] AccessKit\n- MVVM model with:\n  - [x] properties,\n  - [x] bindings,\n  - [x] observable collections\n- [x] async support\n- [x] `ui!` macro for easier view creation\n- [x] extensive styling (style can change behavior)\n\n## Example\n\n```rust\n#![windows_subsystem = \"windows\"]\n\nuse fui_app::*;\nuse fui_controls::*;\nuse fui_core::*;\nuse fui_macros::ui;\n\nuse std::cell::RefCell;\nuse std::rc::Rc;\n\nuse typed_builder::TypedBuilder;\nuse typemap::TypeMap;\nuse winit::window::WindowBuilder;\n\nstruct MainViewModel {\n    pub counter: Property\u003ci32\u003e,\n}\n\nimpl MainViewModel {\n    pub fn new() -\u003e Rc\u003cSelf\u003e {\n        Rc::new(MainViewModel {\n            counter: Property::new(0),\n        })\n    }\n\n    pub fn increase(self: \u0026Rc\u003cSelf\u003e) {\n        self.counter.change(|c| c + 1);\n    }\n}\n\nimpl ViewModel for MainViewModel {\n    fn create_view(self: \u0026Rc\u003cSelf\u003e) -\u003e Rc\u003cRefCell\u003cdyn ControlObject\u003e\u003e {\n        ui!(\n            Horizontal {\n                Text { text: (\u0026self.counter, |counter| format!(\"Counter {}\", counter)) },\n                Button {\n                    clicked: Callback::new_rc(self, |vm, _| vm.increase()),\n                    Text { text: \"Increase\" }\n                },\n            }\n        )\n    }\n}\n\nfn main() -\u003e anyhow::Result\u003c()\u003e {\n    let mut app = Application::new(\"Example: button\").unwrap();\n\n    app.add_window(\n        WindowBuilder::new().with_title(\"Example: button\"),\n        MainViewModel::new(),\n    )?;\n\n    app.run();\n\n    Ok(())\n}\n```\n\n[More examples](./fui_examples)\n\n## License\n\nLicensed under\n\n * GNU Lesser General Public License, Version 3.0 or later ([LICENSE-GPL-3.0+](https://spdx.org/licenses/GPL-3.0-or-later.html))\n * with Classpath Exception, Version 2.0 ([LICENSE-Classpath-exception-2.0](https://spdx.org/licenses/Classpath-exception-2.0.html)).\n\nIt's essentially the GNU GPL except it allows the distribution of an executable with a statically or dynamically linked library under the terms of your choice. The reason it's not LGPL is that dynamic linking is difficult with Rust.\n\nThe project is partially based on code from other projects:\n\n * WPF's [Grid.cs](https://github.com/dotnet/wpf/blob/master/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Grid.cs) on MIT license\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarek-g%2Frust-fui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarek-g%2Frust-fui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarek-g%2Frust-fui/lists"}