Draft:Iced (GUI library)

Rust GUI library From Wikipedia, the free encyclopedia

Iced is a cross-platform GUI library for the Rust programming language, which emphasizes simplicity and type safety.[1][2] It was created by Héctor Ramón Jiménez in 2019 and is inspired by Elm and The Elm Architecture.[3] Rather than wrapping native platform widgets, Iced uses its own rendering pipeline. It is most notably used as the GUI foundation for System76's COSMIC desktop environment.[2][4][5]



DevelopersHéctor Ramón Jiménez and contributors
Initial releaseSeptember 5, 2019; 6 years ago (2019-09-05)
Stable release
0.14.0 / December 7, 2025; 4 months ago (2025-12-07)
Written inRust
Quick facts Iced, Developers ...
Iced
DevelopersHéctor Ramón Jiménez and contributors
Initial releaseSeptember 5, 2019; 6 years ago (2019-09-05)
Stable release
0.14.0 / December 7, 2025; 4 months ago (2025-12-07)
Written inRust
Operating systemCross-platform (Windows, macOS, Linux, Web)
TypeWidget toolkit
LicenseMIT License
Websiteiced.rs
Repositorygithub.com/iced-rs/iced
Close

History

Iced originated as an attempt to bring the simplicity of Elm and The Elm Architecture into Coffee, a 2D game engine Jiménez was developing in Rust.[1] The core of the library was implemented during May 2019 as a user interface module within Coffee. The first alpha version was released as a renderer-agnostic GUI library, which did not include its own renderer and was instead implemented on top of ggez, a Rust game library.[1]

Since then, the focus shifted towards providing a batteries-included, end-user-oriented GUI library while keeping its ecosystem modular.[1] The name "Iced" was chosen simply because Jiménez enjoys iced coffee.[3]

In 2022, System76 announced that its new COSMIC desktop environment would use Iced instead of GTK.[4][2][5] Development of Iced has been sponsored by the Cryptowatch team at Kraken.[6]

Architecture

Iced's architecture is based on The Elm Architecture, which splits an application into four concepts: state, messages, update logic, and view logic.[7] The state serves as the single source of truth for the application. The view reads the state and constructs the user interface, but cannot modify the state directly. Instead, user interactions generate messages, which are passed to the update function to modify the state accordingly.[7]

Iced also introduces subscriptions, which allow applications to listen for external events such as elapsed time or system events and send messages in response.[7]

Version 0.14 introduced time-travel debugging, allowing developers to step backward and forward through an application's state history.[8][9]

Rendering

Iced uses wgpu as its default rendering backend for GPU-accelerated graphics, supporting Vulkan, Metal, DirectX 12, OpenGL and OpenGL ES.[10] If no compatible GPU device is available, Iced falls back to tiny-skia for software rendering.[10] The rendering backend can be selected manually through the library's feature flags.[10]

System76 engineer Jeremy Soller developed iced-dyrend, a dynamic renderer that determines at runtime whether to use GPU rendering via wgpu or software rendering via tiny-skia. This dynamic renderer was later integrated into the Iced toolkit itself.[11]

Notable uses

The most prominent user of Iced is System76's COSMIC desktop environment, which adopted the toolkit in 2022 after evaluating it against GTK.[4][2] COSMIC is a desktop environment for Linux written entirely in Rust, and uses Iced for its applications including a text editor, terminal emulator, file manager, and settings application.[12]

Other notable applications built with Iced include Sniffnet, a cross-platform network traffic monitor[13] and Kraken's desktop trading application.[6]

See also

References

Related Articles

Wikiwand AI