Thank you for your interest in contributing! This document covers how to contribute and the release process.
- Dart SDK
^3.0.0 - Flutter SDK
>=3.0.0 - Melos:
dart pub global activate melos
git clone https://github.com/brewkits/flutter_debounce_throttle
cd flutter_debounce_throttle
melos bootstrap# All packages
melos run test
# Core Dart package only
cd packages/dart_debounce_throttle && dart test
# Flutter package only
flutter test test/melos run format # auto-format
melos run analyze # static analysisThis project follows a quality-first release cadence to maintain user trust and prevent pub.dev score volatility.
| Rule | Detail |
|---|---|
| Minimum gap | At least 2 weeks between releases |
| Batch small fixes | Metadata fixes, dart fix, dependency bumps → accumulate, don't release individually |
| Feature threshold | A release should contain ≥1 meaningful feature OR ≥3 bug fixes |
| No solo metadata releases | Description/pubspec-only changes are not worth a version bump |
| No solo dependency bumps | Bumping transitive deps alone → wait for next feature release |
MAJOR.MINOR.PATCH
PATCH (x.x.1): Bug fixes, dart fix, metadata, dep bumps (batch together)
MINOR (x.1.x): New features, new classes, new widgets (backward compatible)
MAJOR (1.x.x): Breaking API changes (minimize, communicate well in advance)
In this library, behavior changes to defaults are also treated as breaking:
- Changing default parameter values → document prominently in CHANGELOG
- Enabling/disabling auto-cleanup by default → mention migration path
- Renaming public classes → provide deprecated aliases for 1 major version
Before publishing:
- All tests pass (
melos run test) - Static analysis clean (
melos run analyze) - CHANGELOG updated for all packages
- Version bumped in all relevant
pubspec.yamlfiles - README Installation section shows latest version
- Test count badges are up to date
- At least 2 weeks since last release
- Dry-run publish succeeds (
melos run publish --dry-run)
Open an issue with:
- Package name + version
- Minimal reproduction code
- Expected vs actual behavior
- Flutter/Dart SDK version
Open an issue with:
- Use case description (what problem are you solving?)
- Proposed API (code example)
- Which package it belongs to
- Fork the repo
- Create a branch:
git checkout -b feat/your-feature - Write tests for your change
- Ensure all tests pass
- Update CHANGELOG (under
## Unreleased) - Open a PR with clear description
- Tests added/updated
- All existing tests pass
- No new lint warnings
- CHANGELOG updated
- Minimal scope (one feature/fix per PR)
flutter_debounce_throttle/ ← Monorepo root
├── packages/
│ ├── dart_debounce_throttle/ ← Pure Dart core (no Flutter deps)
│ ├── flutter_debounce_throttle/ ← Flutter integration (widgets, mixin)
│ ├── flutter_debounce_throttle_hooks/ ← Optional flutter_hooks integration
│ └── flutter_debounce_throttle_core/ ← Deprecated (renamed to dart_*)
├── test/ ← Integration test suite
├── example/ ← Flutter demo app
├── docs/ ← API reference, best practices
├── melos.yaml ← Monorepo config
└── CONTRIBUTING.md ← This file
Dependency rule: dart_debounce_throttle has zero Flutter dependencies. Never add Flutter imports there. flutter_debounce_throttle depends on dart_debounce_throttle. hooks depends on flutter_debounce_throttle.
Open an issue on GitHub.