Contributing
SilkMC is small, opinionated, and tries to stay upstream-mergeable. This page summarizes the principles and the local development loop.
Principles
- Preserve correctness first.
- Prefer compatibility shims and warnings over unsafe behavior.
- Keep changes small and upstream-mergeable when possible.
- Document user-facing behavior changes.
Local setup
- Install JDK 25.
- Set
JAVA_HOMEto that JDK. - Run
./gradlew applyAllPatches. - Make changes in the generated
paper-api/orpaper-server/trees unless the change belongs in repository scaffolding. - Run
./rb.bator./rb.shto rebuild patch files. - Run
./gradlew build.
Patch workflow
- Maintained patch sources live in
silkmc-api/andsilkmc-server/. - Generated working trees live in
paper-api/andpaper-server/. - Keep upstream attribution intact in patch headers.
Compatibility changes
When changing compatibility behavior:
- Explain the failure mode being addressed.
- Document what remains unsafe.
- Add or update migration notes.
- Favor warnings and opt-in modes over silent behavior changes.
Pull requests
- Keep the scope focused.
- Include test evidence or explain why tests were not practical.
- Call out upstream-sensitive changes clearly.
repo
Issues and pull requests live on the upstream repository at
https://github.com/tame-gg/SilkMC. The documentation site itself is maintained separately
at koelss/silkmcdocs.