{"id":35005429,"url":"https://github.com/youngcet/app_flow_cli","last_synced_at":"2026-05-20T08:31:43.438Z","repository":{"id":286213699,"uuid":"960716990","full_name":"youngcet/app_flow_cli","owner":"youngcet","description":"AppFlow CLI is a Dart-based command-line tool designed to automate the creation, management, and cleanup of scalable Flutter project structures.","archived":false,"fork":false,"pushed_at":"2025-12-10T21:48:57.000Z","size":47523,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-28T18:31:19.601Z","etag":null,"topics":["cli","codegen","dart","files","folder-creator","folder-structure","folders","spring","structure"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/youngcet.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-04T23:36:00.000Z","updated_at":"2025-12-10T21:49:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"47835bd2-a403-45ae-8b2e-75ab44ce655a","html_url":"https://github.com/youngcet/app_flow_cli","commit_stats":null,"previous_names":["youngcet/app_flow_cli"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/youngcet/app_flow_cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngcet%2Fapp_flow_cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngcet%2Fapp_flow_cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngcet%2Fapp_flow_cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngcet%2Fapp_flow_cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/youngcet","download_url":"https://codeload.github.com/youngcet/app_flow_cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngcet%2Fapp_flow_cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33251982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T04:48:54.280Z","status":"ssl_error","status_checked_at":"2026-05-20T04:48:10.851Z","response_time":356,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","codegen","dart","files","folder-creator","folder-structure","folders","spring","structure"],"created_at":"2025-12-27T04:36:05.980Z","updated_at":"2026-05-20T08:31:43.431Z","avatar_url":"https://github.com/youngcet.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e   \n    \u003ca href=\"https://github.com/youngcet/app_flow_cli\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/youngcet/app_flow_cli?style=social\" alt=\"Repo stars\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/youngcet/app_flow_cli/commits/main\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/youngcet/app_flow_cli/main?logo=git\" alt=\"Last Commit\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/youngcet/app_flow_cli/pulls\"\u003e\u003cimg src=\"https://img.shields.io/github/issues-pr/youngcet/app_flow_cli\" alt=\"Repo PRs\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/youngcet/app_flow_cli/issues?q=is%3Aissue+is%3Aopen\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/youngcet/app_flow_cli\" alt=\"Repo issues\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/youngcet/app_flow_cli/graphs/contributors\"\u003e\u003cimg src=\"https://badgen.net/github/contributors/youngcet/app_flow_cli\" alt=\"Contributors\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/youngcet/app_flow_cli/blob/main/LICENSE\"\u003e\u003cimg src=\"https://badgen.net/github/license/youngcet/app_flow_cli\" alt=\"License\"\u003e\u003c/a\u003e\n    \u003cbr\u003e       \n    \u003ca href=\"https://app.codecov.io/gh/youngcet/app_flow_cli\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/youngcet/app_flow_cli?logo=codecov\u0026logoColor=white\" alt=\"Coverage Status\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# 🧱 AppFlow CLI – Flutter Architecture Generator\n\nAppFlow CLI is a command-line tool built with Dart to help Flutter developers generate and manage scalable architecture using a simple configuration file.\n\nIt's perfect for bootstrapping projects with a clean, modular architecture — ideal for solo devs and teams alike.\n\n[![Pub Version](https://img.shields.io/pub/v/app_flow_cli)](https://pub.dev/packages/app_flow_cli)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/youngcet/app_flow_cli/blob/main/LICENSE)\n\u003ca href=\"https://pub.dev/packages/app_flow_cli\"\u003e\u003cimg src=\"https://badgen.net/pub/points/app_flow_cli\" alt=\"Pub points\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pub.dev/packages/app_flow_cli\"\u003e\u003cimg src=\"https://badgen.net/pub/likes/app_flow_cli\" alt=\"Pub Likes\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pub.dev/packages/app_flow_cli\"\u003e\u003cimg src=\"https://badgen.net/pub/popularity/app_flow_cli\" alt=\"Pub popularity\"\u003e\u003c/a\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n    \u003ch2\u003eUsing the default project structure\u003c/h2\u003e\n  \u003cimg src=\"https://github.com/youngcet/app_flow_cli/blob/main/doc/defaultConfig.gif?raw=true\" width=\"750px\"\u003e\n  \u003ch2\u003eUsing your own project structure config\u003c/h2\u003e\n  \u003cimg src=\"https://github.com/youngcet/app_flow_cli/blob/main/doc/customConfig.gif?raw=true\" width=\"750px\" style=\"margin-left:10px\"\u003e\n\u003c/p\u003e\n\n## ✨ Features\n\n- Generate folder/file structures using YAML config\n- Add new modules or features on demand\n- Overwrite existing files with a flag\n- Clean/remove previously generated structures\n- Generate custom boilerplate code\n- Route management\n\n---\n\n## Use Case\nIdeal for:\n\n- Flutter developers following clean architecture, feature-based architecture, or layered architecture.\n\n- Teams wanting a consistent and fast way to set up project scaffolding.\n\n- Projects needing custom boilerplate generation.\n\n## 📦 Installation\n```dart\ndart pub global activate app_flow_cli \n```\n\nOr install a specific version using:\n\n```dart\ndart pub global activate app_flow_cli \u003cversion\u003e\n```\n\nIf you haven't already, you might need to [set up your path](https://dart.dev/tools/pub/cmd/pub-global#running-a-script-from-your-path).\n\nWhen that is not possible (eg: CI environments), run very_good commands via:\n```dart\ndart pub global run app_flow_cli [options] // e.g dart pub global run app_flow_cli --add structure\n```\n\n# Usage\n```dart\napp_flow_cli [options]\n```\n\n## Options\n\n| Option                | Description                                            |\n|-----------------------|--------------------------------------------------------|\n| `--config \u003cpath\u003e`     | Path to the YAML/JSON config file                      |\n| `--add \u003cmodule\u003e`      | Add a module/feature to the structure                  |\n| `--overwrite`         | Overwrite existing files                               |\n| `--clean`             | Remove previously generated structure                  |\n| `--rm`                | Removes a module                                       |\n| `--make-route \u003cfile\u003e` | Updates a route file with new screen pages             |\n| `--workflow \u003coptions\u003e`| Executes a structured process                          |\n| `status`              | Show all files \u0026 folders generated by AppFlow          |\n| `--help`              | Display usage information                              |\n\n# Example\nUsing the default structure.\n```dart\n// generate the default structure\napp_flow_cli --add structure\n```\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://github.com/youngcet/app_flow_cli/blob/main/doc/structure.png?raw=true\" style=\"width:700px\"\u003e\n\u003c/p\u003e\n\nRemoving the default structure.\n```dart\napp_flow_cli --clean\n```\n\nUsing your own structure.\n```dart\n// pass your own config structure to generate\napp_flow_cli --add structure --config appflow.yaml\n\n// pass your config to remove the folders \u0026 files\napp_flow_cli --clean --config appflow.yaml\n```\n\n## Default Structure\n\nWhen using the default structure, three key files will be generated:\n\n1. **`home.dart`**: This file serves as the entry point for your app's main screen. It will typically display the primary content for your app.\n2. **`splash.dart`**: A splash screen that is shown when the app is launched. It provides a smooth transition into the app.\n3. **`router.dart`**: This file manages routing setup, defining routes and handling navigation across the app.\n4. **`main.dart`**: This is the main file. The file is overriden only if the `--overwrite` option is set when you run `app_flow_cli --add structure`. For example, `app_flow_cli --add structure --overwrite`.\n\nThese files are automatically generated when you run `app_flow_cli --add structure` and provide a solid starting point for your app's UI and navigation flow.\n\n# Configuration Example (appflow.yaml)\nA basic config:\n\n```yaml\nfolders:\n  # Main application code\n  - lib/src/app/             # App-wide configuration\n  - lib/src/app/config/      # Environment configurations (dev, staging, prod)\"\n  - lib/src/app/constants/   # App constants (strings, routes, enums)\"\n  - lib/src/app/di/          # Dependency injection setup\"\n  - lib/src/app/theme/       # App theme data\"\n  \n  # Core functionality\n  - lib/src/core/            # Core functionality\"\n  - lib/src/core/errors/     # Error handling classes\"\n  - lib/src/core/network/    # Network clients and interceptors\"\n  - lib/src/core/utils/      # Utilities (validators, extensions, formatters)\"\n  - lib/src/core/widgets/    # Reusable app-wide widgets\"\n  \n  # Feature modules\n  - lib/src/features/auth/        # Example feature: Authentication\"\n  - lib/src/features/auth/data/    # Data layer\"\n  - lib/src/features/auth/data/datasources/  # Local/remote data sources\"\n  - lib/src/features/auth/data/models/       # Data transfer objects\"\n  - lib/src/features/auth/data/repositories/ # Repository implementations\"\n  - lib/src/features/auth/domain/  # Domain layer\"\n  - lib/src/features/auth/domain/entities/     # Business logic entities\"\n  - lib/src/features/auth/domain/repositories/ # Repository interfaces\"\n  - lib/src/features/auth/domain/usecases/     # Business logic use cases\"\n  - lib/src/features/auth/presentation/    # UI layer\"\n  - lib/src/features/auth/presentation/bloc/        # State management\"\n  - lib/src/features/auth/presentation/pages/       # Full screens/views\"\n  - lib/src/features/auth/presentation/widgets/     # Feature-specific widgets\"\n  \n  # Routing configuration\n  - lib/src/routes/          # Routing configuration\"\n  \n  # Localization\n  - lib/l10n/                # Localization files\"\n  \n  # Static files\n  - assets/icons/               # App icons\"\n  - assets/images/              # Images\"\n  - assets/fonts/               # Custom fonts\"\n  - assets/translations/        # JSON translation files\"\n  \n  # Testing\n  - test/                    # Test files\"\n  - test/features/            # Feature tests\"\n  - test/mock/                # Mock classes\"\n  - test/test_helpers/        # Testing utilities\"\n  \n  # Other\n  - integration_test/        # Integration tests\"\n  - scripts/                 # Build/deployment scripts\"\n\nfiles:   \n  \"lib/src/routes/app_pages.dart\": |\n    // Route definitions\n    class AppPages {\n      static const initial = '/';\n    }\n    \n  \"lib/src/routes/app_router.dart\": |\n    // Router implementation\n    class AppRouter {}\n    \n  \"lib/l10n/app_en.arb\": |\n    // Localization files\n    {\n      \"appTitle\": \"My App\",\n      \"@appTitle\": {\n        \"description\": \"The title of the application\"\n      }\n    }\n    \n  \"lib/firebase_options.dart\": |\n    // Firebase configuration (if used)\n    class FirebaseOptions {}\n        \n  \".gitignore\": |\n    # Version control ignore\n    /build/\n    \n  \"README.md\": |\n    # Project documentation\n    ## My Flutter App\n    A developer community application.\n```\n\n## Adding new directories in `lib`\nTo add a new directory, run:\n```dart\napp_flow_cli --add features:auth\n```\n\nThis will create a new `auth` directory inside the `lib/features` folder, and replicate the folder structure defined in your project's configuration or using the default structure. You can add multiple directories at once by separating them with commas, e.g.,\n\n```dart\napp_flow_cli --add features:auth,product\n```\n\nThis command will create both `auth` and `product` directories inside `lib/features`, each following the project's predefined structure.\n\n## Removing directories in `lib`\nTo remove directory, run:\n```dart\napp_flow_cli --rm features:auth\n```\n\nThis will delete the `auth` folder, including any subfolders and files inside it.\n\n## Generating Routes\n**`--make-route \u003cfile\u003e`**\nthis command helps automate route management and keeps your routing setup clean and up to date with newly added screens.\n\nUsage:\n```dart\napp_flow_cli --make-route router.dart\n```\n\nScans the project for all Dart files ending with _screen.dart (excluding already tracked files), and automatically generates route entries for them in the provided `\u003cfile\u003e` (e.g. router.dart *without the path). If the route file already exists, it updates it by injecting the new routes. \n\n## Git Workflows\n**`--workflow \u003coptions\u003e`** this tool allows you to execute a sequence of predefined `git` commands based on a configuration file and dynamic key-value inputs. For example:\n\n```dart \napp_flow_cli --workflow git:message=\"initial commit\" --config app_flow_cli.yml\n```\n\nExplanation of:\n```dart \ngit:message=\"initial commit\"\n```\n\nGiven the config:\n\n```yaml \nworkflow:\n  git: \n    - add .\n    - commit -m \"{message}\"\n    - push\n```\n\nThis input tells the workflow system to:\n\n1) Select the **git** workflow.\n2) Replace the **{message}** placeholder in the command template with \"initial commit\".\n\n**Note:** You can specify your own keys (e.g., {message}, {branch}) as long as they match placeholders defined in the command templates.\n\nFor example:\n```dart \ngit:message=\"initial commit\",branch=dev\n```\n\nSeparate by , for multiple keys.\n\nExample of the config:\n```yaml \nworkflow:\n  git: \n    - add .\n    - commit -m \"{message}\"\n    - push origin {branch}\n```\n\n## License\n\nThis package is available under the [MIT License](https://github.com/youngcet/app_flow_cli/blob/main/LICENSE).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoungcet%2Fapp_flow_cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoungcet%2Fapp_flow_cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoungcet%2Fapp_flow_cli/lists"}