Qlty publishes cryptographic attestations for all CLI releases, allowing you to verify that the binary you downloaded was built by Qlty and hasn’t been tampered with. These attestations are powered by Sigstore and published as GitHub artifact attestations.
You can verify any Qlty CLI release with the GitHub CLI (gh) before you install it. The check doesn’t depend on your machine’s certificate store, so it holds even when that store is out of date.
Use gh 2.67.0 or later, signed in with gh auth login, even for public repositories. Older
versions can report success for an archive that has no attestation. Install gh from a source
that checks its own packages, such as Homebrew, winget, or a signed package repository.
Example (macOS Apple Silicon):
VERSION=0.660.0TARGET=aarch64-apple-darwin# Work in a new empty directory, so a failed step can't leave# files from an earlier run behindWORK="$(mktemp -d)"ARCHIVE="$WORK/qlty-$TARGET.tar.xz"# Install only if the download, the attestation check and the extraction# all succeed. This replaces the qlty on your PATH, or installs to# ~/.qlty/bin if you have none.if curl -fL "https://github.com/qltysh/qlty/releases/download/v$VERSION/qlty-$TARGET.tar.xz" -o "$ARCHIVE" && gh attestation verify "$ARCHIVE" --owner qltysh && tar -xJf "$ARCHIVE" -C "$WORK"; then DEST="$(dirname "$(command -v qlty || echo "$HOME/.qlty/bin/qlty")")" mkdir -p "$DEST" install -m 755 "$WORK/qlty-$TARGET/qlty" "$DEST/qlty"else echo "Download, attestation check or extraction failed. Not installing." >&2fi# Confirm which qlty runs, and its versioncommand -v qlty && qlty --version
If you installed to ~/.qlty/bin for the first time, add it to your PATH.For other platforms, set TARGET to x86_64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-unknown-linux-musl or aarch64-unknown-linux-musl. See all archives on GitHub releases.Example (Windows, PowerShell):
$Version = "0.660.0"$Zip = "qlty-x86_64-pc-windows-msvc.zip"# Work in a new empty directory, so a failed step can't leave# files from an earlier run behind$Work = New-Item -ItemType Directory -Path (Join-Path $env:TEMP ([guid]::NewGuid()))$Archive = Join-Path $Work $ZipInvoke-WebRequest -UseBasicParsing "https://github.com/qltysh/qlty/releases/download/v$Version/$Zip" -OutFile $Archive# Install only if the attestation verifies and the archive extracts. This# replaces the qlty.exe on your PATH, or installs to ~\.qlty\bin if you have none.gh attestation verify $Archive --owner qltyshif ($LASTEXITCODE -eq 0) { Expand-Archive $Archive -DestinationPath (Join-Path $Work "qlty") -ErrorAction Stop $Existing = Get-Command qlty -ErrorAction SilentlyContinue $Dest = if ($Existing) { Split-Path $Existing.Source } else { Join-Path $HOME ".qlty\bin" } New-Item -ItemType Directory -Force -Path $Dest | Out-Null Copy-Item (Join-Path $Work "qlty\qlty.exe") (Join-Path $Dest "qlty.exe") -Force -ErrorAction Stop if (-not $Existing) { $env:Path = "$Dest;$env:Path" }} else { Write-Error "Attestation verification failed. Not installing."}qlty --version
If you installed to ~\.qlty\bin for the first time, the script adds it to PATH for the current session only. Add it to your user PATH to keep it.
To check a qlty you already have, download and verify the archive for the version you installed, then compare the binaries. Set VERSION yourself rather than running qlty --version: if the binary was replaced, running it could expose your tokens.
VERSION=0.660.0TARGET=aarch64-apple-darwinWORK="$(mktemp -d)"ARCHIVE="$WORK/qlty-$TARGET.tar.xz"if curl -fL "https://github.com/qltysh/qlty/releases/download/v$VERSION/qlty-$TARGET.tar.xz" -o "$ARCHIVE" && gh attestation verify "$ARCHIVE" --owner qltysh && tar -xJf "$ARCHIVE" -C "$WORK"; then shasum -a 256 "$WORK/qlty-$TARGET/qlty" "$(command -v qlty)"else echo "Download, attestation check or extraction failed. Nothing to compare." >&2fi
If the two checksums differ, reinstall with the steps above, and rotate any Qlty tokens that machine could read. A VERSION that doesn’t match the installed release also makes them differ, so check it first.
qlty upgrade --verify-attestations downloads each release’s archive and checks its attestation before installing it, on macOS and Linux. It needs gh 2.67.0 or later, signed in. From v0.662.0, the upgrade stops if the attestation can’t be verified, and on Windows the command refuses and points to this page. Without the flag, qlty upgrade runs the installer script, which does not check attestations. See upgrade.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Qlty Docs","colors":{"primary":"#08B2B7","light":"#66FAEC","dark":"#08B2B7"},"logo":{"light":"https://mintcdn.com/qltysoftware/WE5EjhygR2JGFw2L/assets/qlty_logo_black.svg?fit=max\u0026auto=format\u0026n=WE5EjhygR2JGFw2L\u0026q=85\u0026s=953dc5550d8d7b301bab57c551c2e095","dark":"https://mintcdn.com/qltysoftware/WE5EjhygR2JGFw2L/assets/qlty_logo_light.svg?fit=max\u0026auto=format\u0026n=WE5EjhygR2JGFw2L\u0026q=85\u0026s=314c810c7988344145e96a72d93a64e1"},"favicon":"https://mintcdn.com/qltysoftware/WE5EjhygR2JGFw2L/assets/favicon.png?fit=max\u0026auto=format\u0026n=WE5EjhygR2JGFw2L\u0026q=85\u0026s=c6b170f43aafed94940cea1b71d16fcf","background":{"color":{"light":"#f6f6f6","dark":"#000000"}},"navbar":{"links":[{"href":"/cloud/support","label":"Get Support"}],"primary":{"type":"button","label":"Back to App","href":"https://qlty.sh/dashboard"}},"search":{"prompt":"Search documentation..."},"fonts":{"heading":{"family":"Aeonik","weight":600,"source":"assets/Aeonik-Bold.woff2","format":"woff2"},"body":{"family":"Inter"}},"styling":{"codeblocks":"system","latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qltysoftware","hasAudioNarration":false,"actualSubdomain":"qltysoftware","customDomains":["docs.qlty.sh"],"gitSource":{"type":"github","owner":"qltysh","repo":"cloud","deployBranch":"main","contentDirectory":"mintlify-docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af233f0587193b232a68b12","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Qlty CLI","count":56},{"language":"default","tag":"Qlty Cloud","count":38},{"language":"default","tag":"All Commands","count":31},{"language":"default","tag":"Home","count":29},{"language":"default","tag":"Code Coverage","count":29},{"language":"default","tag":"API Reference","count":28},{"language":"default","tag":"Endpoints","count":27},{"language":"default","tag":"Additional Information","count":20},{"language":"default","tag":"Getting Started","count":16},{"language":"default","tag":"Programming Languages","count":16}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".pretty-table{width:100%;table-layout:fixed;border:1px solid #ddd}.pretty-table thead{background-color:#f2f2f2}.pretty-table tbody{background-color:white}.pretty-table th,.pretty-table td{padding:8px;text-align:center;border:1px solid #ddd}.pretty-table th:first-child,.pretty-table td:first-child{padding:8px 12px;text-align:left}.pretty-table .divider-row{background-color:#f2f2f2;font-weight:bold}.dark .pretty-table{border:1px solid #dddddd36}.dark .pretty-table thead{background-color:rgb(102 250 236 / 10%)}.dark .pretty-table tbody{background-color:transparent}.dark .pretty-table th,.dark .pretty-table td{border:1px solid #dddddd36}.dark .pretty-table .divider-row{background-color:rgb(102 250 236 / 10%)}#mermaid-carry-forward{display:flex;justify-content:center;align-items:center;width:100%}#content-area h1{font-size:36px!important;font-weight:800!important;line-height:45px!important}#content-area h2{font-weight:700!important}#content-area h3{font-size:20px!important;line-height:32px!important}.eyebrow{color:#007277}.code-group [role=\"tab\"],.code-group [role=\"tab\"]>div{color:#707575;font-size:14px!important}.code-group [role=\"tab\"][data-state=\"active\"],.code-group [role=\"tab\"][data-state=\"active\"]>div{color:#2a2a2a;font-weight:600}#content-area table th{padding:8px!important;font-weight:700!important;border-bottom:1px solid rgb(0 0 0 / 12%)!important;background-color:rgb(0 0 0 / 2.4%)}#content-area table td{padding:8px!important;border-bottom:1px solid rgb(0 0 0 / 12%)!important}.dark #content-area table th{border-bottom-color:rgb(255 255 255 / 12%)!important;background-color:rgb(255 255 255 / 4%)}.dark #content-area table td{border-bottom-color:rgb(255 255 255 / 12%)!important}[data-component-part=\"step-number\"]>div{background-color:rgb(255 255 255 / 80%)!important;border:1px solid rgb(0 0 0 / 12%)}.dark [data-component-part=\"step-number\"]>div{background-color:rgb(255 255 255 / 10%)!important;border:1px solid rgb(255 255 255 / 15%)}#sidebar-content a[class*=\"bg-primary\"]{color:#007277!important;background-color:rgb(4 189 196 / 15.7%)!important}.dark #sidebar-content a[class*=\"bg-primary\"]{color:#66faec!important;background-color:rgb(102 250 236 / 15.7%)!important}#content-area :not(pre)>code,#content-area :not(pre)>span>code{background-color:rgb(255 255 255 / 80%)!important;box-shadow:rgb(0 0 0 / 12%) 0 0 0 1px inset!important;border-radius:4px!important;padding:2px 4px!important}#content-area :not(pre)>code,#content-area :not(pre)>span>code{color:#007277!important}h1 #content-area :not(pre)>code,h1 #content-area :not(pre)>span>code,h2 #content-area :not(pre)>code,h2 #content-area :not(pre)>span>code,#content-area h1 :not(pre,a)>code,#content-area h1 :not(pre,a)>span>code,#content-area h2 :not(pre,a)>code,#content-area h2 :not(pre,a)>span>code,#content-area h3 :not(pre,a)>code,#content-area h3 :not(pre,a)>span>code,#content-area h4 :not(pre,a)>code,#content-area h4 :not(pre,a)>span>code{color:inherit!important;font-weight:inherit!important;font-size:inherit!important}.code-block code,.code-block pre{font-family:Menlo, Consolas, \"DejaVu Sans Mono\", monospace!important}#content-area table{table-layout:auto!important;width:100%!important}#content-area table code{white-space:nowrap!important}#content-area .text-primary,.toc .text-primary,#content-area .text-primary-light{color:#007277!important}.dark #content-area .text-primary,.dark .toc .text-primary,.dark #content-area .text-primary-light{color:#66faec!important}"}],"page":{"pagePath":"cli/integrity-verification","slug":"/cli/integrity-verification","pageMetadata":{"title":"Integrity Verification","description":null,"href":"/cli/integrity-verification"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Qlty publishes cryptographic attestations for all CLI releases, allowing you to verify that the binary you downloaded was built by Qlty and hasn’t been tampered with. These attestations are powered by `,_jsx(_components.a,{href:`https://www.sigstore.dev/`,children:`Sigstore`}),` and published as `,_jsx(_components.a,{href:`https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds`,children:`GitHub artifact attestations`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`When we release a new version of the Qlty CLI, our GitHub Actions workflow:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Builds the CLI binaries for each supported platform`}),`\n`,_jsx(_components.li,{children:`Generates a cryptographic attestation for each build artifact`}),`\n`,_jsx(_components.li,{children:`Publishes the attestations to GitHub’s attestation store`}),`\n`]}),`\n`,_jsx(_components.p,{children:`These attestations cryptographically prove that the binary was built from our official repository using our CI/CD pipeline.`}),`\n`,_jsx(Heading,{level:`2`,id:`verifying-the-cli`,children:`Verifying the CLI`}),`\n`,_jsxs(_components.p,{children:[`You can verify any Qlty CLI release with the GitHub CLI (`,_jsx(_components.code,{children:`gh`}),`) before you install it. The check doesn’t depend on your machine’s certificate store, so it holds even when that store is out of date.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`gh`}),` 2.67.0 or later, signed in with `,_jsx(_components.code,{children:`gh auth login`}),`, even for public repositories. Older\nversions can report success for an archive that has no attestation. Install `,_jsx(_components.code,{children:`gh`}),` from a source\nthat checks its own packages, such as Homebrew, winget, or a signed package repository.`]})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example (macOS Apple Silicon):`})}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`23`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`23`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`VERSION`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0.660.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`TARGET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`aarch64-apple-darwin`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Work in a new empty directory, so a failed step can't leave`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# files from an earlier run behind`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`WORK`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mktemp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`)\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ARCHIVE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.xz\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Install only if the download, the attestation check and the extraction`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# all succeed. This replaces the qlty on your PATH, or installs to`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# ~/.qlty/bin if you have none.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -fL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://github.com/qltysh/qlty/releases/download/v`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$VERSION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.xz\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` gh`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` attestation`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --owner`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qltysh`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` tar`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -xJf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`then`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DEST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`dirname`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`command`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -v`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qlty `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`||`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$HOME`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/.qlty/bin/qlty\")\")\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` mkdir`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$DEST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -m`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 755`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$DEST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`else`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Download, attestation check or extraction failed. Not installing.\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >\u00262`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`fi`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Confirm which qlty runs, and its version`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`command`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -v`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qlty`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`qlty`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --version`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you installed to `,_jsx(_components.code,{children:`~/.qlty/bin`}),` for the first time, add it to your `,_jsx(_components.code,{children:`PATH`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For other platforms, set `,_jsx(_components.code,{children:`TARGET`}),` to `,_jsx(_components.code,{children:`x86_64-apple-darwin`}),`, `,_jsx(_components.code,{children:`x86_64-unknown-linux-gnu`}),`, `,_jsx(_components.code,{children:`aarch64-unknown-linux-gnu`}),`, `,_jsx(_components.code,{children:`x86_64-unknown-linux-musl`}),` or `,_jsx(_components.code,{children:`aarch64-unknown-linux-musl`}),`. See all archives on `,_jsx(_components.a,{href:`https://github.com/qltysh/qlty/releases`,children:`GitHub releases`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example (Windows, PowerShell):`})}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`25`,language:`powershell`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`powershell`,children:_jsxs(_components.code,{language:`powershell`,numberOfLines:`25`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Version`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0.660.0\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Zip`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"qlty-x86_64-pc-windows-msvc.zip\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Work in a new empty directory, so a failed step can't leave`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# files from an earlier run behind`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Work`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` New-Item`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ItemType Directory `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Path (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Join-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`env:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`TEMP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ([`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`guid`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]::NewGuid()))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Archive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Join-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Work`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Zip`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Invoke-WebRequest`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`UseBasicParsing `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://github.com/qltysh/qlty/releases/download/v`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Version`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Zip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`OutFile `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Archive`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Install only if the attestation verifies and the archive extracts. This`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# replaces the qlty.exe on your PATH, or installs to ~\\\\.qlty\\\\bin if you have none.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`gh attestation verify `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Archive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` --`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`owner qltysh`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`$LASTEXITCODE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -eq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Expand-Archive`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Archive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`DestinationPath (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Join-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Work`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"qlty\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ErrorAction Stop`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Existing`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Get-Command`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` qlty `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ErrorAction SilentlyContinue`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Dest`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Existing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Split-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Existing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#DCDCAA`},children:`.Source`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Join-Path`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` $HOME`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \".qlty\\\\bin\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` New-Item`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ItemType Directory `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Force `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Path `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Dest`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Out-Null`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Copy-Item`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Join-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Work`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"qlty\\\\qlty.exe\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`Join-Path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Dest`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"qlty.exe\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Force `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ErrorAction Stop`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $Existing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`env:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Path`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$Dest`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`;`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`env:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Path`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`} `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` Write-Error`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Attestation verification failed. Not installing.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`qlty `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`version`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you installed to `,_jsx(_components.code,{children:`~\\\\.qlty\\\\bin`}),` for the first time, the script adds it to `,_jsx(_components.code,{children:`PATH`}),` for the current session only. Add it to your user `,_jsx(_components.code,{children:`PATH`}),` to keep it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`checking-an-installed-binary`,children:`Checking an installed binary`}),`\n`,_jsxs(_components.p,{children:[`To check a `,_jsx(_components.code,{children:`qlty`}),` you already have, download and verify the archive for the version you installed, then compare the binaries. Set `,_jsx(_components.code,{children:`VERSION`}),` yourself rather than running `,_jsx(_components.code,{children:`qlty --version`}),`: if the binary was replaced, running it could expose your tokens.`]}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`12`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`VERSION`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0.660.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`TARGET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`aarch64-apple-darwin`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`WORK`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mktemp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`)\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ARCHIVE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.xz\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -fL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://github.com/qltysh/qlty/releases/download/v`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$VERSION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.xz\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` gh`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` attestation`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --owner`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qltysh`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` tar`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -xJf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$ARCHIVE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`then`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` shasum`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 256`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$WORK`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TARGET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/qlty\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`command`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -v`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qlty)\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`else`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Download, attestation check or extraction failed. Nothing to compare.\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >\u00262`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`fi`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If the two checksums differ, reinstall with the steps above, and rotate any Qlty tokens that machine could read. A `,_jsx(_components.code,{children:`VERSION`}),` that doesn’t match the installed release also makes them differ, so check it first.`]}),`\n`,_jsx(Heading,{level:`2`,id:`verifying-upgrades`,children:`Verifying upgrades`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`qlty upgrade --verify-attestations`}),` downloads each release’s archive and checks its attestation before installing it, on macOS and Linux. It needs `,_jsx(_components.code,{children:`gh`}),` 2.67.0 or later, signed in. From v0.662.0, the upgrade stops if the attestation can’t be verified, and on Windows the command refuses and points to this page. Without the flag, `,_jsx(_components.code,{children:`qlty upgrade`}),` runs the installer script, which does not check attestations. See `,_jsx(_components.a,{href:`/cli/commands/upgrade`,children:_jsx(_components.code,{children:`upgrade`})}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`verifying-the-docker-image`,children:`Verifying the Docker image`}),`\n`,_jsxs(_components.p,{children:[`Each platform image in `,_jsx(_components.code,{children:`ghcr.io/qltysh/qlty`}),` has its own attestation. The multi-platform tag does not, so verify a platform digest:`]}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` buildx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` imagetools`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` inspect`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ghcr.io/qltysh/qlty:0.660.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`gh`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` attestation`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oci://ghcr.io/qltysh/qlty@sha256:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`platform`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` diges`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --owner`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` qltysh`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`successful-verification`,children:`Successful verification`}),`\n`,_jsx(_components.p,{children:`A successful verification will display output similar to:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Loaded digest sha256:abc123... for file qlty-aarch64-apple-darwin.tar.xz`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Loaded 1 attestation from GitHub API`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`✓ Verification succeeded!`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`This confirms the binary was signed by GitHub Actions and built from the official Qlty repository.`}),`\n`,_jsx(Heading,{level:`2`,id:`learn-more`,children:`Learn more`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds`,children:`GitHub artifact attestations documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://www.sigstore.dev/`,children:`Sigstore`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/qltysh/qlty/releases`,children:`Qlty CLI releases`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Integrity Verification","description":null,"href":"/cli/integrity-verification"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Verifying the CLI","slug":"verifying-the-cli","depth":2,"children":[]},{"title":"Checking an installed binary","slug":"checking-an-installed-binary","depth":2,"children":[]},{"title":"Verifying upgrades","slug":"verifying-upgrades","depth":2,"children":[]},{"title":"Verifying the Docker image","slug":"verifying-the-docker-image","depth":2,"children":[]},{"title":"Successful verification","slug":"successful-verification","depth":2,"children":[]},{"title":"Learn more","slug":"learn-more","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"qltysoftware","siteName":"Qlty Docs","title":"Integrity Verification - Qlty Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T20:58:33.752Z","originalFileLocation":"cli/integrity-verification.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Qlty Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Integrity Verification - Qlty Docs\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Qlty Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.qlty.sh/cli/integrity-verification\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qltysoftware.mintlify.site/_mintlify/api/og/v2?division=Additional+Information\u0026amp;title=Integrity+Verification\u0026amp;theme=9a92e1d86bf6302bd2f74e0f\u0026amp;signature=14d7af274e1d8e0fa92db567bf7a6a6de21560f0f173b89f61d56ccbb4e1b327\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Integrity Verification - Qlty Docs\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qltysoftware.mintlify.site/_mintlify/api/og/v2?division=Additional+Information\u0026amp;title=Integrity+Verification\u0026amp;theme=9a92e1d86bf6302bd2f74e0f\u0026amp;signature=14d7af274e1d8e0fa92db567bf7a6a6de21560f0f173b89f61d56ccbb4e1b327\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/qltysoftware/7vmNS6Tx05_OCSe5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Qlty Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#08B2B7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.qlty.sh/cli/integrity-verification\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/cli/integrity-verification.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.qlty.sh/#organization\",\"name\":\"Qlty Docs\",\"url\":\"https://docs.qlty.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qltysoftware/WE5EjhygR2JGFw2L/assets/qlty_logo_black.svg?fit=max\u0026auto=format\u0026n=WE5EjhygR2JGFw2L\u0026q=85\u0026s=953dc5550d8d7b301bab57c551c2e095\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.qlty.sh#website\",\"name\":\"Qlty Docs\",\"url\":\"https://docs.qlty.sh\",\"publisher\":{\"@id\":\"https://docs.qlty.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.qlty.sh/cli/integrity-verification#webpage\",\"url\":\"https://docs.qlty.sh/cli/integrity-verification\",\"name\":\"Integrity Verification\",\"dateModified\":\"2026-11-09T20:58:33.752Z\",\"isPartOf\":{\"@id\":\"https://docs.qlty.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qlty.sh/cli/integrity-verification#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qlty.sh/cli/integrity-verification#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Additional Information\",\"item\":\"https://docs.qlty.sh/cli/linter-extensions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrity Verification\",\"item\":\"https://docs.qlty.sh/cli/integrity-verification\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.qlty.sh/cli/integrity-verification#article\",\"headline\":\"Integrity Verification\",\"name\":\"Integrity Verification\",\"url\":\"https://docs.qlty.sh/cli/integrity-verification\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qlty.sh/cli/integrity-verification#webpage\"},\"dateModified\":\"2026-11-09T20:58:33.752Z\",\"publisher\":{\"@id\":\"https://docs.qlty.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.qlty.sh#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Qlty Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Qlty Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/cli/integrity-verification.md","siteName":"Qlty Docs","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":"/what-is-qlty"}]},{"tab":"Qlty CLI","icon":"square-terminal","groups":[{"group":"Getting Started","pages":[{"title":"Getting Started with the Qlty CLI","sidebarTitle":"Install and Quick Start","href":"/cli/quickstart"},{"title":"Upgrading the CLI","href":"/cli/upgrading"},{"title":"System Requirements","href":"/cli/system-requirements"},{"title":"Ignoring Issues with Qlty CLI","sidebarTitle":"Ignoring Checks and Issues","href":"/cli/ignoring-issues"},{"title":"Analysis Configuration","href":"/cli/analysis-configuration"},{"title":"Excluding Files and Folders","sidebarTitle":"Excluding Files","href":"/cli/excluding-files"}]},{"group":"Everyday Commands","pages":[{"title":"check","href":"/cli/commands/check"},{"title":"fmt","href":"/cli/commands/fmt"},{"title":"metrics","href":"/cli/commands/metrics"},{"title":"smells","href":"/cli/commands/smells"}]},{"group":"Key Concepts","pages":[{"title":"Sources","href":"/cli/concepts/sources"},{"title":"Plugins","href":"/cli/concepts/plugins"},{"title":"Runtimes","href":"/cli/concepts/runtimes"}]},{"group":"Workflow Integration","pages":[{"title":"Coding with AI Agents","href":"/cli/coding-with-ai-agents"},{"title":"Continuous Integration","href":"/cli/ci"},{"title":"Git Hooks","href":"/cli/git-hooks"}]},{"group":"Additional Information","pages":[{"title":"Linter Extensions","href":"/cli/linter-extensions"},{"title":"Radarlint Configuration","href":"/cli/radarlint-configuration"},{"title":"Shared Analysis Configuration","href":"/cli/shared-analysis-configuration"},{"title":"Frequently Asked Questions (FAQ)","description":null,"href":"/cli/faq"},{"title":"Integrity Verification","href":"/cli/integrity-verification"},{"title":"Qlty CLI Internals","sidebarTitle":"CLI Internals","description":null,"href":"/cli/internals"},{"title":"Debugging","href":"/cli/debugging"},{"title":"Developing Plugins","href":"/cli/developing-plugins"},{"title":"Global Options","href":"/cli/global-options"},{"title":"Telemetry","href":"/cli/telemetry"}]},{"group":"Reference","pages":[{"title":"Project Config (qlty.toml)","sidebarTitle":"qlty.toml","href":"/cli/qlty-toml"},{"title":"Silencing Issues","sidebarTitle":"qlty-ignore comments","href":"/cli/silencing-issues"},{"title":"user.toml","href":"/cli/user-toml"}]},{"group":"All Commands","pages":[{"title":"cache clean","href":"/cli/commands/cache-clean"},{"title":"cache dir","href":"/cli/commands/cache-dir"},{"title":"cache prune","href":"/cli/commands/cache-prune"},{"title":"cache status","href":"/cli/commands/cache-status"},{"title":"check","href":"/cli/commands/check"},{"title":"completions","href":"/cli/commands/completions"},{"title":"config migrate","href":"/cli/commands/config-migrate"},{"title":"config show","href":"/cli/commands/config-show"},{"title":"config validate","href":"/cli/commands/config-validate"},{"title":"coverage complete","href":"/cli/commands/coverage-complete"},{"title":"coverage publish","href":"/cli/commands/coverage-publish"},{"title":"coverage transform","href":"/cli/commands/coverage-transform"},{"title":"dashboard","href":"/cli/commands/dashboard"},{"title":"deinit","href":"/cli/commands/deinit"},{"title":"discord","href":"/cli/commands/discord"},{"title":"docs","href":"/cli/commands/docs"},{"title":"fmt","href":"/cli/commands/fmt"},{"title":"help","href":"/cli/commands/help"},{"title":"init","href":"/cli/commands/init"},{"title":"install","href":"/cli/commands/install"},{"title":"metrics","href":"/cli/commands/metrics"},{"title":"plugins disable","href":"/cli/commands/plugins-disable"},{"title":"plugins enable","href":"/cli/commands/plugins-enable"},{"title":"plugins list","href":"/cli/commands/plugins-list"},{"title":"plugins upgrade","href":"/cli/commands/plugins-upgrade"},{"title":"slop-one","href":"/cli/commands/slop-one"},{"title":"smells","href":"/cli/commands/smells"},{"title":"sources fetch","href":"/cli/commands/sources-fetch"},{"title":"upgrade","href":"/cli/commands/upgrade"},{"title":"upgrade source","href":"/cli/commands/upgrade-source"},{"title":"version","href":"/cli/commands/version"}]}]},{"tab":"Qlty Cloud","icon":"cloud","pages":[{"title":"Qlty Cloud","href":"/cloud/quickstart"}]},{"tab":"Code Coverage","icon":"shield","pages":[{"title":"Code Coverage","href":"/coverage"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api/introduction"}]},{"tab":"Changelog","icon":"clock","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Integrity Verification - Qlty Docs","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}