---
title: "Using wasm-pack"
---

This tool was created by the Rust / Wasm Working Group for building WebAssembly applications. It supports packaging code into `npm` modules and has an accompanying [Webpack plugin](https://github.com/wasm-tool/wasm-pack-plugin) for easy integration with existing JavaScript applications. More information is given in [the `wasm-pack` documentation](https://rustwasm.github.io/docs/wasm-pack/introduction.html).

:::note
`wasm-pack` requires that you set the crate-type explicitly to include `cdylib`:

```toml
[lib]
crate-type = ["rlib", "cdylib"]
```

:::

## Install

```bash
cargo install wasm-pack
```

## Build

This command will produce a bundle in the `./pkg` directory with your app's compiled WebAssembly
along with a JavaScript wrapper which can be used to start your application.

```bash
wasm-pack build --target web
```

## Bundle

For more information on rollup.js visit this [guide](https://rollupjs.org/guide/en/#quick-start).

```bash
rollup ./main.js --format iife --file ./pkg/bundle.js
```

When using a bundler like rollup.js you can omit `--target web`.

## Serve

Feel free to use your preferred server. Here we use a simple Python server to serve the built app.

```bash
python -m http.server 8000
```

If you don't have Python installed, you can install and use the [`simple-http-server`](https://github.com/TheWaWaR/simple-http-server) crate instead.
