Thank you for your interest in contributing to Wave, a modern systems programming language. Wave welcomes contributions through GitHub Pull Requests and email-based patches. This document explains how to contribute in both ways, the required development setup, and contribution rules.
Wave uses a dedicated setup repository for tools and environment preparation.
Before contributing, please follow:
-> https://github.com/wavefnd/setup
This includes installation instructions for Rust, LLVM, Clang tools, and other dependencies required to build Wave
Wave accepts contributions in two ways:
- Fork the repository
- Create a branch
- Commit changes with
git commit -s - Open a Pull Request targeting
master
Example:
git checkout -b fix/parser-bug
git commit -s -m "Fix incorrect precedence handling"
git push origin fix/parser-bugThen open a PR on GitHub
Wave also accepts patches through email, similar to the Linux kernel and LLVM workflows.
git checkout -b fix-issue
git commit -s
git format-patch -1
git send-email --to wave-patches@lunastev.org *.patch- ALL commits must include
Signed-off-by:(DCO) - One patch should address on logical change
- Patch series is allowed (
git format-patchsupports it)
Wave requires all commits-PRs and patches-to be signed off:
git commit -sThis adds:
Signed-off-by: Your Name <email@example.com>
Commits without DCO will be rejected.
Maintainters must verify all incoming patches using:
tools/verify_patch.sh your_patch.patchThis script checks:
- Patch applies cleanly (
git am) - DCO signature is present
cargo fmt --checkcargo buildcargo testcargo clippy -- -D warnings
This ensures that patches do not break Wave's compiler.
To determine which maintainer should review your patch, use:
python3 tools/get_maintainer.py path/to/changed/file.rsThis script reads the repository's MAINTAINERS file and prints the appropriate individuals.
Patch authors may CC maintainers manually when sending patches via email.
Wave follows standard Rust conventions:
- snake_case for functions and variables
- PascalCase for structs, enums, and types
- SCREAMING_SNAKE_CASE for constants
- Opening braces on the same line (K&R style)
- No trailing whitespace
All formatting rules must pass:
cargo fmt --check
cargo clippy -- -D warningsWave is a systems programming language with:
- No builtin functions
- No implicit runtime
- Strict explicit behavior
- A powerful compiler-first architecture
Do not add builtin functions or hidden magic to the compiler. All additional functionality should be provided through external libraries (e.g., Vex).
Wave uses:
- Rust unit tests (
cargo test) - Manually executed
.waveexamples intest/(not automated)
Contributors should:
- Add unit tests for new Rust functionality
- Add
.waveexamples for new language features
A PR should include:
- A clear description of the change
- Why the change is needed
- Tests if applicable
- Documentation updates if necessary
- Signed-off commits (
-s)
All pull request descriptions and comments must be written in English.
Small, focused PRs are preferred.
- GitHub Issues -> bug reports, proposals, questions
- GitHub Discussions -> design conversations, feedback
- Discord community -> informal communication and help
By contributing to Wave, you agree that your contributions are licensed under:
Every contribution helps Wave grow into a robust, modern systems language. Thank you for helping shape the future of Wave.