Contributions are welcome.
git clone https://github.com/whuppi/morph_kit.git
cd morph_kit
make hooks # activates commit-msg + pre-commit (run once)
fvm install # downloads the SDK version pinned in .fvmrc
fvm flutter pub get
fvm flutter testRequires: FVM (.fvmrc pins the exact SDK
version).
Without FVM: all Makefile commands accept DART and FLUTTER
overrides:
make check DART=dart FLUTTER=fluttermake checkRuns lint-shell + analyze (package + example app, each from its
own root) + analyze-floor + platforms (the same pana pub.dev runs) +
test (the widget suite, host VM) + test-example (the example app's
journeys through the full nav topology).
Must pass. Don't suppress with // ignore: — fix the underlying
issue.
All PRs target dev. That's the only branch contributors touch.
your fork / feature branch ──PR──► dev
↓ CI: make targets via the make-target action
↓ PR title: Conventional Commits (feat: / fix: / etc.)
↓ squash-merge when green
↓ Full test suite via "ready-to-test" label
(suites × OS matrix)
CI calls Makefile targets — same commands locally and in CI.
You don't write changelog entries, bump versions, or touch prod.
The maintainer handles releases.
- Match existing code in the repo.
- The overlay invariants are sacred (
docs/UPDATING.md§1): the OverlayPortal is shown once and never hidden; the paint probe evaluates during layout and reports during paint; suppression needs a rebuild pass. No timers, no polling. - Panes mount under stable GlobalKeys — that reparenting IS the state-preservation guarantee across the compact ↔ expanded morph.
- Core never imports components; divider / empty-state params are nullable builders.
- Pane width math lives only in
PaneWidthModel— never inline resize / clamp / snap logic in a widget.
Step-by-step recipes (and the invariants that must not break) live in
docs/UPDATING.md.
Handled by the maintainer.