stable

.pixmoat.yaml reference

This page lists every key .pixmoat.yaml accepts. It is generated from the file’s JSON Schema, whose ID is https://pixmoat.com/schemas/pixmoat-config.schema.json. For how the file is read and applied, with examples, see Project configuration.

Each key has one of these scopes:

ScopeMeaning
FileDescribes the file itself.
Build-scopedRead from the commit being tested and applied to that build only. A key you leave out keeps the project’s current setting.
Project-globalApplied to the project as a whole, and only from the default branch.
Client-onlyRead by the Playwright capture client. The server ignores it.

A Default of — means the key has no fixed default. For a build-scoped key, leaving it out keeps the project setting.

version

KeyTypeDefaultScopeDescription
version1—FileSchema version. Must be 1. Required.

accessibility

KeyTypeDefaultScopeDescription
accessibilityobject—Build-scopedAccessibility audit settings.
accessibility.enabledboolean—Build-scopedRun accessibility audits.
accessibility.gatingadvisory or blocking—Build-scopedWhether new violations only show in review (advisory) or block finishing it (blocking). Setting it in the file has no effect yet: pixmoat enforces the value from the project’s Settings.
accessibility.presetcontrast_only, wcag_aa or wcag_aaa—Build-scopedWhich rule set to audit against.
accessibility.regression_detectionboolean—Build-scopedCompare violations with the baseline to find new and resolved ones.
accessibility.rulesobject—Build-scopedRule customisation.
accessibility.rules.excludelist of string[]Build-scopedaxe rule IDs to skip, for example region.
accessibility.thresholdsobject—Build-scopedViolation thresholds.
accessibility.thresholds.fail_on_newboolean—Build-scopedRequire a review decision when any new violation appears.
accessibility.thresholds.max_seriousinteger, at least 0—Build-scopedMost serious or critical violations allowed before the result is violations (null = no limit).
accessibility.thresholds.max_violationsinteger, at least 0—Build-scopedMost violations allowed in total before the result is violations (null = no limit).

agent_auto_approve

KeyTypeDefaultScopeDescription
agent_auto_approvenone, intent_only or all—Project-globalWhich changes an AI agent may approve. none: Agents can’t approve changes. intent_only: Agents can approve changes that match a declared intent. all: Agents can approve any change.

blocking_mode

KeyTypeDefaultScopeDescription
blocking_modeblocking or report_only—Build-scopedWhether builds with visual changes block the pipeline (blocking) or only report them (report_only). Setting it in the file has no effect yet: pixmoat enforces the value from the project’s Settings.

browsers

KeyTypeDefaultScopeDescription
browserslist of chromium, firefox or webkit—Build-scopedBrowsers the build is expected to capture.

capture

KeyTypeDefaultScopeDescription
captureobject—Client-onlyScreenshot stabilisation settings. Client-only: the Playwright capture client reads this section and the server ignores it.
capture.animationsend, pause or allowendClient-onlyHow CSS and Web Animations are handled before capture. end: Freeze animations and jump them to their final frame. pause: Freeze animations at their current frame. allow: Leave animations running.
capture.image_timeout_msinteger, at least 03000Client-onlyLongest time to wait for images, in milliseconds.
capture.wait_for_fontsbooleantrueClient-onlyWait for web fonts to finish loading.
capture.wait_for_imagesbooleantrueClient-onlyWait for images to finish decoding.

console

KeyTypeDefaultScopeDescription
consoleobject—Build-scopedConsole capture settings.
console.allow_knownboolean—Build-scopedDon’t raise violations for findings already in the baseline.
console.capture_levelslist of string—Build-scopedConsole levels to keep, for example error and warning. Page errors and failed requests are always kept.
console.enabledboolean—Build-scopedRecord browser console messages, uncaught page errors and failed requests during each snapshot.
console.fail_onlist of string—Build-scopedLevels that count as violations when a new finding appears, for example pageerror, requestfailed and error.
console.gatingadvisory or blocking—Build-scopedWhether new console findings only show in review (advisory) or block finishing it (blocking). Setting it in the file has no effect yet: pixmoat enforces the value from the project’s Settings.
console.ignorelist of string[]Build-scopedRegular expressions matched against the message text. Matching entries are dropped.

default_reviewers

KeyTypeDefaultScopeDescription
default_reviewerslist of string—Project-globalEmails or usernames of the reviewers used when no CODEOWNERS rule matches.

default_tolerance

KeyTypeDefaultScopeDescription
default_tolerancenumber, 0 to 1—Build-scopedMismatch ratio a snapshot may differ from its baseline and still pass (0.0 = exact match, 1.0 = accept any difference).

diff

KeyTypeDefaultScopeDescription
diffobject—Build-scopedDiff engine settings.
diff.detect_aaboolean—Build-scopedTreat pixels that look anti-aliased as matching.
diff.diff_colorlist of 4 × integer, 0 to 255—Build-scopedRGBA color [R, G, B, A] used to highlight changed pixels in the diff image.
diff.dprinteger, 1 to 3—Build-scopedDevice pixel ratio of the screenshots (1, 2 or 3).
diff.thresholdnumber, 0 to 1—Build-scopedColor sensitivity threshold (0.0–1.0). Lower values flag subtler color changes.

flakiness

KeyTypeDefaultScopeDescription
flakinessobject—Build-scopedFlakiness detection settings.
flakiness.capturesinteger, 1 to 5—Build-scopedCaptures per snapshot (1–5). More captures detect non-deterministic rendering more reliably but slow the test run down.
flakiness.flakiness_thresholdnumber—Build-scopedMismatch ratio between captures above which a snapshot counts as flaky.
flakiness.quarantine_afterinteger, at least 0—Build-scopedConsecutive flaky builds before a snapshot is quarantined.
flakiness.recovery_afterinteger, at least 0—Build-scopedConsecutive stable builds before a quarantined snapshot returns to normal review.

git_provider

KeyTypeDefaultScopeDescription
git_providerobject—Project-globalGit provider connection settings. The token and webhook secret are set in the UI or environment variables, never in this file.
git_provider.base_urlstring—Project-globalBase URL of the git host API, for example https://gitlab.example.com.
git_provider.comment_bodystring—Project-globalGeneric provider: body template for comments.
git_provider.comment_urlstring—Project-globalGeneric provider: URL template for comments.
git_provider.enabledboolean—Project-globalWhether the integration is enabled.
git_provider.event_matchobject—Project-globalGeneric provider: how to recognise an inbound merge event.
git_provider.event_match.equalsstring—Project-globalHeader value that marks a merge, for example pullrequest:fulfilled. Required.
git_provider.event_match.headerstring—Project-globalHeader name to check, for example X-Event-Key. Required.
git_provider.kindgitlab, bitbucket or generic—Project-globalProvider kind. Required.
git_provider.merge_fieldsobject—Project-globalGeneric provider: where to find merge event fields in the payload.
git_provider.merge_fields.branchstring—Project-globalPath to the source branch.
git_provider.merge_fields.commit_shastring—Project-globalPath to the merge commit SHA.
git_provider.merge_fields.merged_bystring—Project-globalPath to the user who merged.
git_provider.merge_fields.repo_pathstring—Project-globalPath to the repository path.
git_provider.merge_fields.source_head_shastring—Project-globalPath to the source branch head SHA.
git_provider.merge_fields.target_branchstring—Project-globalPath to the target branch.
git_provider.repostring—Project-globalRepository slug or path, for example group/project.
git_provider.signatureobject—Project-globalGeneric provider: how to verify inbound webhook signatures.
git_provider.signature.headerstring—Project-globalHeader that carries the signature, for example X-Hub-Signature-256. Required.
git_provider.signature.schemehmac-sha256—Project-globalVerification scheme. Only hmac-sha256 is supported. Required.
git_provider.state_mapmap of name to string—Project-globalGeneric provider: maps pixmoat states (for example approved) to the provider’s status strings.
git_provider.status_bodystring—Project-globalGeneric provider: body template for commit statuses.
git_provider.status_urlstring—Project-globalGeneric provider: URL template for commit statuses.
git_provider.variantcloud or server—Project-globalBitbucket variant. Only used by the bitbucket provider.
git_provider.workspacestring—Project-globalWorkspace or namespace, for example a Bitbucket workspace.

owner_map

KeyTypeDefaultScopeDescription
owner_mapmap of name to list of string—Project-globalMaps CODEOWNERS handles to the emails or usernames of project members, for example "@team-checkout": ["alice@example.com"].

performance

KeyTypeDefaultScopeDescription
performanceobject—Build-scopedPerformance metrics settings.
performance.enabledboolean—Build-scopedCollect performance metrics (Core Web Vitals and resource sizes).
performance.gatingadvisory or blocking—Build-scopedWhether performance regressions only show in review (advisory) or block finishing it (blocking). Setting it in the file has no effect yet: pixmoat enforces the value from the project’s Settings.
performance.regression_thresholdnumber, 0 to 1—Build-scopedAllowed change from the baseline before a metric counts as a regression (0.0–1.0, where 0.15 means 15%).
performance.thresholdsobject—Build-scopedPer-metric soft-fail and hard-fail thresholds.
performance.thresholds.clsobject—Build-scopedCumulative Layout Shift, as a unitless score.
performance.thresholds.cls.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.cls.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.fcpobject—Build-scopedFirst Contentful Paint, in milliseconds.
performance.thresholds.fcp.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.fcp.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.inpobject—Build-scopedInteraction to Next Paint, in milliseconds.
performance.thresholds.inp.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.inp.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.lcpobject—Build-scopedLargest Contentful Paint, in milliseconds.
performance.thresholds.lcp.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.lcp.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.total_js_sizeobject—Build-scopedTotal JavaScript size, in bytes.
performance.thresholds.total_js_size.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.total_js_size.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.total_transfer_sizeobject—Build-scopedTotal transfer size, in bytes.
performance.thresholds.total_transfer_size.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.total_transfer_size.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.
performance.thresholds.ttfbobject—Build-scopedTime to First Byte, in milliseconds.
performance.thresholds.ttfb.hard_failnumber, at least 0—Build-scopedFailure threshold. A value above it fails the metric; with blocking gating the build is rejected. Required.
performance.thresholds.ttfb.soft_failnumber, at least 0—Build-scopedWarning threshold. A value above it marks the metric degraded. Required.

removal_gating

KeyTypeDefaultScopeDescription
removal_gatingadvisory or blocking—Build-scopedHow removed screenshots gate the review. Setting it in the file has no effect yet: pixmoat enforces the value from the project’s Settings.

retention

KeyTypeDefaultScopeDescription
retentionobject—Project-globalBuild retention policy.
retention.branch_ruleslist of object[]Project-globalPer-branch overrides of the retention settings.
retention.branch_rules[].branchstring—Project-globalBranch name or glob pattern, for example release/*. Required.
retention.branch_rules[].delete_after_daysinteger, at least 0—Project-globalDelete builds on matching branches older than N days.
retention.branch_rules[].keep_buildsinteger, at least 0—Project-globalKeep the N most recent builds on matching branches.
retention.delete_after_daysinteger, at least 0—Project-globalDelete builds older than N days.
retention.keep_buildsinteger, at least 0—Project-globalKeep the N most recent builds per branch.

review_policy

KeyTypeDefaultScopeDescription
review_policyobject—Project-globalReview approval policy. Omit the section for no policy.
review_policy.agent_may_finishboolean—Project-globalAllow an AI agent to finish a review the policy covers.
review_policy.applies_to_brancheslist of string—Project-globalBranch names or glob patterns the policy applies to. Omit to apply it to every branch.
review_policy.min_approvalsinteger, at least 1—Project-globalApprovals needed before a build can be approved (at least 1).
review_policy.require_codeowner_approvalboolean—Project-globalRequire an approval from a code owner of each changed snapshot.
review_policy.require_distinct_from_authorboolean—Project-globalDon’t count approvals from the author of the change.
review_policy.required_roleproject_admin or org_admin—Project-globalLowest role whose approvals count.

themes

KeyTypeDefaultScopeDescription
themesmap of name to object—Build-scopedNamed themes to capture each snapshot in, for example light and dark.
themes.<name>.mediastring—Build-scopedMedia feature to emulate, for example "(prefers-color-scheme: dark)". Required.

viewports

KeyTypeDefaultScopeDescription
viewportsmap of name to string matching ^[1-9][0-9]*x[1-9][0-9]*$—Build-scopedNamed viewport presets. Each value is a WIDTHxHEIGHT string of positive integers, for example desktop: "1280x720".

webhook

KeyTypeDefaultScopeDescription
webhookobject—Project-globalWebhook settings. The webhook secret is set in the UI or an environment variable, never in this file.
webhook.on_approvedboolean—Project-globalSend a webhook when a build is approved. Stored but not used yet: pixmoat sends a webhook for every approved and rejected build.
webhook.on_rejectedboolean—Project-globalSend a webhook when a build is rejected. Stored but not used yet: pixmoat sends a webhook for every approved and rejected build.
webhook.providergeneric, github or gitlab—Project-globalPayload format sent to the endpoint. Stored but not used yet: every webhook is sent with the same JSON payload.
webhook.urlstring—Project-globalEndpoint that receives a POST request when a build is approved or rejected.