surma/wasmphobia

Rust

100

72 commits

updated Sep 28, 2024

See the code

README

Wasmphobia

Wasmphobia analyzes a WebAssembly file and gives you a breakdown of what contributed to the module’s size. This is only really useful when the WebAssembly binary has DWARF debugging data embedded.

Usage

You can use Wasmphobia interactively on the website or install it locally as a CLI

cargo install --git https://github.com/surma/wasmphobia

How to compile your Wasm

If you care about file size, make sure you compile your code with optimizations (like -O3 and -flto) enabled. In most languages, doing a “release” build should enable these settings for you. However, at the same time, doing a release build often strips debug information from the binary. Here’s a short list of how to do release build with debug symbols.

Rust

You can add --config "profile.release.debug=true" to your cargo invocation. If your release profile strips symbols, you will also need to disable this with --config "profile.release.strip=false". For example, to make a release build targeting WASI, you’d run:

cargo build --config "profile.release.debug=true" --config "profile.release.strip=false" --release --target wasm32-wasi

C++ / Emscripten

$(CPP) -O3 -gfull ...

Shoutouts and Credit


License Apache-2.0

surma/wasmphobia

Rust

100

72 commits

updated Sep 28, 2024

See the code

README

Wasmphobia

Wasmphobia analyzes a WebAssembly file and gives you a breakdown of what contributed to the module’s size. This is only really useful when the WebAssembly binary has DWARF debugging data embedded.

Usage

You can use Wasmphobia interactively on the website or install it locally as a CLI

cargo install --git https://github.com/surma/wasmphobia

How to compile your Wasm

If you care about file size, make sure you compile your code with optimizations (like -O3 and -flto) enabled. In most languages, doing a “release” build should enable these settings for you. However, at the same time, doing a release build often strips debug information from the binary. Here’s a short list of how to do release build with debug symbols.

Rust

You can add --config "profile.release.debug=true" to your cargo invocation. If your release profile strips symbols, you will also need to disable this with --config "profile.release.strip=false". For example, to make a release build targeting WASI, you’d run:

cargo build --config "profile.release.debug=true" --config "profile.release.strip=false" --release --target wasm32-wasi

C++ / Emscripten

$(CPP) -O3 -gfull ...

Shoutouts and Credit


License Apache-2.0

Significant stargazers

Jason Miller

13,200 followers · starred May 2024

Jovi De Croock

775 followers · starred May 2024

Ryan Christian

161 followers · starred May 2024

Max Graey

339 followers · starred May 2024