CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-knip

Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

configuration.mddocs/

Configuration

Flexible configuration system supporting project-level and workspace-level settings with extensive customization options. Knip supports multiple configuration file formats and locations.

Capabilities

Configuration Types

Core configuration interface for customizing Knip behavior.

/**
 * Main configuration type for Knip
 */
type KnipConfig = {
  /** Entry files patterns */
  entry?: string | string[];
  /** Project files patterns */
  project?: string | string[];
  /** Files to ignore during analysis */
  ignore?: string | string[];
  /** Binary executables to ignore */
  ignoreBinaries?: (string | RegExp)[];
  /** Dependencies to ignore */
  ignoreDependencies?: (string | RegExp)[];
  /** Unresolved imports to ignore */
  ignoreUnresolved?: (string | RegExp)[];
  /** Class/interface members to ignore */
  ignoreMembers?: (string | RegExp)[];
  /** Workspaces to ignore */
  ignoreWorkspaces?: string[];
  /** Export usage rules per file */
  ignoreExportsUsedInFile?: boolean | Partial<Record<SymbolType, boolean>>;
  /** Include entry exports in unused exports report */
  isIncludeEntryExports?: boolean;
  /** Workspace-specific configurations */
  workspaces?: Record<string, WorkspaceConfiguration>;
  /** Plugin configurations */
  [pluginName: string]: PluginConfiguration | any;
};

interface WorkspaceConfiguration {
  /** Entry files for this workspace */
  entry?: string | string[];
  /** Project files for this workspace */
  project?: string | string[];
  /** Files to ignore in this workspace */
  ignore?: string | string[];
  /** TypeScript path mappings */
  paths?: Record<string, string[]>;
  /** Include entry exports for this workspace */
  isIncludeEntryExports?: boolean;
  /** Plugin configurations for this workspace */
  [pluginName: string]: PluginConfiguration | any;
}

type PluginConfiguration = boolean | {
  /** Configuration files for the plugin */
  config?: string | string[];
  /** Entry files for the plugin */
  entry?: string | string[];
  /** Project files for the plugin */
  project?: string | string[];
};

Usage Examples:

Basic Configuration

{
  "entry": ["src/index.ts", "src/cli.ts"],
  "project": ["src/**/*.ts", "scripts/**/*.js"],
  "ignore": ["src/**/*.test.ts", "src/**/*.spec.ts"],
  "ignoreDependencies": ["@types/*"],
  "ignoreBinaries": ["git", "npm"]
}

Workspace Configuration

{
  "workspaces": {
    "packages/frontend": {
      "entry": ["src/main.tsx"],
      "project": ["src/**/*.{ts,tsx}"],
      "ignore": ["src/**/*.test.{ts,tsx}"]
    },
    "packages/backend": {
      "entry": ["src/server.ts"],
      "project": ["src/**/*.ts"],
      "ignore": ["src/**/*.test.ts"]
    }
  }
}

Plugin-Specific Configuration

{
  "jest": {
    "config": ["jest.config.js"],
    "entry": ["src/**/*.test.ts", "src/**/*.spec.ts"]
  },
  "webpack": {
    "config": ["webpack.config.js", "webpack.*.js"],
    "entry": ["src/webpack.config.js"]
  },
  "eslint": true,
  "prettier": false
}

Configuration File Locations

Knip searches for configuration in multiple locations and formats.

/** Supported configuration file locations */
const KNIP_CONFIG_LOCATIONS = [
  'knip.json',
  'knip.jsonc',
  '.knip.json',
  '.knip.jsonc',
  'knip.ts',
  'knip.js',
  'knip.config.ts',
  'knip.config.js'
];

Configuration Priority:

  1. CLI --config option
  2. Configuration files in order listed above
  3. package.json knip field
  4. Default configuration

Configuration Loading

Functions for loading and validating configuration files.

/**
 * Create analysis options from CLI arguments and configuration
 * @param options - Partial options including parsed CLI args
 * @returns Complete options for analysis
 */
function createOptions(options: CreateOptions): Promise<MainOptions>;

interface CreateOptions {
  /** Parsed CLI arguments */
  parsedCLIArgs?: ParsedArgs;
  /** Working directory */
  cwd?: string;
  /** Additional option overrides */
  [key: string]: any;
}

/**
 * Load configuration file from specified path
 * @param configPath - Path to configuration file
 * @returns Parsed configuration object
 */
function loadConfig(configPath: string): Promise<KnipConfig>;

Usage Examples:

import { createOptions, loadConfig } from "knip";

// Load configuration manually
const config = await loadConfig('./knip.config.js');

// Create complete options from CLI args
const options = await createOptions({
  parsedCLIArgs: { production: true, config: './knip.json' },
  cwd: process.cwd()
});

Ignore Patterns

Various ignore pattern configurations for fine-tuning analysis.

/** Pattern types for ignoring items */
type IgnorePatterns = (string | RegExp)[];

/** Export ignore configuration per symbol type */
type IgnoreExportsUsedInFile = boolean | Partial<Record<SymbolType, boolean>>;

enum SymbolType {
  VARIABLE = 'variable',
  TYPE = 'type',
  INTERFACE = 'interface',
  ENUM = 'enum',
  FUNCTION = 'function',
  CLASS = 'class',
  MEMBER = 'member',
  UNKNOWN = 'unknown'
}

Advanced Ignore Examples:

{
  "ignoreDependencies": [
    "@types/*",
    /^@babel\/.*/,
    "webpack"
  ],
  "ignoreBinaries": [
    "git",
    "docker",
    /^npm.*/
  ],
  "ignoreUnresolved": [
    "virtual:*",
    "*.css",
    "*.png"
  ],
  "ignoreExportsUsedInFile": {
    "interface": true,
    "type": true,
    "enum": false
  }
}

Plugin Configuration

Configuration system for enabling and configuring plugins.

interface Plugin {
  /** Plugin display name */
  title: string;
  /** Files/packages that enable this plugin */
  enablers?: IgnorePatterns | string;
  /** Custom enablement logic */
  isEnabled?: IsPluginEnabled;
  /** Only run in root workspace */
  isRootOnly?: boolean;
  /** Configuration file patterns */
  config?: string[];
  /** Entry file patterns */
  entry?: string[];
  /** Production file patterns */
  production?: string[];
  /** Project file patterns */
  project?: string[];
}

type IsPluginEnabled = (options: PluginOptions) => boolean | Promise<boolean>;

interface PluginOptions {
  /** Root working directory */
  rootCwd: string;
  /** Current working directory */
  cwd: string;
  /** Package.json manifest */
  manifest: PackageJson;
  /** Plugin configuration */
  config: EnsuredPluginConfiguration;
  /** Configuration file directory */
  configFileDir: string;
  /** Configuration file name */
  configFileName: string;
  /** Configuration file path */
  configFilePath: string;
  /** Production mode flag */
  isProduction: boolean;
  /** List of enabled plugins */
  enabledPlugins: string[];
}

Plugin Configuration Examples:

{
  "jest": {
    "config": ["jest.config.{js,ts,json}"],
    "entry": ["**/*.{test,spec}.{js,ts,tsx}"]
  },
  "webpack": {
    "config": ["webpack.config.js"],
    "entry": ["webpack.config.js"]
  },
  "typescript": {
    "config": ["tsconfig.json", "tsconfig.*.json"],
    "project": ["**/*.ts", "**/*.tsx"]
  }
}

Configuration Validation

Knip validates configuration and provides helpful hints.

interface ConfigurationHint {
  /** Type of configuration hint */
  type: ConfigurationHintType;
  /** Pattern or identifier causing the hint */
  identifier: string | RegExp;
  /** Associated file path */
  filePath?: string;
  /** Workspace name */
  workspaceName?: string;
  /** Size metric for the hint */
  size?: number;
}

type ConfigurationHintType = 
  | 'ignoreBinaries'
  | 'ignoreDependencies' 
  | 'ignoreUnresolved'
  | 'ignoreWorkspaces'
  | 'entry-redundant'
  | 'project-redundant'
  | 'entry-top-level'
  | 'project-top-level'
  | 'entry-empty'
  | 'project-empty'
  | 'package-entry'
  | 'workspace-unconfigured';

Common Configuration Hints:

  • entry-redundant: Entry patterns that don't match any files
  • project-redundant: Project patterns that don't match any files
  • workspace-unconfigured: Workspaces without specific configuration
  • ignoreDependencies: Suggest adding frequently unused dependencies to ignore list

docs

analysis.md

cli.md

configuration.md

index.md

issues.md

plugins.md

reporting.md

tile.json