Apache Wayang is built by the community. Whether you are fixing a typo in the docs, adding a new operator, wiring up a new execution platform, or improving the cost-based optimizer, every contribution moves the project forward. This guide walks you through the contribution workflow, development setup, build commands, and the areas where help is most welcome.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apache/wayang/llms.txt
Use this file to discover all available pages before exploring further.
By contributing to Apache Wayang you agree to the Apache Software Foundation Code of Conduct and the Apache License, Version 2.0. All contributed code must carry the Apache license header.
Contribution workflow
Introduce yourself on the mailing list
Send a short email to the developer mailing list describing who you are and what you intend to implement or fix. This lets committers give early feedback and avoids duplicate effort.
Fork the repository and create a branch
All active development happens on the
main branch. Fork the repository on GitHub and create a feature branch from main:Implement your changes
Write your code, following the coding standards enforced by Checkstyle (see below). Add tests covering your changes. If you are contributing a new operator or platform, also add or update the corresponding documentation.Make sure all builds and tests pass locally before proceeding:
Open a Pull Request
Push your branch to your fork and open a Pull Request against the
main branch of the upstream Apache Wayang repository. Describe what you changed and why.Respond to code review
A committer will review your PR. Address any requested changes — iterate until the reviewer is satisfied. Be patient: committers are volunteers.
Development setup
Prerequisites
| Tool | Minimum version | Notes |
|---|---|---|
| Java (JDK) | 17 | The entire project compiles at --release 17; JDK 17 or later is required |
| Maven | 3.6 | Use the bundled ./mvnw wrapper for reproducibility |
| Scala | 2.12 | Managed by the build; no separate install needed |
| Git | Any recent version |
- Apache Spark 3.x (for
wayang-spark) - Apache Flink 1.x (for
wayang-flink) - PostgreSQL or SQLite (for database platform tests)
- Docker (for Kafka integration tests)
Clone the repository
pom.xml declares all modules. The bundled Maven wrapper ./mvnw (Linux/macOS) or mvnw.cmd (Windows) ensures you use the correct Maven version without a system-wide install.
Build commands
Compile a single module
When iterating on a specific module, compile only that module to keep the feedback loop short:Full build (all modules, skipping tests)
Full build with tests
Run the complete build including all unit and integration tests. Do this before opening a Pull Request — the CI gate runs this exact command.Run tests for a specific module
Package the standalone distribution
Produces thebin/wayang-submit launcher script and a self-contained tarball:
wayang-assembly/target/. Extract and run:
The
wayang-submit script requires SPARK_HOME and HADOOP_HOME to be set in your environment. See guides/tutorial.md in the repository for full environment setup instructions.Code quality
Wayang enforces code style through Checkstyle using the Google Java Style ruleset (google_checks.xml). Violations fail the build.
Run Checkstyle standalone:
Areas for contribution
Documentation improvements
The fastest way to start contributing. Fix typos, improve examples, add missing explanations, or write a guide for a use case that isn’t covered yet.Fix a doc page
Every page has an “Edit on GitHub” link. For small fixes, edit directly in the browser.
Add an example
New runnable examples — with real code and working
wayang-submit commands — are always welcome.New operators
Wayang operators are defined inwayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/. Each operator is a logical description; platform-specific implementations live in the platform module under src/main/java/org/apache/wayang/<platform>/operators/.
Steps for adding a new operator:
- Define the logical operator class in
wayang-basic. - Implement the execution logic in each target platform module.
- Register the mapping in the platform’s
Pluginclass. - Add cardinality and cost estimators.
- Write unit tests in the platform module’s test directory.
New platform adapters
If you want to add support for a new execution engine, model it after an existing lightweight platform (e.g.,wayang-sqlite3) and implement:
- A
Platformclass Operatorimplementations for the standard Wayang operator setMappingregistrations- A
Pluginthat registers all mappings - Cost estimators for each operator
Optimizer improvements
The optimizer lives inwayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/. Contributions are welcome in:
- Better default cardinality estimators
- Improved plan enumeration strategies
- New cost models
- Profiler integration for adaptive re-optimization
Community and getting help
Mailing lists
The developer mailing list is the primary discussion channel for design decisions, release planning, and code review.
GitHub Issues
File bug reports, feature requests, and task items. Check existing issues before opening a new one.
Community page
Find committers, mentors, and links to conference talks and publications.
Apache Code of Conduct
All interactions in the Wayang community are governed by the ASF Code of Conduct.
Branch strategy
| Branch | Purpose |
|---|---|
main | All new development. Fork from here. |
release/* | Tagged release branches. No direct commits. |
Always fork from
main. Release branches are managed by committers during the Apache release process and are not targets for feature PRs.