#window #ui #events #phantom #input #key #renderer #event #wx


wx-rs windowing backend support for lemna

3 releases (breaking)

0.4.0 Jul 4, 2023
0.3.0 Jun 4, 2023
0.2.0 Apr 8, 2023

MIT license

14K SLoC


Crates.io Docs.rs

A Reactive UI framework for Rust


  • React-esque stateful UI
  • Flexbox-like layout engine
  • Global styling
  • Configurable rendering targets (currently just wgpu, which offers cross-platform GPU-accelerated rendering)
  • Configurable windowing backends (baseview, winit, wx-rs)
  • Cross-platform
  • Components can be built using a combination of other components and graphical primitives that map well to GPU renderers.
  • State and render-state is cached, so state changes only trigger recompute of the relevant nodes
  • Built in components/widgets:
    • Div, a scrollable container
    • Button, a button that supports tool tips
    • RadioButtons, arrays of selectable buttons
    • Toggle, a simple state-toggling button
    • Text, some text
    • TextBox, a box for entering text
    • Canvas, for displaying raster images, including drawing to a blank canvas
    • Selection, a dropdown menu
    • RoundedRect, a stylable-rectangle
  • OpenIconic icons built-in
  • wgpu rendering backend batches primitives together to use few calls out to wgpu (which makes it a lot faster than things that don't do this!)
  • nih-plug support in the lemna-nih-plug package

What's missing:

  • More robust and more widgets (e.g. text selection support on Text widget)


Select your preferred windowing backend:

cargo run -p lemna-baseview --example hello
cargo run -p lemna-wx-rs --example hello
cargo run -p lemna-winit --example scroll

See ./backends/**/**examples for other examples. Note that wx-rs presently has compilation limitations on most platforms, and winit does not handle many events. The Baseview backend is not on cargo (because baseview itself is not) but it is the most functional.

Practical Examples


~881K SLoC