Contributing¶
Reporting bugs¶
Open an issue on GitHub with:
- Your platform target (Android API level, iOS version, macOS version) and Kotlin/Gradle versions.
- A minimal reproducer — ideally a
BackgroundWorker+ aWorkRequest+ the observed behaviour. - The Kermit log output around the failure (search for
Backgrounder/<taskId>lines).
Building locally¶
./gradlew check # all unit tests
./gradlew :backgrounder:linkDebugFrameworkIosArm64 # iOS device framework
./gradlew :backgrounder:assembleBackgrounderXCFramework # KMMBridge artifact
The repo follows the conventions in CLAUDE.md:
- Versions live in
gradle/libs.versions.toml— single source of truth. Web-search the latest stable before bumping any version. - Kotlin is pinned at the highest version SKIE supports — currently 2.3.20 with SKIE 0.10.11. SKIE compatibility wins over §2's nominal floor.
- Apple platform-name casing is preserved in identifiers —
IOSCoroutineBridge, notIosCoroutineBridge. SeeCLAUDE.md§3. internalby default; widen visibility only when needed.- Every
suspend funreachable from Swift carries@Throws(CancellationException::class); every public method carries@ObjCName(swiftName = ...).
Building the docs site¶
python3 -m venv .venv
.venv/bin/pip install -r docs/requirements.txt
.venv/bin/mkdocs serve # live preview at http://localhost:8000
.venv/bin/mkdocs build --strict # CI gate — fails on broken links
The site source is in docs/; structure is locked in by mkdocs.yml's explicit nav: (no auto-discovery). API reference is generated by Dokka into docs/api/ before mkdocs builds.
Pull requests¶
PRs run the full CI pipeline (build + tests across all targets, mkdocs build with --strict). Doc breakage in a PR fails CI. Address it before requesting review.