Skip to content

flutter_modular_monorepo Free

A comprehensive Flutter monorepo template with modular architecture, dual-GetIt DI, FeatureSDK self-registration, two-phase initialization, and build-time dependency stripping. Generates a full Dart workspace with Melos, Fastlane, and CI/CD workflows.

Version: 2.0.0

Variables

VariableTypeDefaultDescription
appNamestringMyAppThe name of your application
organizationstringMyCompanyThe name of your organization
domainstringcomYour organization's top-level domain
prefixstringAppPrefix for project components (e.g., 'App' for AppButton)
prefixCasingenum (upperCase, pascalCase)pascalCaseCasing style for the prefix
gitProviderenum (github, gitlab)githubGit provider for CI/CD workflows
networkLibraryenum (dio, http)dioHTTP client library
isUsingWebSocketbooleanfalseInclude WebSocket SDK
websocketLibraryenum (dart, phoenix)dartWebSocket library (if using WebSocket)
isUsingFirebasebooleanfalseUsing Firebase
isUsingAnalyticsbooleanfalseInclude Analytics SDK
isUsingFeatureFlagsbooleanfalseInclude Feature Flags SDK
stateManagementenum (bloc, provider, riverpod)blocState management solution
includeGeneratedbooleanfalseInclude generated files in Git

Usage

Interactive

bash
archipelago generate flutter_modular_monorepo

Non-interactive (CI)

bash
archipelago generate flutter_modular_monorepo --config my_config.json

Config Template

json
{
  "@appName": "The name of your application",
  "appName": "MyApp",
  "@organization": "The name of your organization",
  "organization": "MyCompany",
  "@domain": "Your organization's top-level domain",
  "domain": "com",
  "@prefix": "Prefix for project components (e.g., 'App' for AppButton)",
  "prefix": "App",
  "@prefixCasing": "Casing style for the prefix (upperCase | pascalCase)",
  "prefixCasing": "pascalCase",
  "@gitProvider": "Git provider for CI/CD workflows (github | gitlab)",
  "gitProvider": "github",
  "@networkLibrary": "HTTP client library (dio | http)",
  "networkLibrary": "dio",
  "@isUsingWebSocket": "Include WebSocket SDK",
  "isUsingWebSocket": false,
  "@websocketLibrary": "WebSocket library if using WebSocket (dart | phoenix)",
  "websocketLibrary": "dart",
  "@isUsingFirebase": "Using Firebase",
  "isUsingFirebase": false,
  "@isUsingAnalytics": "Include Analytics SDK",
  "isUsingAnalytics": false,
  "@isUsingFeatureFlags": "Include Feature Flags SDK",
  "isUsingFeatureFlags": false,
  "@stateManagement": "State management solution (bloc | provider | riverpod)",
  "stateManagement": "bloc",
  "@includeGenerated": "Include generated files in Git",
  "includeGenerated": false
}

Generated Structure

├── .claude/commands/          # Claude Code slash commands
├── .github/workflows/         # CI/CD workflows (if GitHub)
├── apps/
│   └── {app_name}/
│       ├── fastlane/          # iOS/Android build automation
│       ├── launcher/          # App icons per flavor
│       ├── splash/            # Splash screen assets
│       ├── lib/
│       │   ├── app.dart
│       │   ├── bootstrap.dart
│       │   ├── main.dart
│       │   ├── main_development.dart
│       │   ├── main_staging.dart
│       │   ├── di/injector.dart
│       │   ├── host/
│       │   │   ├── host_app_widget.dart
│       │   │   └── initializers/
│       │   └── router/app_router.dart
│       ├── flavorizr.yaml
│       ├── flutter_launcher_icons-*.yaml
│       ├── flutter_native_splash.yaml
│       └── pubspec.yaml
├── shared/
│   ├── feature_sdk/           # FeatureSDK base + registry
│   ├── locale_core/           # Shared locale state
│   └── router_registry/       # Route registration
├── features/                  # Feature modules
├── infrastructure/            # Infrastructure SDKs
├── packages/                  # Shared packages
├── utilities/                 # Utility packages
├── devtools/                  # Monorepo toolkit
├── build_prepare.yaml         # Build-time dependency stripping
├── flavors.yaml               # Flavor configuration
├── pubspec.yaml               # Workspace root
└── analysis_options.yaml

Built by Banua Coder