Repository navigation
Contributing
sputlab edited this page Nov 13, 2026
·
1 revision
Contributions are welcome. Read this page and Architecture first.
- Language: 100% Kotlin, with the Codec2 C library as the only exception. No other native code.
- UI: 100% Jetpack Compose (Material 3). Forbidden: XML layouts, Fragments, AppCompat.
-
SDK:
minSdk 29,targetSdk 35. - Zero proprietary dependencies: no Google Play Services, no Nearby Connections. Libraries must be AGPL-3.0-compatible open source.
-
Layering: radio APIs only behind
MeshTransport;protocolandcryptostay free of Android/BLE APIs so they are JVM-testable. -
Cryptography: standard JCA/JCE only, no custom primitives, no third-party crypto libraries. Keep
docs/SECURITY.mdtruthful, limitations included. -
Radio rules: BLE callbacks through
callbackFloworDispatchers.IO; strict timeouts on every GATT connection and write; log every radio state transition, error and permission check with the tagMESH_RADIO. - Permissions: follow the API 29-30 vs 31+ rules in Permissions.
- Tests: new behaviour needs tests; see Testing.
Every source file (.kt, our .c, Gradle scripts) starts with:
// SPDX-License-Identifier: AGPL-3.0-or-later
- Open an issue for anything non-trivial.
- Fork, branch, make the change, run
./gradlew testDebugUnitTest. - Update
CHANGELOG.md(Keep a Changelog format, SemVer) and, if behaviour or security changes,docs/SECURITY.mdandREADME.md. - Open a pull request describing the change and how it was tested.
Do not post exploitable details publicly; contact the maintainers privately.
The name NodeWave and the NW logo are trademarks of the author; see License and Trademark.