Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Iced | 21,213 | 1 | 70 | 18 hours ago | 18 | July 28, 2023 | 235 | mit | Rust | |
A cross-platform GUI library for Rust, inspired by Elm | ||||||||||
Awesome Python Applications | 14,826 | 2 months ago | 38 | Jupyter Notebook | ||||||
💿 Free software that works great, and also happens to be open-source Python. | ||||||||||
Lvgl | 13,808 | 11 hours ago | 59 | mit | C | |||||
Embedded graphics library to create beautiful UIs for any MCU, MPU and display type. It's boosted by a professional yet affordable drag and drop UI editor, called SquareLine Studio. | ||||||||||
Dearpygui | 11,489 | 51 | 7 days ago | 220 | October 09, 2023 | 254 | mit | C++ | ||
Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies | ||||||||||
Mach | 2,327 | a month ago | 145 | other | Zig | |||||
zig game engine & graphics toolkit | ||||||||||
Iplug2 | 1,707 | a day ago | 152 | other | C | |||||
C++ Audio Plug-in Framework for desktop, mobile and web | ||||||||||
Rui | 1,447 | 1 | 2 months ago | 23 | May 31, 2023 | 14 | mit | Rust | ||
Declarative Rust UI library | ||||||||||
Fltk Rs | 1,378 | 55 | 14 hours ago | 360 | December 03, 2023 | 6 | mit | Rust | ||
Rust bindings for the FLTK GUI library. | ||||||||||
Gi | 1,231 | 41 | 19 hours ago | 110 | October 24, 2023 | 171 | bsd-3-clause | Go | ||
A free and open source framework for building powerful, fast, and beautiful 2D and 3D GUIs that run on macOS, Windows, Linux, iOS, and Android with a single pure Go codebase. | ||||||||||
Core2d | 836 | 25 | a month ago | 17 | June 10, 2023 | mit | C# | |||
A multi-platform data driven 2D diagram editor. |
wgpu
and tiny-skia
iced_wgpu
supporting Vulkan, Metal and DX12iced_tiny_skia
offering a software alternative as a fallbackIced is currently experimental software. Take a look at the roadmap, check out the issues, and feel free to contribute!
Add iced
as a dependency in your Cargo.toml
:
iced = "0.10"
If your project is using a Rust edition older than 2021, then you will need to
set resolver = "2"
in the [package]
section as well.
Iced moves fast and the master
branch can contain breaking changes! If
you want to learn about a specific release, check out the release list.
Inspired by The Elm Architecture, Iced expects you to split user interfaces into four different concepts:
We can build something to see how this works! Let's say we want a simple counter that can be incremented and decremented using two buttons.
We start by modelling the state of our application:
struct Counter {
// The counter value
value: i32,
}
Next, we need to define the possible user interactions of our counter: the button presses. These interactions are our messages:
#[derive(Debug, Clone, Copy)]
pub enum Message {
IncrementPressed,
DecrementPressed,
}
Now, let's show the actual counter by putting it all together in our view logic:
use iced::widget::{button, column, text, Column};
impl Counter {
pub fn view(&self) -> Column<Message> {
// We use a column: a simple vertical layout
column![
// The increment button. We tell it to produce an
// `IncrementPressed` message when pressed
button("+").on_press(Message::IncrementPressed),
// We show the value of the counter here
text(self.value).size(50),
// The decrement button. We tell it to produce a
// `DecrementPressed` message when pressed
button("-").on_press(Message::DecrementPressed),
]
}
}
Finally, we need to be able to react to any produced messages and change our state accordingly in our update logic:
impl Counter {
// ...
pub fn update(&mut self, message: Message) {
match message {
Message::IncrementPressed => {
self.value += 1;
}
Message::DecrementPressed => {
self.value -= 1;
}
}
}
}
And that's everything! We just wrote a whole user interface. Iced is now able to:
Browse the documentation and the examples to learn more!
Iced was originally born as an attempt at bringing the simplicity of Elm and The Elm Architecture into Coffee, a 2D game engine I am working on.
The core of the library was implemented during May 2019 in this pull request.
The first alpha version was eventually released as
a renderer-agnostic GUI library. The library did not provide a renderer and
implemented the current tour example on top of ggez
, a game library.
Since then, the focus has shifted towards providing a batteries-included, end-user-oriented GUI library, while keeping the ecosystem modular:
Contributions are greatly appreciated! If you want to contribute, please read our contributing guidelines for more details.
Feedback is also welcome! You can create a new topic in our Discourse forum or come chat to our Discord server.
The development of Iced is sponsored by the Cryptowatch team at Kraken.com