Thank you for your interest in contributing to Ensemble! This document provides guidelines and instructions for contributing to the project.
By participating in this project, you agree to maintain a respectful and inclusive environment for everyone.
-
Fork and clone the repository:
git clone https://github.com/<your-username>/ensemble.git cd ensemble
-
Bootstrap the monorepo (installs dependencies and links local packages):
melos bootstrap
-
Run the starter app to verify your setup:
cd starter flutter run
This will launch the Kitchen Sink demo app showcasing the available widgets and features.
This is a Dart/Flutter monorepo managed by Melos:
modules/ensemble/— Core Ensemble runtimemodules/— Optional feature modules (auth, camera, chat, location, etc.)packages/— Standalone packages published to pub.devstarter/— Reference app for running Ensemble-powered apps
- Search existing issues to avoid duplicates.
- If no existing issue matches, open a new one with:
- A clear, descriptive title
- Steps to reproduce the issue
- Expected vs. actual behavior
- Flutter version, platform, and any relevant configuration
Open an issue describing the feature, its use case, and any proposed implementation approach. This lets the team discuss the idea before significant effort is invested.
- Browse existing widgets in
modules/ensemble/lib/widget/to understand patterns. - Run the Kitchen Sink app to see how YAML definitions map to Flutter widgets.
- Create your own app and screens in Ensemble Studio to prototype and test your widget.
-
Create a branch from
main:git checkout -b feature/my-change
-
Make your changes, following the conventions in the existing codebase.
-
Run analysis to check for issues:
cd modules/ensemble flutter analyze -
Run tests to ensure nothing is broken:
cd modules/ensemble flutter test
-
If you modified the auth module, run its tests as well:
cd modules/auth flutter test
-
Commit your changes with a clear, descriptive message.
-
Push your branch and open a pull request against
main. -
Verify that all CI status checks are passing.
The starter app has optional modules disabled by default to keep the app lightweight. To enable a module:
- Uncomment the corresponding dependency in
starter/pubspec.yaml. - Run
flutter pub upgrade. - Enable the service in
starter/lib/generated/ensemble_modules.dartby uncommenting the relevant imports and registration lines. - Run
flutter runto verify.
See the Starter README for details.
- Follow existing code conventions in the repository.
- Use
flutter analyzeto catch lint issues before submitting. - Keep pull requests focused — one logical change per PR.
See the Releasing a New Version section in the README.
By contributing to Ensemble, you agree that your contributions will be licensed under the BSD 3-Clause License.