Skip to content
/ freya Public

Cross-platform GUI library for πŸ¦€ Rust powered by 🧬 Dioxus and 🎨 Skia.

License

Notifications You must be signed in to change notification settings

marc2332/freya

Repository files navigation

Freya πŸ¦€

Freya logo

Discord Server Github Sponsors codecov

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

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! πŸ˜„

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.
  • 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

MIT License