import_guard

An analyzer plugin to guard imports between packages and folders.

日本語版 README

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

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

License

MIT

Libraries

main