Theme check is one implementation with four callers: dtc theme check, the local dev MCP’s validate_theme, the Gateway’s POST /themes/{id}/check (the check_theme tool), and publish. A theme that passes locally passes on the server, because it is the same code. Every publish runs theme check first. Any error stops the publish with 422 CHECK_FAILED and the full result; nothing is deployed.

Result

ok is true when there are no errors; warnings do not affect it. line, column and hint are present when the rule can provide them. Pass only (a list of paths) to check just those files.

Rules

json-parse

Template, section group and config/settings_data.json files must be valid JSON.
Bad
Good

builder2-template

The document must be a valid Builder2 template: within the limits, every id in order present in sections, and every section allowed where it is placed. Unknown section types are reported too.
Bad — is not a registered type, and is not in sections
Good

import-resolves

Every relative or @/ import in your TSX files must resolve, either to a file in your theme or to a file the platform’s store template ships. Bare package imports other than react are refused: an agent cannot add npm dependencies.
Bad
Good

no-platform-override

A theme file must not shadow a platform-owned path. Put your code under theme/custom/ or another merchant-owned path instead.
Bad
Good
A link with nowhere to go must not be rendered. href="#" and href="" are errors.
Bad
Good

no-placeholder-text

Sample copy reaches real customers the moment a theme is published. Lorem ipsum, “Your Store”, “Coming soon” and “Product name” are errors.
Bad
Good

no-empty-image

An <img> or <Image> with an empty or missing src renders as a broken image. Render nothing instead.
Bad
Good

no-fake-social-proof

Hard-coded star ratings and review counts are a warning. Ratings and review counts must come from real review data, or not be shown.
Bad
Good

tsc

TypeScript errors in the TSX files you changed. A warning while you work on a development theme, so you can iterate; an error on publish, so code that does not type-check never goes live.
Bad
Good

Running it locally

See the CLI guide.