Rule toggles
Most rules can be toggled individually from the Settings panel. When a rule is off, LintKit skips it entirely during scanning. Broken Variables always runs and cannot be disabled — broken variable references are always worth catching.Rules that are off by default
Five rules ship disabled because they need your input before they’re useful:| Rule | Why it’s off | What to configure first |
|---|---|---|
| Spacing Scale | Needs your spacing values | Set allowedSpacing or baseSpacing |
| Corner Radii | Needs your radius values | Review allowedRadii defaults or enter your own |
| Grid Alignment | Needs grid configuration | Set up column grid breakpoints |
| Duplicate Styles | Can be noisy on large files | Review duplicateStyles.colorThreshold |
| Missing Descriptions | Library-only, opt-in | Only useful in library files |
Spacing
Spacing settings control how LintKit checks padding, gaps, line heights, and element dimensions against your design system’s spacing scale.Allowed spacing values
- Config key:
allowedSpacing - Default: empty (uses multiples of
baseSpacing)
[0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64].
When this list is empty, LintKit generates values from baseSpacing instead.
Base spacing unit
- Config key:
baseSpacing - Default:
8
allowedSpacing is empty. If your system uses a 4px grid, set this to 4. If you use an 8px grid, the default works.
Spacing tolerance
- Config key:
spacingTolerance - Default:
0(exact match required)
1 if you want to allow values within 1px of your scale (for example, 7px would pass an 8px scale). Keep at 0 for strict enforcement.
Spacing sub-checks
LintKit checks spacing in four areas, each independently toggleable:| Sub-check | Config key | Default | When to use |
|---|---|---|---|
| Auto-layout | spacingChecks.autolayout | On | Keep on. Checks padding, item spacing, and counter-axis spacing in auto-layout frames. These are high-confidence findings with one-click fixes. |
| Line height | spacingChecks.lineHeight | On | Keep on if your text styles use fixed pixel line heights. Turn off if you use percentage-based or auto line heights. |
| Manual gaps | spacingChecks.manualGaps | On | Checks gaps between siblings in non-auto-layout frames. Useful for catching freeform layouts that should use your spacing scale. Findings are low-confidence (manual fix required). |
| Dimensions | spacingChecks.dimensions | Off | Checks width and height values. Turn on if your system enforces fixed sizing (e.g., icon containers must be 24px or 32px). Can be noisy — start with it off and enable selectively. |
Line heights
- Config key:
allowedLineHeights - Default:
'inherit'(uses the same scale asallowedSpacing)
[0, 4, 8, 16, 24, 32] but your line heights might be [16, 20, 24, 28, 32, 40, 48].
When set to 'inherit', LintKit uses your allowedSpacing values (or multiples of baseSpacing) for line height checks too.
Only pixel-based line heights are checked. Percentage and auto line heights are always valid.
Max dimension to check
- Config key:
maxDimensionToCheck - Default:
200
Corner radii
- Config key:
allowedRadii - Default:
[0, 4, 8, 12, 16, 24, 32]
0 in your list, but it’s there by default.
Example: setting up for your design system
Example: setting up for your design system
If your design system uses
2px for inputs, 4px for cards, 8px for modals, and 9999px for pills:Set allowedRadii to [0, 2, 4, 8, 9999].A component with a 6px radius would be flagged, with a suggestion to snap to either 4px or 8px (whichever is closest).Elements with mixed radii (different values on each corner) are skipped. LintKit cannot determine the intended value when corners differ.
Stroke weights
- Config key:
allowedStrokes - Default:
[1, 2, 3, 4]
Color tolerance
Two separate color tolerance settings control different features. Both use Delta E 2000, a perceptual color distance metric where lower values mean more similar colors.Style matching tolerance
- Config key:
colorTolerance - Default:
5
5 means LintKit will suggest styles that are perceptually close but not identical.
When to adjust:
- Lower to 2–3 if you’re getting suggestions for styles that are too different from the actual color
- Raise to 7–8 if you want broader suggestions (useful during a migration where colors may have drifted)
Duplicate style tolerance
- Config key:
duplicateStyles.colorThreshold - Default:
2
2 means only very similar styles are flagged as duplicates.
When to adjust:
- Lower to 1 if you want only near-exact duplicates flagged
- Raise to 3–4 if you want to catch styles that have drifted apart over time
These are different settings for different purposes. Style matching uses a wider tolerance (
5) to help you find possible matches. Duplicate detection uses a tighter tolerance (2) to avoid false positives when flagging styles to merge.Duplicate styles sub-toggles
Control which style types are checked for duplicates:| Toggle | Config key | Default | What it checks |
|---|---|---|---|
| Paint styles | duplicateStyles.checkPaintStyles | On | Near-identical fill and stroke styles (uses Delta E color comparison) |
| Text styles | duplicateStyles.checkTextStyles | On | Exact match on font family, size, weight, letter spacing, line height, case, and decoration |
| Effect styles | duplicateStyles.checkEffectStyles | On | Exact match on effect type, offset, radius, spread, color, and opacity |
Duplicate detection only compares styles within the same semantic category. For example,
text/primary is only compared against other text/* styles, not icon/* styles — even if they share the same color.Accessibility
WCAG level
- Config key:
accessibility.wcagLevel - Default:
'AA' - Options:
'AA'or'AAA'
| Level | Normal text | Large text |
|---|---|---|
| AA (default) | 4.5:1 | 3:1 |
| AAA (stricter) | 7:1 | 4.5:1 |
Assumed background color
- Config key:
accessibility.assumedBgColor - Default:
'#FFFFFF'
'#1A1A1A'). This prevents false positives where LintKit assumes white and flags dark-on-dark text as passing.
Layer filtering
| Filter | Config key | Default | When to enable |
|---|---|---|---|
| Include hidden layers | layerFilters.includeHiddenLayers | Off | Turn on to scan layers you’ve hidden with the eye icon. Useful for catching abandoned hidden layers that contain stale styles. |
| Include locked layers | layerFilters.includeLockedLayers | Off | Turn on to include locked layers in the scan. Useful if your team locks finalized sections and you still want to scan them. |
Naming
Flag generic names
- Config key:
naming.flagGenericNames - Default: on
| Layer position | Severity | Example |
|---|---|---|
| Top-level frames, sections, components | Error | A top-level frame named “Frame 5” |
| Shallow frames, groups, text, instances | Warning | A button group named “Group” |
| Deep nested frames and groups | Info | A deeply nested “Rectangle” |
| Vectors, ellipses, basic shapes | Skipped | Shapes are expected to have default names |
Custom forbidden patterns
- Config key:
naming.patterns - Default: none
Convention detection
LintKit observes the naming patterns in your file. When it detects a consistent convention (at least 5 samples with 70% or more consistency), it flags names that break the convention. This works automatically — no configuration needed.Component structure
Nesting depth thresholds
- Warning threshold:
componentStructure.nestingWarningThreshold, default4 - Error threshold:
componentStructure.nestingErrorThreshold, default6
- If your components are intentionally deep (e.g., complex data tables), raise the thresholds
- If you want stricter control, lower the warning threshold to
3
Example: understanding nesting depth
Example: understanding nesting depth
A
Card component that contains a Header instance, which contains an Avatar instance, which contains an Icon instance = 3 levels of nesting.At the default threshold of 4, this would not trigger a finding. Add one more level (e.g., Badge inside Icon) and it would trigger a warning.Absolute positioning
- Flag absolute in auto-layout:
layout.flagAbsoluteInAutoLayout, default on - Severity:
layout.absolutePositioningSeverity, defaultwarn(options:info,warn,error)
- Set severity to
infoif your team intentionally uses absolute positioning for overlays, badges, or floating elements inside auto-layout frames - Set severity to
errorif absolute positioning in auto-layout is always unintentional in your workflow - Turn the rule off entirely if your design patterns rely heavily on absolute positioning within auto-layout
Library governance
- Config key:
approvedLibraryKeys - Default: empty (all libraries allowed)
How auto-approval works
How auto-approval works
LintKit automatically approves libraries that share a prefix with the most-used library in your file. For example, if most of your components come from “Acme Design System”, LintKit auto-approves other libraries starting with “Acme” (like “Acme Icons”).This means you usually only need to add your primary library key — related libraries are approved automatically.
Ignored findings
Default scope
- Config key:
ignoredConfig.defaultScope - Default:
'file' - Options:
'file'or'user'
- File scope: The ignored state is shared with everyone who opens the file. When you ignore a finding, your teammates won’t see it either. Use this for intentional design decisions the team has agreed on.
- User scope: The ignored state is personal. Only you stop seeing the finding. Use this for findings you’ve reviewed and decided to skip without affecting your team.
Show ignored in results
- Config key:
ignoredConfig.showIgnoredInResults - Default: off
Tokens Studio auto-configuration
Connect Tokens Studio to auto-configure rules from your design token definitions instead of manually entering values.Enable
- Config key:
tokensStudio.enabled - Default: off
Enforcement mode
- Config key:
tokensStudio.enforcementMode - Default:
'advisory' - Options:
'advisory'or'strict'
- Advisory: Token values are merged with your manual configuration. Findings still appear but include token metadata so you can see which token matches. Use this to start with — it shows you the full picture without suppressing anything.
- Strict: If a design value matches a token definition, the finding is suppressed entirely. For example, an orphaned fill that happens to match a color token is not flagged. Use this when your team trusts the token system and only wants to see values that fall outside it.
Token type toggles
Control which token types LintKit enforces:| Toggle | Config key | Default | Affected rules |
|---|---|---|---|
| Colors | tokensStudio.enforceColors | On | Orphaned Fills, Orphaned Strokes |
| Spacing | tokensStudio.enforceSpacing | On | Spacing Scale |
| Radii | tokensStudio.enforceRadii | On | Corner Radii |
Auto-sync
- Config key:
tokensStudio.autoSync - Default: on
Example configurations
8px spacing system with strict enforcement
8px spacing system with strict enforcement
baseSpacing:8allowedSpacing:[0, 4, 8, 16, 24, 32, 48, 64](include 4 for half-spacing)spacingTolerance:0(exact match)spacingChecks.autolayout: onspacingChecks.lineHeight: onspacingChecks.dimensions: off (enable later when ready)- Enable the Spacing Scale rule in Settings
Design system library file
Design system library file
If you’re working in a library file that publishes components and styles:
- Enable Missing Descriptions (off by default)
- Enable Duplicate Styles to find consolidation opportunities
- Set
ignoredConfig.defaultScopeto'file'so ignored findings are shared with co-editors - Variable Completeness, Unused Styles, and Hidden Components run automatically in library files
Accessibility-focused team
Accessibility-focused team
accessibility.wcagLevel:'AAA'accessibility.assumedBgColor: set to your actual default background color- Keep Contrast rule enabled (on by default)
- Consider enabling
spacingChecks.dimensionsto catch non-standard touch target sizes
Loose enforcement for exploration
Loose enforcement for exploration
During early design exploration when consistency is less important:
spacingTolerance:2(allow 2px deviation)layout.absolutePositioningSeverity:'info'(downgrade from warning)- Turn off Spacing Scale and Corner Radii until the design stabilizes
- Keep Broken Variables and Contrast on — these catch real problems regardless of design phase