Intermittent 429 errors when using `shopify theme dev`

Seems to work for a few minutes, then errors out. Example terminal output:

╭─ warning ───────────────────────────────────────────────────────────────────╮
│                                                                             │
│  Failed to render section on Hot Reload with status 429 (Too Many           │
│  Requests).                                                                 │
│                                                                             │
│  Error                                                                      │
│      at createError (file:///opt/homebrew/Cellar/shopify-cli/3.84.0/libexe  │
│  c/lib/node_modules/@shopify/cli/dist/index.js:194151:14)                   │
│      at createFetchError (file:///opt/homebrew/Cellar/shopify-cli/3.84.0/l  │
│  ibexec/lib/node_modules/@shopify/cli/dist/index.js:194963:10)              │
│      at file:///opt/homebrew/Cellar/shopify-cli/3.84.0/libexec/lib/node_mo  │
│  dules/@shopify/cli/dist/index.js:196900:17                                 │
│      at process.processTicksAndRejections                                   │
│  (node:internal/process/task_queues:105:5)                                  │
│      at async Object.handler (file:///opt/homebrew/Cellar/shopify-cli/3.84  │
│  .0/libexec/lib/node_modules/@shopify/cli/dist/index.js:194837:17)          │
│      at async Server.<anonymous> (file:///opt/homebrew/Cellar/shopify-cli/  │
│  3.84.0/libexec/lib/node_modules/@shopify/cli/dist/index.js:194931:7)       │
│                                                                             │
╰─────────────────────────────────────────────────────────────────────────────╯

Additionally, trying to access the storefront from the local dev server results in a Cloudflare challenge page that is impossible to complete:

2025-08-28T01:06:38.571Z: → Rendering https://bedthreads.myshopify.com/?_fd=0&pb=0...
2025-08-28T01:06:38.640Z: ← 429 (request_id: null)
2025-08-28T01:06:38.641Z: Render failed for / with 429 (x-request-id: null), trying proxy...
2025-08-28T01:06:38.717Z: Proxy status: 429. Returning render error.
• 11:06:38 Request »    GET 429 / 14ms
2025-08-28T01:06:38.795Z: → Rendering https://bedthreads.myshopify.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?_fd=0&pb=0&ray=975fe83f99615726...
2025-08-28T01:06:38.859Z: ← 200 (request_id: null)
• 11:06:38 Request »    GET 200 /cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=975fe83f99615726 12ms
• 11:06:39 Request »    GET 429 /favicon.ico 10ms

Updating files and previewing the dev theme normally otherwise works okay.

Extra info:

  • CLI version 3.84.0
  • Located in Sydney, Australia
  • I have a static IP, and don’t use a VPN

Status-and-error-codes

You can check Shopify docs, 429 Too Many Requests, but you need to pay attention to Shopify API rate limit

Hi @stratton.sloane

We did ship a new minor version of the CLI this morning - can you update and let me know if you’re still seeing this? Also - can you test on a version of Dawn or Horizon to see if the issue might be related to the theme?

Are you still seeing this @stratton.sloane

Fyi still seeing this one – discovered while developing against cart/collect endpoints (which may have more aggressive limiting?)

We’re admittedly hitting the api a little hard to test UI/UX durability but generally seeing 429s show up after a few 422s. We have debouncing stuff in place and still see the cart/collect/etc endpoints get annoyed with us pretty quickly.

The 429s never seem to “recover” even after long pause. We then get hit with screen:

Your connection needs to be verified before you can proceed
Website is not accessible via this address.

Current “solve” is to shopify auth logout then log in again; just restarting cli doesn’t do the trick.

Some example logs:

• 16:22:33 Request »   POST 200 /cart/add 626ms
• 16:22:45 Request »    GET 200 /products/shirt-blue 463ms
• 16:22:46 Request »   POST 200 /api/collect 193ms
• 16:22:48 Request »   POST 422 /cart/add 338ms
• 16:22:56 Request »   POST 422 /cart/add 370ms
• 16:23:00 Request »    GET 200 /account/login 410ms
• 16:23:08 Request »   POST 200 /cart/change 649ms
• 16:23:11 Request »   POST 200 /cart/change 637ms
• 16:23:13 Request »   POST 200 /cart/change 1039ms
• 16:23:14 Request »   POST 422 /cart/change 266ms
• 16:23:15 Request »   POST 422 /cart/change 293ms
• 16:23:19 Request »   POST 422 /cart/change 299ms
• 16:23:20 Request »   POST 422 /cart/change 286ms
• 16:23:21 Request »   POST 422 /cart/change 276ms
• 16:23:22 Request »   POST 200 /cart/change 543ms
• 16:23:24 Request »   POST 200 /cart/change 605ms
• 16:23:25 Request »   POST 422 /cart/change 455ms
• 16:23:26 Request »   POST 422 /cart/change 483ms
• 16:23:27 Request »   POST 422 /cart/change 424ms
• 16:23:28 Request »   POST 422 /cart/change 462ms
• 16:23:31 Request »   POST 422 /cart/change 471ms
• 16:23:34 Request »   POST 422 /cart/change 524ms
• 16:23:42 Request »   POST 200 /cart/change 564ms
• 16:23:44 Request »   POST 422 /cart/change 312ms
• 16:23:46 Request »   POST 429 /cart/change 48ms
• 16:23:52 Request »   POST 429 /cart/change 20ms
• 16:23:58 Request »   POST 429 /cart/change 23ms
• 16:23:59 Request »   POST 429 /cart/change 17ms
• 16:24:00 Request »   POST 429 /cart/change 20ms
• 16:24:01 Request »   POST 429 /cart/change 30ms
• 16:24:02 Request »   POST 429 /cart/change 9ms

Thanks Zack, this is something that we’re actively investigating.