Fallback

Snapshot before. Diff after. Restore what shouldn't have moved.

Deterministic snapshot, diff and restore for Shopify stores. Run by hand, or standing watch. It runs locally, keeps snapshots on your disk, and never phones home.

Language
TypeScript
Licence
MIT
Version
1.0
Runs
Your machine or CI

AI agents can edit your catalog. The admin can't tell you what they changed.

Claude Code with the Shopify AI Toolkit edits products. The Shopify connector for Claude creates and updates catalog data through conversation. Sidekick runs in every admin. Community MCP servers do similar work with looser guardrails.

None of them report what they did. The admin shows a single updatedAt timestamp and a vague activity log. Theme files have rollback; product data does not.

Snapshot, diff, restore. Each does one job.

  1. 01

    snapshot

    Reads your store through the Admin GraphQL API and writes it to your disk: products and variants, collections, metafields, metaobjects, inventory levels.

  2. 02

    diff

    Compares a snapshot to the live store, field by field. Variants are tracked by stable ID, so a reorder never reads as four content changes. Timestamp and position noise is counted, not shown.

  3. 03

    restore

    Writes back only the fields that drifted, on records that still exist. A dry run by default; --apply performs the writes.

$ fallback diff 2026-05-30T17-21-51Z
Products
  Created: 0
  Updated: 1
    ~ Everyday Carry Bag (gid://shopify/Product/7517161062482)
        title: "Everyday Carry Bag" → "Everyday Carry Bag | Free Shipping | Best Seller"
        tags: ["bags","core"] → ["bags","core","sale"]
  Deleted: 0
  13 ignored changes (use --show-ignored to view)

Collections
  No changes (1 in snapshot, 1 in current)

$ fallback restore 2026-05-30T17-21-51Z
Dry run — no changes written. Re-run with --apply to write.

To write: 1
  ~ gid://shopify/Product/7517161062482 (products)
      title: "Everyday Carry Bag | Free Shipping | Best Seller" → "Everyday Carry Bag"
      tags: ["bags","core","sale"] → ["bags","core"]
Skipped (created): 0
Skipped (deleted): 0
Skipped (unsupported): 0

The tool changes things when you ask. The monitor can't change anything at all.

Fallback-Sentinel is the same engine running itself: a small always-on worker that snapshots and diffs on a schedule and files a drift ledger as GitHub issues on your theme repo. Its Shopify app is granted no write scopes, so the thing that runs unattended is physically unable to change your store. Most people start with the tool and never need more.

The tool: FallbackThe monitor: Fallback-Sentinel
Where it runsyour machine or CI, on demanda worker, daily, unattended
Shopify accessread and writeread-only, no write scope at all
What it doessnapshot, diff, restoresnapshot and diff, then reports
Outputyour terminala drift ledger as GitHub issues on your theme repo
Do you need ityes, this is Fallbackoptional

Know the edges before you rely on it.

For people who let AI near a live store and want a receipt.

Operators comfortable in a terminal. Agencies running changes across client stores. Developers pointing Claude Code or Cursor at real catalog data. Anyone about to run a bulk import they can't easily take back.

Fallback is available by request while the code is private.

Write with a line about your store and how you would use it. Messages are read by the person who builds the tools.

Request access