20 unstable releases (3 breaking)
new 0.4.3 | Mar 14, 2025 |
---|---|
0.4.2 | Mar 9, 2025 |
0.4.0-alpha.0 | Feb 26, 2025 |
0.3.1 | Feb 24, 2025 |
0.1.3 | Jun 9, 2024 |
#58 in Graphics APIs
1,574 downloads per month
4MB
5.5K
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
DrawTarget
:embedded-graphics
displays.TextBuffer
: A basic fixed-sizechar
buffer. Does not respect graphemes. This is primarily useful for testing and debugging.CrossTerm
: Renders colored character-pixels to a terminal using thecrossterm
crate.
Building views with Buoyant
Here's what an animated toggle button component would look like, implemented with Buoyant:
fn toggle_button(is_on: bool) -> impl EmbeddedGraphicsView<Rgb565> {
let alignment = if is_on {
HorizontalAlignment::Trailing
} else {
HorizontalAlignment::Leading
};
let color = if is_on { Rgb565::GREEN } else { Rgb565::RED };
ZStack::new((
Capsule.foreground_color(color),
Circle.foreground_color(Rgb565::WHITE).padding(2),
))
.with_horizontal_alignment(alignment)
.frame_sized(50, 25)
.animated(Animation::linear(Duration::from_millis(200)), is_on)
}
Feature progress
Layout and Rendering
- Fixed-size Stacks with hetereogeneos children (VStack, HStack, ZStack)
- Stacks with homogeneous children (ForEach) - partial, vertical only
- Common SwiftUI primitives (Spacer, Divider)
- Conditional views - partial, no unwrapping
- Text, basic line breaking
- Text, Unicode line breaking
- Text, monospaced fonts
- Text, arbitrary fonts
- Animation
- Transition
- Common embedded-graphics shape primitives
- Canvas for arbitrary path/shape/raster drawing
- Shape stroke/fill
- Shape styles (gradients, fragment shaders)
- Images
- Alpha rendering
- Adaptive antialiasing
Interactivity
- State management
- Click/tap routing
- Focus management + keyboard input (Text input view)
Who should use this?
This project should not be used in production...yet. For hobby projects it's lightyears 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
~4–12MB
~137K SLoC