Rust GUI frameworks
2026 Ecosystem
34

Version skew: shared by name, not by version

Every framework uses the same winit. Almost none use the same wgpu.

The diagrams in this book show layers as if they were shared: one window library, one GPU layer, one layout engine. They are shared by name. Each framework pins its own version, resolved here on 30 September 2026 by generating a lockfile for the latest release of each one. Start with the window library, where the picture holds.

shared layers, as resolved on 2026-09-30
               winit    wgpu             taffy   accesskit  parley  cosmic-text
-------------  -------  ---------------  ------  ---------  ------  -----------
egui           0.30.13  30.0.1           -       0.24.1     -       -
iced           0.30.13  27.0.1           -       -          -       0.15.0
Slint          0.30.13  30.0.1           0.10.1  0.24.1     0.11.1  -
Xilem          0.30.13  26.0.1           -       0.21.1     0.6.0   -
Dioxus Native  0.30.13  0.19.4 + 26.0.1  0.9.2   0.17.1     0.6.0   -
Freya          0.30.13  -                -       0.24.1     -       -
Floem          -        22.1.0           0.4.4   -          -       0.12.1
gpui           -        -                0.9.0   -          -       0.14.2

Every framework that uses winit lands on 0.30.13. Floem and gpui show - because they carry their own windowing (a winit fork and platform layers respectively). The GPU column tells a different story: wgpu spans six versions, from 19.4 to 30.0.1, and Dioxus Native carries two at once. Freya shows - because it draws with Skia and not wgpu. Taffy shows four versions across four frameworks, AccessKit three and Parley two. Slint is the closest to current. Xilem and Dioxus Native, which share the Linebender stack, were released against versions several steps behind.

This is what drives maintenance cost. A fix in wgpu 30 does not reach a framework on wgpu 26 until that framework upgrades, and Cargo only merges semver-compatible versions, so two incompatible wgpus are compiled and linked twice. Combining two frameworks, or a framework and your own wgpu code, can put both copies in your binary. To see your own duplicates:

in your own project (illustrative, not compiled) illustrative
cargo tree -d                 # crates that appear at more than one version
cargo tree -i wgpu --depth 1  # who pulls wgpu in, and at which version

The table, like the code on every page, comes from a real build. snippets/verify.py compiles every package and regenerates it, so it can be re-run when the ecosystem moves.

Lockfiles generated by the book’s own snippets (snippets/meta.json).