Tidak Ada Deskripsi

Jonathan Kelley e03f8ca90c ci: no more codecov failing 3 tahun lalu
.docker fc0a093466 try fix 3 tahun lalu
.github 8d2e23bde6 ci: fix draft request 3 tahun lalu
.vscode 6ad82823dd Merge branch 'master' into jk/docs 3 tahun lalu
docs a325c03dd9 fix: lifetimes again 3 tahun lalu
examples 8801e4be00 feat: change example 3 tahun lalu
notes abbd0b8a39 fix: update the sample 3 tahun lalu
packages ab99bc6c8d chore: comment out image generator when not in use 3 tahun lalu
src 9e4ec43b1e Fix various typos and grammar nits 3 tahun lalu
.gitignore 5ba2c43274 local code coverage 3 tahun lalu
CHANGELOG.md 56f3002aed feat: add changelogs 3 tahun lalu
Cargo.toml ee67a041d2 feat: turn interpreter into crate 3 tahun lalu
LICENSE-APACHE 6537ad37b8 Add actual copies of the relevant licenses 3 tahun lalu
LICENSE-MIT 6537ad37b8 Add actual copies of the relevant licenses 3 tahun lalu
Makefile.toml bd565bb65f improve Makefile tests 3 tahun lalu
README.md cea2e494e9 docs: reorder guide 3 tahun lalu
codecov.yml e03f8ca90c ci: no more codecov failing 3 tahun lalu

README.md

Dioxus

Frontend that scales.


Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust.

fn app(cx: Scope) -> Element {
    let (count, set_count) = use_state(&cx, || 0);

    cx.render(rsx!(
        h1 { "High-Five counter: {count}" }
        button { onclick: move |_| set_count(count + 1), "Up high!" }
        button { onclick: move |_| set_count(count - 1), "Down low!" }
    ))
}

Dioxus can be used to deliver webapps, desktop apps, static sites, liveview apps, mobile apps (WIP), and more. At its core, Dioxus is entirely renderer agnostic and has great documentation for creating new renderers for any platform.

If you know React, then you already know Dioxus.

Unique features:

  • Desktop apps running natively (no Electron!) in less than 10 lines of code.
  • Incredibly ergonomic and powerful state management.
  • Comprehensive inline documentation - hover and guides for all HTML elements, listeners, and events.
  • Extremely memory efficient - 0 global allocations for steady-state components.
  • Multi-channel asynchronous scheduler for first-class async support.
  • And more! Read the full release post.

Examples

All examples in this repo are desktop apps. To run an example, simply clone this repo and use cargo run --example XYZ

cargo run --example EXAMPLE

Get Started with...

Example Projects:

Tutorial Web Desktop SSR Mobile State
File Navigator (Desktop) WiFi scanner (Desktop) TodoMVC (All platforms) E-commerce w/ Tailwind (SSR/LiveView)
File Explorer Wifi Scanner Demo TodoMVC example E-commerce Example

See the awesome-dioxus page for a curated list of content in the Dioxus Ecosystem.

Why Dioxus and why Rust?

TypeScript is a fantastic addition to JavaScript, but it's still fundamentally JavaScript. TS code runs slightly slower, has tons of configuration options, and not every package is properly typed.

In contrast, Dioxus is written in Rust - which is almost like "TypeScript on steroids".

By using Rust, we gain:

  • Static types for every library
  • Immutability by default
  • A simple and intuitive module system
  • Integrated documentation (go to source actually goes to source)
  • Advanced pattern matching
  • Clean, efficient, composable iterators
  • Inline built-in unit/integration testing
  • Best-in-class error handling
  • Powerful and sane standard library
  • Flexible macro system
  • Access to crates.io

Specifically, Dioxus provides us many other assurances:

  • Proper use of immutable data structures
  • Guaranteed error handling (so you can sleep easy at night not worrying about cannot read property of undefined)
  • Native performance on mobile
  • Direct access to system IO

And much more. Dioxus makes Rust apps just as fast to write as React apps, but affords more robustness, giving your frontend team greater confidence in making big changes in shorter time.

Why NOT Dioxus?

You shouldn't use Dioxus if:

  • You don't like the React Hooks approach to frontend
  • You need a no-std renderer
  • You want to support browsers where Wasm or asm.js are not supported.
  • You need a Send+Sync UI solution (Dioxus is not currently thread-safe)

Comparison with other Rust UI frameworks

Dioxus primarily emphasizes developer experience and familiarity with React principles.

  • Yew: prefers the elm pattern instead of React-hooks, no borrowed props, supports SSR (no hydration).
  • Percy: Supports SSR but with less emphasis on state management and event handling.
  • Sycamore: VDOM-less using fine-grained reactivity, but lacking in ergonomics.
  • Dominator: Signal-based zero-cost alternative, less emphasis on community and docs.
  • Azul: Fully native HTML/CSS renderer for desktop applications, no support for web/ssr

Parity with React & Roadmap

Dioxus is heavily inspired by React, but we want your transition to feel like an upgrade. Dioxus is most of the way there, but missing a few key features. These include:

  • Portals
  • Suspense integration with SSR
  • Server Components / Bundle Splitting / Lazy

Dioxus is unique in the Rust ecosystem in that it supports:

  • Components with props that borrow from their parent
  • Server-side-rendering with client-side hydration
  • Support for desktop applications

For more information on what features are currently available and the roadmap for the future, be sure to check out the guide.

Projects in the ecosystem

Want to jump in and help build the future of Rust frontend? There's plenty of places where your contributions can make a huge difference:

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Dioxus by you, shall be licensed as MIT, without any additional terms or conditions.