TidyLint feature guide
What each rule looks for, how a fix chooses what to bind, and how the cleanup report works.
Scope
- Name
Selection- Type
- free
- Description
The selected layers and everything inside them.
- Name
Current page- Type
- free
- Description
Every layer on the page you are looking at.
- Name
All pages- Type
- Pro
- Description
Every page in the file. TidyLint loads all pages, walks them in chunks of 300 layers and gives Figma a moment between chunks, so the editor stays responsive. The status bar shows the page and layer count, and Cancel stops the scan and keeps what was found so far.
Layers inside an instance are skipped: they belong to the main component, so lint the component instead. Nothing inside a hidden layer is linted either.
The rules
- Name
Unbound fills- Type
- fixable
- Description
A visible solid fill with no paint style and no color variable. Gradient and image fills are not flagged. Instances, sections and component sets are skipped.
- Name
Unbound strokes- Type
- fixable
- Description
The same check for strokes.
- Name
Text without a style- Type
- fixable
- Description
A text layer with no text style. Layers that mix several fonts or sizes are listed but cannot be fixed automatically.
- Name
Effects without a style- Type
- fixable
- Description
A layer with visible effects, no effect style and no variables bound to its effects.
- Name
Unbound corner radius- Type
- fixable
- Description
A corner radius above 0 with no number variable bound to it. This rule only runs when the file has local number variables, so files without them are not flooded with results.
- Name
Detached instances- Type
- report
- Description
A frame that Figma marks as detached from a component, or a frame named exactly like a local component or component set.
- Name
Hidden layers- Type
- report
- Description
Any hidden layer. Its children are not checked.
- Name
Empty frames and groups- Type
- report
- Description
A frame or group with no children.
- Name
Default names- Type
- report
- Description
Names Figma generates, such as "Frame 123", "Rectangle 4", "Group", "Vector", "Ellipse 2" or "Union". Names like "Frame 12 copy" or "Hero Frame" are not flagged.
- Name
Mixed text styles- Type
- report
- Description
A text layer that uses several text styles, or several fonts or sizes.
Working with results
Results are grouped by rule in the order above, each group with a count. Click a group header to show or hide its layers; long groups show 100 rows at a time. Click a row to select the layer and zoom to it, switching page if needed. Select all selects every layer in the group that sits on the same page as the first one, and the status bar tells you how many are on other pages.
How fixes choose a match
- Name
Fills and strokes- Type
- OKLab
- Description
TidyLint compares the color with every local paint style that holds one solid color and every local color variable, measured as distance in OKLab, a color space where equal distances look equally different. The distance is scaled so that 1 is about the smallest difference you can see. The closest match within the Color match tolerance wins, and a variable wins a tie with a style. Opacity counts as part of the color. Variables are read in their collection's default mode, and their scopes are respected, so a variable scoped to strokes is never used for a fill. A layer with one fill can take a paint style or a variable; a layer with several fills is bound paint by paint to variables.
- Name
Text- Type
- family, size, weight
- Description
The local text style with the same font family, the same size and the same weight, with italic matching italic. "Bold" and "700" count as the same weight. When several styles qualify, the one with the exact style name and the same line height wins.
- Name
Effects- Type
- identical
- Description
The local effect style whose effects are identical: type, color, offset, radius, spread and blend mode.
- Name
Corner radius- Type
- exact value
- Description
A local number variable whose value equals the radius and that is scoped to corner radius. It is bound to all four corners. Layers with different radii per corner are not fixed automatically.
A fixed row leaves the list. Every fix is a normal Figma edit, so Cmd/Ctrl + Z undoes it. Fix all (Pro) runs the same fix on every fixable layer in the group and reports how many it fixed and why the rest were left.
CSV report (Pro)
Export CSV downloads tidylint-report.csv with one row per finding: rule, layer name, layer type, page, detail, whether it can be fixed, and the layer ID. Cells that a spreadsheet could read as a formula are escaped.
The cleanup report
The Cleanup tab always scans every page, in the same chunked way as a whole-file lint.
- Name
Unused styles- Type
- paint, text, effect, grid
- Description
Local styles that no layer uses, including styles applied to part of a text layer.
- Name
Unused variables- Type
- all types
- Description
Local variables that no layer binds and that no style or other variable refers to.
- Name
Duplicate styles- Type
- identical values
- Description
Local styles of the same kind with identical values. A paint style bound to a variable is not a duplicate of one with the raw color. Pick which style to keep with the radio button.
- Name
Hidden layers- Type
- topmost only
- Description
Hidden layers, listing only the topmost one when hidden layers are nested. Layers inside instances are left out because they cannot be deleted.
Tick items and click Delete selected, or click Merge duplicates (Pro). Before anything changes, TidyLint lists exactly what will be deleted or merged and waits for Confirm. A merge rebinds every usage of a duplicate to the style you kept, including ranges inside text layers, and then deletes the duplicate.
Styles published as a library can be unused in this file and still be used in other files. Check before deleting them.