Freya π¦
![Freya logo](logo.svg)
![codecov](https://codecov.io/github/marc2332/freya/branch/main/graph/badge.svg?token=APSGEC84B8)
Website | Nightly Docs | Stable Docs | Book | Discord
Freya is a cross-platform GUI library for Rust powered by 𧬠Dioxus and π¨ Skia.
It does not use any web tech, check the Differences with Dioxus.
β οΈ It's currently work in progress, but you can already play with it! You can join the Discord server if you have any question or issue.
fn app() -> Element {
let mut count = use_signal(|| 0);
rsx!(
rect {
height: "50%",
width: "100%",
main_align: "center",
cross_align: "center",
background: "rgb(0, 119, 182)",
color: "white",
shadow: "0 4 20 5 rgb(0, 0, 0, 80)",
label {
font_size: "75",
font_weight: "bold",
"{count}"
}
}
rect {
height: "50%",
width: "100%",
main_align: "center",
cross_align: "center",
direction: "horizontal",
Button {
onclick: move |_| count += 1,
label { "Increase" }
}
Button {
onclick: move |_| count -= 1,
label { "Decrease" }
}
}
)
}
|
![Freya Demo](https://github.com/marc2332/freya/assets/38158676/f81a95a2-7add-4dbe-9820-3d3b6b42f6e5)
|
Want to try it? π€
π Make sure to check the Setup guide first.
β οΈ If you happen to be on Windows using windows-gnu
and get compile errors, maybe go check this issue.
Clone this repo and run:
cargo run --example counter
You can also try freya-template
Usage π
Add Freya and Dioxus as dependencies:
freya = "0.2"
dioxus = { version = "0.5", features = ["macro", "hooks"], default-features = false }
Contributing π§ββοΈ
If you are interested in contributing please make sure to have read the Contributing guide first!
Features β¨
- βοΈ Built-in components (button, scroll views, switch and more)
- π Built-in hooks (animations, text editing and more)
- π Built-in developer tools (tree inspection, fps overlay)
- π§° Built-in headless runner to test UI
- π¨ Theming support
- π©οΈ Cross-platform (Windows, Linux, MacOS)
- πΌοΈ SKSL Shaders support
- π Multi-line text editing
- π¦Ύ Accessibility support
- 𧩠Compatible with dioxus-sdk and other Dioxus renderer-agnostic libraries
Goals π
- Performant and low memory usage
- Good developer experience
- Cross-platform support
- Decent Accessibility support
- Useful testing APIs
- Useful and extensible built-in components and hooks
Support π€
If you are interested in supporting the development of this project feel free to donate to my Github Sponsor page.
Thanks to my sponsors for supporting this project! π
![User avatar:](https://github.com/piny4man.png)
![User avatar: ι«εΊδΈ°](https://github.com/gqf2008.png)
Special thanks πͺ
- Jonathan Kelley and Evan Almloff for making Dioxus and all their help, specially when I was still creating Freya.
- Armin for making rust-skia and all his help and making the favor of hosting prebuilt binaries of skia for the combo of features use by Freya.
- geom3trik for helping me figure out how to add incremental rendering.
- Tropical for this contributions to improving accessibility and rendering.
- Aiving for having made heavy contributions to rust-skia for better SVG support, and helped optimizing images rendering in Freya.
- RobertasJ for having added nested parenthesis to the
calc()
function and also pushed for improvements in the animation APIs.
- And to the rest of contributors and anybody who gave me any kind of feedback!
π€ Projects
Valin βοΈ is a Work-In-Progress cross-platform code editor, made with Freya π¦ and Rust, by me.
![Valin](https://github.com/marc2332/valin/raw/main/demo.png)
MIT License