Running In A Browser
If you’re using Rust, the tutorial so far used cargo run to build and run the code as a native application.
Native applications are the primary target of the Slint framework, but it also supports WebAssembly
for demonstration purposes. This section uses the standard rust tool wasm-bindgen and
wasm-pack to run the game in the browser. Read the wasm-bindgen documentation ↗
for more about using wasm and rust.
Install wasm-pack using cargo:
cargo install wasm-packEdit the Cargo.toml file to add the dependencies.
[target.'cfg(target_arch = "wasm32")'.dependencies]wasm-bindgen = { version = "0.2" }getrandom = { version = "0.2.2", features = ["js"] }'cfg(target_arch = "wasm32")' ensures that these dependencies are only active
when compiling for the wasm32 architecture. Note that the rand dependency is now duplicated,
to enable the "wasm-bindgen" feature.
While you are editing the Cargo.toml, make one last change. To turn the binary into
a library by adding the following:
[lib]path = "src/main.rs"crate-type = ["cdylib"]This is because wasm-pack requires Rust to generate a "cdylib".
You also need to change main.rs by adding the wasm_bindgen(start)
attribute to the main function and export it with the pub keyword:
#[cfg_attr(target_arch = "wasm32", wasm_bindgen::prelude::wasm_bindgen(start))]pub fn main() { //...}Compile the program with wasm-pack build --release --target web. This
creates a pkg directory containing several files, including a .js file
named after the program name that you need to import into an HTML file.
Create a minimal index.html in the top level of the project that declares a <canvas> element for rendering and loads the generated wasm
file. The Slint runtime expects the <canvas> element to have the id id = "canvas".
(Replace memory.js with the correct file name).
<html> <body> <!-- canvas required by the Slint runtime --> <canvas id="canvas"></canvas> <script type="module"> // import the generated file. import init from "./pkg/memory.js"; init(); </script> </body></html>Unfortunately, loading ES modules isn’t allowed for files on the file system when accessed from a
file:// URL, so you can’t load the index.html. Instead, you need to serve it through a web server.
For example, using Python, by running:
python3 -m http.serverNow you can access the game at http://localhost:8000 ↗.
© 2025 SixtyFPS GmbH