Thank you for your interest in contributing! This guide covers everything you need to get started.
- Getting Started
- Making Changes
- Submitting a Pull Request
- Reporting Issues
- Project Architecture
- Legal
| Requirement | Version | Notes |
|---|---|---|
| Java JDK | 21+ | Required (virtual threads, modern language features) |
| Gradle | 9.4+ | Wrapper included - no manual install needed |
| Git | 2.x+ | Version control |
-
Fork the repository on GitHub.
-
Clone your fork locally:
git clone https://github.com/<your-username>/<repo>.git cd <repo>
-
Build the project to verify your setup:
./gradlew build
-
Run tests to confirm everything passes:
./gradlew test
Tip
The Gradle wrapper (./gradlew) is checked into the repository, so you do not need to install Gradle separately. The wrapper will download the correct version automatically on first run.
- All development branches are created from
master. - Use descriptive branch names:
feature/add-widget,fix/null-pointer-in-parser,refactor/simplify-lookup.
git checkout master
git pull origin master
git checkout -b feature/your-feature-name- Follow standard Java conventions (Oracle/Google style).
- Use Lombok annotations where appropriate to reduce boilerplate (
@Getter,@RequiredArgsConstructor, etc.). - Use JetBrains annotations (
@NotNull,@Nullable) on public API parameters and return types. - Write Javadoc on all public classes and methods.
- Prefer immutability and thread-safe collections where applicable.
- Omit braces on single-line control flow bodies; use braces when the body wraps.
- Use the imperative mood in the subject line (e.g., "Add retry logic" not "Added retry logic").
- Keep the subject line under 72 characters.
- Optionally include a blank line followed by a longer description body.
Add configurable timeout for async tasks
The default timeout of 30 seconds was insufficient for long-running
downloads. This adds a constructor parameter to override it.
# Standard unit tests
./gradlew test
# Full build (compile + test + checks)
./gradlew buildNote
Some modules include additional test tasks (e.g., slowTest for integration tests). Check the module's build.gradle.kts for available tasks.
-
Push your branch to your fork:
git push origin feature/your-feature-name
-
Open a pull request against the
masterbranch of the upstream repository. -
In the PR description:
- Summarize what you changed and why.
- Reference any related issues (e.g.,
Closes #42). - Note any breaking changes or migration steps.
-
Respond to review feedback - maintainers may request changes before merging.
Important
All pull requests must target the master branch. Ensure your branch is up to date with master before submitting.
- Use GitHub Issues to report bugs or request features.
- Include steps to reproduce, expected behavior, and actual behavior.
- Include your Java version (
java -version) and OS when reporting bugs.
This project follows a standard Gradle single-module layout:
src/
├── main/java/ # Production source code
├── test/java/ # JUnit 5 test sources
└── jmh/java/ # JMH benchmark sources (if present)
- Build configuration:
build.gradle.ktswith a shared version catalog atgradle/libs.versions.toml. - Dependencies are published via JitPack from the
masterbranch. - Java 21 toolchain is enforced in the build script.
By submitting a pull request, you agree that your contributions will be licensed under the Apache License 2.0, the same license that covers this project.