No description
Find a file
Emil Boman f5bc1a9856
Implement LiveView Router Integration (#1505)
* Fix GoForwardButton calling can_go_back instead of can_go_forward

* Add first draft of LiveviewHistory

* Add external URL redirect

* Lock evaluator channel outside loop

* Add liveview to router examples

* fixup! Add liveview to router examples

* Communicate with liveview server on page load

* Add PopState event to Liveview routing

* Call updater callback from liveview history

* Add rudimentary PopState functionality to liveview router.

* Fix linter errors

* Refactor

* Fix navigator external redirection not working.

* Add go back and go forward buttons to router examples

* Finish functionality for timeline stack in liveview router

* Add docs to LiveviewHistory

* Replace Liveview history context attachment with constructor that takes context

* Fix go forward/backward history/future shuffle

* Support history across entire liveview session, if contiguous page jumps.

* Remove unnecessary bounds

* Add query and hash to location string

* Run rustfmt

* fix: Update server function docs link (#1489)

* liveview: Add `interpreter_glue_relative_uri (#1481)

* liveview: Add `interpreter_glue_relative_uri`

By utilizing `window.location.host` in the client-side JavaScript, we can easily derive the WebSocket URI from a relative path URI. This approach obviates the need for host address retrieval on the server side, unlike the method of serving glue code in liveview using `interpreter_glue`.

* liveview: Merge `.._relative_url` functionality

- Merged `.._relative_url` to current API `interpreter_glue`.
- Edit axum example to work with new feature.

* liveview: Fix clippy warning

* Rename modules to use snake_case (#1498)

* Change Scope into &ScopeState

* Move synchronization of state into router and make it opt-in

---------

Co-authored-by: Marc Espín <mespinsanz@gmail.com>
Co-authored-by: Seungwoo Kang <ki6080@gmail.com>
Co-authored-by: Leonard <tigerros.gh@gmail.com>
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2023-10-26 14:19:51 -05:00
.cargo Add openidconnect authentication demo (#1500) 2023-10-20 12:43:24 -05:00
.devcontainer WIP - remove comment in Dockerfile 2023-05-01 14:54:21 -04:00
.docker try fix 2022-02-06 23:27:24 +01:00
.github disable docs CI 2023-09-15 11:47:37 -05:00
.vscode chore: make clippy happy and limit workspace checks 2022-12-29 00:46:02 -05:00
examples Add openidconnect authentication demo (#1500) 2023-10-20 12:43:24 -05:00
notes Update ZH_CN.md to use 0.4 version of guide (#1388) 2023-08-22 10:39:22 -05:00
packages Implement LiveView Router Integration (#1505) 2023-10-26 14:19:51 -05:00
playwright-tests fix playwright tests on windows 2023-09-20 14:34:47 -05:00
translations fix: Update doc links from v3 to v4 2023-09-16 19:03:27 +02:00
.gitignore chore: rename playwrite to playwright (#1203) 2023-07-17 11:00:59 -05:00
.mailmap Add mailmap to unify name of Jonathan Kelley 2023-05-10 14:45:12 +02:00
Cargo.toml Add openidconnect authentication demo (#1500) 2023-10-20 12:43:24 -05:00
codecov.yml ci: no more codecov failing 2022-02-13 12:44:17 -05:00
LICENSE-APACHE Add actual copies of the relevant licenses 2022-01-30 11:50:57 -06:00
LICENSE-MIT Add actual copies of the relevant licenses 2022-01-30 11:50:57 -06:00
Makefile.toml include desktop tests in test with browser 2023-05-06 09:15:09 -05:00
README.md Add link to website section on contributing to root README (#1559) 2023-10-20 16:10:06 -05:00


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

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

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

Dioxus can be used to deliver webapps, desktop apps, static sites, mobile apps, TUI apps, liveview apps, and more. Dioxus is entirely renderer agnostic and can be used as a platform for any renderer.

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.
  • Blazingly fast 🔥🔥 and extremely memory efficient
  • Integrated hot reloading for fast iteration
  • First-class async support with coroutines and suspense
  • And more! Read the full release post.

Supported Platforms

Web
  • Render directly to the DOM using WebAssembly
  • Pre-render with SSR and rehydrate on the client
  • Simple "hello world" at about 65kb, comparable to React
  • Built-in dev server and hot reloading for quick iteration
Desktop
  • Render using Webview or - experimentally - with WGPU or Skia
  • Zero-config setup. Simply cargo-run to build your app
  • Full support for native system access without electron-esque IPC
  • Supports macOS, Linux, and Windows. Portable <3mb binaries
Mobile
  • Render using Webview or - experimentally - with WGPU or Skia
  • Support for iOS and Android
  • Significantly more performant than React Native
Liveview
  • Render apps - or just a single component - entirely on the server
  • Integrations with popular Rust frameworks like Axum and Warp
  • Extremely low-latency and ability to support 10,000+ simultaneous apps
Terminal
  • Render apps directly into your terminal, similar to ink.js
  • Powered by the familiar flexbox and CSS model of the browser
  • Built-in widgets like text input, buttons, and focus system

Why Dioxus?

There's tons of options for building apps, so why would you choose Dioxus?

Well, first and foremost, Dioxus prioritizes developer experience. This is reflected in a variety of features unique to Dioxus:

  • Autoformatting of our meta language (RSX) and accompanying VSCode extension
  • Hotreloading using an interpreter of RSX for both desktop and web
  • Emphasis on good docs - our guide is complete and our HTML elements are documented
  • Significant research in simplifying

Dioxus is also a very extensible platform.

  • Easily build new renderers by implementing a very simple optimized stack-machine
  • Build and share components and even custom elements

So... Dioxus is great, but why won't it work for me?

  • It's not fully mature yet. APIs are still shifting, things might break (though we try to avoid it)
  • You need to run in a no-std environment.
  • You don't like the React-hooks model of building UIs

Contributing

License

This project is licensed under the MIT license.

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.