Skip to content

Instantly share code, notes, and snippets.

@LukasKalbertodt
Last active October 12, 2025 18:25
Show Gist options
  • Select an option

  • Save LukasKalbertodt/376420aff8febb8265bf16e4711783a6 to your computer and use it in GitHub Desktop.

Select an option

Save LukasKalbertodt/376420aff8febb8265bf16e4711783a6 to your computer and use it in GitHub Desktop.
Quick'n'dirty Rust UI library startup time and binary size comparison

Quick'n'dirty Rust UI library startup time and binary size comparison

Note: this is very much not a good scientific benchmark. Most things I only measured once and I didn't try to control compilation settings. I just cloned the repositories, and ran cargo run -r for an example that seemed fairly minimal to me. I only measured on one machine, on one OS. I still think there is a tiny bit of value in these measurements (hence this gist), but don't take them at face value!

UI lib/app size Final render window task bar
Slint 15MB 111ms 90ms 62ms
egui 12MB 118ms - 21ms
Freya 28MB 146ms - 14ms
Dioxus Blitz 37MB 220ms - 70ms
Tessera 11MB 265ms - 0ms
Floem 23MB 285ms - 0ms
GPUI 23MB 313ms - 208ms
Dioxus 9MB 480ms 285ms 258ms
Sublime Text - 264ms - 230ms
Zed - 413ms 232ms 257ms

Explanation: I measured the time by recording my 144hz screen via OBS. I disabled animations in Gnome. I started the binary via gnome-terminal (via direct path, not cargo run) and then took the time difference between the first frame that the "enter" in the terminal was drawn and other points in time:

  • "task bar": when the new window registered in the Gnome task bar
  • "window": when the first bit of the window was visible. If it's the same as "final render", it's - and that's good as there are fewer visual jumps.
  • "final render": when nothing was changing anymore (some libraries first rendered something incomplete or in the wrong color scheme).

Libraries:

  • Slint: 85692d178, todo example
  • egui: 28cbd73c5c0, hello_world example
  • Freya: v0.3.4, button example
  • Dioxus Blitz: Dioxus with the experimental Blitz backend. I cloned the blitz repo, 2044d690, flex example
  • Tessera: tessera-ui-v2.1.0, counter example
  • Floem: 6148cd8f, counter example
  • GPUI: v0.2.0, hello_world example
  • Dioxus: v0.6.3, hello_world example
  • Sublime Text: not a library, just as comparison
  • Zed: not a library, just as comparison. Zed is using gpui so it's weird that it manages to show a window (albeit not final render) quite a bit earlier than the gpui example.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment