| Crates.io | wasmrun |
| lib.rs | wasmrun |
| version | 0.15.0 |
| created_at | 2025-06-28 09:43:52.699843+00 |
| updated_at | 2025-12-20 20:56:59.258822+00 |
| description | A WebAssembly Runtime |
| homepage | |
| repository | https://github.com/anistark/wasmrun |
| max_upload_size | |
| id | 1729688 |
| size | 8,044,549 |
Wasmrun is a powerful WebAssembly runtime that simplifies development, compilation, and deployment of WebAssembly applications.

cargo install wasmrun
Wasmrun is available as a DEB package for Debian-based systems.
.deb file from GitHub Releases# Install the downloaded DEB package
sudo apt install wasmrun_*.deb
# If there are dependency issues, fix them
sudo apt install -f
Wasmrun is available as an RPM package for Red Hat-based systems.
.rpm file from GitHub Releases# Install the downloaded RPM package
sudo rpm -i wasmrun-*.rpm
# Or using dnf (Fedora/RHEL 8+)
sudo dnf install wasmrun-*.rpm
Track releases on github releases or via release feed.
git clone https://github.com/anistark/wasmrun.git
cd wasmrun
cargo install --path .
Wasmrun supports both flag-based arguments using --path and direct positional arguments for an intuitive command line experience.
# Run on current directory
wasmrun
# Run a WebAssembly file with dev server (default)
wasmrun myfile.wasm
# Run a project directory
wasmrun ./my-wasm-project
# With flags
wasmrun --path ./path/to/your/file.wasm
wasmrun --path ./my-wasm-project
# Run a WASM file natively with the interpreter
wasmrun exec myfile.wasm
# Run a WASM file with arguments
wasmrun exec myfile.wasm arg1 arg2 arg3
Start the development server with live reload:
wasmrun run ./my-project --watch
wasmrun run ./my-project --port 3000 --language rust
Compile a project to WebAssembly using the appropriate plugin:
wasmrun compile ./my-project
wasmrun compile ./my-project --output ./build --optimization release
wasmrun compile ./my-project --optimization size --verbose
List available plugins and manage external plugins:
# List all available plugins
wasmrun plugin list
# Install external plugins
wasmrun plugin install wasmrust
wasmrun plugin install wasmgo
# Get detailed plugin information
wasmrun plugin info wasmrust
wasmrun plugin info wasmgo
Verify a WASM file format and analyze structure:
wasmrun verify ./file.wasm
wasmrun verify ./file.wasm --detailed
wasmrun inspect ./file.wasm
Initialize a new project:
wasmrun init my-app --template rust
wasmrun init my-app --template go --directory ./projects/
Clean build artifacts:
wasmrun clean ./my-project
Stop any running Wasmrun server:
wasmrun stop
Run compiled WASM files directly using the native interpreter with full argument passing and function selection support (useful for CLI tools, test binaries, etc):
# Execute WASM file natively (runs entry point: main, _start, or start)
wasmrun exec myapp.wasm
# Execute with arguments
wasmrun exec myapp.wasm arg1 arg2 arg3
# Call a specific exported function
wasmrun exec mylib.wasm -c add 5 3
wasmrun exec mylib.wasm --call multiply 4 6
# Call a function with arguments
wasmrun exec myapp.wasm -c process --verbose output.txt
# Stdout goes directly to terminal
wasmrun exec cli-tool.wasm --help
Default Behavior: Running WASM files with wasmrun file.wasm (no subcommand) starts the dev server on port 8420. Use the exec subcommand to bypass the server and execute the WASM module directly.
Argument Passing: The exec subcommand fully supports passing arguments to your WASM program. Arguments are captured and made available to the program through WASI syscalls.
Function Selection: Use the -c or --call flag to invoke a specific exported function. If not specified, the runtime automatically detects and calls the entry point function (in order: start section, main, or _start).
Compatibility Note: Native execution currently works best with pure WASM modules (e.g., compiled from Go with TinyGo). Modules compiled with wasm-bindgen (JavaScript interop framework used by Rust's wasm-pack) are not currently supported in native mode, as they require JavaScript runtime features. For wasm-bindgen projects, use the dev server or run the project directory instead of the individual .wasm file.
The native WASM executor is a complete interpreter supporting most WASM features:
✅ Fully Supported:
⚠️ Current Limitations:
Language Runtime Requirements:
Recommended Use Cases:
--no-entry flagWorkarounds:
wasm32-wasi target and avoid wasm-bindgen-target wasiwasmrun dev server (runs in browser environment)Examples:
# ✅ Works perfectly - pure WASM
wasmrun exec pure_math.wasm -c fibonacci 10
# ✅ Works well - simple Rust/Go functions
wasmrun exec simple.wasm -c add 5 3
# ⚠️ May fail - complex Rust with panic handling
wasmrun exec complex.wasm -c process_data
# ✅ Alternative - use dev server for complex code
wasmrun ./my-rust-project
Wasmrun's modular plugin architecture enables seamless integration of different programming languages and compilation toolchains into a unified development experience. Here's a detailed guide on wasmrun plugin architecture.
Built-in plugins are compiled directly into Wasmrun and provide core language support:
| Plugin | Language | Compiler | Status | Capabilities |
|---|---|---|---|---|
| C/C++ | C, C++ | Emscripten | ✅ Stable | Full WASM + Web Apps + Makefiles |
External plugins are distributed via crates.io and installed dynamically to ~/.wasmrun/:
| Plugin | Language | Compiler | Installation | Capabilities |
|---|---|---|---|---|
| wasmasc | AssemblyScript | asc |
wasmrun plugin install wasmasc |
WASM + Optimization + npm/yarn/pnpm/bun |
| wasmrust | Rust | rustc + wasm-pack |
wasmrun plugin install wasmrust |
Full WASM + Web Apps + Optimization |
| wasmgo | Go | TinyGo | wasmrun plugin install wasmgo |
WASM + Optimization + Package Support |
| waspy | Python | waspy | wasmrun plugin install waspy |
WASM + Python-to-WASM Compilation |
How External Plugins Work:
cargo install, plugins are downloaded and compiled to ~/.wasmrun/# Install external plugins
wasmrun plugin install wasmrust # Rust plugin
wasmrun plugin install wasmgo # Go plugin
wasmrun plugin install waspy # Python plugin
wasmrun plugin install wasmasc # AssemblyScript plugin
# View all installed plugins
wasmrun plugin list
# Get detailed plugin information
wasmrun plugin info <plugin-name>
# Uninstall plugins
wasmrun plugin uninstall <plugin-name>
Plugin Installation Process:
cargo install to build the plugin~/.wasmrun/plugins/{plugin_name}/# Install the Rust plugin
wasmrun plugin install wasmrust
# Run Rust projects
wasmrun ./my-rust-wasm-project
Requirements:
wasm32-unknown-unknown target: rustup target add wasm32-unknown-unknownwasm-pack for web applications# Install the Go plugin
wasmrun plugin install wasmgo
# Run Go projects
wasmrun ./my-go-wasm-project
Requirements:
# Install the Python plugin
wasmrun plugin install waspy
# Run Python projects
wasmrun ./my-python-wasm-project
Requirements:
Features:
# Install the AssemblyScript plugin
wasmrun plugin install wasmasc
# Run AssemblyScript projects
wasmrun ./my-assemblyscript-project
Requirements:
npm install -g ascPackage Manager Support: The plugin automatically detects and uses your preferred package manager:
npm (default)yarn (via yarn.lock)pnpm (via pnpm-lock.yaml)bun (via bun.lockb)# Works out of the box - no plugin installation needed
wasmrun ./my-c-project
Requirements:
Wasmrun automatically detects your project type based on:
.rs, .go, .py, .c, .cpp, .ts)Cargo.toml, go.mod, Makefile, package.json)main.rs, main.go, main.py, main.c, etc.)You can override detection with the --language flag:
wasmrun --language rust ./my-project
wasmrun --language go ./my-project
wasmrun --language python ./my-project
wasmrun --language asc ./my-project
"Plugin not available"
# For built-in language support:
wasmrun --language c # C/C++ (built-in)
# For external plugins, install them first:
wasmrun plugin install wasmrust # Rust plugin
wasmrun plugin install wasmgo # Go plugin
wasmrun plugin install waspy # Python plugin
wasmrun plugin install wasmasc # AssemblyScript plugin
# View all available plugins:
wasmrun plugin list
🚨 Open an issue and let us know about it.
"Plugin dependencies missing"
# Install missing tools for external plugins:
rustup target add wasm32-unknown-unknown # For wasmrust plugin
go install tinygo.org/x/tinygo@latest # For wasmgo plugin
# Check plugin dependencies:
wasmrun plugin info wasmrust # Shows required dependencies
wasmrun plugin info waspy # Should show no dependencies
"Wrong plugin selected"
# Force a specific plugin
wasmrun --language rust
wasmrun --language go
wasmrun --language python
"Plugin not found during installation"
# Make sure you have the correct plugin name
wasmrun plugin install wasmrust # For Rust support
wasmrun plugin install wasmgo # For Go support
wasmrun plugin install waspy # For Python support
# Check available external plugins
wasmrun plugin list --external
"Port is already in use"
wasmrun stop # Stop existing server
wasmrun --port 3001 # Use different port
"No entry point found"
main(), _start(), or exported functionswasmrun inspect to see available exports"wasm-bindgen module detected" / "Native execution fails on Rust WASM files"
wasmrun ./my-rust-project (dev server).js file if available (wasmrust plugin output)wasmrun exec with wasm-bindgen compiled modulesA list of wasmrun related talks (latest first): ✨
| When | What | Where | Who |
|---|---|---|---|
| Oct 18, 2025 | Bringing Python to WebAssembly | PyCon Thailand 2025, Bangkok | Farhaan, Ani |
| Sept 20, 2025 | Your Next Server Might Be a Browser | IndiaFOSS 2025, Bengaluru | Ani |
| Sept 13, 2025 | Compiling Python to WASM | PyCon India 2025, Bengaluru | Farhaan, Ani |
| July 16, 2025 | WASM and Python: The Future of Serverless Computing | EuroPython 2025, Prague, Czech | Farhaan, Ani |
| May 24, 2025 | WASM and Python | BangPypers Meetup | Farhaan, Ani |
If you've talked about wasmrun at a conference, podcast, virtual or local meetup, feel free to add to this list 🙌
We welcome contributions! Please see CONTRIBUTING.md for detailed guidelines, including how to create and maintain plugins.
Wasmrun is built with love using:
Made with ❤️ for the WebAssembly community
⭐ If you find Wasmrun useful, please consider starring the repository!