flutter_archx 2.1.0
flutter_archx: ^2.1.0 copied to clipboard
A production-ready CLI tool to scaffold enterprise-grade Flutter projects with a scalable, clean architecture template featuring GetX state management, Dio networking, secure storage, and modular feat [...]
flutter_archx #
A CLI that scaffolds production-ready Flutter projects with clean architecture — and asks you what you actually need first.
Pick a preset or hand-pick your screens, then pick a theme color. The routing
files, pubspec.yaml, navigation drawer, and theme are all generated from that
selection, so you never start by deleting code you didn't want.
Then keep using it: add feature scaffolds new screens and wires their routes
in for you.
Installation #
dart pub global activate flutter_archx
Commands #
| Command | What it does |
|---|---|
flutter-arch create |
Scaffold a new project (interactive by default) |
flutter-arch add feature <name> |
Add a screen to an existing project and register its route |
create #
Interactive (recommended) #
flutter-arch create
Walks you through seven steps and shows a summary before writing anything:
▸ Step 1 — Project name
? Project name: my_app
▸ Step 2 — Organization
? Organization (reverse domain): (com.mycompany)
▸ Step 3 — Description
? Project description: (A new Flutter project built with enterprise architecture.)
▸ Step 4 — Template preset
? Which preset do you want to start from?
❯ ◉ Starter Splash, onboarding, auth, home, profile, settings
◯ Minimal Splash + Home only
◯ Enterprise Everything: starter + tab shell + CRUD module + tooling
◯ Custom Choose features and add-ons yourself
▸ Step 5 — Features (Custom only — space to toggle, Enter to confirm)
▸ Step 6 — Add-ons (Custom only)
▸ Step 7 — Theme color
? Which theme color should the app use?
❯ ◉ Monochrome #111111 Black and white on a pure white background
◯ Blue #2563eb Blue with a violet secondary
◯ Indigo #4f46e5 Deep indigo
◯ Custom… Enter your own hex code
▸ Step 8 — Extras git init? pub get?
── Summary ─────────────────────────────
Project my_app
Organization com.mycompany
Preset Starter
Initial route /splash
Features (8) Splash Screen, Onboarding Slides, Login, ...
Add-ons (3) Theme Switcher, Offline Banner, Project Documentation
Theme color Monochrome (#111111)
────────────────────────────────────────
? Create this project? (Y/n)
Your organization and theme color are remembered in ~/.flutter_archx.json and
pre-fill the prompts next time. Unattended runs ignore them and stay
deterministic.
Non-interactive #
Any flag you pass skips its question. --yes skips all of them.
# Starter preset, no questions asked
flutter-arch create my_app --yes
# A specific preset
flutter-arch create my_app --preset enterprise --org com.mycompany --yes
# Exactly the screens you want
flutter-arch create my_app --features splash,login,home --add-ons theme_switcher --yes
# Your brand color instead of the default black and white
flutter-arch create my_app --color teal --yes
flutter-arch create my_app --color "#0f766e" --yes
# See every valid id
flutter-arch create --list
Options #
| Option | Description | Default |
|---|---|---|
--org, -o |
Organization identifier (reverse domain) | com.example |
--description, -d |
Project description | (auto) |
--preset, -p |
minimal, starter, enterprise, custom |
starter |
--features, -f |
Comma-separated feature ids, or all |
from preset |
--add-ons, -a |
Comma-separated add-on ids, all, or none |
from preset |
--color, -c |
Palette name or hex code (see Theme colors) | mono |
--list |
Print every preset, feature, add-on, and theme color, then exit | — |
--yes, -y |
Skip all prompts | false |
--no-git |
Skip git init |
(git runs) |
--no-pub-get |
Skip flutter pub get |
(pub get runs) |
Presets #
| Preset | Contains |
|---|---|
minimal |
Splash + Home |
starter |
Splash, onboarding, login, register, forgot password, home, profile, settings |
enterprise |
Everything: starter + tab shell + notifications + CRUD module + all add-ons |
custom |
Hand-pick features and add-ons |
Features #
| Id | Screen |
|---|---|
splash |
Branded launch screen that routes based on auth state |
onboarding |
Swipeable intro pages, shown only on first launch |
login |
Email and password sign-in with validation |
register |
Account creation form with password confirmation |
forgot_password |
Password reset request with success state |
home |
Landing screen with pull-to-refresh and summary cards |
main_shell |
Bottom-navigation shell hosting your selected tabs |
notifications |
Notification inbox with read/unread state |
profile |
User profile with editable fields and sign-out |
settings |
Theme mode, language, and notification preferences |
crud |
Full module: list, search, pagination, detail, create/edit, delete |
Dependencies are resolved for you — picking register pulls in login, and
picking main_shell pulls in home.
Add-ons #
| Id | What you get |
|---|---|
theme_switcher |
Light/dark toggle persisted across restarts |
localization |
GetX translations with English + Arabic (RTL) samples |
connectivity |
Global connectivity listener with a no-internet banner |
image_cache |
Cached network image widget with shimmer placeholders |
flavors |
main_dev / main_staging / main_prod + VS Code launch configs |
tests |
Validator, repository, and mocktail-based controller tests |
ci |
GitHub Actions running format, analyze, and test |
docs |
README.md and docs/ARCHITECTURE.md for the generated project |
Theme colors #
--color sets the palette written into lib/app/theme/app_colors.dart. The
default is mono — black on a pure white background, inverting to white on
near-black in dark mode.
| Id | Primary | Look |
|---|---|---|
mono |
#111111 |
Black and white on a pure white background (default) |
blue |
#2563eb |
Blue with a violet secondary (the pre-2.1 default) |
indigo |
#4f46e5 |
Deep indigo |
teal |
#0d9488 |
Calm blue-green |
green |
#16a34a |
Fresh green |
purple |
#7c3aed |
Vivid violet |
orange |
#ea580c |
Warm orange |
red |
#dc2626 |
Bold red |
Any hex code works too — --color "#0f766e", --color 0f766e, or the
shorthand --color "#4af". Tints, shades, the 50–900 swatch, a hue-rotated
secondary, and readable button foregrounds are all derived from it.
Only the brand colors change. success, warning, error, and info stay
colorful in every palette, because a red error reads faster than a
brand-tinted one. Everything lands in plain Color constants, so editing the
palette by hand afterwards stays a one-file job.
add feature #
Adding a screen normally means creating five files and hand-editing
app_routes.dart and app_pages.dart. This does all of it:
cd my_app
flutter-arch add feature reports
🧩 Adding feature "reports" to my_app
✓ lib/features/reports (5 files)
✓ Route /reports registered in app_routes.dart and app_pages.dart
Navigate to it with:
Get.toNamed(AppRoutes.reports);
What it creates and edits:
lib/features/reports/
├── bindings/reports_binding.dart created
├── controllers/reports_controller.dart created
├── views/reports_view.dart created
├── models/ created
└── widgets/ created
lib/app/routes/app_routes.dart + static const String reports = '/reports';
lib/app/routes/app_pages.dart + imports and the GetPage entry
Names are normalised for you — flutter-arch add feature "Audit Log" produces
the folder audit_log, the route /audit-log, and the class AuditLogView.
Imports are inserted in alphabetical order so directives_ordering stays quiet.
If the routing files have been restructured and the anchors can't be found,
they are left untouched and the exact snippet to paste is printed instead.
Options #
| Option | Description | Default |
|---|---|---|
--no-route |
Create the files only, skip route registration | (route is registered) |
--path |
Route path to register, e.g. --path /admin/reports |
/<feature-name> |
Generated architecture #
lib/
├── main.dart # calls bootstrap(Flavor.dev)
├── bootstrap.dart # single startup path for every entry point
├── app/
│ ├── app.dart
│ ├── routes/ # generated from your selection — no dead routes
│ ├── bindings/
│ ├── config/ # environment, flavors, runtime config
│ └── theme/ # colors, typography, dimensions
├── core/
│ ├── constants/ enums/ errors/ exceptions/
│ ├── extensions/ helpers/ utils/ validators/
│ ├── network/ # Dio client, interceptors, endpoints
│ ├── storage/ # secure + local storage wrappers
│ └── services/ # auth, logging, notifications
├── data/ # models, datasources, repository impls
├── domain/ # entities, repository contracts, usecases
├── features/ # one folder per selected screen
└── shared/ # widgets, components, dialogs, layouts
Each feature folder follows the same shape:
lib/features/<name>/
├── bindings/ # registers the controller with GetX
├── controllers/ # state and behaviour (GetxController)
├── models/ # feature-local data shapes
├── views/ # screens (GetView<Controller>)
└── widgets/ # widgets used only by this feature
Stack #
- GetX — state management, routing, dependency injection
- Dio — HTTP client with auth, retry, and logging interceptors
- GetStorage + FlutterSecureStorage — local and secure persistence
- Clean Architecture — app, core, data, domain, features, shared
Requirements #
- Dart SDK
>=3.5.0 - Flutter SDK installed and available in PATH
Contributing #
Contributions are welcome! Please open an issue or submit a pull request.
License #
MIT License — see LICENSE for details.