# Compiling to webassembly At this stage RustPython only has preliminary support for web assembly. The instructions here are intended for developers or those wishing to run a toy example. ## Setup To get started, install [wasm-pack](https://rustwasm.github.io/wasm-pack/installer/) and `npm`. ([wasm-bindgen](https://rustwasm.github.io/wasm-bindgen/whirlwind-tour/basic-usage.html) should be installed by `wasm-pack`. if not, install it yourself) ## Build Move into the `wasm` directory. This directory contains a library crate for interop with python to rust to js and back in `wasm/lib`, the demo website found at https://rustpython.github.io/demo in `wasm/demo`, and an example of how to use the crate as a library in one's own JS app in `wasm/example`. ```sh cd wasm ``` Go to the demo directory. This is the best way of seeing the changes made to either the library or the JS demo, as the `rustpython_wasm` module is set to the global JS variable `rp` on the website. ```sh cd demo ``` Now, start the webpack development server. It'll compile the crate and then the demo app. This will likely take a long time, both the wasm-pack portion and the webpack portion (from after it says "Your crate has been correctly compiled"), so be patient. ```sh npm run dev ``` You can now open the webpage on https://localhost:8080 and Python code in either the text box or browser devtools with: ```js rp.pyEval( ` print(js_vars['a'] * 9) `, { vars: { a: 9 } } ); ``` Alternatively, you can run `npm run build` to build the app once, without watching for changes, or `npm run dist` to build the app in release mode, both for the crate and webpack.