Skip to content

gpichot/domainlint

Repository files navigation

domainlint

A TypeScript/JavaScript linter that enforces architectural boundaries and detects import cycles in feature-based codebases.

What it does

domainlint helps maintain clean architecture in domain-driven or feature-based projects by:

  • 🏗️ Enforcing feature boundaries: Ensures that code within features only imports from allowed locations (other features via barrel files, same feature internal files)
  • 🚫 Preventing non-domain imports: Blocks feature files from importing from non-domain directories (like src/lib, src/utils, etc.)
  • 🔄 Detecting import cycles: Identifies circular dependencies that can lead to runtime errors and poor maintainability
  • 📊 Providing detailed reports: Shows violations with file paths, cycle analysis, and domain-specific summaries
  • ⚙️ Flexible configuration: Supports custom rules, overrides, and TypeScript configuration integration

Perfect for React applications with feature folders, domain-driven architectures, or any codebase where you want to enforce import rules and prevent circular dependencies.

oclif Version Downloads/week

Usage

$ npm install -g domainlint
$ domainlint COMMAND
running command...
$ domainlint (--version)
domainlint/0.1.1 darwin-arm64 node-v22.21.0
$ domainlint --help [COMMAND]
USAGE
  $ domainlint COMMAND
...

Commands

domainlint check [PATH]

Check feature boundaries and import cycles

USAGE
  $ domainlint check [PATH] [-c <value>] [--src-dir <value>] [--features-dir <value>] [--tsconfig-path
    <value>] [--include-dynamic-imports] [--no-color] [-v] [--feature <value>] [--shortest-cycles] [--max-cycle-length
    <value>]

ARGUMENTS
  [PATH]  [default: .] Path to the project to check

FLAGS
  -c, --config=<value>            Path to config file
  -v, --verbose                   Verbose output
      --feature=<value>           Filter violations by feature name
      --features-dir=<value>      Features directory (default: src/features)
      --include-dynamic-imports   Include dynamic imports in analysis
      --max-cycle-length=<value>  [default: 50] Hide cycles longer than this length
      --no-color                  Disable colored output
      --shortest-cycles           Show only the shortest cycles (easier to fix)
      --src-dir=<value>           Source directory (default: src)
      --tsconfig-path=<value>     Path to tsconfig.json (default: ./tsconfig.json)

DESCRIPTION
  Check feature boundaries and import cycles

EXAMPLES
  $ domainlint check

  $ domainlint check ./my-project

See code: src/commands/check.ts

domainlint help [COMMAND]

Display help for domainlint.

USAGE
  $ domainlint help [COMMAND...] [-n]

ARGUMENTS
  [COMMAND...]  Command to show help for.

FLAGS
  -n, --nested-commands  Include all nested commands in the output.

DESCRIPTION
  Display help for domainlint.

See code: @oclif/plugin-help

domainlint check [PATH]

Check feature boundaries and import cycles

USAGE
  $ domainlint check [PATH] [-c <value>] [--src-dir <value>] [--features-dir <value>] [--tsconfig-path
    <value>] [--include-dynamic-imports] [--no-color] [-v] [--feature <value>] [--shortest-cycles] [--max-cycle-length
    <value>]

ARGUMENTS
  [PATH]  [default: .] Path to the project to check

FLAGS
  -c, --config=<value>            Path to config file
  -v, --verbose                   Verbose output
      --feature=<value>           Filter violations by feature name
      --features-dir=<value>      Features directory (default: src/features)
      --include-dynamic-imports   Include dynamic imports in analysis
      --max-cycle-length=<value>  [default: 50] Hide cycles longer than this length
      --no-color                  Disable colored output
      --shortest-cycles           Show only the shortest cycles (easier to fix)
      --src-dir=<value>           Source directory (default: src)
      --tsconfig-path=<value>     Path to tsconfig.json (default: ./tsconfig.json)

DESCRIPTION
  Check feature boundaries and import cycles

EXAMPLES
  $ domainlint check

  $ domainlint check ./my-project

See code: src/commands/check.ts

About

Linter for features-based TypeScript projects

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors