mrkeyoor.com_
Wed 09 Sept 13:30 UTC
Dev Toolsevaluationupdated 09 Sept 2026

iced review

Iced is a Rust library for building graphical applications on Windows, macOS, Linux, and the web from one state-and-message model. It handles widgets, layout, events, windows, and rendering so a Rust developer does not have to assemble those pieces from lower-level graphics and windowing crates.

trackingstars / 7d
Verdict

Our Iced build took 149 seconds and all 70 tests passed in 55 seconds, so the measured checkout is healthy enough for a serious prototype. Use it for a Rust-first desktop UI when the Elm-style model and custom rendering are assets, and budget for platform testing. Do not choose experimental 0.14.0 for a touch-heavy, old-GPU, or API-stability-sensitive product without proving those exact paths first.

We ran it

Lab card: what happened when we ran icedScreenshot of iced (iced.rs)
Install✓ · 31s295 packages
Build✓ · 149s
Tests✓ · 55s70 passed · 0 failed of 70 (cargo test)
Repo585 files~96,657 lines of source · 8.6 MB · 7 CI workflows · tests dir

Answers from our run

Does iced build from source?

Dependencies installed in 31 seconds (295 packages), and the build succeeded in 149 seconds. We cloned commit cfeef0b into a clean Debian container with 3 CPUs and no project-specific setup.

Do iced's tests pass?

Yes: 70 of 70 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use iced?

Teams requiring a stable 1.x API: the README calls Iced experimental, and the latest release is 0.14.0.

What are the alternatives to iced?

egui, Slint, GTK 4 Rust bindings. Our Iced build took 149 seconds and all 70 tests passed in 55 seconds, so the measured checkout is healthy enough for a serious prototype.

Setup4/5Build and 70 tests passed; graphics hosts may need system libraries
Docs4/5Book, API docs, examples, and dependency notes cover the main path
Community5/531,464 stars, a September 2026 push, and current issue activity
Maturity3/5The project still labels 0.14.0 experimental

Who it’s for

Rust teams building a custom-styled desktop application and willing to use an Elm-like state, message, view, and update loop.
Projects that need one UI codebase across Windows, macOS, Linux, and the web.
Applications that want GPU rendering through wgpu with a tiny-skia software option.
Developers prepared to test their exact display server, graphics adapter, input methods, and accessibility requirements.

Who it’s NOT for

Teams requiring a stable 1.x API: the README calls Iced experimental, and the latest release is 0.14.0.
Native mobile applications: the documented platform list covers Windows, macOS, Linux, and the web, without Android or iOS.
Touch-first text editing on Windows tablets without a local fix: open issue #3441 reports that text_editor does not respond to finger or pen input.
Products that must run on older Linux GPUs without adapter testing: open issue #3265 reports a Vulkan capability crash before the software fallback is selected.
Apps that need operating-system-native widgets and behavior by default: Iced draws its own widget system through wgpu or tiny-skia.

Setup reality

Our sandbox installed 295 packages in 31 seconds, built commit cfeef0b in 149 seconds, and completed tests in 55 seconds. Cargo reported 70 passed and 0 failed out of 70.

The library needs no account, credential, or hosted service. A basic app adds the crate and chooses features. Linux and NixOS users may need window-system, keyboard, Vulkan, or OpenGL libraries described in DEPENDENCIES.md; web builds need the appropriate Rust target and browser packaging path.

A passing headless command does not prove rendering on every GPU or desktop. Iced can use wgpu for Vulkan, Metal, and DX12, with tiny-skia as a software renderer. Test both the intended backend and fallback on each supported host.

Iced 0.14.0 builds interfaces from 4 explicit parts

Iced borrows its application shape from Elm: state holds data, messages describe events, view code turns state into widgets, and update code changes state after a message. Version 0.14.0 can run that model on Windows, macOS, Linux, and the web. The separation makes behavior traceable because button presses and asynchronous results enter the same message path instead of mutating widgets through scattered callbacks.

The included widget set covers text inputs, scrolling, tables, grids, markdown, editors, pick lists, panes, and other common controls. Layout is responsive, custom widgets are supported, and futures can feed asynchronous work back into the application. Iced owns drawing through its renderer stack, so the result has a consistent custom appearance. A team seeking each operating system's stock controls and exact native behavior should compare GTK or another platform toolkit.

What happened when we ran it

Our sandbox installed 295 packages in 31 seconds and built commit cfeef0b in 149 seconds. The repository held 585 files, roughly 96,657 source lines, and occupied 8.6 MB before installation. Nothing in the measured install or build log required a credential or external service. The 149-second compile is the main setup cost we observed, which matters for clean CI workers even though incremental application builds can behave differently.

Tests finished in 55 seconds with 70 passed and 0 failed out of 70. Our scan found 7 CI workflow files and a tests directory, with no Dockerfile. The successful command checks the code paths selected by the repository's test setup. It does not demonstrate window creation on 4 platforms, browser packaging, GPU compatibility, touch behavior, screen-reader behavior, or the visual result of a particular application. Those need product-specific checks.

Two renderers trade GPU reach for a software fallback

The default graphics path uses wgpu, with Vulkan on Linux, Metal on macOS, and DX12 on Windows. Iced also includes a tiny-skia renderer for software drawing. That split gives an application a fallback path and lets lower-level crates integrate the renderer-agnostic runtime. It does not guarantee automatic recovery from every adapter failure: issue #3265 reports an older Linux GPU reaching a Vulkan capability crash before fallback selection.

System setup varies by host. The NixOS dependency guide names libxkbcommon, a Vulkan loader or OpenGL, and Wayland or X11 libraries, then shows shell and flake configurations. Other Linux distributions package the same layers differently. A web build adds a WASM target and browser delivery tooling. The Rust API may be shared, while installers, graphics drivers, font behavior, clipboard integration, and window-system testing remain platform work.

The experimental label still matters after 0.14.0

Release 0.14.0, published December 7, 2025, added reactive rendering, headless and end-to-end testing, time-travel debugging, hot reload, input-method support, animation, and several widgets. It also changed widget events, renderer dependencies, keyboard subscriptions, theme behavior, and the Rust edition. That is productive development, but it explains the README's experimental warning: an application owner should expect migration work before treating the public API as settled.

The release tag is older than the latest source activity. GitHub recorded a push on September 9, 2026, with 31,464 stars and 493 combined open issues and pull requests. A GitHub issue search returned 362 open issues. Those figures show both adoption and a sizable triage surface. The ongoing pushes and recently updated reports indicate active maintenance, so the release date alone is not evidence that Iced has stalled.

Current reports touch GPUs, Wayland, Windows, and touch input

Issue #3441 says the text editor ignores finger and pen events, which is a direct blocker for the reporter's Windows tablet workflow. Issue #2256 reports programmatic window resizing reverting under Wayland. Issue #3382 describes a Windows presentation error that leaves input alive while drawing stops and logs grow. Each report has a specific platform or condition; none establishes a failure across all Iced applications.

These issues should shape acceptance testing. A desktop release needs a matrix covering its actual graphics adapters, display servers, scale factors, sleep and wake cycle, keyboard layouts, input methods, clipboard, and touch devices. Version 0.14.0's headless testing can exercise messages and views without a display, while end-to-end support can cover interactions. Neither replaces a short run on the physical hardware customers use.

Egui favors immediate mode, while Slint supports 4 languages

Egui is the closest Rust-native comparison for many developer tools; its immediate-mode API rebuilds the interface description each frame and suits highly interactive editors. Slint uses a declarative UI language and supports Rust, C++, JavaScript, and Python application code. GTK 4 has a longer desktop lineage and deeper native integration, while its web story and custom-rendered look differ from Iced's.

Iced is appealing when a Rust team wants explicit message flow, custom visuals, asynchronous tasks, and one UI model across desktop and web. Our clean 70-test result removes concern about the measured checkout, but the project's own experimental label should decide the commitment level. Build a representative screen first, then test the oldest GPU, touch device, Wayland compositor, and browser you promise to support before settling on the toolkit.

Alternatives

ProjectWhat it isPick it when
egui gh↗An immediate-mode Rust GUI library that runs on native systems and the web.pick this instead when an immediate-mode API suits an editor, tool, or rapidly changing interface.
Slint gh↗A declarative GUI toolkit usable from Rust, C++, JavaScript, and Python.pick this instead when a separate UI language or a non-Rust application core is useful.
GTK 4 Rust bindingsRust bindings for the established GTK 4 desktop toolkit.pick this instead when GTK's native toolkit, accessibility work, and desktop integration matter more than one web-capable Rust renderer.

What people are saying

  1. [velocity-scout] iced-rs/iced

Sources

  1. Iced GitHub repository and README
  2. The Iced book
  3. Iced API documentation
  4. Iced 0.14.0 release notes
  5. Iced system dependency guide
  6. Issue 3265: Vulkan crash on older Linux GPUs
  7. Issue 3441: text editor lacks touch input
  8. Issue 2256: programmatic resize under Wayland

More dev tools reviews

chezmoi · Files · linux · tokio · lerna · system-design-notes · the whole board →