Scan
Every GraphQL document in your repo (.graphql files,
#graphql literals, client calls) is validated against the exact schema
of the version you're moving to. Deterministic: no guessing.
For Shopify agencies and app developers
Shopify tells you what is deprecated. driftfix finds it in your code, fixes it, verifies it, and opens the PR, across every client app, every quarter.
npx driftfix scan . --to next
Free CLI · runs locally · your code never leaves your machine · full setup
$ npx driftfix scan . --to next driftfix · shopify-admin 2026-10 → 2027-01 app/graphql/product-fields.graphql 4:3 BREAKING Product.bodyHtml is removed in 2027-01 → Product.descriptionHtml [auto-fix] app/routes/app.products.$id.tsx 12:9 SEMANTIC Product.publishedAt changes from Date to DateTime in 2027-01 13:9 BREAKING Product.featuredImage is removed → Product.featuredMedia 35:21 BREAKING Argument productUpdate.input is removed → productUpdate.product app/lib/dynamic.server.ts 2:18 INFO Can't be analyzed statically: template interpolation inside the query 6 breaking · 2 semantic · 2 unanalyzable · 2 auto-fixable (8 operations in 14 files, 31ms)
$ npx driftfix fix . --to next HIGH app/graphql/product-fields.graphql:4 Product.bodyHtml is removed in 2027-01 · rule Select descriptionHtml under the alias bodyHtml, so the response keeps its shape. --- a/app/graphql/product-fields.graphql +++ b/app/graphql/product-fields.graphql fragment ProductFields on Product { id title - bodyHtml + bodyHtml: descriptionHtml } ✓ graphql-validate finding gone, nothing new ✓ response-shape same keys, same types 2 fixes ready · 0 drafts · 0 rejected Dry run: nothing was written. --apply opens a branch.
The problem
Shopify ships a new Admin API version every quarter and retires each one after about 12 months. The API Health report tells you something is deprecated. It doesn't find the code, change it, or prove the change is safe.
How it works
Every GraphQL document in your repo (.graphql files,
#graphql literals, client calls) is validated against the exact schema
of the version you're moving to. Deterministic: no guessing.
Each finding shows the file and line, what changed, Shopify's replacement, the deadline, and the evidence: the schema diff and Shopify's changelog.
Simple renames are fixed by rules. Harder migrations use Claude. Every fix is re-validated, checked for response-shape changes, and given a confidence level.
High-confidence fixes go in a branch with a ready-made PR description. Anything that changes behaviour arrives as a draft with a review checklist.
Trust is the product
Detection is deterministic. Fixes may be AI-assisted. Verification is deterministic again. Every fix says how sure it is, and why.
Passes every check and changes nothing your code reads. Applied by
--apply.
Valid, but changes what your code receives or sends. Comes with concrete review
items, e.g. "list.jsx:113 still reads email".
Failed verification. Reported so you know, never written to your code.
Measured October 2026 on public Shopify apps from GitHub; re-run on every change in CI. We publish rates separately rather than one score, and we don't count a fix as a success until a human accepts it.
The CLI scans locally. Nothing is uploaded. Shopify's schemas are fetched from Shopify and cached on your machine.
--llm is opt-in and uses your own Anthropic key from the environment.
Only the affected file and schema excerpts are sent.
SARIF for GitHub code scanning, Markdown for PR comments, JSON for everything else. Exit code 1 when something breaks.
Coming next · for agencies
We're working with a small number of agencies on real client repos. Pilots get the GitHub App free during the pilot and shape what we build.
Request a pilot spotOr start now: run the free CLI on one of your client repos.
Pricing
Planned pricing for the GitHub App, AI fixes included. One upgrade cycle saves hours per app.
1 app
3 apps
25 apps
100 apps
Annual plans: two months free. Pilot agencies: free during the pilot.
FAQ
Not by the scanner. driftfix scan runs entirely on your machine. Only
driftfix fix --llm sends the affected file and schema excerpts to
Anthropic, using your own API key.
The Shopify Admin GraphQL API in JavaScript and TypeScript apps (Remix, React Router, Node, admin UI extensions). Storefront, Customer Account and Partner API queries are recognised and skipped. Ruby and PHP apps are on the roadmap.
API Health shows deprecated calls your app made in production. driftfix works on your source code, before deploy: it points to the exact line, explains the replacement, and writes a verified fix, including for versions that aren't released yet.
driftfix never applies a fix that fails verification, and fixes that change what your code reads are drafts with a checklist, not silent edits. Every change comes as a diff or a PR for your review, and your own CI runs on it.
Yes: npx driftfix scan . --to latest --format sarif -o driftfix.sarif
uploads findings to GitHub code scanning, and the exit code fails the build on
breaking changes. A weekly run catches new Shopify releases even without code
changes.
No. driftfix is an independent tool and is not affiliated with or endorsed by Shopify.
Free for everyone. Two minutes from zero to your first scan.
Once. Fetched straight from Shopify and cached on your machine.
npx driftfix schemas pull
From the repo root, against the next API version.
npx driftfix scan . --to next
Details for any finding, then a verified diff you can apply on a branch.
npx driftfix fix . --to next
Prefer a global install? npm install -g driftfix · Needs Node.js 20.19+