Thank you for your interest in contributing! This project is under active development and we welcome bug reports, feature requests, and code contributions.
- Flutter SDK 3.10+ (stable channel)
- Android Studio or VS Code with Flutter extensions
- For iOS: Xcode 15+ on macOS
# Clone with submodules (includes MCUmgr fork)
git clone --recurse-submodules https://github.com/ZSWatch/ZSWatch-App.git
# Or if already cloned:
# git submodule update --init
cd ZSWatch-App/zswatch_app
# Install dependencies
flutter pub get
# Generate code (Drift database, Riverpod)
dart run build_runner build --delete-conflicting-outputs
# Run the app
flutter run- Follow the Dart style guide
- Run
flutter analyzebefore committing — no warnings or errors should remain - Run
dart format .to format code consistently - Use
debugPrint('[ClassName] message')for logging, notprint()
- Fork the repository and create your branch from
main - Make your changes with clear, atomic commits
- Test your changes on a real device if possible (BLE features don't work on simulators)
- Run linting:
flutter analyze - Run tests:
flutter test - Push your branch and open a Pull Request
- Describe your changes clearly in the PR description
Open an issue on GitHub with:
- Steps to reproduce
- Expected vs actual behavior
- Device model and OS version
- ZSWatch firmware version
- App version (if applicable)
- Any relevant logs
Open a GitHub issue describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
- State management: Riverpod — providers in
lib/providers/ - Database: Drift (SQLite) — schemas in
lib/data/database/tables/ - BLE protocol: Gadgetbridge/BangleJS JSON format over NUS
- Platform bridges: Kotlin (Android) and Swift (iOS) for native features
See zswatch_app/README.md for detailed architecture documentation.
By contributing, you agree that your contributions will be licensed under the MIT License.