8000 GitHub - marc2332/freya: Cross-platform and non-web GUI library for πŸ¦€ Rust powered by 🎨 Skia.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

marc2332/freya

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β  8000
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Freya πŸ¦€

Freya logo

Discord Server Github Sponsors codecov

Website | Documentation | Discord | Main branch Docs

Freya is a cross-platform and non-web GUI library for Rust powered by 🎨 Skia.

Counter example

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

Website example

This is Freya's website landing page made with Freya itself:

Source code.

Website made with Rust Screenshot

Animation example

An animated drag and drop.

Source code.

drag

Animated router example

Animated transition between router pages.

Source code.

animated_router

More Examples

Valin Code Editor

Valin βš’οΈ is a Work-In-Progress cross-platform code editor, made with Freya πŸ¦€ and Rust, by me.

Valin

Switch Theme example

Source code.

Switch Theme Screenshot

Todo example

Source code.

todo

Resizable containers example

Source code.

resizable

Want to try it? πŸ€”

Make sure to have Development Setup ready.

⚠️ 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.3"
dioxus = { version = "0.6", 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

Differences with Dioxus

Freya uses some of the core crates from Dioxus. This means that you will effectively be creating Dioxus components using RSX and hooks.

However, thanks to Dioxus being a renderer-agnostic library, you and your app will NOT be using Webviews, JavaScript, HTML, CSS, or any other abstraction that ends up using one of those or other web technologies.

Freya does everything on its own when it comes to:

  • Elements
  • Styling
  • Layout
  • Events
  • Rendering
  • Testing
  • Built-in components and hooks
  • Editing
  • Animating

...and more. Dioxus is only used for managing app components (hooks, lifecycle, state, RSX), while everything else is managed by Freya.

Freya is not meant to be a drop-in alternative to Dioxus renderers but a GUI library on its own.

Below is a comparison of the main differences between Freya and the official Dioxus renderers for Desktop (WebView and Blitz):

Category Freya Dioxus Renderers
Elements, attributes, and events Custom HTML
Layout Custom (Torin) CSS or Taffy
Styling Custom CSS
Renderer Skia WebView or WGPU
Components library Custom (freya-components) None, but can use HTML elements and CSS libraries
Devtools Custom (freya-devtools) Provided in WebView
Headless testing runner Custom (freya-testing) None, but tools like Playwright and similar are available

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: User avatar: ι«˜εΊ†δΈ°User avatar: Lino Le Van

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!

License

MIT License

0