Feature First
stackchain: architecture: feature_firstDefault architecture.
Folder structure
Section titled “Folder structure”lib/features/<name>/ data/ datasources/ repositories/ models/ domain/ entities/ repositories/ usecases/ presentation/ <bloc|cubit|providers|controllers>/ pages/ widgets/ bindings/ # when state_management: getxState folder name depends on state management:
| State | Folder |
|---|---|
bloc |
presentation/bloc |
cubit |
presentation/cubit |
riverpod / provider |
presentation/providers |
getx / rxdart |
presentation/controllers |
- Features own their full stack — easy to delete or extract
- Scales with team ownership per feature
- Matches common Flutter production guidance
- Shared cross-cutting logic must live in
core/deliberately - Large features can still bloat without module boundaries
When to choose
Section titled “When to choose”Default for most apps. Prefer clean only if you want the same tree with stricter conventions.
Generated output (layered)
Section titled “Generated output (layered)”Per feature at init / feature command:
- Domain entity, repository contract,
get_<feature>use case - Data model, remote datasource, repository impl
- Page + header widget
- State files matching your state library