Skip to main content

Overview

Rev-dep provides 10 different check types to enforce codebase quality and architectural constraints. Each check can be enabled per-rule and configured with specific options.
Most checks support both single object and array of objects formats, allowing multiple detector instances with different configurations.

moduleBoundaries

Enforce architecture boundaries between modules. Prevent unauthorized cross-domain imports based on file patterns.
moduleBoundaries
array
Array of boundary rule objects.
{
  "moduleBoundaries": [
    {
      "name": "ui-components",
      "pattern": "src/components/**/*",
      "allow": ["src/utils/**/*", "src/types/**/*"],
      "deny": ["src/api/**/*"]
    },
    {
      "name": "api-layer",
      "pattern": "src/api/**/*",
      "allow": ["src/utils/**/*", "src/types/**/*"],
      "deny": ["src/components/**/*"]
    }
  ]
}
How it works: Files matching pattern are checked against allow and deny rules. Imports not matching allow (or matching deny) trigger violations.

importConventions

Enforce import style conventions (relative vs absolute). Automatically fix violations.
importConventions
array
Array of import convention rules.
{
  "importConventions": [
    {
      "rule": "relative-internal-absolute-external",
      "autofix": true,
      "domains": [
        {
          "path": "src/features/auth",
          "alias": "@auth",
          "enabled": true
        },
        {
          "path": "src/features/dashboard",
          "alias": "@dashboard",
          "enabled": true
        },
        {
          "path": "src/shared",
          "alias": "@shared",
          "enabled": true
        }
      ]
    }
  ]
}
Violation Examples:
// ❌ Bad: relative import to external domain
// File: src/features/auth/login.ts
import { Button } from '../../../shared/ui/Button'

// ✅ Good: absolute import with alias
import { Button } from '@shared/ui/Button'

// ✅ Good: relative import within same domain
import { validateEmail } from './validators'

circularImportsDetection

Detect circular import chains in your codebase.
circularImportsDetection
object | array
Circular imports detection configuration.
{
  "circularImportsDetection": {
    "enabled": true,
    "ignoreTypeImports": true
  }
}
Set ignoreTypeImports: true for TypeScript projects to avoid false positives from type-only circular references.

orphanFilesDetection

Detect dead/orphan files unreachable from entry points. Supports autofix (deletes files).
orphanFilesDetection
object | array
Orphan files detection configuration.
{
  "orphanFilesDetection": {
    "enabled": true,
    "validEntryPoints": ["src/main.tsx", "src/pages/**/*.tsx"],
    "ignoreTypeImports": true,
    "graphExclude": ["**/*.test.*", "**/stories/**/*"],
    "autofix": true
  }
}
Be careful with autofix: true - it will permanently delete orphan files. Always run without --fix first to review.

unusedExportsDetection

Detect exports that are never imported. Supports autofix (removes exports).
unusedExportsDetection
object | array
Unused exports detection configuration.
{
  "unusedExportsDetection": {
    "enabled": true,
    "autofix": true,
    "ignoreTypeExports": true,
    "graphExclude": ["**/*.stories.tsx"],
    "ignore": {
      "src/types.ts": "B*",
      "**/generated/**/*.ts": "*"
    },
    "ignoreFiles": ["**/*.generated.ts"],
    "ignoreExports": ["default", "unused*"]
  }
}

unusedNodeModulesDetection

Detect dependencies declared in package.json but not used in code.
unusedNodeModulesDetection
object | array
Unused node modules detection configuration.
{
  "unusedNodeModulesDetection": {
    "enabled": true,
    "includeModules": ["@myorg/**"],
    "excludeModules": ["@types/**"],
    "pkgJsonFieldsWithBinaries": ["scripts", "bin"],
    "filesWithBinaries": ["scripts/check-something.sh"],
    "filesWithModules": [".storybook/main.ts"],
    "outputType": "groupByModule"
  }
}

missingNodeModulesDetection

Detect imports that are not declared in package.json dependencies.
missingNodeModulesDetection
object | array
Missing node modules detection configuration.
{
  "missingNodeModulesDetection": {
    "enabled": true,
    "includeModules": ["lodash", "axios"],
    "excludeModules": ["@types/**"],
    "outputType": "groupByFile"
  }
}

unresolvedImportsDetection

Detect import requests that cannot be resolved during module resolution.
unresolvedImportsDetection
object | array
Unresolved imports detection configuration.
{
  "unresolvedImportsDetection": {
    "enabled": true,
    "ignore": {
      "src/index.ts": "legacy-*"
    },
    "ignoreFiles": ["**/*.generated.ts"],
    "ignoreImports": ["@internal/*"]
  }
}

devDepsUsageOnProdDetection

Detect dev dependencies imported in production code.
devDepsUsageOnProdDetection
object | array
Dev dependencies usage detection configuration.
{
  "devDepsUsageOnProdDetection": {
    "enabled": true,
    "ignoreTypeImports": true
  }
}
Example output:
❌ Restricted Dev Dependencies Usage Issues (2):
  lodash (dev dependency)
     - src/components/Button.tsx (from entry point: src/pages/index.tsx)
     - src/utils/helpers.ts (from entry point: src/pages/index.tsx)
Enable ignoreTypeImports: true to allow importing types from dev dependencies (safe at runtime).

restrictedImportsDetection

Block importing denied files/modules from selected entry points.
restrictedImportsDetection
object | array
Restricted imports detection configuration.
Server Entry Example
{
  "restrictedImportsDetection": {
    "enabled": true,
    "entryPoints": ["src/server.ts", "src/server/**/*.ts"],
    "graphExclude": ["some-file-coupling-other-files.ts"],
    "denyFiles": ["**/*.tsx"],
    "denyModules": ["react", "react-*"],
    "ignoreMatches": ["src/server/allowed-view.tsx", "react-awesome-lib"],
    "ignoreTypeImports": true
  }
}
Use case: Prevent server code from importing browser-only libraries (React, DOM APIs, etc.).

Multiple Detector Instances

Most checks support arrays to run multiple detector instances with different configurations:
{
  "orphanFilesDetection": [
    {
      "enabled": true,
      "validEntryPoints": ["src/main.tsx"],
      "graphExclude": ["**/*.test.*"]
    },
    {
      "enabled": true,
      "validEntryPoints": ["scripts/build.ts"],
      "graphExclude": ["src/**/*"]
    }
  ]
}

Next Steps

Rules

Learn how to structure rules

Config File

Complete config schema reference

CLI: config run

Command-line options

Monorepo Guide

Monorepo-specific configuration

Build docs developers (and LLMs) love