Shopify CLI - Failed to start dev preview

I have reproduced the issue on the latest CLI version.

Yes, I am on the latest version

I have searched existing posts and this report is not a duplicate.

Yes, this isn’t a duplicate

In which of these areas are you experiencing a problem?

Other

Expected behavior

I should be able to start dev or at least get a better error to tell me why dev isn’t starting without having to sift through the verbose logs.

Actual behavior

I’m running shopify app dev and just seeing “Failed to start dev preview”. I’m having a really hard time figuring out what’s causing the issue.

Reproduction steps

I’m really not sure. I thought that it might have to do with the bundle that’s being created but the builds are working fine. It seems like there’s a websocket connection issue but there are no open issues with Cloudflare or on the Shopify status page.

I do see a lot of connection reattempts before extension build attempts but the command doesn’t fail at that step. Its failing after the DevSessionCreate GraphQL call.

x-request-id: 240fa755-b7f1-4b1f-8561-1a009f1c8bdc-1773789043

Verbose output

I couldn’t add the whole log or it wouldn’t let me save the t

19:34:53 │                extensions │             },
19:34:53 │                extensions │             "resource": {
19:34:53 │                extensions │               "url": ""
19:34:53 │                extensions │             },
19:34:53 │                extensions │             "assets": {
19:34:53 │                extensions │               "main": {
19:34:53 │                extensions │                 "name": "main",
19:34:53 │                extensions │                 "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensio
ns/dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/assets/vending.js",
19:34:53 │                extensions │                 "lastUpdated": 1773790493121
19:34:53 │                extensions │               }
19:34:53 │                extensions │             }
19:34:53 │                extensions │           }
19:34:53 │                extensions │         ],
19:34:53 │                extensions │         "localization": null,
19:34:53 │                extensions │         "metafields": null,
19:34:53 │                extensions │         "type": "ui_extension",
19:34:53 │                extensions │         "externalType": "ui_extension",
19:34:53 │                extensions │         "uuid": "dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca",
19:34:53 │                extensions │         "title": "Start vending",
19:34:53 │                extensions │         "handle": "vending",
19:34:53 │                extensions │         "name": "Start vending",
19:34:53 │                extensions │         "description": "Start Vending Extension",
19:34:53 │                extensions │         "apiVersion": "2026-01",
19:34:53 │                extensions │         "approvalScopes": [
19:34:53 │                extensions │           "read_checkout_external_data",
19:34:53 │                extensions │           "read_customer_address",
19:34:53 │                extensions │           "read_customer_email",
19:34:53 │                extensions │           "read_customer_name",
19:34:53 │                extensions │           "read_customer_personal_data",
19:34:53 │                extensions │           "read_customer_phone"
19:34:53 │                extensions │         ]
19:34:53 │                extensions │       }
19:34:53 │                extensions │     ]
19:34:53 │                extensions │   }
19:34:53 │                extensions │ }
19:34:53 │                extensions │
19:34:53 │                extensions │ 2026-03-17T23:34:53.555Z: Sending websocket with event type update and data:
19:34:53 │                extensions │ {
19:34:53 │                extensions │   "app": {
19:34:53 │                extensions │     "title": "onelive-pos-app-devaoc",
19:34:53 │                extensions │     "apiKey": "2c63d7216577daf75c21d59f17a855f9",
19:34:53 │                extensions │     "url":
"https://devaoc-test-store-2.myshopify.com/admin/oauth/redirect_from_cli?client_id=2c63d7216577daf75c21d59f17a855f9",
19:34:53 │                extensions │     "mobileUrl":
"https://devaoc-test-store-2.myshopify.com/admin/apps/2c63d7216577daf75c21d59f17a855f9?shop=devaoc-test-store-2.myshopif
y.com&host=ZGV2YW9jLXRlc3Qtc3RvcmUtMi5teXNob3BpZnkuY29tL2FkbWluL2FwcHMvMmM2M2Q3MjE2NTc3ZGFmNzVjMjFkNTlmMTdhODU1Zjk"
19:34:53 │                extensions │   },
19:34:53 │                extensions │   "appId": "gid://shopify/App/308536606721",
19:34:53 │                extensions │   "version": "3",
19:34:53 │                extensions │   "root": {
19:34:53 │                extensions │     "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions"
19:34:53 │                extensions │   },
19:34:53 │                extensions │   "socket": {
19:34:53 │                extensions │     "url": "wss://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions"
19:34:53 │                extensions │   },
19:34:53 │                extensions │   "devConsole": {
19:34:53 │                extensions │     "url":
"https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions/dev-console"
19:34:53 │                extensions │   },
19:34:53 │                extensions │   "store": "devaoc-test-store-2.myshopify.com",
19:34:53 │                extensions │   "extensions": [
19:34:53 │                extensions │     {
19:34:53 │                extensions │       "assets": {
19:34:53 │                extensions │         "main": {
19:34:53 │                extensions │           "name": "main",
19:34:53 │                extensions │           "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions/dev
-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/assets/vending.js",
19:34:53 │                extensions │           "lastUpdated": 1773790493419
19:34:53 │                extensions │         }
19:34:53 │                extensions │       },
19:34:53 │                extensions │       "supportedFeatures": {
19:34:53 │                extensions │         "runsOffline": false
19:34:53 │                extensions │       },
19:34:53 │                extensions │       "capabilities": {
19:34:53 │                extensions │         "blockProgress": false,
19:34:53 │                extensions │         "networkAccess": false,
19:34:53 │                extensions │         "apiAccess": false,
19:34:53 │                extensions │         "collectBuyerConsent": {
19:34:53 │                extensions │           "smsMarketing": false,
19:34:53 │                extensions │           "customerPrivacy": false
19:34:53 │                extensions │         },
19:34:53 │                extensions │         "iframe": {
19:34:53 │                extensions │           "sources": []
19:34:53 │                extensions │         }
19:34:53 │                extensions │       },
19:34:53 │                extensions │       "development": {
19:34:53 │                extensions │         "status": "success",
19:34:53 │                extensions │         "resource": {
19:34:53 │                extensions │           "url": ""
19:34:53 │                extensions │         },
19:34:53 │                extensions │         "root": {
19:34:53 │                extensions │           "url":
"https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions/dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca"
19:34:53 │                extensions │         },
19:34:53 │                extensions │         "hidden": false,
19:34:53 │                extensions │         "localizationStatus": ""
19:34:53 │                extensions │       },
19:34:53 │                extensions │       "extensionPoints": [
19:34:53 │                extensions │         {
19:34:53 │                extensions │           "target": "pos.home.tile.render",
19:34:53 │                extensions │           "module": "./src/VendingTile.tsx",
19:34:53 │                extensions │           "metafields": [],
19:34:53 │                extensions │           "urls": {},
19:34:53 │                extensions │           "preloads": {},
19:34:53 │                extensions │           "build_manifest": {
19:34:53 │                extensions │             "assets": {
19:34:53 │                extensions │               "main": {
19:34:53 │                extensions │                 "filepath": "vending.js",
19:34:53 │                extensions │                 "module": "./src/VendingTile.tsx"
19:34:53 │                extensions │               }
19:34:53 │                extensions │             }
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "surface": "point_of_sale",
19:34:53 │                extensions │           "root": {
19:34:53 │                extensions │             "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions/d
ev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/pos.home.tile.render"
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "resource": {
19:34:53 │                extensions │             "url": ""
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "assets": {
19:34:53 │                extensions │             "main": {
19:34:53 │                extensions │               "name": "main",
19:34:53 │                extensions │               "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions
/dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/assets/vending.js",
19:34:53 │                extensions │               "lastUpdated": 1773790493121
19:34:53 │                extensions │             }
19:34:53 │                extensions │           }
19:34:53 │                extensions │         },
19:34:53 │                extensions │         {
19:34:53 │                extensions │           "target": "pos.home.modal.render",
19:34:53 │                extensions │           "module": "./src/StartVending.tsx",
19:34:53 │                extensions │           "metafields": [],
19:34:53 │                extensions │           "urls": {},
19:34:53 │                extensions │           "preloads": {},
19:34:53 │                extensions │           "build_manifest": {
19:34:53 │                extensions │             "assets": {
19:34:53 │                extensions │               "main": {
19:34:53 │                extensions │                 "filepath": "vending.js",
19:34:53 │                extensions │                 "module": "./src/StartVending.tsx"
19:34:53 │                extensions │               }
19:34:53 │                extensions │             }
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "surface": "point_of_sale",
19:34:53 │                extensions │           "root": {
19:34:53 │                extensions │             "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions/d
ev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/pos.home.modal.render"
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "resource": {
19:34:53 │                extensions │             "url": ""
19:34:53 │                extensions │           },
19:34:53 │                extensions │           "assets": {
19:34:53 │                extensions │             "main": {
19:34:53 │                extensions │               "name": "main",
19:34:53 │                extensions │               "url": "https://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions
/dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca/assets/vending.js",
19:34:53 │                extensions │               "lastUpdated": 1773790493121
19:34:53 │                extensions │             }
19:34:53 │                extensions │           }
19:34:53 │                extensions │         }
19:34:53 │                extensions │       ],
19:34:53 │                extensions │       "localization": null,
19:34:53 │                extensions │       "metafields": null,
19:34:53 │                extensions │       "type": "ui_extension",
19:34:53 │                extensions │       "externalType": "ui_extension",
19:34:53 │                extensions │       "uuid": "dev-d9a9174b-6fd5-10c6-1b4c-0878e92bf4df4f5fc4ca",
19:34:53 │                extensions │       "title": "Start vending",
19:34:53 │                extensions │       "handle": "vending",
19:34:53 │                extensions │       "name": "Start vending",
19:34:53 │                extensions │       "description": "Start Vending Extension",
19:34:53 │                extensions │       "apiVersion": "2026-01",
19:34:53 │                extensions │       "approvalScopes": [
19:34:53 │                extensions │         "read_checkout_external_data",
19:34:53 │                extensions │         "read_customer_address",
19:34:53 │                extensions │         "read_customer_email",
19:34:53 │                extensions │         "read_customer_name",
19:34:53 │                extensions │         "read_customer_personal_data",
19:34:53 │                extensions │         "read_customer_phone"
19:34:53 │                extensions │       ]
19:34:53 │                extensions │     }
19:34:53 │                extensions │   ]
19:34:53 │                extensions │ }
19:34:53 │                extensions │

────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ (d) Dev status │ (a) App info │ (s) Store info │                                                  (q) Quit

 ⠴ Preparing dev preview


2026-03-17T23:34:53.585Z: Sending "App Management" GraphQL request:
  mutation CreateAssetURL($sourceExtension: SourceExtension!, $organizationId: ID!) {
  appRequestSourceUploadUrl(
    sourceExtension: $sourceExtension
    organizationId: $organizationId
  ) {
    sourceUploadUrl
    userErrors {
      field
      message
      __typename
    }
    __typename
  }
}

With variables:
{
  "sourceExtension": "BR",
  "organizationId": "gid://shopify/Organization/129013887"
}



────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ (d) Dev status │ (a) App info │ (s) Store info │                                                  (q) Quit

 ⠙ Preparing dev preview


2026-03-17T23:34:53.975Z: Request to https://partners-extensions-scripts-bucket.storage.googleapis.com/deployments/app_sources/129013887/e52eb822-7be4-4f8c-adfa-06b3638a695b/source.br?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=argo-project-sa%40shopify-tiers.iam.gserviceaccount.com%2F20260317%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20260317T232913Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=host&X-Goog-Signature=42fda56050866d0f8249c2183aaf016187f189537565577a47e5ec2a851bbb5a7d1f4c0f11b7d3824e7f5f264a442786607b4ada8e71664d4943c629d2a3684e82959ce3ccbb0b6f6e37d250fc48a004b3ee777c177fef840d3ef4728d3bb3db210ad6addb7ca8135ea0130a251fa343d5dd2d9c36b6f2d29b26c6b3f7c902f128c23f7520a4a2d9de916d7e326cd6035ab43559010dc12a194226982d029ae236737ed7b075da0f8bc22b14c2d67d0c37246222f2b7fbdadef904958999e16b43070bc77093bc02f7c412e7f2b8eb4ac74f363bac4b4566555673035172861925a2cbdf07c87ea1b284a06c26d3f545c359f2c21c79358443a04962c5dc288e completed in 389 ms
With response headers:
 - content-type: text/html; charset=UTF-8
 - etag: "5d12fe37a7323f0c7d542836d4b5b3c9"
    
2026-03-17T23:34:53.981Z: Sending "App Dev" GraphQL request:
  mutation DevSessionCreate($appId: String!, $assetsUrl: String!, $websocketUrl: String) {
  devSessionCreate(
    appId: $appId
    assetsUrl: $assetsUrl
    websocketUrl: $websocketUrl
  ) {
    devSession {
      websocketUrl
      updatedAt
      user {
        id
        email
        __typename
      }
      app {
        id
        key
        __typename
      }
      __typename
    }
    warnings {
      message
      code
      __typename
    }
    userErrors {
      message
      on
      field
      category
      __typename
    }
    __typename
  }
}

With variables:
{
  "appId": "308536606721",
  "assetsUrl": "https://partners-extensions-scripts-bucket.storage.googleapis.com/deployments/app_sources/129013887/e52eb822-7be4-4f8c-adfa-06b3638a695b/source.br?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=argo-project-sa%40shopify-tiers.iam.gserviceaccount.com%2F20260317%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20260317T232913Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=host&X-Goog-Signature=42fda56050866d0f8249c2183aaf016187f189537565577a47e5ec2a851bbb5a7d1f4c0f11b7d3824e7f5f264a442786607b4ada8e71664d4943c629d2a3684e82959ce3ccbb0b6f6e37d250fc48a004b3ee777c177fef840d3ef4728d3bb3db210ad6addb7ca8135ea0130a251fa343d5dd2d9c36b6f2d29b26c6b3f7c902f128c23f7520a4a2d9de916d7e326cd6035ab43559010dc12a194226982d029ae236737ed7b075da0f8bc22b14c2d67d0c37246222f2b7fbdadef904958999e16b43070bc77093bc02f7c412e7f2b8eb4ac74f363bac4b4566555673035172861925a2cbdf07c87ea1b284a06c26d3f545c359f2c21c79358443a04962c5dc288e",
  "websocketUrl": "wss://xhtml-wildlife-ram-ceo.trycloudflare.com/extensions"
}


────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ (d) Dev status │ (a) App info │ (s) Store info │                                                  (q) Quit

 ⠋ Preparing dev preview


2026-03-17T23:34:54.582Z: Request to https://devaoc-test-store-2.myshopify.com/app_dev/unstable/graphql.json completed in 601 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - server-timing: processing;dur=434, verdict_flag_enabled;desc="count=15";dur=0.783, _y;desc="859573a0-19e9-4e1c-b7b5-eb3df0dd9075", _s;desc="c476e44f-0e89-490c-af93-94fb36869527", cfRequestDuration;dur=509.999990
 - x-request-id: 73ffe298-6998-4439-adf8-078ce952daf2-1773790494

Operating system

Mac OS 26.3.1 (25D2128)

CLI version

3.92.1

Shell

zsh

Nodejs version

v22.15.1

After some digging and testing, it looks like one of my extensions exceeded the size limit by less than a KB but it wasn’t reported on build or even as a message during preview start.
```
:cross_mark: Error
10:25:10 │ settle-show │ └ Your script size is 64 KB which exceeds the 64 KB limit
```
It would be great to understand how the extensions get bundled because I made very slight changes to a utils file that I share between the extensions and the backend of my app.

Hi @aoc

We definitely need to improve the visibility of this error, I’m not sure whether something regressed here. Thanks for reporting.

FYI you can analyze your UI extension bundle size with a metafile output during build, if you are on the latest Shopify CLI.

See docs for more info: