⚠️ This project is currently under active development and may contain bugs or incomplete features.
Flumint - a CLI tool for building multi-client Flutter projects. It allows you to build your Flutter app for multiple clients and platforms easily.
- Build and deploy Flutter projects for multiple clients with customized branding.
- Support for multiple platforms:
Android(APK & AppBundle) andWeb. - Manage multiple environments seamlessly:
dev,staging, andprod. doctorcommand to verifyFlutter,Dart,DevTools, and system dependencies.networkcommand to check connectivity and latency to all required repositories (pub.dev,Flutter Storage,Maven,CocoaPods).- checkout command to quickly switch between client configurations, including app name, package name, and assets
| 🍏 MacOS | 🐧 Linux | 💻 Windows |
|---|---|---|
| ✅ | ✅ | ✅ |
- Download the executable from the Releases page.
- Rename the downloaded file to
flumintand locate where you want. - Add the file to your System Environment Path so it can be run from anywhere.
- Requirements:
- Flutter SDK installed
- For Android builds: Java and Android SDK installed
To make a Flutter project compatible with Flumint:
- Create a
clientsfolder in the root of your project. - Inside
clients, create a folder for each client (e.g.,client_a,client_b). - Each client folder must have a
config.jsonfile with the following fields:
{
"app_name": "CLIENT_A_APP",
"app_description": "Example app description",
"package_name": "com.example.client_a"
}- Keep client-specific files inside each client folder (icons, assets,
google-services.json, JKS, etc.) while preserving the folder structure. - When running
flumint buildorflumint checkout, the selected client’s folder contents are replaced to the project. - After building your Flutter project, you can get the current client using:
// This allows your app to detect which client it was built for.
const String client = String.fromEnvironment('client', defaultValue: 'client_a');
void main() {
print('Current client: $client');
}Note: The clients folder can be empty, but each client at least must have its config.json file.
Example folder structure:
my_flutter_project/
├─ lib/
├─ pubspec.yaml
├─ clients/
│ ├─ client_a/
│ │ ├─ config.json
│ │ ├─ assets/
│ │ │ ├─ icons/
│ │ │ ├─ ...
│ │ │ └─ images/
│ │ ├─ android/
│ │ │ ├─ app/
│ │ │ │ ├─ src/
│ │ │ │ │ ├─ ...
│ │ │ │ │ ├─ main/
│ │ │ │ │ │ ├─ ...
│ │ │ │ │ │ └─ res/
│ │ │ │ │ │ ├─ drawable/
│ │ │ │ │ │ ├─ ...
│ │ │ │ │ │ └─ values-night/
│ │ │ │ └─ google-services.json
│ │ └─ web/
│ │ └─ favicon.png
│ ├─ client_b/
│ │ ├─ config.json
│ │ ├─ assets/
│ │ └─ android/
│ └─ ...
Build a Flutter project for a specific client and platform.
flumint build --client <CLIENT_NAME> --target <apk|appbundle|web> [--path <PROJECT_PATH>] [--env dev|staging|prod]Flags:
--client(required): Name of the client.--target(required): Target platform:apk,appbundle, orweb.--path(optional): Path to the Flutter project, default is current directory.--env(optional): Environment, default isprod.
Example:
flumint build --client client_a --target web --env prodCheck Flumint health, Flutter/Dart versions, and system dependencies:
flumint doctorCheck network connectivity to all required repositories:
flumint networkSwitch the project configuration to another client:
flumint checkout --client <CLIENT_NAME> [--path <PROJECT_PATH>]Example:
flumint checkout --client client_bContributions are welcome! If you'd like to contribute, feel free to open a pull request or submit an issue.
This project is licensed under the MIT License.
For questions, feedback, or support, please reach out:
- Developer: Mohammad Taghipour
- Email: taghipourmohammad7@gmail.com
