The Wado Programming Language
See the codeWado is a statically typed, garbage-collected, and effectful language that targets only the WebAssembly Component Model and WASI 0.3+. It is designed for embedding small, type-safe Wasm applications where performance and binary size matter.
You can use Wado to build CLI applications and HTTP services, or try it directly in your browser.
Gale, an ANTLR4-compatible parser generator written in Wado, shows what Wado can achieve in performance and binary size. In our SQL parsing benchmark, its generated parser is much faster than ANTLR4's Java parser and slightly faster than a hand-written Rust parser.
Visit wado-lang.org for the documentation, playground, and blog. The design philosophy explains the reasoning behind the language.
This is a complete Wado program that prints "Hello, world!" to stdout:
#!/usr/bin/env -S wado run
use { println, Stdout } from "core:cli";
export fn run() with Stdout {
println("Hello, world!");
}
The function signature makes the program's role and capabilities explicit:
run() is the entry point of the wasi:cli/command world.with Stdout declares that the program needs the wasi:cli/stdout capability.Save it as hello.wado and run it with the Wado CLI:
wado run hello.wado # compile and run it
wado compile -o hello.wasm hello.wado # compile to Wasm
wado compile -o hello.wat hello.wado # or to WAT
Try Wado in your browser without installing anything. The playground runs the compiler as Wasm, compiles your code, and executes the result entirely in your browser.
Wado is experimental. The core language is implemented. You can build and run CLI applications and HTTP services today using the Wado CLI. Wado HTTP services have also been tested on Cloudflare Workers, and the playground provides compilation, execution, and language services entirely in the browser.
Wado runs in browsers today through transpilation. Its long-term vision is to run directly on native browser support for the WebAssembly Component Model. Other platform developments central to that vision include WASI 1.0 and GC across component boundaries.
Prebuilt binaries are published on GitHub Releases for:
x86_64, aarch64) — tar.gzarm64) — tar.gzx86_64, aarch64) — zipEach archive contains the wado binary plus LICENSE and README.md.
On macOS and Linux, choose one of the following methods. Make sure ~/bin is in your PATH before running wado. We provide explicit commands instead of an installer script so you can review each step before running it.
gh)Download the latest release and verify its integrity and signed build provenance attestation:
(
set -e
cd "$(mktemp -d)"
ASSET="wado-$(uname -s | tr A-Z a-z)-$(uname -m).tar.gz"
gh release download --repo wado-lang/wado --pattern "$ASSET"
gh attestation verify --repo wado-lang/wado "$ASSET"
tar xzf "$ASSET"
mkdir -p ~/bin
install -m 755 "${ASSET%.tar.gz}/wado" ~/bin/wado
~/bin/wado --version
)
This method does not require gh. It checks the archive against the published checksum, but does not verify build provenance.
(
set -e
cd "$(mktemp -d)"
BASE=https://github.com/wado-lang/wado/releases/latest/download
ASSET="wado-$(uname -s | tr A-Z a-z)-$(uname -m).tar.gz"
curl -fsSLO "$BASE/$ASSET"
curl -fsSLO "$BASE/SHA256SUMS.txt"
awk -v asset="$ASSET" '$2 == asset { print; found = 1 } END { exit !found }' \
SHA256SUMS.txt > CHECKSUM.txt
if command -v shasum >/dev/null; then
shasum -a 256 -c CHECKSUM.txt
else
sha256sum -c CHECKSUM.txt
fi
tar xzf "$ASSET"
mkdir -p ~/bin
install -m 755 "${ASSET%.tar.gz}/wado" ~/bin/wado
~/bin/wado --version
)
Both methods stop on failure and leave the downloaded files in a temporary directory.
Download the matching wado-windows-*.zip and either verify its provenance with gh attestation verify --repo wado-lang/wado <archive> or verify its checksum against SHA256SUMS.txt. Extract the archive and place wado.exe in a directory on your PATH.
If you have a Rust toolchain installed:
cargo install --git https://github.com/wado-lang/wado wado-cli
This builds the current main branch from source.
wado compile FILE - Compiles Wado source to Wasm/WATwado run FILE - Runs Wado source using Wasmtimewado test FILE - Runs Wado tests using Wasmtimewado doc FILE - Shows the documentation for a Wado source filewado format FILE - Formats a Wado source filewado dump FILE - Dumps the internal representation of a Wado source fileThe main documentation site is wado-lang.org. You can also read the documentation in this repository:
The following sections cover working on Wado itself, releasing it, and tracking its performance.
This project uses mise to manage dev tools. Install mise first:
curl -fsSL https://mise.run | sh
# Then add to your shell profile:
# eval "$(~/.local/bin/mise activate bash)" # for bash
# eval "$(~/.local/bin/mise activate zsh)" # for zsh
Then install project tools:
mise trust # trusts the mise.toml config (first time only)
mise run on-task-started # installs all project tools
mise tasks # lists available tasks
The wado-vscode/ directory contains a VS Code extension for syntax highlighting. It is not published to the marketplace, but you can install it locally for development:
mise run install-wado-vscode-dev # install extension to ~/.vscode via symlink
mise run clean-wado-vscode-dev # uninstall it from ~/.vscode
mise run update-wado-vscode-grammar # regenerate syntax files after changing syntax.rs
See wado-vscode/README.md for more details.
mise run on-task-done # format, clippy-fix, update resources, test
Releases are made roughly weekly by merging a release PR managed by tagpr.
How it works:
main opens a Release PR that bumps [workspace.package].version in both Cargo.toml and wado.toml (kept in lockstep so the CLI and the published Wado packages ship one version), regenerates Cargo.lock, and updates CHANGELOG.md from PRs merged since the previous tag.v<next>, which triggers .github/workflows/release.yml.tagpr:minor or tagpr:major label to the Release PR to override it.tagpr is the single version manager: the workspace version is bumped only by the Release PR, never by hand. Do not edit [workspace.package].version in Cargo.toml or wado.toml directly.
Per-commit performance tracking is published to GitHub Pages. Every push to main records runtime and binary size metrics.
-O1/-O2/-O3).wasm output size for representative programs (compiled at -Os)For comparison results against other programming languages:
The compiler toolchain is developed entirely by coding agents under human direction:
AI-guided optimization is a technique where you show generated code to a coding agent and have it identify optimization opportunities. The agent's output is non-deterministic, but the insights can be turned into deterministic compiler rules.
Wado's optimizer is developed using this approach:
Agent finds pattern → Human reviews → Deterministic optimization rule added
Show the generated WAT to an agent and ask it to spot inefficiencies. Review the suggestions, then implement them as permanent optimization passes.
Copyright (c) 2026, FUJI Goro (a.k.a. gfx). Some rights reserved.
MIT
See LICENSE for details.
Rust
89.8%
C
5.8%
ANTLR
2.4%
The Wado Programming Language
See the codeWado is a statically typed, garbage-collected, and effectful language that targets only the WebAssembly Component Model and WASI 0.3+. It is designed for embedding small, type-safe Wasm applications where performance and binary size matter.
You can use Wado to build CLI applications and HTTP services, or try it directly in your browser.
Gale, an ANTLR4-compatible parser generator written in Wado, shows what Wado can achieve in performance and binary size. In our SQL parsing benchmark, its generated parser is much faster than ANTLR4's Java parser and slightly faster than a hand-written Rust parser.
Visit wado-lang.org for the documentation, playground, and blog. The design philosophy explains the reasoning behind the language.
This is a complete Wado program that prints "Hello, world!" to stdout:
#!/usr/bin/env -S wado run
use { println, Stdout } from "core:cli";
export fn run() with Stdout {
println("Hello, world!");
}
The function signature makes the program's role and capabilities explicit:
run() is the entry point of the wasi:cli/command world.with Stdout declares that the program needs the wasi:cli/stdout capability.Save it as hello.wado and run it with the Wado CLI:
wado run hello.wado # compile and run it
wado compile -o hello.wasm hello.wado # compile to Wasm
wado compile -o hello.wat hello.wado # or to WAT
Try Wado in your browser without installing anything. The playground runs the compiler as Wasm, compiles your code, and executes the result entirely in your browser.
Wado is experimental. The core language is implemented. You can build and run CLI applications and HTTP services today using the Wado CLI. Wado HTTP services have also been tested on Cloudflare Workers, and the playground provides compilation, execution, and language services entirely in the browser.
Wado runs in browsers today through transpilation. Its long-term vision is to run directly on native browser support for the WebAssembly Component Model. Other platform developments central to that vision include WASI 1.0 and GC across component boundaries.
Prebuilt binaries are published on GitHub Releases for:
x86_64, aarch64) — tar.gzarm64) — tar.gzx86_64, aarch64) — zipEach archive contains the wado binary plus LICENSE and README.md.
On macOS and Linux, choose one of the following methods. Make sure ~/bin is in your PATH before running wado. We provide explicit commands instead of an installer script so you can review each step before running it.
gh)Download the latest release and verify its integrity and signed build provenance attestation:
(
set -e
cd "$(mktemp -d)"
ASSET="wado-$(uname -s | tr A-Z a-z)-$(uname -m).tar.gz"
gh release download --repo wado-lang/wado --pattern "$ASSET"
gh attestation verify --repo wado-lang/wado "$ASSET"
tar xzf "$ASSET"
mkdir -p ~/bin
install -m 755 "${ASSET%.tar.gz}/wado" ~/bin/wado
~/bin/wado --version
)
This method does not require gh. It checks the archive against the published checksum, but does not verify build provenance.
(
set -e
cd "$(mktemp -d)"
BASE=https://github.com/wado-lang/wado/releases/latest/download
ASSET="wado-$(uname -s | tr A-Z a-z)-$(uname -m).tar.gz"
curl -fsSLO "$BASE/$ASSET"
curl -fsSLO "$BASE/SHA256SUMS.txt"
awk -v asset="$ASSET" '$2 == asset { print; found = 1 } END { exit !found }' \
SHA256SUMS.txt > CHECKSUM.txt
if command -v shasum >/dev/null; then
shasum -a 256 -c CHECKSUM.txt
else
sha256sum -c CHECKSUM.txt
fi
tar xzf "$ASSET"
mkdir -p ~/bin
install -m 755 "${ASSET%.tar.gz}/wado" ~/bin/wado
~/bin/wado --version
)
Both methods stop on failure and leave the downloaded files in a temporary directory.
Download the matching wado-windows-*.zip and either verify its provenance with gh attestation verify --repo wado-lang/wado <archive> or verify its checksum against SHA256SUMS.txt. Extract the archive and place wado.exe in a directory on your PATH.
If you have a Rust toolchain installed:
cargo install --git https://github.com/wado-lang/wado wado-cli
This builds the current main branch from source.
wado compile FILE - Compiles Wado source to Wasm/WATwado run FILE - Runs Wado source using Wasmtimewado test FILE - Runs Wado tests using Wasmtimewado doc FILE - Shows the documentation for a Wado source filewado format FILE - Formats a Wado source filewado dump FILE - Dumps the internal representation of a Wado source fileThe main documentation site is wado-lang.org. You can also read the documentation in this repository:
The following sections cover working on Wado itself, releasing it, and tracking its performance.
This project uses mise to manage dev tools. Install mise first:
curl -fsSL https://mise.run | sh
# Then add to your shell profile:
# eval "$(~/.local/bin/mise activate bash)" # for bash
# eval "$(~/.local/bin/mise activate zsh)" # for zsh
Then install project tools:
mise trust # trusts the mise.toml config (first time only)
mise run on-task-started # installs all project tools
mise tasks # lists available tasks
The wado-vscode/ directory contains a VS Code extension for syntax highlighting. It is not published to the marketplace, but you can install it locally for development:
mise run install-wado-vscode-dev # install extension to ~/.vscode via symlink
mise run clean-wado-vscode-dev # uninstall it from ~/.vscode
mise run update-wado-vscode-grammar # regenerate syntax files after changing syntax.rs
See wado-vscode/README.md for more details.
mise run on-task-done # format, clippy-fix, update resources, test
Releases are made roughly weekly by merging a release PR managed by tagpr.
How it works:
main opens a Release PR that bumps [workspace.package].version in both Cargo.toml and wado.toml (kept in lockstep so the CLI and the published Wado packages ship one version), regenerates Cargo.lock, and updates CHANGELOG.md from PRs merged since the previous tag.v<next>, which triggers .github/workflows/release.yml.tagpr:minor or tagpr:major label to the Release PR to override it.tagpr is the single version manager: the workspace version is bumped only by the Release PR, never by hand. Do not edit [workspace.package].version in Cargo.toml or wado.toml directly.
Per-commit performance tracking is published to GitHub Pages. Every push to main records runtime and binary size metrics.
-O1/-O2/-O3).wasm output size for representative programs (compiled at -Os)For comparison results against other programming languages:
The compiler toolchain is developed entirely by coding agents under human direction:
AI-guided optimization is a technique where you show generated code to a coding agent and have it identify optimization opportunities. The agent's output is non-deterministic, but the insights can be turned into deterministic compiler rules.
Wado's optimizer is developed using this approach:
Agent finds pattern → Human reviews → Deterministic optimization rule added
Show the generated WAT to an agent and ask it to spot inefficiencies. Review the suggestions, then implement them as permanent optimization passes.
Copyright (c) 2026, FUJI Goro (a.k.a. gfx). Some rights reserved.
MIT
See LICENSE for details.
Rust
89.8%
C
5.8%
ANTLR
2.4%