Architecture Overview
Archipelago uses a modular monorepo architecture where each feature is a self-contained "island" connected by shared infrastructure.
Core Patterns
API/Impl Split
Separate contract (API) from implementation — only when a feature is consumed by others or needs vendor swapping.
- API package: Interfaces, DTOs, exceptions
- Impl package: Actual implementation with vendor dependencies
- Noop package: No-op implementation for build-time stripping
Dual-GetIt Dependency Injection
Two GetIt instances for clean isolation:
- Global GetIt: SDKs and infrastructure (network, auth, monitoring)
- Local GetIt per feature: Repositories, data sources, use cases
FeatureSDK Self-Registration
Each feature registers itself — routes, dependencies, and initialization — via a FeatureSDK base class.
Two-Phase Initialization
- Pre-launch (blocking): DI registration, route registration, critical SDK init
- Post-launch (non-blocking): Analytics, feature flags, remote config
Project Structure
your_project/
├── app/ # Application targets
│ ├── mobile/ # Main mobile app
│ └── widgetbook/ # UI component showcase
├── core/ # Core utilities and helpers
├── features/ # Feature modules (self-contained islands)
│ └── feature_*/ # Each feature with its own DI, routes, UI
├── packages/ # Shared packages
│ ├── ui_kit/ # Design system & shared widgets
│ ├── auth_sdk/ # Authentication SDK
│ ├── network_sdk/ # HTTP client & API layer
│ └── monitoring_sdk/ # Logging, crash reporting, analytics
├── devtools/ # Monorepo toolkit
│ ├── affected/ # Changed package detection
│ ├── coverage/ # Test coverage pipeline
│ └── build_prepare/ # Build-time dependency swap
├── shared/ # Shared configuration
│ ├── config/ # Environment & flavor config
│ ├── dependencies/ # Shared BLoC dependencies
│ └── l10n/ # Localization
└── melos.yaml # Monorepo configurationDesign Decisions
For detailed rationale behind each pattern, see the Architecture Guide.