Configuration Reference

This page documents all available options for the peek.config.js configuration file.

Config File Format

Create peek.config.js (or peek.config.mjs) in your project root and export a default object:

export default {
  ignore: [],
  checks: {},
  severity: {},
};

Pass it to peek check with -c:

peek check http://localhost:3000 -c peek.config.js

Top-Level Options

ignore

Type: string[] Default: []

CSS selectors for elements to exclude from all checks. Merged with --ignore CLI flags and per-check ignore arrays.

ignore: [
  '.ad-banner',
  '[data-testid="skeleton"]',
  '.cookie-popup',
]

checks

Type: ChecksConfig Default: All checks enabled with defaults

Per-check configuration. Each key corresponds to a check name. Set to true (default), false (disabled), or an object with options.

checks: {
  overflow: { horizontal: true, vertical: false },
  clickability: { checkCorners: true },
  touchTargets: { minWidth: 44, minHeight: 44 },
  textOverflow: { allowEllipsis: true },
  visibility: true,
  viewportMeta: true,
}

severity

Type: Partial<Record<CheckName, Severity>> Default: Check-specific defaults

Override the default severity for specific checks. Valid severity values: 'error', 'warning', 'info'.

severity: &#123;
  touchTargets: 'warning',
  textOverflow: 'info',
  overflow: 'error',
&#125;

Check-Specific Options

checks.overflow

Type: boolean | OverflowConfig

Detect horizontal overflow causing unwanted scrollbars.

OptionTypeDefaultDescription
horizontalbooleantrueCheck for horizontal overflow
verticalbooleanfalseCheck for vertical overflow
ignorestring[][]Additional selectors to skip
checks: &#123;
  overflow: &#123;
    horizontal: true,
    vertical: false,
    ignore: ['.horizontal-scroll-container'],
  &#125;
&#125;

checks.clickability

Type: boolean | ClickabilityConfig

Detect interactive elements covered by other elements.

OptionTypeDefaultDescription
selectorsstring[]['button', 'a', 'input', ...]Elements to check
checkCornersbooleantrueCheck corner points in addition to center
ignorestring[][]Additional selectors to skip

Default selectors: button, a, input, select, textarea, [role="button"], [role="link"], [onclick], [tabindex="0"].

checks: &#123;
  clickability: &#123;
    selectors: ['button', 'a', '[role="button"]'],
    checkCorners: true,
  &#125;
&#125;

checks.touchTargets

Type: boolean | TouchTargetsConfig

Ensure interactive elements meet minimum touch target size and spacing.

OptionTypeDefaultDescription
minWidthnumber44Minimum width in pixels (WCAG 2.5.5)
minHeightnumber44Minimum height in pixels
selectorsstring[]['button', 'a', 'input', ...]Elements to check
ignorestring[][]Additional selectors to skip

Default selectors: button, a, input:not([type="hidden"]), select, textarea, [role="button"], [role="link"], [role="checkbox"], [role="radio"], [tabindex="0"].

Spacing check: 8px minimum gap between adjacent interactive elements.

checks: &#123;
  touchTargets: &#123;
    minWidth: 48,
    minHeight: 48,
    ignore: ['.desktop-nav a'],
  &#125;
&#125;

checks.textOverflow

Type: boolean | TextOverflowConfig

Detect text clipped or overflowing its container.

OptionTypeDefaultDescription
allowEllipsisbooleantrueSkip elements using text-overflow: ellipsis
ignorestring[][]Additional selectors to skip

Elements with .truncate, [data-truncate], or .line-clamp classes are always skipped.

checks: &#123;
  textOverflow: &#123;
    allowEllipsis: true,
    ignore: ['.code-block', 'pre'],
  &#125;
&#125;

checks.visibility

Type: boolean | VisibilityConfig

Detect interactive elements that are invisible or off-screen.

OptionTypeDefaultDescription
selectorsstring[]['button', 'a[href]', 'input', ...]Elements to check
ignorestring[][]Additional selectors to skip

Default selectors: button, a[href], input:not([type="hidden"]), select, textarea, [role="button"].

Elements with aria-hidden="true", .sr-only, .visually-hidden, or [hidden] are always skipped.

checks: &#123;
  visibility: &#123;
    selectors: ['button', 'a[href]', 'input'],
    ignore: ['.off-canvas-menu'],
  &#125;
&#125;

checks.viewportMeta

Type: boolean | ViewportMetaConfig

Check for a proper viewport meta tag for mobile rendering.

OptionTypeDefaultDescription
ignorestring[][](Not applicable for this check)
checks: &#123;
  viewportMeta: true
&#125;

Complete Example

export default &#123;
  ignore: [
    '.ad-banner',
    '[data-testid="skeleton"]',
    '.cookie-consent',
  ],

  checks: &#123;
    overflow: &#123; horizontal: true, vertical: false &#125;,
    clickability: &#123; checkCorners: true &#125;,
    touchTargets: &#123; minWidth: 44, minHeight: 44 &#125;,
    textOverflow: &#123; allowEllipsis: true &#125;,
    visibility: true,
    viewportMeta: true,
  &#125;,

  severity: &#123;
    touchTargets: 'warning',
    textOverflow: 'warning',
    visibility: 'warning',
  &#125;,
&#125;;

TypeScript Types

If using the programmatic API, import types for config objects:

import type &#123;
  CheckConfig,
  ChecksConfig,
  OverflowConfig,
  ClickabilityConfig,
  TouchTargetsConfig,
  TextOverflowConfig,
  VisibilityConfig,
  ViewportMetaConfig,
  Severity,
&#125; from 'peek';