Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

w9s

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.

w9s demo

Prerequisites

  • Java 25+
  • Maven 3.9+
  • Rust with the wasm32-wasip1 target (rustup target add wasm32-wasip1)
  • GraalVM 25+ (optional, for native image builds)

Build

Java (shaded JAR)

mvn package

The Rust demangler WASM module at src/main/wasm/rustc-demangle/ is compiled automatically as part of the Maven build.

Native Image

mvn package -Pnative

Run

Java

java -jar target/w9s-999-SNAPSHOT.jar <file.wasm>

Native Image

./target/w9s <file.wasm>

Both .wasm (binary) and .wat (text) files are supported.

Usage

Navigation

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

Section-specific keys

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

Function view (Code → Enter)

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

Memory editor (Exports/Memories → Enter on memory)

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

Search & filter

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.

Notes

Rust-mangled function names are automatically demangled using rustc-demangle compiled to WebAssembly and executed via Chicory.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages