flutist 2.1.0
flutist: ^2.1.0 copied to clipboard
A Flutter project management framework inspired by Tuist
Changelog #
All notable changes to Flutist will be documented in this file.
2.1.0 - 2026-04-07 #
✨ New Features #
flutist init: 신규/기존 프로젝트 선택- 초기화 시 새 프로젝트 / 기존 프로젝트 마이그레이션을 선택할 수 있음
- 기존 프로젝트: app 모듈 생성 스킵, workspace app 항목 스킵, 빈 project.dart/package.dart 생성
flutist pub add: 다중 패키지 지원flutist pub add http dio형태로 한 번에 여러 패키지 추가 가능
- 기존 프로젝트용 템플릿 사용 가이드 주석
project.dart,package.dart에 워크플로우 3단계 주석 및 예시 추가
🐛 Fixed #
flutist create: simple 모듈 경로에 모듈 이름 누락 수정 (packages/→packages/core)flutist create: 레이어 모듈명 suffix 중복 입력 시 경고 및 종료flutist create: path 마지막 세그먼트가 name과 같을 때 중첩 경고 및 종료flutist create: 모듈 생성 시 barrel file(lib/module_name.dart) 자동 생성flutist generate: cross-path 모듈 의존성 해석 — 하드코딩된 basePaths 제거, workspace 스캔으로 동적 해석flutist generate:flutter,flutter_localizations등 모든 SDK 의존성 보존 (기존에는flutter만 보존)flutist init:lib/main.dart이미 존재하면 덮어쓰지 않음flutist init:analysis_options.yaml이미 존재하면 덮어쓰지 않음flutist init: workspace 항목이 block style로 추가됨 (- path/to/module)flutist pub add: 반복 실행 시],가 같은 줄에 붙는 포맷 깨짐 수정flutist pub add:Generated flutist_gen.dart메시지 중복 출력 수정flutist scaffold:--path옵션이 문서에만 존재하고 실제 동작하지 않던 버그 수정flutist test: 실패 시 키워드 필터링 없이 전체 stdout/stderr 출력- 아키텍처 체커: 같은 피처의
_example,_tests가_implementation,_testing에 의존하는 것을 허용 (Tuist microfeature 표준)
🔧 Changed #
strictMode동작 변경:strictMode: false여도 아키텍처 위반을 항상 감지하고 출력함.strictMode는 위반 시 중단 여부만 제어true(기본): 위반 발견 시 generate/check 중단 (exit 1)false: 위반 출력 후 계속 진행 (마이그레이션 과도기용)
📝 Documentation #
- README: SDK 의존성 및 Flutter 빌드 설정 관련 주의사항 추가
- README: 모듈 타입별 디렉토리 구조 문서화
- README: init 워크플로우 (신규/기존 프로젝트) 문서화
2.0.0 - 2026-03-30 #
🚀 Breaking Changes #
- Module Type Renaming:
feature→clean(Clean Architecture: Domain / Data / Presentation)library→micro(Microfeature Architecture: Example / Interface / Impl / Tests / Testing)standard→lite(Microfeature lite: Interface / Impl / Tests / Testing)simpleremains unchanged
- Lite module now has 4 layers (was 3):
- Added Interface layer for dependency inversion
- New structure: Interface / Implementation / Tests / Testing
✨ New Features #
-
flutist checkcommand: Validates architecture rules for module dependencies- Implementation direct reference detection (with compositionRoots exception)
- Circular dependency detection
- Testing/Example layer reference restrictions
- Clean module layer direction enforcement
-
ProjectOptionsconfiguration:strictMode(default:true): Enforces architecture rules duringflutist generatecompositionRoots(default:['app']): Modules allowed to reference Implementation directly
-
Architecture validation in
flutist generate:- When
strictMode: true, generation aborts if violations are found - When
strictMode: false, generation proceeds without validation
- When
-
flutist testcommand: Run tests across all modules in parallel- Automatically finds modules with
test/directories --module <name>option to test a specific module- Aggregated pass/fail summary with exit code 1 on failure
- Automatically finds modules with
🔧 Refactored #
- Removed unused
template.dart(Template, Attribute, TemplateItem classes) - Added
ModuleType.fromString()to replace 3 duplicate_parseModuleTypemethods - Added
StringCaseutility class for shared case conversions - Extracted
ProjectParserfromGenerateCommandfor shared parsing - Merged
checker/,generator/,parser/into unifiedengine/directory - Reused
GenFileGenerator.parsePackageDart()across commands
🧪 Tests #
- Added unit test suite (61 tests):
StringCasecase conversion + round-trip verificationModuleType.fromString()validation + old name rejectionArchitectureCheckerall 5 rules + edge casesProjectParserfile I/O + options parsingGenFileGeneratorpackage.dart parsing + round-trip verification
📦 Migration Guide #
Update all references to old module type names:
// Before (1.x)
Module(name: 'login', type: ModuleType.feature)
Module(name: 'network', type: ModuleType.library)
Module(name: 'models', type: ModuleType.standard)
// After (2.0.0)
Module(name: 'login', type: ModuleType.clean)
Module(name: 'network', type: ModuleType.micro)
Module(name: 'models', type: ModuleType.lite)
Update CLI commands:
# Before
flutist create --options feature
# After
flutist create --options clean
1.1.3 - 2025-01-02 #
📝 Documentation #
- Simplified README.md to core content (removed detailed documentation for future docs site)
- Added Docs badge with book icon linking to DeepWiki documentation
- Updated all documentation links to https://deepwiki.com/seonwooke/flutist
- Updated pubspec.yaml documentation field to point to DeepWiki
1.1.2 - 2025-01-02 #
📝 Documentation #
- Updated README.md version badge to reflect current version (1.1.1)
- Fixed project structure documentation:
- Corrected
main.dartlocation toroot/lib/main.dart(was incorrectly shown inapp/lib/main.dart) - Clarified that
app.dartbelongs inapp/lib/app.dart
- Corrected
- Removed
dart testsection from Development Setup (tests not yet implemented) - Fixed duplicate
lib/directory in project structure example
1.1.1 - 2025-01-02 #
✨ Added #
- Clean Architecture example repository:
- Added link to
flutist_clean_architecturerepository in README.md Examples section - Added Real-World Examples section to example/README.md
- Showcases Clean Architecture implementation using Flutist
- Added link to
🔧 Improved #
flutist generatecommand:- Automatically removes deleted modules from
package.dartwhen module files are not found - When a module's pubspec.yaml cannot be found (e.g.,
home_domain), extracts base module name (e.g.,home) and removes it frompackage.dart - Ensures
package.dartstays in sync with actual file system structure - Filters
flutist_gen.dartmodules to only include those present inproject.dart - Modules removed from
project.dartare now also removed fromflutist_gen.dart
- Automatically removes deleted modules from
🐛 Fixed #
- Fixed logging message format in generate command
1.1.0 - 2025-01-02 #
🚀 Major Changes #
- Project structure update: Moved
main.dartfromapp/lib/main.darttolib/main.dart- Root
lib/main.dartnow imports and runs app frompackage:app/app.dart - App module is automatically added as a path dependency in root
pubspec.yaml - Enables direct execution with
flutter runfrom root directory - Removed
flutist runcommand - useflutter rundirectly instead
- Root
✨ Added #
- Root
lib/main.dartgeneration influtist initcommand - Automatic app module dependency management in root
pubspec.yaml
🗑️ Removed #
- BREAKING:
flutist runcommand has been removed- Users should use
flutter rundirectly from the project root - This change simplifies the toolchain and aligns with standard Flutter workflows
- Users should use
🔧 Changed #
flutist initnow createslib/main.dartin root directory instead ofapp/lib/main.dart- Root
pubspec.yamltemplate now includes app module as path dependency - Run command references removed from documentation and help text
1.0.10 - 2025-01-02 #
🐛 Fixed #
flutist generatecommand:- Fixed empty dependencies section being converted from
dependencies:todependencies: {} - Now preserves original format when dependencies section is empty
- Empty dependencies sections are formatted as
dependencies:instead ofdependencies: {} - Files with unchanged dependencies no longer show unnecessary format changes
- Fixed empty dependencies section being converted from
1.0.9 - 2025-01-02 #
🐛 Fixed #
flutist createcommand:- Fixed incorrect
analysis_options.yamlinclude path for layered modules (feature, library, standard) - Now uses
path.relative()to correctly calculate relative path from module to root directory - Previously calculated depth based on
moduleRelativePath, which was incorrect for layered modules - Example:
features/book_detail/book_detail_domainnow correctly uses../../../analysis_options.yamlinstead of../../analysis_options.yaml
- Fixed incorrect
1.0.8 - 2025-01-02 #
🐛 Fixed #
flutist initcommand:- Fixed version detection using
dart pub global listcommand instead of pubspec.yaml lookup global_packagesdirectory doesn't containpubspec.yaml, onlypubspec.lock- Now correctly reads installed flutist version from
dart pub global listoutput - Fixes issue where version detection failed for globally installed packages via
dart pub global activate
- Fixed version detection using
1.0.7 - 2025-01-02 #
🐛 Fixed #
flutist initcommand:- Fixed version detection when running
flutist initafterdart pub global activate flutist - Prioritized
global_packageslookup to correctly read installed flutist version - Added package name validation to ensure correct
pubspec.yamlis read - Simplified version detection logic by removing unnecessary directory traversal
- Now correctly adds the installed flutist version to project dependencies instead of fallback version
- Fixed version detection when running
1.0.6 - 2025-01-02 #
🔧 Improved #
flutist initcommand:- Dynamically reads flutist package version from current package's
pubspec.yaml - Uses pub.dev package instead of local path reference
- Automatically reflects version updates when
pubspec.yamlis updated - Changed from hardcoded version to dynamic version reading
- Dynamically reads flutist package version from current package's
1.0.5 - 2025-01-02 #
🎨 Style #
- Applied Dart formatter to example files and codebase
- Formatted
example/flutist/flutist_gen.dart - Formatted
example/package.dart - Applied consistent code formatting across the project
- Formatted
1.0.4 - 2025-01-02 #
🐛 Fixed #
- Fixed
flutist runcommand creatingroot/lib/main.dartfile- Added explicit
-tflag to targetapp/lib/main.dartwhen running Flutter - Automatically detects and removes existing
root/lib/main.dartif found - Prevents Flutter from auto-creating
root/lib/main.dartfile
- Added explicit
1.0.3 - 2025-01-02 #
🐛 Fixed #
- Fixed
flutist runcommand creating unnecessaryroot/lib/main.dartfile- Removed auto-generation logic that created
root/lib/main.dartwhen missing - Flutter workspace automatically finds
app/lib/main.dartwhen running from root directory - Updated README.md documentation to reflect correct behavior
- Removed auto-generation logic that created
1.0.2 - 2025-01-02 #
✨ Added #
- Example directory for pub.dev with complete project structure demonstration
README.mdwith usage instructions and module type explanationsdirectory_structure.mdwith Microfeature Architecture visualization- Example
package.dartandproject.dartconfiguration files - Example
pubspec.yamlwith workspace configuration - Example
flutist_gen.dartshowing generated code structure
🔧 Improved #
flutist initcommand:- Prevent overwriting existing
README.mdfiles - Merge Flutist configuration into existing
pubspec.yamlinstead of overwriting - Automatically add
workspacesection if missing - Automatically add
appmodule to workspace if not exists - Automatically add
flutistdependency with latest version when merging - Fix
app.dartimport path inmain.dart(use relative import instead of package import)
- Prevent overwriting existing
- README.md:
- Add "Core Commands" section highlighting main 4 commands (
init,create,generate,scaffold) - Add "All Commands" table at the top for quick reference
- Improve command visibility with larger headings and bold text
- Add
scaffoldexample to Quick Start section
- Add "Core Commands" section highlighting main 4 commands (
🐛 Fixed #
- Fixed import path in generated
app/lib/main.dart(changed frompackage:app/app.darttoapp.dart) - Fixed dependency getter names in example files (camelCase conversion:
shared_preferences→sharedPreferences,json_annotation→jsonAnnotation) - Suppressed warnings in example directory with custom
analysis_options.yaml
1.0.1 - 2025-01-02 #
🐛 Fixed #
- Fixed README.md banner image loading issue by using GitHub raw URL instead of relative path
1.0.0 - 2025-01-02 #
🎉 Initial Release #
Flutist is a Flutter project management framework inspired by Tuist, providing declarative module structure and dependency management.
✨ Features #
Core Commands
flutist init- Initialize project with workspace supportflutist create- Create modules (simple, feature, library, standard)flutist generate- Sync dependencies with type-safe auto-completionflutist scaffold- Generate code from templates (Tuist-style)flutist graph- Visualize module dependencies (Mermaid, DOT, ASCII)flutist run- Run Flutter appflutist pub- Manage packages
🏗️ Module Types #
- Simple - Single-layer module
- Feature - 3-layer (Domain, Data, Presentation)
- Library - 5-layer (Example, Interface, Implementation, Testing, Tests)
- Standard - 3-layer (Implementation, Tests, Testing)
📦 What's Included #
- Auto-generated
flutist_gen.dartfor type-safe dependencies - Built-in feature template (BLoC pattern)
- Comprehensive
analysis_options.yaml(100+ lint rules) - Automatic workspace registration
- Smart relative path calculation
🐛 Known Issues #
- iOS build requires workspace workaround (Flutter limitation)
- Solution: Use Android/Web for development
📚 Quick Example #
flutist init
flutist create --path features --name login --options library
flutist generate
flutist graph --open
🙏 Credits #
Inspired by Tuist