# web-view examples ## minimal Just displays the wikipedia homepage. ## pageload Loads a custom url-encoded html page (hello world). ## timer Uses two-way communication with the web app to render the state of a timer and reset the timer on the click of a button. Shows basic usage of `userdata` and shared state between threads. ## todo Uses picodom.js to render a basic Todo App. Demonstrates how to embed the frontend into the Rust executable and how to use `userdata` to store app state. ## todo-purescript This is a port of the todo example to PureScript. To be able to build this, first install purescript and bundling tools: ``` $ npm install -g purescript pulp psc-package parcel-bundler inline-assets ``` Next, install the dependencies: ``` $ psc-package update ``` Now build the frontend and bundle it into `dist/bundle.html`: ``` $ npm run prod ``` Finally use cargo to build the rust executable, which includes `bundle.html` using `include_str!()`. ## elm-counter (This assumes you're using Elm 0.19.0) ``` $ npm install -g elm $ cd elm-counter $ elm make --optimize src/Main.elm $ cargo run --example elm-counter ``` ## actix Uses [rust-embed](https://github.com/pyros2097/rust-embed) and [actix-web](https://github.com/actix/actix-web) to embed files directly in binary and serve them to web-view. Unfortunately if you run this with the EdgeHTML backend (`edge` feature) it won't work by default due to webview sandbox restrictions. In order for this to run on EdgeHTML, you need to run `CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.Win32WebViewHost_cw5n1h2txyewy"` from your administrator command prompt only once and everything works. You can make this step for example as a part of your apps installer. ## todo-yew Based of the code of the actix example (see above) this bundles/serves the yew [todo example](https://github.com/yewstack/yew/tree/master/examples/todomvc) app. That makes it the most `rust`y example and still only has a ~4mb binary size (90% of which is actix actually, see this example repo using hyper to reduce it to 2mb: https://github.com/Extrawurst/rust-webview-todomvc-yew). Find the build instructions for the todomvc wasm source in `example/todo-yew/Makefile`. ## todo-elm (This assumes you're using Elm 0.19.0). This example is functionally equivalent to `todo` and `todo-purescript` examples, but implemented in Elm. It showcases how to communicate from Elm to Rust and back through Elm's ports. You can run this example as is with `cargo run --example todo-elm`. If you want to edit the example's sources, you will first need to install Elm as described [here](https://guide.elm-lang.org/install/elm.html). Then run: ``` elm make --optimize --output=elm.js src/Main.elm cargo run --example todo-elm ``` The `--output=elm.js` parameter is very important, otherwise `elm make` would output `index.html`. We include `elm.js` and js glue code (for Elm's ports) in `todo-elm.rs`, so we cannot use `index.html`. --- Note: For some reason (at least on Windows), if I try to `cargo run` the examples directly, they don't show the window, but it works with `cargo build --example && target\debug\examples\`