codeable_cli 1.0.30
codeable_cli: ^1.0.30 copied to clipboard
A CLI tool that scaffolds production-ready Flutter projects with Clean Architecture, BLoC/Cubit, Dio, Hive, GoRouter, multi-flavor builds, and Firebase integration.
Changelog #
1.0.30 #
Bug Fixes #
change-id: iOS bundle identifier update now preserves flavor suffixes (.dev,.stg, etc.) across Debug/Release/Profile configurations instead of collapsing every flavor to the same new id. The command detects the current base bundle id (shortest Runner entry) and rebases it on the new id while keeping the per-flavor suffix and the.RunnerTestssuffix intact.
1.0.29 #
IDE & Build Configuration #
- Fixed
.idea/runConfigurations— removed leading newline from XML templates that prevented Android Studio/IntelliJ from parsing run configurations for development, staging, and production flavors - Added
Makefileto generated projects with--obfuscate --split-debug-info=build/debug-infoflags on all release builds (APK, App Bundle, IPA for all flavors) - Makefile includes
make help, run/build/clean/lint/format/test targets, and code generation commands (gen-l10n,gen-splash,gen-icons)
New CLI Command: bottom-sheet #
- Added
codeable_cli bottom-sheet <name> --feature <path> --type <type>command - Generates a bottom sheet widget inside an existing feature's
presentation/widgets/directory - Four types:
action(list of actions),confirmation(confirm/cancel),form(with inputs),custom(empty template) - Auto-discovers features via interactive picker when
--featureis not provided - Uses the project's
CustomBottomSheetcore widget
Project Structure Improvements #
- Added
.gitkeeptofirebase/{development,staging,production}/directories so they're tracked by git /env/folder is gitignored —.env.development,.env.staging,.env.productionfiles are created locally but not committed.idea/runConfigurations/is whitelisted in.gitignoreso development, staging, and production run configs are committed and available on clone
1.0.27 #
New Core Widgets #
- Added
FormBuilderwidget — drives button disabled state reactively fromTextEditingControllerlist usingListenableBuilder+Listenable.merge(no setState, no cubit needed for form validity) - Default validation: all fields non-empty. Custom validation via optional
validatorcallback - Added
CustomOtpFieldwidget — single hidden TextField approach for zero keyboard flicker, auto-paste support, blinking cursor, configurable length/size/colors/haptics - Added
form_builder.dartandotp_input_field.dartto core widgets export barrel
CustomTextField Fixes #
- Removed hidden
errorStyle(TextStyle(height: 0, fontSize: 0)) that suppressed Flutter's native validation error messages - Removed custom
ValueListenableBuildererror display below the field - Validation now uses Flutter's native
Form+TextFormFieldsystem — error messages appear automatically when_formKey.currentState!.validate()is called
1.0.26 #
Envied-Based Secret Management #
- Replaced
ApiEnvironmentenum withenvied-basedAppEnvpattern - Per-flavor
.envfiles in gitignoredenv/folder (env/.env.development,env/.env.staging,env/.env.production) - Per-flavor env dart files in
lib/config/env/with@Enviedannotations and XOR obfuscation for API keys AppEnvresolver class picks the correct env based on current flavor- Added
enviedto dependencies andenvied_generatorto dev_dependencies
Build Security & Obfuscation #
- Added
Makefilewith--obfuscate --split-debug-info=build/debug-infofor all release build targets - Android release builds now use
shrinkResources trueandproguard-android-optimize.txt - Consistent build commands:
make apk-prod,make bundle-prod,make ipa-prod
Template Updates #
EndpointsandSocketServicetemplates now useAppEnvinstead ofApiEnvironment- Updated README template with envied setup documentation
- Updated AI config templates (CLAUDE.md, .cursorrules) with new env pattern
1.0.25 #
Centralized execute() Error Handling #
- Added
execute()helper function toRepositoryResponsetemplate for unified error handling in repositories - Repository implementation templates now use
execute()pattern — no manual try-catch needed - Callbacks return
Tdirectly;execute()wraps the result inRepositoryResponse<T> execute()catchesAppApiExceptionfor expected errors and logs unexpected errors viaAppLogger
ApiService Logging #
- Replaced
debugPrintwithAppLogger.errorinApiService._handleRequestand_handleDioError - Removed
flutter/material.dartimport from ApiService (was only needed fordebugPrint) - Added
logger_helper.dartimport to ApiService template
AI Config #
- Updated CLAUDE.md and .cursorrules templates with
execute()pattern documentation
New Utility Helpers #
- Added
haptic_helper.dart— semantic haptic feedback (success, error, tap, toggle, destructive) - Added
url_helper.dart— launch maps with coordinates (iOS/Android), launch websites - Added
responsive_helper.dart— device type detection, responsive values, font/padding/spacing scaling, context extensions - Added
image_conversion_helper.dart— convert XFile images to base64 data URIs - Added
phone_number_parser.dart— parse international phone numbers into country code + national number - Added
extract_file_from_url_helper.dart— extract filename from URL - Added
price_formatter.dart— format price (strips .00, keeps decimals otherwise)
1.0.23 #
Error Handling #
- Network errors (no WiFi, DNS failure, timeout) now show user-friendly messages instead of raw Dio/SocketException text
ApiService._handleDioError()mapsDioExceptionTypeto clean messages (connection timeout, no internet, cancelled)- Backend error messages pass through unchanged — only system-level errors are sanitized
- Repository pattern enforced: only catch
AppApiException, no genericcatch (e)blocks - Cubits no longer have try-catch — error handling belongs exclusively in the repository layer
Resilient List Parsing #
- List parsing in
fromJsonnow uses safe pattern:whereType<Map<String, dynamic>>()+ per-item try/catch - If 1 item in a list of 100 has bad data, the other 99 parse successfully — no more full-list crashes
- Updated
ResponseDataParser, AI config templates, and all model generation instructions
Claude Plugin #
- Updated error-handling and dio-patterns skills with new patterns
- Updated add-api, add-model, add-pagination, and add-cache commands with safe list parsing
1.0.22 #
WebSocket Support #
- Added
SocketServicewith auto-reconnect, token-based auth, room join/leave, and typed broadcast streams (lib/core/socket_service/) - Added
SocketStatusenum (disconnected,connecting,connected,reconnecting,error) SocketServiceauto-registered as singleton in DI viaAppModule._setupSocketService()- Added
socketUrlfield toApiEnvironment— per-flavor WebSocket URLs configured out of the box - Added
web_socket_channel: ^3.0.3to generated pubspec dependencies
Logger Upgrade #
- Replaced basic
PrettyPrinterwith custom_AppLogPrinter— emoji level indicators, ANSI color codes, timestamps, and tree-style stack traces - Log levels: TRACE, DEBUG, INFO, WARN, ERROR, FATAL with distinct colors
- Automatic filtering:
DevelopmentFilterin debug,ProductionFilterin release
AI Config #
- CLAUDE.md and .cursorrules now document WebSocket and logging patterns
- Added
websocket-patternsskill to Codeable Claude Plugin
1.0.21 #
Branding #
- PNG banner with raw GitHub URL for pub.dev rendering (SVGs not supported on pub.dev)
1.0.20 #
Branding #
- Added branded banner SVG matching Codeable design system (dark purple gradient, logo, lime accent pills)
1.0.19 #
Fixes #
- Plugin marketplace source now uses HTTPS URL instead of SSH — plugin installs on any machine without SSH key setup
- Updated plugin version to 1.1.1
1.0.18 #
New CLI Commands #
- Added
doctorcommand — checks project health (cubit registration, route wiring, import consistency, localization key parity across ARB files) - Added
remove-featurecommand — safely removes a feature and unwires its cubit, routes, and imports (inverse offeature) - Added
add-localecommand — adds a new language/locale ARB file with TODO placeholders from the English reference
Branding #
- Updated README with Codeable branding (lime/purple badge strip, dynamic pub.dev version badge, wordmark footer with dark/light mode)
- Added Codeable wordmark SVG assets
New Claude Plugin Skills (10 skill templates) #
add-model— Generate data models with fromJson/toJson/copyWith/Equatableadd-pagination— Wire paginated API calls using PaginationModel in cubit state with PaginatedListViewadd-form— Generate validated form screens with CustomTextField, FieldValidators, and cubit submissionadd-di— Register services/repositories in GetIt dependency injectionadd-hive-model— Generate Hive TypeAdapter models with auto TypeId assignmentadd-test— Generate cubit and repository unit tests with mocktail and bloc_testadd-bottom-nav— Wire bottom navigation with GoRouter ShellRouteadd-interceptor— Add custom Dio interceptors to ApiServiceimplement-screen— Build screens from description/Figma using core widgets and project patternsadd-firebase-config— Configure Firebase for all 3 flavors usingflutterfire configure
1.0.17 #
- Auto-install Codeable Flutter CLI Claude Plugin in generated projects via
.claude/settings.json - New projects get all commands, skills, agents, and hooks from the plugin automatically — no manual setup needed
- Removed inline
.claude/commands/files (localize, fix-rtl, add-api, add-cubit-state) — the plugin now provides these and more
1.0.16 #
- Added
pageTransitionsThemetoThemeDatawithFadeForwardsPageTransitionsBuilderfor smooth Android page transitions
1.0.15 #
featurecommand no longer auto-prompts for role selection when multiple role directories exist- Role selection is now opt-in: use
--role <name>to specify a role directly, or--pick-role(-R) to interactively choose from existing role directories - Without
--roleor--pick-role, features are created directly inlib/features/ - Added
Localizationstatic service (lib/l10n/localization_service.dart) for accessing localized strings withoutBuildContext Localization.keyNameworks anywhere (validators, formatters, models);context.l10n.keyNameremains preferred in widgetsl10n.dartbarrel file now exportslocalization_service.dartso a single import gives access to bothcontext.l10nandLocalizationAppViewbuilder auto-updates theLocalizationservice on every locale change- Added
/localizeClaude Code slash command (.claude/commands/localize.md) that auto-localizes an entire feature directory - Fixed all remaining
EdgeInsets.only(left/right)andEdgeInsets.fromLTRBin templates to useEdgeInsetsDirectionalfor proper RTL support - Added
/fix-rtlClaude Code command to migrateEdgeInsetstoEdgeInsetsDirectionalin existing projects - Added
/add-apiClaude Code command to wire up a new API endpoint end-to-end through all architecture layers - Added
/add-cubit-stateClaude Code command to add new state fields and cubit methods to existing features - Updated CLAUDE.md and .cursorrules templates with localization pattern documentation
1.0.14 #
- Chucker Flutter network inspector is now only active in the development flavor (disabled in staging and production)
1.0.13 #
- Suppressed Java 8 source/target deprecation warnings globally via root
build.gradle.kts - Disabled automatic signing in iOS (ProvisioningStyle = Manual) so Xcode doesn't pre-select a team
1.0.12 #
- Added
change-app-namecommand to update app display name across Android, iOS, l10n, and constants - Updated all dependency versions to latest (Firebase 4.x, GoRouter 17.x, get_it 9.x, etc.)
- Fixed staging/development flavors using PascalCase instead of app display name
- Moved
updatecommand documentation near Installation in README
1.0.11 #
- Added
--app-nameoption tocreatecommand for setting the app display name separately from the project name - Toast helper now uses custom SVG icons (success, error, info) instead of Material Icons
- Removed
showWarningToastfrom toast helper CustomSocialAuthButton.iconPathis now required- Login screen includes emblem logo and social auth icons out of the box
- Bundled all SVG assets (search, filter, dropdown, tick, star, social auth, emblem, codeable logo)
- Cleaned up
AssetPaths— removed unused entries, fixed duplicateerrorIcon - README code blocks split for easier copying
1.0.8 #
- Flavor display names now use suffix format:
MyApp [DEV],MyApp [STG] - Added
kotlin-stdlib:2.2.10dependency to Android build.gradle.kts - Suppressed Java 8 source/target deprecation warnings from dependencies
- Removed home screen navigation from splash (logs auth token only)
1.0.7 #
- Added shell navigation scaffolding (StatefulShellRoute, AppNavigation, NavItem model) — commented out with placeholder values for easy activation
- Added bundled
arrow_left_icon.svgfor app bar back button - iOS flavor builds fully configured (xcschemes, 27 build configurations, per-flavor bundle IDs and app names)
- Per-flavor app icons for iOS (AppIcon-dev, AppIcon-stg) and Android (development/staging source sets)
- Bundled BBBPoppins (headings) and SFProRounded (body) fonts with updated text styles
- Run configurations moved to
.idea/runConfigurations/withbuildFlavoroption for Android Studio - Fixed app crash from MainActivity namespace mismatch (
_relocateMainActivity) - Added
UIApplicationSceneManifestandITSAppUsesNonExemptEncryptionto Info.plist - Firebase packages kept active in pubspec (initialization remains commented out in DI)
- Centered app bar title by default, no leading image when back button is hidden
1.0.6 #
- Fixed
--versionflag to report correct version - Keystore now uses
<project_name>-keystore.jksfilename and<project_name>-alias - Keystore password set to
androidby default
1.0.5 #
- Fixed repository and issue tracker URLs to point to the correct GitHub repo
- Shortened package description to meet pub.dev guidelines (60-180 characters)
- Added example file for pub.dev documentation score
1.0.4 #
- All Codeable links now point to gocodeable.com
- Added custom Codeable logo to README badge
1.0.2 #
- Revamped README with Table of Contents, FAQ, contributors section, and improved formatting
- Updated project structure docs (removed deprecated guards directory)
- Updated feature command docs to reflect auto-wiring behavior
1.0.1 #
featurecommand now auto-wires everything: registers cubit inapp_page.dart, adds route togo_router, and adds route constants- Generated feature screens include
customAppBarandBlocBuilderout of the box - Repository implementations now include both
ApiServiceandAppPreferences(cache) - Removed deprecated
legacyCustomAppBarfrom templates - Removed unnecessary
.gitkeepfrom feature widgets folder
1.0.0 #
- Initial release
createcommand: Scaffold a complete Flutter project with Clean Architecture, BLoC/Cubit, Dio, Hive, GoRouter, and multi-flavor buildsfeaturecommand: Generate feature modules with data/domain/presentation layersrenamecommand: Rename the project across all files and configurationschange-idcommand: Update the app/bundle identifiersamplecommand: Add sample features with pre-built UI components- 30+ production-ready reusable UI components
- Firebase setup with per-flavor configuration
- Android keystore generation
- AI-assisted development config (CLAUDE.md, .cursorrules)
- Localization support with ARB files