Skip to content

Configuration ​

Unreach supports configuration files to customize analysis behavior without command-line flags.

Supported Configuration Files ​

Unreach looks for configuration files in the following order (first found is used):

  1. unreach.config.js - JavaScript configuration file
  2. unreach.config.ts - TypeScript configuration file (requires ts-node to be installed)

Configuration files should be placed in the project root directory (same level as package.json).

Configuration Schema ​

typescript
interface UnreachConfig {
  ignore?: {
    files?: string[];
    packages?: string[];
    exports?: string[];
    functions?: string[];
    variables?: string[];
    imports?: string[];
    types?: string[];
    cssClasses?: string[];
    assets?: string[];
  };
  entryPoints?: string[];
  excludePatterns?: string[];
  rules?: {
    unusedPackages?: boolean;
    unusedImports?: boolean;
    unusedExports?: boolean;
    unusedFunctions?: boolean;
    unusedVariables?: boolean;
    unusedFiles?: boolean;
    unusedConfigs?: boolean;
    unusedScripts?: boolean;
    unusedTypes?: boolean;
    unusedCSSClasses?: boolean;
    unusedAssets?: boolean;
  };
  fix?: {
    enabled?: boolean;
    backup?: boolean;
    interactive?: boolean;
  };
  testFileDetection?: {
    enabled?: boolean;
    patterns?: string[];
  };
  maxFileSize?: number;
  watchRateLimit?: number;
}

JavaScript Configuration Example ​

Create unreach.config.js in your project root:

javascript
module.exports = {
  ignore: {
    files: ["**/*.test.ts", "**/fixtures/**"],
    packages: ["@types/*"],
    exports: ["**/index.ts"],
    functions: ["main"],
    variables: [],
    imports: [],
    types: [],
    cssClasses: [],
    assets: []
  },
  entryPoints: ["src/index.ts"],
  excludePatterns: ["**/node_modules/**", "**/dist/**"],
  rules: {
    unusedPackages: true,
    unusedImports: true,
    unusedExports: true,
    unusedFunctions: true,
    unusedVariables: true,
    unusedFiles: true,
    unusedConfigs: true,
    unusedScripts: true,
    unusedTypes: true,
    unusedCSSClasses: true,
    unusedAssets: true
  },
  testFileDetection: {
    enabled: true,
    patterns: ["**/*.test.ts", "**/*.spec.ts", "**/__tests__/**"]
  },
  maxFileSize: 10 * 1024 * 1024, // 10MB
  watchRateLimit: 1 // scans per second
};

TypeScript Configuration Example ​

Create unreach.config.ts:

typescript
import type { UnreachConfig } from "unreach";

const config: UnreachConfig = {
  ignore: {
    files: ["**/*.test.ts"],
    packages: ["@types/*"]
  },
  entryPoints: ["src/index.ts"],
  rules: {
    unusedPackages: true,
    unusedImports: true
  },
  testFileDetection: {
    enabled: true,
    patterns: ["**/*.test.ts", "**/*.spec.ts"]
  },
  maxFileSize: 10 * 1024 * 1024,
  watchRateLimit: 1
};

export default config;

Note: For TypeScript config files, you need ts-node installed:

bash
npm install -D ts-node
# or
yarn add -D ts-node
# or
pnpm add -D ts-node

Configuration Options ​

ignore ​

Specify patterns to ignore during analysis:

  • files - Glob patterns for files to ignore
  • packages - Package names or patterns to ignore (supports glob patterns like @types/*)
  • exports - Export names or file patterns to ignore
  • functions - Function names to ignore
  • variables - Variable names to ignore
  • imports - Import paths to ignore
  • types - Type names to ignore
  • cssClasses - CSS class names to ignore
  • assets - Asset file paths to ignore

entryPoints ​

Custom entry points for analysis. If not specified, Unreach will auto-detect from package.json and tsconfig.json.

excludePatterns ​

Glob patterns for files/directories to exclude from analysis entirely.

rules ​

Enable or disable specific analysis rules:

  • unusedPackages - Detect unused npm packages
  • unusedImports - Detect unused imports
  • unusedExports - Detect unused exports
  • unusedFunctions - Detect unused functions
  • unusedVariables - Detect unused variables
  • unusedFiles - Detect unused files
  • unusedConfigs - Detect unused config keys
  • unusedScripts - Detect unused npm scripts
  • unusedTypes - Detect unused TypeScript types
  • unusedCSSClasses - Detect unused CSS classes
  • unusedAssets - Detect unused asset files

All rules default to true if not specified.

testFileDetection ​

Configure automatic test file exclusion:

  • enabled - Enable/disable test file detection (default: true)
  • patterns - Glob patterns for test files (default: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx", "**/__tests__/**"])

maxFileSize ​

Maximum file size in bytes to parse. Files exceeding this limit will be skipped. Default: 10 * 1024 * 1024 (10MB).

watchRateLimit ​

Maximum number of scans per second in watch mode. Default: 1 (1 scan per second).

fix ​

Configuration for auto-fix feature (coming soon):

  • enabled - Enable auto-fix
  • backup - Create backup before fixing
  • interactive - Prompt before fixing

Disable Configuration ​

Use the --no-config flag to ignore configuration files:

bash
unreach scan --no-config

Configuration Validation ​

Unreach validates your configuration file and will show helpful error messages if there are issues:

❌ Error: Invalid configuration in unreach.config.js:
  - "ignore" must be an object
  - "entryPoints" must be an array
  - "rules" must be an object

Common Patterns ​

Ignore All Test Files ​

javascript
module.exports = {
  ignore: {
    files: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx", "**/__tests__/**"]
  }
};

Ignore Type Definition Packages ​

javascript
module.exports = {
  ignore: {
    packages: ["@types/*"]
  }
};

Custom Entry Points ​

javascript
module.exports = {
  entryPoints: ["src/index.ts", "src/cli.ts", "src/server.ts"]
};

Disable Specific Rules ​

javascript
module.exports = {
  rules: {
    unusedConfigs: false,
    unusedScripts: false
  }
};

Configure File Size Limit ​

javascript
module.exports = {
  maxFileSize: 5 * 1024 * 1024 // 5MB
};

Configure Watch Rate Limit ​

javascript
module.exports = {
  watchRateLimit: 2 // 2 scans per second
};

Released under the MIT License.