EXPERIMENT: I spearheaded this project mostly for fun. If anyone wants to bring it to the next level, please get in touch!
Terminal UI for inspecting WebAssembly modules.
- Java 25+
- Maven 3.9+
- Rust with the
wasm32-wasip1target (rustup target add wasm32-wasip1) - GraalVM 25+ (optional, for native image builds)
mvn packageThe Rust demangler WASM module at src/main/wasm/rustc-demangle/ is compiled automatically as part of the Maven build.
mvn package -Pnativejava -jar target/w9s-999-SNAPSHOT.jar <file.wasm>./target/w9s <file.wasm>Both .wasm (binary) and .wat (text) files are supported.
| Key | Action |
|---|---|
↑/↓ |
Navigate / scroll |
→ / Enter |
Drill into section details |
ESC / ← |
Go back |
PgUp/PgDn |
Page up / down |
Home/End |
Jump to top / bottom |
/ |
Search / filter |
q |
Quit |
| Key | View | Action |
|---|---|---|
Enter |
Code | Open function hex/WAT view |
Enter |
Functions | Jump to Code section |
Enter |
Imports | Jump to Type definition |
Enter |
Exports | View / enter sub-view |
Enter |
Data | View hex dump |
r |
Exports | Run exported function |
e |
Globals | Edit mutable global value |
| Key | Action |
|---|---|
Enter |
Toggle hex dump / WAT view |
/ |
Search in content |
n / N |
Next / previous match |
↑/↓ |
Scroll line by line |
PgUp/PgDn |
Page up / down |
| Key | Action |
|---|---|
g |
Go to address |
w |
Write string at address |
e |
Write typed value (i32/i64/f32/f64) at address |
Ctrl+T |
Toggle null-termination (in write-string mode) |
↑/↓ |
Scroll memory |
Enter |
Confirm input |
ESC |
Cancel input / exit |
Press / in any detail view to filter rows. The filter matches on index numbers and, in views that display names (Functions, Code, Exports, Imports), also matches on names (case-insensitive substring).
In function hex/WAT views, / performs a content search. Use n/N to navigate matches.
Rust-mangled function names are automatically demangled using rustc-demangle compiled to WebAssembly and executed via Chicory.