8 releases
0.2.1 | Mar 10, 2021 |
---|---|
0.2.0 | Feb 28, 2021 |
0.1.5 | Feb 15, 2021 |
#968 in WebAssembly
Used in r-tool
195KB
4K
SLoC
cargo html
create self-contained HTML programs
Want to run basic console programs in the browser?
Too lazy to configure CORS properly to fetch/share WASM?
Hate firing up a webserver when you'd rather just double click an HTML file?
Easily confused by advanced concepts such as "I have multiple files"?
cargo html
solves all of this, by generating .html files which embed and encode their javascript, WASM, and WASI implementations directly into said HTML. No CORS, no --allow-file-access-from-files
flags, no sidecar files, 100% self contained.
Quickstart
# install
cargo install cargo-html
# create a project
cargo new hello-world
cd hello-world
# build a project
cargo html
# view/run said project in the browser
start "" target/cargo-html/debug/hello-world.html
Examples
rust-mini-games
- as mentioned on HN: https://news.ycombinator.com/item?id=26089539
- upstream: https://github.com/Syn-Nine/rust-mini-games
- patches: https://github.com/MaulingMonkey/rust-mini-games
Game | Issues |
---|---|
asylum | |
guess | |
knights | #6 File I/O not implemented (panic on exit) |
lord | #7 Colors not supported (some terminal escape garbage) |
rps | |
tictactoe |
To reproduce the gh-pages
of my fork of that repository from scratch:
# init
cargo install cargo-html
git clone --branch cargo-html-demo https://github.com/MaulingMonkey/rust-mini-games
cd rust-mini-games
# build
cargo html --release
robocopy /S target/cargo-html/release . *.html
# create branch
git checkout -b gh-pages
git add -A .
git commit -m "Updated examples"
Portability: Generated HTML
Requires:
- wasm
- async-functions
- bigint
- promises
- textencoder
- General awesomeness.
Browser | Supported Version |
---|---|
Chrome | ✅ 67+ |
Chrome for Android | ✅ 88+ |
Firefox | ✅ 68+ |
Firefox for Android | ✔️ 85+ |
Opera | ✔️ 54+ |
Opera Mobile | ✔️ 59+ |
Opera Mini | ❌ None (missing WASM, Async Functions, TextEncoder, BigInt) |
Safari | ✔️ 14+ |
iOS Safari | ✔️ 14.4+ |
Edge | ✅ 88+ |
IE | ❌ None (missing WASM, Async Functions, TextEncoder, BigInt) |
Android Browser | ✔️ 81+ |
UC Browser for Android | ❌ None (missing WASM, BigInt) |
Samsung Internet | ✅ 9.2+ |
QQ Browser | ❌ None (missing BigInt) |
Baidu Browser | ❌ None (missing WASM, Async Functions, BigInt) |
KaiOS Browser | ❌ None (missing WASM, Async Functions, BigInt) |
? | Legend |
---|---|
✅ | Tested |
✔️ | Should work, but untested, so probably broken - file issues! |
❌ | Broken (Browsers could probably be fixed via polyfills and different codegen?) |
Portability: Command Line
Requires:
- rustup
- cargo (typically installed via rustup)
- Prebuilt wasm-bindgen binaries (will auto-download appropriate versions.)
- Prebuilt wasm-opt binaries (will auto-download.)
- wasm-pack for
wasm_bindgen
support (will be auto-installed from source.) - cargo-web for
stdweb
support (will be auto-installed from source.) - General awesomeness.
Build OS | x86_64 | x86 | AArch64 | ARM | Other |
---|---|---|---|---|---|
Windows | ✅ | ❌BO | ❌BO | ❌BO | ❌BO [...] |
Linux | ✅ | ❌BO | ❌BO | ❌BO | ❌BO [...] |
OS X | ✔️ | ❌BO | ❌BO | ❌BO | ❌BO [...] |
? | Legend |
---|---|
✅ | Tested |
✔️ | Should work |
❌B | Broken (wasm-bindgen binaries unavailable, can't bind JS for WASM) |
❌O | Broken (wasm-opt binaries unavailable, can't asyncify WASM) |
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~14–25MB
~401K SLoC