Wasmrun
Wasmrun is a powerful WebAssembly runtime that simplifies development, compilation, and deployment of WebAssembly applications.

✨ Features
- 🚀 Multi-Language Support - Build WebAssembly from Rust, Go, Python, C/C++, and AssemblyScript
- 🔌 Plugin Architecture - Extensible system with built-in and external plugins
- 🔥 Live Reload - Instant development feedback with file watching
- 🌐 Zero-Config Web Server - Built-in HTTP server with WASM and web app hosting
- 📦 Smart Project Detection - Automatically detects and configures project types
- ⚡ Zero Configuration - Works out of the box with sensible defaults and automatic project detection
🚀 Installation
From Cargo (Recommended)
From Prebuilt Packages
Wasmrun is available as a DEB package for Debian-based systems.
- Download the latest
.debfile from GitHub Releases - Install the package:
# Install the downloaded DEB package
# If there are dependency issues, fix them
Wasmrun is available as an RPM package for Red Hat-based systems.
- Download the latest
.rpmfile from GitHub Releases - Install the package:
# Install the downloaded RPM package
# Or using dnf (Fedora/RHEL 8+)
Track releases on github releases or via release feed.
From Source
📖 Usage
Wasmrun supports both flag-based arguments using --path and direct positional arguments for an intuitive command line experience.
Quick Start
# Run on current directory
# Run a WebAssembly file directly
# Run a project directory
# With flags
🔧 Commands
Development Server
Start the development server with live reload:
Compilation
Compile a project to WebAssembly using the appropriate plugin:
Plugin Management
List available plugins and manage external plugins:
# List all available plugins
# Install external plugins
# Get detailed plugin information
Verification & Inspection
Verify a WASM file format and analyze structure:
Project Management
Initialize a new project:
Clean build artifacts:
Server Control
Stop any running Wasmrun server:
🏗️ Plugin Architecture
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.
Plugin Types
1. Built-in Plugins 🔧
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 |
2. External Plugins 📦
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-like Installation: Similar to
cargo install, plugins are downloaded and compiled to~/.wasmrun/ - 🔗 Dynamic Loading: Plugins are loaded as shared libraries (FFI) at runtime
- 🎯 Same Interface: External plugins use identical traits as built-in plugins
- 🔧 Auto-detection: Once installed, plugins automatically handle their supported project types
Plugin Management
# Install external plugins
# View all installed plugins
# Get detailed plugin information
# Uninstall plugins
Plugin Installation Process:
- 🔍 Discovery: Searches crates.io for the plugin
- 📦 Download: Uses
cargo installto build the plugin - 🏠 Storage: Installs to
~/.wasmrun/plugins/{plugin_name}/ - 📋 Registration: Updates wasmrun config with plugin capabilities
- ⚡ Ready: Plugin automatically handles supported projects
🛠️ Language Support
Rust (via External Plugin)
# Install the Rust plugin
# Run Rust projects
Requirements:
- Rust toolchain
wasm32-unknown-unknowntarget:rustup target add wasm32-unknown-unknown- Optional:
wasm-packfor web applications
Go (via External Plugin)
# Install the Go plugin
# Run Go projects
Requirements:
- TinyGo compiler: https://tinygo.org/
Python (via External Plugin)
# Install the Python plugin
# Run Python projects
Requirements:
- None! waspy is a pure Rust compiler that compiles Python to WebAssembly
Features:
- ✅ Python to WebAssembly compilation
- ✅ Support for functions, classes, and basic Python syntax
- ✅ Type annotations support
- ✅ No Python runtime required
AssemblyScript (via External Plugin)
# Install the AssemblyScript plugin
# Run AssemblyScript projects
Requirements:
- AssemblyScript compiler:
npm install -g asc - Node.js runtime
Package Manager Support: The plugin automatically detects and uses your preferred package manager:
npm(default)yarn(viayarn.lock)pnpm(viapnpm-lock.yaml)bun(viabun.lockb)
C/C++ (Built-in)
# Works out of the box - no plugin installation needed
Requirements:
- Emscripten SDK: https://emscripten.org/
🔍 Project Detection
Wasmrun automatically detects your project type based on:
- File extensions (
.rs,.go,.py,.c,.cpp,.ts) - Configuration files (
Cargo.toml,go.mod,Makefile,package.json) - Entry point files (
main.rs,main.go,main.py,main.c, etc.)
You can override detection with the --language flag:
🚨 Troubleshooting
Plugin Issues
"Plugin not available"
# For built-in language support:
# For external plugins, install them first:
# View all available plugins:
🚨 Open an issue and let us know about it.
"Plugin dependencies missing"
# Install missing tools for external plugins:
# Check plugin dependencies:
"Wrong plugin selected"
# Force a specific plugin
External Plugin Installation
"Plugin not found during installation"
# Make sure you have the correct plugin name
# Check available external plugins
Common Issues
"Port is already in use"
"No entry point found"
- Ensure your WASM has
main(),_start(), or exported functions - Use
wasmrun inspectto see available exports - Check plugin-specific entry file requirements
"wasm-bindgen module detected"
- Use the
.jsfile instead of the.wasmfile directly (wasmrust plugin) - Run
wasmrun project-dirinstead of individual files
📼 Talks/Demos
A 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 🙌
🤝 Contributing
We welcome contributions! Please see CONTRIBUTING.md for detailed guidelines, including how to create and maintain plugins.
📄 License
🙏 Credits
Wasmrun is built with love using:
- tiny_http - Lightweight HTTP server
- clap - Command line argument parsing
- notify - File system watching for live reload
- wasm-bindgen - Web integration
- Font used for logo is Pixeled by OmegaPC777.
- And the amazing Rust and WebAssembly communities ❤️
Made with ❤️ for the WebAssembly community
⭐ If you find Wasmrun useful, please consider starring the repository!