Skip to content

Repository files navigation

Wave programming language logo

Wave

A systems programming language for explicit native software.

Direct control, predictable code generation, and practical interoperability from hosted applications to freestanding systems.

Website · Documentation · Releases · Community · Sponsor

Build status Latest release Sponsor Wave on OpenCollective

Why Wave?

Wave is built for software where the machine matters. It combines familiar structured programming with explicit low-level facilities and native target control.

  • Native by design. Compile to executables, objects, assembly, LLVM IR, or bitcode.
  • Low-level when needed. Use pointers, C ABI boundaries, inline assembly, and freestanding targets when system contracts must stay visible.
  • Structured language features. Build with functions, generics, structs, enums, proto, arrays, and explicit mutable or immutable bindings.
  • Cross-target compilation. Generate code for x86-64, AArch64, and RISC-V 64 from supported compiler hosts.
  • Tool-friendly interfaces. Query targets and compiler capabilities in human-readable or JSON form for build tools and editors.

Wave is under active pre-beta development. Syntax and toolchain contracts are being stabilized and may still change between releases.

A first Wave program

fun main() {
    let language: str = "Wave";
    var count: i32 = 1;

    println("Hello from {} #{}", language, count);
}

Save this as main.wave, then run it directly:

wavec run main.wave

Install

Linux and macOS:

curl -fsSL https://wave-lang.dev/install.sh | bash -s -- latest

Windows PowerShell:

irm https://wave-lang.dev/install.ps1 -OutFile install.ps1
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Latest

See the installation guide for platform requirements and release selection.

Use wavec

# Check without producing a binary.
wavec check main.wave

# Build and run.
wavec run main.wave -- arg1 arg2

# Build an optimized hosted executable.
wavec -O2 build main.wave -o app

# Emit a freestanding RISC-V object.
wavec --target=riscv64-unknown-none-elf build kernel.wave --freestanding --emit=obj

The compiler exposes its current capabilities instead of requiring tools to maintain hard-coded lists:

wavec print supported-targets
wavec print supported-input-types
wavec print supported-emit-kinds
wavec print target-spec --target riscv64-unknown-linux-gnu --format=json

Run wavec --help for the complete CLI contract.

Target families

Architecture Hosted targets Freestanding target
x86-64 Linux GNU, macOS, Windows GNU x86_64-unknown-none-elf
AArch64 Linux GNU, macOS aarch64-unknown-none-elf
RISC-V 64 Linux GNU riscv64-unknown-none-elf

Hosted cross-linking requires a compatible linker, system libraries, and sysroot for the selected target. Freestanding builds omit the default hosted runtime assumptions and are intended for kernels, firmware, boot code, and other no-OS environments.

Build from source

Follow the Wave development setup, then build with the locked dependency graph:

git clone https://github.com/wavefnd/Wave.git
cd Wave
cargo build --locked

The development compiler is written to target/debug/wavec. Before submitting compiler changes, run:

cargo fmt --all --check
cargo test --locked --all-targets
cargo clippy --locked --all-targets -- -D warnings
python3 tools/run_tests.py

Ecosystem

Project Role
Wave Language frontend, compiler driver, LLVM backend, and standard library source
Vex Manifest-based package manager and build tool
Whale Native assembler, object tooling, and linker under development

Useful project references:

Contributing

Contributions are welcome through GitHub pull requests and email patches. Read CONTRIBUTING.md before submitting changes; all commits require a DCO Signed-off-by line.

License

Sponsors

Wave is developed in public with support from individuals and organizations. You can contribute monthly or once through OpenCollective.

Wave sponsors
Wave backers

Thank you to everyone who contributes code, documentation, testing, funding, or time to Wave.

Releases

Sponsor this project

Used by

Contributors

Languages