import_guard
An analyzer plugin to guard imports between packages and folders.
Requires Dart 3.10+. For older Dart versions, use import_guard_custom_lint.
Features
- Define import restrictions per folder using
import_guard.yaml - Glob patterns:
package:my_app/data/**,package:flutter/** - Works with package imports and relative imports
- Hierarchical config inheritance from repo root
- Native IDE integration via
dart analyze/flutter analyze
Installation
dev_dependencies:
import_guard: ^0.0.1
Enable in analysis_options.yaml:
plugins:
import_guard: ^0.0.1
Usage
Create import_guard.yaml in any directory to define restrictions for files in that directory.
Example: Clean Architecture
For a Flutter app named my_app:
my_app/
├── pubspec.yaml # name: my_app
└── lib/
├── domain/
│ ├── import_guard.yaml
│ └── user.dart
├── presentation/
│ └── user_page.dart
└── data/
└── user_repository.dart
# lib/domain/import_guard.yaml
deny:
- package:my_app/presentation/**
- package:my_app/data/**
This prevents domain layer from importing presentation or data layers.
Pattern Types
| Pattern | Matches |
|---|---|
package:my_app/data/** |
All files under lib/data/ |
package:my_app/data/* |
Direct children of lib/data/ only |
package:flutter/** |
All flutter imports |
dart:mirrors |
Specific dart library |
../data/** |
Relative path patterns |
Recommended: Use package imports
To simplify configuration, enable always_use_package_imports:
# analysis_options.yaml
linter:
rules:
- always_use_package_imports
Then you only need to write package patterns (no relative path patterns needed).
Running
dart analyze
# or
flutter analyze
Related Packages
- import_guard_custom_lint - custom_lint implementation (Dart 3.6+)
License
MIT