33 releases
Uses new Rust 2024
| 0.6.0 | Dec 7, 2025 |
|---|---|
| 0.6.0-alpha.2 | Nov 29, 2025 |
| 0.6.0-alpha.0 | Aug 19, 2025 |
| 0.5.3 | Jun 8, 2025 |
| 0.1.5 | Jul 10, 2024 |
#148 in Embedded development
Used in ra-fsp-rs
4.5MB
15K
SLoC
Buoyant

Buoyant is a library for writing and rendering SwiftUI-like views in Rust,
primarily intended for use on no_std memory-constrained embedded systems.
Get started with the Book.
Available render targets
While this crate is primarily intended for use with embedded-graphics DrawTargets, it
can also be used to layout and render views to the terminal.
DrawTarget:embedded-graphicsdisplays.TextBuffer: A basic fixed-sizecharbuffer. Does not respect graphemes. This is primarily useful for testing and debugging.CrossTerm: Renders colored character-pixels to a terminal using thecrosstermcrate.
Example
Here's an animated toggle component, implemented with Buoyant:

fn toggle_button(is_on: bool) -> impl View<Rgb565, bool> {
let alignment = if is_on { Alignment::Trailing } else { Alignment::Leading };
let color = if is_on { Rgb565::GREEN } else { Rgb565::RED };
Button::new(
|is_on: &mut bool| *is_on = !*is_on,
|_| {
Capsule.foreground_color(color)
.overlay(
alignment,
Circle
.foreground_color(Rgb565::WHITE)
.padding(Edges::All, 2)
)
.frame_sized(50, 25)
.animated(Animation::ease_in_out(Duration::from_millis(500)), is_on)
.geometry_group()
}
)
}
Feature progress
Layout and Rendering
Static layout and animation between layouts are relatively feature-complete, aside from transitions. You should be able to construct most desired layouts and animations.
- β Stacks of heterogeneous views (VStack, HStack, ZStack)
- π§ Stacks of homogeneous views (ForEach) - partial, vertical only
- β Common SwiftUI-like primitives (Spacer, Divider, ...)
- β Common SwiftUI-like modifiers (.frame, .padding, ...)
- β Conditional views, with match variable binding
- β Text (embedded-graphics Monospace and u8g2 fonts)
- β Images (fixed size)
- β Interruptible Animations + Curves
- π§ Transitions (partially implemented)
- β Shape stroke+fill
- β Common embedded-graphics shape primitives
- β Custom sizing with GeometryView
- π€ Charts
- π€ Canvas for arbitrary path/shape/raster drawing
- π€ Simulated alpha and antialiasing
- π€ Shape styles (e.g. gradients)
Interactivity
Interactivity is under active development, and is not yet feature-complete.
- β State management
- π§ Click/tap routing
- β Button
- π§ ScrollView
- π€ Focus management + keyboard input
- π€ TextField
Who should use this?
This project could be used in production by the brave, but is probably better suited for hobby projects at this point. It's significantly better than dealing with raw embedded-graphics. If you're familiar with SwiftUI, you should feel especially at home.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~7β18MB
~296K SLoC