Thanks for your interest in contributing. This document covers the practical "how" — repo layout, local development, testing, and release flow. For "what to work on," see the open issues.
flutter_blue_ultra is a federated Flutter plugin. The repo is a monorepo of six packages plus an add-on:
packages/
├── flutter_blue_ultra/ # The umbrella package users depend on.
├── flutter_blue_ultra_platform_interface/ # Shared method-channel contract.
├── flutter_blue_ultra_android/ # Android implementation.
├── flutter_blue_ultra_darwin/ # iOS + macOS implementation.
├── flutter_blue_ultra_linux/ # Linux (BlueZ) implementation.
├── flutter_blue_ultra_web/ # Web (Web Bluetooth) implementation.
└── flutter_blue_ultra_accessory_setup/ # Optional iOS AccessorySetupKit add-on.
Users only ever depend on flutter_blue_ultra — the platform implementations are resolved automatically.
- Flutter SDK managed via FVM. The pinned version lives in
.fvmrc. - Dart SDK comes with Flutter.
- Platform-specific toolchains for any platform you intend to test (Xcode for iOS/macOS, Android Studio SDK for Android, etc.).
git clone https://github.com/dotintent/flutter_blue_ultra.git
cd flutter_blue_ultra
fvm install
fvm flutter pub getEach package has a pubspec_overrides.yaml that points sibling dependencies at the local paths. You do not need to touch these — flutter pub get picks them up automatically. They are stripped from published archives.
cd packages/flutter_blue_ultra/example
fvm flutter run# From the repo root, runs tests in every package.
for pkg in packages/*/; do
(cd "$pkg" && fvm flutter test)
doneOr in a single package:
cd packages/flutter_blue_ultra
fvm flutter testfvm flutter analyzeThe repo uses flutter_lints. CI runs analyze on every PR — make sure your branch is clean before opening one.
- Public API — new public symbols must have dartdoc comments. We track dartdoc coverage as part of the pana score; please don't regress it.
- Naming — the historical
flutter_blue_plus/FBPnames exist only inside the compat layer. Anything new should useflutter_blue_ultra/FBU/FlutterBlueUltra. - Breaking changes — any change to the public API of
flutter_blue_ultra_platform_interfaceis a breaking change for all platform packages. Coordinate the version bumps in your PR (see Versioning below).
- Fork the repo and create a feature branch off
main. - Make your change. Keep PRs focused — one logical change per PR.
- Add or update tests for behavior changes.
- Update the relevant package's
CHANGELOG.md. Add a bullet under the heading for the next planned version (use the package's existing format —* **[Improve]** ...,* **[Fix]** ...,* **[Breaking Change]** ...). If no next-version heading exists yet, add one above the most recent release with the version you expect to ship under. - Run
fvm flutter analyzeand the test suite locally. - Open a PR. The
CODEOWNERSfile will auto-request reviewers.
For larger changes (new public API, native platform additions, behavior changes that affect existing users), please open an issue first to discuss the approach.
All six packages move in lockstep — they share a single version number (currently 2.1.0). This keeps reasoning about compatibility simple at the cost of occasional "no-op" version bumps.
- Patch bump (
2.1.0→2.1.1): bug fixes only, no API changes. - Minor bump (
2.1.0→2.2.0): additive API changes. - Major bump (
2.1.0→3.0.0): breaking API changes, or removal of deprecated symbols.
Publishing is irreversible — pub.dev permits unpublishing only within 7 days of upload and only via Dart team intervention. Treat releases accordingly.
-
Verify CI is green on
main. -
Confirm every package's
CHANGELOG.mdhas an entry under a## X.Y.Zheading describing the changes shipping in this release. -
Bump the
version:field in every package'spubspec.yamltoX.Y.Z. -
Run
fvm flutter pub publish --dry-runin each package and confirm0 warnings(thepubspec_overrides.yamlhint is expected and harmless). -
Publish in dependency order, waiting ~60s between each for pub.dev to index:
1. flutter_blue_ultra_platform_interface 2. flutter_blue_ultra_android, flutter_blue_ultra_darwin, flutter_blue_ultra_linux, flutter_blue_ultra_web (any order, can be parallel) 3. flutter_blue_ultra (last) -
Tag the release:
git tag vX.Y.Z && git push --tags. -
Create a GitHub Release with the consolidated changelog as the body.
Please use the issue templates under .github/ISSUE_TEMPLATE/. The bug template asks for platform, Flutter version, and reproduction steps — including these up front saves significant back-and-forth.
For security issues, do not open a public issue. Email matteo.crippa@withintent.com directly.
By contributing, you agree that your contributions will be licensed under the BSD 3-Clause License that covers this project.