Dev Preview Broken — shopify app dev does not update tunnel URLs in TOML file and Partner Dashboard (CLI 4.1.0)

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?

App

Expected behavior

When running shopify app dev:

A new tunnel URL should be generated and become accessible.
The generated tunnel URL should automatically update in shopify.app.toml.
The Dev App URLs in the Shopify Partner Dashboard (Application URL, Redirect URLs, etc.) should be updated to use the latest tunnel URL.
The development app preview should load successfully in the Shopify Admin.
Restarting shopify app dev should refresh all relevant URLs and maintain a working local development workflow without requiring manual updates.

This behavior is expected to work consistently across supported Shopify CLI versions, including CLI 4.1.0.

Actual behavior

shopify app dev generates a tunnel URL, but the URL is not updated in shopify.app.toml.
The Dev App URLs in the Shopify Partner Dashboard/Admin (Application URL and Redirect URLs) are not updated to the latest tunnel URL.
The development app preview does not load correctly and cannot be accessed through the expected dev preview flow.
App logs are not displayed in the terminal during development, making it difficult to debug requests and application behavior.
Manual intervention is required to update URLs and troubleshoot the development environment after each restart.

Reproduction steps

Install Shopify CLI 4.1.0 and Node.js v24.
Open an existing Shopify app project.

Run:

shopify app dev
Allow Shopify CLI to start the local development environment and generate a tunnel URL.
Verify the generated tunnel URL displayed by the CLI.
Check the shopify.app.toml file and observe that the Application URL and redirect URLs are not updated with the new tunnel URL.
Open the Shopify Partner Dashboard / Dev App configuration and observe that the app URLs are not updated to match the generated tunnel URL.
Attempt to open the app preview from Shopify Admin.
Observe that the preview does not load correctly.
Trigger requests to the app (load the app, hit API endpoints, authenticate, etc.).
Observe that application logs are not displayed in the terminal as expected.
Frequency

Occurs consistently on every restart of shopify app dev.

Verbose output

2026-06-10T14:51:58.476Z: Running command app dev
2026-06-10T14:51:58.529Z: Running system process in background:
· Command: /home/tbidev/.nvm/versions/node/v24.8.0/bin/node /home/tbidev/.nvm/versions/node/v24.8.0/bin/shopify notifications list --ignore-errors
· Working directory: /var/www/html/bundlefly-shopify

2026-06-10T14:51:58.604Z: Notifications to show: 0
2026-06-10T14:51:58.677Z: Reading the content of file at shopify.app.bundle-test.toml…
2026-06-10T14:51:58.678Z: Reading the content of file at shopify.app.bundlefly-v3.toml…
2026-06-10T14:51:58.742Z: Reading the content of file at extensions/bundle-discount/shopify.extension.toml…
2026-06-10T14:51:58.743Z: Reading the content of file at extensions/product-offers/shopify.extension.toml…
2026-06-10T14:52:00.297Z: Looking for a lockfile in /var/www/html/bundlefly-shopify…
2026-06-10T14:52:00.298Z: Reading the content of file at package.json…
2026-06-10T14:52:00.300Z: Reading the content of file at package.json…
2026-06-10T14:52:00.304Z: Reading the .env file at .env.bundle-fly-test
2026-06-10T14:52:00.305Z: Reading the content of file at .env.bundle-fly-test…
2026-06-10T14:52:00.362Z: Reading the content of file at .shopify/project.json…
2026-06-10T14:52:00.413Z: Reading cached app information for directory /var/www/html/bundlefly-shopify…
2026-06-10T14:52:00.418Z: Ensuring that the user is authenticated with the App Management API with the following scopes:

2026-06-10T14:52:00.419Z: Getting session store…
2026-06-10T14:52:00.423Z: Getting current session ID…
2026-06-10T14:52:00.425Z: Validating existing session against the scopes:
[
“openid”,
https://api.shopify.com/auth/shop.admin.graphql”,
https://api.shopify.com/auth/shop.admin.themes”,
https://api.shopify.com/auth/partners.collaborator-relationships.readonly”,
https://api.shopify.com/auth/shop.storefront-renderer.devtools”,
https://api.shopify.com/auth/partners.app.cli.access”,
https://api.shopify.com/auth/destinations.readonly”,
https://api.shopify.com/auth/organization.store-management”,
https://api.shopify.com/auth/organization.on-demand-user-access”,
https://api.shopify.com/auth/organization.apps.manage
]
For applications:
{
“appManagementApi”: {
“scopes”:
},
“businessPlatformApi”: {
“scopes”:
}
}

2026-06-10T14:52:00.427Z: - Token validation → It’s expired: false
2026-06-10T14:52:00.436Z: Sending “BusinessPlatform” GraphQL request:
query UserInfo {
currentUserAccount {
uuid
email
organizations(first: 2) {
nodes {
name
__typename
}
__typename
}
__typename
}
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://destinations.shopifysvc.com/destinations/api/2020-07/graphql
2026-06-10T14:52:00.453Z: Sending “App Management” GraphQL request:
query ActiveAppReleaseFromApiKey($apiKey: String!) {
app: appByKey(key: $apiKey) {
…AppVersionInfo
__typename
}
}

fragment ReleasedAppModule on AppModule {
uuid
userIdentifier
handle
config
target
specification {
identifier
externalIdentifier
name
experience
managementExperience
}
}

fragment AppVersionInfo on App {
id
key
organizationId
activeRoot {
clientCredentials {
secrets {
key
}
}
grantedShopifyApprovalScopes
}
activeRelease {
id
version {
name
appModules {
…ReleasedAppModule
}
}
}
}

With variables:
{
“apiKey”: “*****”
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://app.shopify.com/app_management/unstable/graphql.json
2026-06-10T14:52:01.293Z: Request to https://app.shopify.com/app_management/unstable/graphql.json completed in 838 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=185, verdict_flag_enabled;desc=“count=2”;dur=0.103, _y;desc=“6e12d92c-c097-4240-afb8-ef0bc483c2d3”, _s;desc=“9595e1d4-49fa-42a9-99a5-5048f9b8ef87”
  • x-request-id: 019eb204-d164-7013-8635-3d314decc531-1781103120

2026-06-10T14:52:01.298Z: Sending “BusinessPlatform” GraphQL request:
query FindOrganizations($organizationId: OrganizationID!) {
currentUserAccount {
organization(id: $organizationId) {
id
name
__typename
}
__typename
}
}

With variables:
{
“organizationId”: “Z2lkOi8vb3JnYW5pemF0aW9uL09yZ2FuaXphdGlvbi8xNzIyMDkwNDQ=”
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://destinations.shopifysvc.com/destinations/api/2020-07/graphql
2026-06-10T14:52:01.307Z: Sending “App Management” GraphQL request:
query fetchSpecifications($organizationId: ID!) {
specifications(organizationId: $organizationId) {
name
identifier
externalIdentifier
experience
features
uidStrategy {
__typename
appModuleLimit
isClientProvided
}
validationSchema {
jsonSchema
__typename
}
__typename
}
}

With variables:
{
“organizationId”: “gid://shopify/Organization/172209044”
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://app.shopify.com/app_management/unstable/graphql.json
2026-06-10T14:52:02.556Z: Request to https://app.shopify.com/app_management/unstable/graphql.json completed in 1248 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=399, verdict_flag_enabled;desc=“count=7”;dur=0.365, _y;desc=“9e071dcd-06cc-4d2e-8ef9-930435236496”, _s;desc=“8344f145-0fec-4474-a6d4-4a68f3a05d2e”
  • x-request-id: 019eb204-d48e-76b1-aeb8-68ee76eeb8ee-1781103121

2026-06-10T14:52:02.620Z: The following extension specifications were defined locally but not found in the remote specifications: order_attribution_config, tax_calculation
2026-06-10T14:52:02.621Z: The following extension specifications were found in the remote specifications but not defined locally: admin_app
2026-06-10T14:52:02.625Z: Reading the content of file at .gitignore…
2026-06-10T14:52:03.242Z: Notifications to show: 0
2026-06-10T14:52:03.242Z: Unable to decide project type as no web backend
2026-06-10T14:52:03.243Z: Reading cached app information for directory /var/www/html/bundlefly-shopify…
2026-06-10T14:52:03.243Z: Storing app information for directory /var/www/html/bundlefly-shopify:{
“appId”: “34eb30792565a93ad77bb9629de0a72e”,
“title”: “bundlefly-v3”,
“directory”: “/var/www/html/bundlefly-shopify”,
“orgId”: “172209044”
}
2026-06-10T14:52:03.396Z: Sending “BusinessPlatform” GraphQL request:
query FetchStoreByDomain($domain: String, $filters: [ShopFilterInput!]) {
organization {
id
name
accessibleShops(filters: $filters, search: $domain) {
edges {
node {
id
externalId
name
storeType
primaryDomain
shortName
url
__typename
}
__typename
}
__typename
}
currentUser {
organizationPermissions
__typename
}
__typename
}
}

With variables:
{
“domain”: “bundle-fly-dev.myshopify.com”,
“filters”: [
{
“field”: “STORE_TYPE”,
“operator”: “EQUALS”,
“value”: “app_development”
},
{
“field”: “STORE_STATUS”,
“operator”: “EQUALS”,
“value”: “ACTIVE”
}
]
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://destinations.shopifysvc.com/organizations/api/unstable/organization/172209044/graphql
2026-06-10T14:52:04.576Z: Request to https://destinations.shopifysvc.com/organizations/api/unstable/organization/172209044/graphql completed in 1180 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/“6adb5335beac182dbcdfcd5592a25917”
  • server-timing: processing;dur=765, socket_queue;dur=2.175, util;dur=0.08
  • x-request-id: c19d1087-b0f7-467e-b75b-759c577269db-1781103123

2026-06-10T14:52:04.582Z: Sending “BusinessPlatform” GraphQL request:
mutation ProvisionShopAccess($input: OrganizationUserProvisionShopAccessInput!) {
organizationUserProvisionShopAccess(
organizationUserProvisionShopAccessInput: $input
) {
success
userErrors {
message
__typename
}
__typename
}
}

With variables:
{
“input”: {
“shopifyShopId”: “Z2lkOi8vb3JnYW5pemF0aW9uL1Nob3BpZnlTaG9wLzcwNzc0ODE2OTU3”
}
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://destinations.shopifysvc.com/organizations/api/unstable/organization/172209044/graphql
2026-06-10T14:52:05.085Z: Request to https://destinations.shopifysvc.com/organizations/api/unstable/organization/172209044/graphql completed in 502 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/“68abd614679dbb04670a77b6743f6a0e”
  • server-timing: processing;dur=96, socket_queue;dur=2.623, util;dur=0.16
  • x-request-id: 76702466-e86d-40ef-9200-3eb1ab9336e6-1781103124

2026-06-10T14:52:05.087Z: Getting a random port…
2026-06-10T14:52:05.099Z: Random port obtained: 40259
2026-06-10T14:52:05.315Z: cloudflared already installed, skipping
2026-06-10T14:52:05.329Z: Running system process:
· Command: /home/tbidev/.nvm/versions/node/v24.8.0/lib/node_modules/@shopify/cli/bin/cloudflared tunnel --url http://localhost:40259 --no-autoupdate
· Working directory: /var/www/html/bundlefly-shopify

2026-06-10T14:52:05.336Z: Sending “App Management” GraphQL request:
query ActiveAppReleaseFromApiKey($apiKey: String!) {
app: appByKey(key: $apiKey) {
…AppVersionInfo
__typename
}
}

fragment ReleasedAppModule on AppModule {
uuid
userIdentifier
handle
config
target
specification {
identifier
externalIdentifier
name
experience
managementExperience
}
}

fragment AppVersionInfo on App {
id
key
organizationId
activeRoot {
clientCredentials {
secrets {
key
}
}
grantedShopifyApprovalScopes
}
activeRelease {
id
version {
name
appModules {
…ReleasedAppModule
}
}
}
}

With variables:
{
“apiKey”: “*****”
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://app.shopify.com/app_management/unstable/graphql.json
2026-06-10T14:52:05.366Z: 2026-06-10T14:52:05Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: Cloudflare Tunnel · Cloudflare One docs
2026-06-10T14:52:05Z INF Requesting new quick Tunnel on trycloudflare.com

2026-06-10T14:52:06.004Z: Request to https://app.shopify.com/app_management/unstable/graphql.json completed in 667 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=126, verdict_flag_enabled;desc=“count=2”;dur=0.14, _y;desc=“1b269b22-1336-4867-90fb-b9723473c271”, _s;desc=“88fedc57-ec5b-448d-b20c-a4cd5b608d01”
  • x-request-id: 3f7abb77-3576-43d9-8c83-f19c998eadaf-1781103125

2026-06-10T14:52:06.014Z: Reading cached app information for directory /var/www/html/bundlefly-shopify…
╭─ info ───────────────────────────────────────────────────────────────────────╮
│ │
│ Using shopify.app.bundlefly-v3.toml for default values: │
│ │
│ • Org: BundleFly │
│ • App: bundlefly-v3 │
│ • Dev store: bundle-fly-dev.myshopify.com
│ • Update URLs: Yes │
│ │
│ You can pass --reset to your command to reset your app configuration. │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯

2026-06-10T14:52:06.135Z: Port 3457 is free
2026-06-10T14:52:06.136Z: Polling tunnel status for cloudflare (attempt 0): starting
2026-06-10T14:52:06.137Z: Getting a random port…
2026-06-10T14:52:06.137Z: Random port obtained: 40381
2026-06-10T14:52:06.637Z: Polling tunnel status for cloudflare (attempt 1): starting
2026-06-10T14:52:07.138Z: Polling tunnel status for cloudflare (attempt 2): starting
2026-06-10T14:52:07.639Z: Polling tunnel status for cloudflare (attempt 3): starting
2026-06-10T14:52:08.140Z: Polling tunnel status for cloudflare (attempt 4): starting
2026-06-10T14:52:08.641Z: Polling tunnel status for cloudflare (attempt 5): starting
2026-06-10T14:52:09.141Z: Polling tunnel status for cloudflare (attempt 6): starting
2026-06-10T14:52:09.642Z: Polling tunnel status for cloudflare (attempt 7): starting
2026-06-10T14:52:10.143Z: Polling tunnel status for cloudflare (attempt 8): starting
2026-06-10T14:52:10.642Z: Polling tunnel status for cloudflare (attempt 9): starting
2026-06-10T14:52:11.107Z: 2026-06-10T14:52:11Z INF ±-------------------------------------------------------------------------------------------+
2026-06-10T14:52:11Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
2026-06-10T14:52:11Z INF | https://compiled-fragrance-listprice-ships.trycloudflare.com |

2026-06-10T14:52:11.108Z: 2026-06-10T14:52:11Z INF ±-------------------------------------------------------------------------------------------+
2026-06-10T14:52:11Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared]

2026-06-10T14:52:11.108Z: 2026-06-10T14:52:11Z INF Version 2024.8.2
2026-06-10T14:52:11Z INF GOOS: linux, GOVersion: go1.22.2, GoArch: amd64

2026-06-10T14:52:11.108Z: 2026-06-10T14:52:11Z INF Settings: map[ha-connections:1 no-autoupdate:true protocol:quic url:http://localhost:40259]

2026-06-10T14:52:11.110Z: 2026-06-10T14:52:11Z INF Generated Connector ID: b018366e-2d47-4d74-b009-37ec59f7f943

2026-06-10T14:52:11.142Z: Polling tunnel status for cloudflare (attempt 10): starting
2026-06-10T14:52:11.188Z: 2026-06-10T14:52:11Z INF Initial protocol quic

2026-06-10T14:52:11.189Z: 2026-06-10T14:52:11Z INF ICMP proxy will use 192.168.1.52 as source for IPv4

2026-06-10T14:52:11.189Z: 2026-06-10T14:52:11Z INF ICMP proxy will use fe80::e593:c9a0:a070:6b18 in zone enp2s0 as source for IPv6

2026-06-10T14:52:11.190Z: 2026-06-10T14:52:11Z WRN The user running cloudflared process has a GID (group ID) that is not within ping_group_range. You might need to add that user to a group within that range, or instead update the range to encompass a group the user is already in by modifying /proc/sys/net/ipv4/ping_group_range. Otherwise cloudflared will not be able to ping this network error=“Group ID 1001 is not between ping group 1 to 0”
2026-06-10T14:52:11Z WRN ICMP proxy feature is disabled error=“cannot create ICMPv4 proxy: Group ID 1001 is not between ping group 1 to 0 nor ICMPv6 proxy: socket: permission denied”

2026-06-10T14:52:11.304Z: 2026-06-10T14:52:11Z INF Starting metrics server on 127.0.0.1:34357/metrics

2026-06-10T14:52:11.309Z: 2026/06/10 20:22:11 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See UDP Buffer Sizes · quic-go/quic-go Wiki · GitHub for details.

2026-06-10T14:52:11.643Z: Polling tunnel status for cloudflare (attempt 11): starting
2026-06-10T14:52:11.731Z: 2026-06-10T14:52:11Z INF Registered tunnel connection connIndex=0 connection=15540ced-cc45-4dd9-8b1d-234ecbda6582 event=0 ip=198.41.192.77 location=bom06 protocol=quic

2026-06-10T14:52:11.742Z: 2026-06-10T14:52:11Z WRN Your version 2024.8.2 is outdated. We recommend upgrading it to 2026.6.0

2026-06-10T14:52:12.144Z: Polling tunnel status for cloudflare (attempt 12): connected
2026-06-10T14:52:12.144Z: Getting a random port…
2026-06-10T14:52:12.146Z: Random port obtained: 36121
2026-06-10T14:52:12.146Z: Reading cached app information for directory /var/www/html/bundlefly-shopify…
2026-06-10T14:52:12.155Z: Sending “App Management” GraphQL request:
query ActiveAppReleaseFromApiKey($apiKey: String!) {
app: appByKey(key: $apiKey) {
…AppVersionInfo
__typename
}
}

fragment ReleasedAppModule on AppModule {
uuid
userIdentifier
handle
config
target
specification {
identifier
externalIdentifier
name
experience
managementExperience
}
}

fragment AppVersionInfo on App {
id
key
organizationId
activeRoot {
clientCredentials {
secrets {
key
}
}
grantedShopifyApprovalScopes
}
activeRelease {
id
version {
name
appModules {
…ReleasedAppModule
}
}
}
}

With variables:
{
“apiKey”: “*****”
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://app.shopify.com/app_management/unstable/graphql.json
2026-06-10T14:52:12.820Z: Request to https://app.shopify.com/app_management/unstable/graphql.json completed in 665 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=131, verdict_flag_enabled;desc=“count=2”;dur=0.203, _y;desc=“7b66d025-9ddc-45af-9f94-c5ed1d108ce2”, _s;desc=“46249b8e-165b-4d7e-aaca-549a9561186a”
  • x-request-id: 77b112c9-3847-41c2-bdba-5f9e0405a7ac-1781103132

2026-06-10T14:52:12.831Z: Reading the content of file at shopify.app.bundle-test.toml…
2026-06-10T14:52:12.832Z: Reading the content of file at shopify.app.bundlefly-v3.toml…
2026-06-10T14:52:12.847Z: Reading the content of file at extensions/bundle-discount/shopify.extension.toml…
2026-06-10T14:52:12.847Z: Reading the content of file at extensions/product-offers/shopify.extension.toml…
2026-06-10T14:52:12.884Z: Looking for a lockfile in /var/www/html/bundlefly-shopify…
2026-06-10T14:52:12.885Z: Reading the content of file at package.json…
2026-06-10T14:52:12.885Z: Reading the content of file at package.json…
2026-06-10T14:52:12.887Z: Reading the .env file at .env.bundle-fly-test
2026-06-10T14:52:12.887Z: Reading the content of file at .env.bundle-fly-test…
2026-06-10T14:52:12.888Z: Reading the content of file at .shopify/project.json…
2026-06-10T14:52:12.888Z: Reading cached app information for directory /var/www/html/bundlefly-shopify…
2026-06-10T14:52:12.889Z: Reading the content of file at .gitignore…
2026-06-10T14:52:12.899Z: Notifications to show: 0
2026-06-10T14:52:12.900Z: Unable to decide project type as no web backend
2026-06-10T14:52:12.903Z: Ensuring that the user is authenticated with the Admin API with the following scopes for the store bundle-fly-dev.myshopify.com:

2026-06-10T14:52:12.903Z: Getting session store…
2026-06-10T14:52:12.904Z: Getting current session ID…
2026-06-10T14:52:12.905Z: Validating existing session against the scopes:
[
“openid”,
https://api.shopify.com/auth/shop.admin.graphql”,
https://api.shopify.com/auth/shop.admin.themes”,
https://api.shopify.com/auth/partners.collaborator-relationships.readonly”,
https://api.shopify.com/auth/shop.storefront-renderer.devtools”,
https://api.shopify.com/auth/partners.app.cli.access”,
https://api.shopify.com/auth/destinations.readonly”,
https://api.shopify.com/auth/organization.store-management”,
https://api.shopify.com/auth/organization.on-demand-user-access”,
https://api.shopify.com/auth/organization.apps.manage
]
For applications:
{
“adminApi”: {
“scopes”: ,
“storeFqdn”: “bundle-fly-dev.myshopify.com
}
}

2026-06-10T14:52:12.905Z: - Token validation → It’s expired: false
2026-06-10T14:52:12.906Z: Sending “Admin” GraphQL request:
query publicApiVersions {
publicApiVersions {
handle
supported
__typename
}
}

With variables:
{}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://bundle-fly-dev.myshopify.com/admin/api/unstable/graphql.json
2026-06-10T14:52:13.807Z: Request to https://bundle-fly-dev.myshopify.com/admin/api/unstable/graphql.json completed in 900 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=237, verdict_flag_enabled;desc=“count=11”;dur=0.702, graphql;desc=“admin/query/other”, _y;desc=“3f6236d3-a1c3-4e41-9fec-265087545cf8”, _s;desc=“afa3898b-b1fa-475b-b9df-a90d6dae644f”
  • x-request-id: 4208ad3a-c971-4270-a103-ca833dbde5fb-1781103133

2026-06-10T14:52:13.809Z: Sending “Admin” GraphQL request:
query OnlineStorePasswordProtection {
onlineStore {
passwordProtection {
enabled
__typename
}
__typename
}
}

With request headers:

  • User-Agent: Shopify CLI; v=4.1.0
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: linux
  • Content-Type: application/json

to https://bundle-fly-dev.myshopify.com/admin/api/2026-04/graphql.json
2026-06-10T14:52:14.571Z: Request to https://bundle-fly-dev.myshopify.com/admin/api/2026-04/graphql.json completed in 762 ms
With response headers:

  • content-type: application/json; charset=utf-8
  • server-timing: processing;dur=90, verdict_flag_enabled;desc=“count=10”;dur=1.61, graphql;desc=“admin/query/other”, _y;desc=“51f17b1b-9780-4985-8944-c5d1f6be0cea”, _s;desc=“b8c37d59-2b44-4422-8d19-b091d364ce63”
  • x-request-id: 6fac2cab-a490-4c5f-b5e4-671e9ecc47c7-1781103134

2026-06-10T14:52:14.601Z: Sending POST request to URL bundle-fly-dev
With request headers:

  • cache-control: no-cache
  • content-type: application/x-www-form-urlencoded

2026-06-10T14:52:15.404Z: Request to bundle-fly-dev completed in 803 ms
With response headers:

  • cache-control: no-cache, no-store
  • content-type: text/html; charset=utf-8
  • server-timing: processing;dur=97, db;dur=37, asn;desc=“141547”, edge;desc=“BOM”, country;desc=“IN”, theme;desc=“145287872701”, pageType;desc=“password”, servedBy;desc=“c69j”, requestID;desc=“0df9f42b-f287-4b00-9a2d-d1a7a9a57cbf-1781103134”, _y;desc=“54c25fc9-686a-4314-a09e-05ba4dc904e3”, _s;desc=“cc2a4f11-525f-4f22-a9ea-a4fccd1559d5”, _cmp;desc=“3.AMPS_IN_f_f_e*7z0od6T3Cs4oGzuljGLw”
  • x-request-id: 0df9f42b-f287-4b00-9a2d-d1a7a9a57cbf-1781103134

2026-06-10T14:52:15.406Z: Removing storefront password for store-szvw00-72.myshopify.com
╭─ error ──────────────────────────────────────────────────────────────────────╮
│ │
│ Failed to prompt: │
│ │
│ Incorrect store password. Please try again │
│ │
│ This usually happens when running a command non-interactively, for example │
│ in a CI environment, or when piping to or from another process. │
│ │
│ To resolve this, specify the option in the command, or run the command in │
│ an interactive environment such as your local terminal. │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯

2026-06-10T14:52:15.806Z: Looking for a lockfile in /var/www/html/bundlefly-shopify…
2026-06-10T14:52:16.399Z: Request to https://monorail-edge.shopifysvc.com/v1/produce completed in 461 ms
With response headers:

  • x-request-id: cd7cbf26-bcc9-43da-96ec-3e01edd7e415

2026-06-10T14:52:16.400Z: Analytics event sent: {
“command”: “app dev”,
“time_start”: 1781103118506,
“time_end”: 1781103135793,
“total_time”: 17287,
“success”: false,
“cli_version”: “4.1.0”,
“ruby_version”: “”,
“node_version”: “24.8.0”,
“is_employee”: false,
“uname”: “linux amd64”,
“env_ci”: false,
“env_plugin_installed_any_custom”: false,
“env_plugin_installed_shopify”: “["@shopify/cli"]”,
“env_shell”: “bash”,
“env_device_id”: “82425d32da59ed5e992103df0ebdf7a8ab4e90c5”,
“env_cloud”: “localhost”,
“env_package_manager”: “npm”,
“env_install_package_manager”: “npm”,
“env_is_global”: true,
“env_auth_method”: “device_auth”,
“env_is_wsl”: false,
“env_build_repository”: “Shopify/cli”,
“env_auto_upgrade_enabled”: true,
“cmd_app_warning_api_key_deprecation_displayed”: false,
“cmd_all_timing_network_ms”: 7571,
“cmd_all_timing_prompts_ms”: 0,
“cmd_all_launcher”: “unknown”,
“cmd_all_topic”: “app”,
“cmd_all_plugin”: “@shopify/cli”,
“cmd_all_verbose”: true,
“cmd_all_path_override”: true,
“cmd_all_path_override_hash”: “ea1013db8602d9ee7fb7f50bc6845258680b2f98”,
“cmd_app_dependency_installation_skipped”: false,
“cmd_app_reset_used”: false,
“cmd_dev_tunnel_type”: “auto”,
“cmd_all_last_graphql_request_id”: “6fac2cab-a490-4c5f-b5e4-671e9ecc47c7-1781103134”,
“cmd_all_timing_active_ms”: 9715,
“cmd_all_exit”: “expected_error”,
“user_id”: “2835894d-95b3-4115-9594-709e56c4928b”,
“request_ids”: [
“019eb204-d164-7013-8635-3d314decc531-1781103120”,
“019eb204-d48e-76b1-aeb8-68ee76eeb8ee-1781103121”,
“c19d1087-b0f7-467e-b75b-759c577269db-1781103123”,
“76702466-e86d-40ef-9200-3eb1ab9336e6-1781103124”,
“3f7abb77-3576-43d9-8c83-f19c998eadaf-1781103125”,
“77b112c9-3847-41c2-bdba-5f9e0405a7ac-1781103132”,
“4208ad3a-c971-4270-a103-ca833dbde5fb-1781103133”,
“6fac2cab-a490-4c5f-b5e4-671e9ecc47c7-1781103134”
],
“args”: “–verbose”,
“error_message”: “Failed to prompt:\n\nIncorrect store password. Please try again\n\nThis usually happens when running a command non-interactively, for example in a CI environment, or when piping to or from another process.”,
“env_plugin_installed_all”: “["@shopify/cli"]”,
“env_shopify_variables”: “{}”,
“metadata”: “{"extraPublic":{},"extraSensitive":{}}”
}
2026-06-10T14:52:16.401Z: Skipping Bugsnag report for expected error

Operating system

Ubuntu 24.04.4 LTS

CLI version

4.1.0

Shell

bash

Nodejs version

24

What language and version are you using in your application?

node js

Hi @Ohxtrg_Sharma

Tunnel URLs are not expected to update in your app.toml or Dev Dashboard as they are transient and specific to your app dev session. This has been the behavior since the launch of the Dev Dashboard.

Can you confirm the tunnel URL is being used in your dev output and App info tab?

The error in your logs appears to be due to having a theme extension that requires a password, but running app dev non-interactively:

╭─ error ──────────────────────────────────────────────────────────────────────╮
│ │
│ Failed to prompt: │
│ │
│ Incorrect store password. Please try again │
│ │
│ This usually happens when running a command non-interactively, for example │
│ in a CI environment, or when piping to or from another process. │
│ │
│ To resolve this, specify the option in the command, or run the command in │
│ an interactive environment such as your local terminal. │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯

There is a known issue here that causes the store password to re-prompt. We are working on a fix:

-Nick

Hi @Ohxtrg_Sharma

Your line of thinking is correct. You should use the CLI to resolve this issue automatically instead of handling it manually over and over. Additionally, you can also use ngrok as an alternative solution.

Hi, thanks for the response!

Regarding the tunnel URL — the URL shown in my logs was actually a manual ngrok URL that I had set myself in both the app.toml and the Dev Dashboard. After restarting app dev, it continued using that same manual URL instead of generating a new tunnel — so it wasn’t updating on restart either way.

Also, just to clarify — does the CLI ever automatically update tunnel URLs in app.toml or the Dev Dashboard, or is that always a manual step? You mentioned “this has been the behavior since the launch of the Dev Dashboard” but I want to confirm whether the CLI is supposed to handle this or if we’re always expected to update it manually, because neither is working correctly for me right now.

Regarding the store password error — that was happening because I was piping the output to a log file, which made the process non-interactive and caused the password prompt to fail. I’ve stopped doing that and I’m now running it directly in the terminal.

Unfortunately I’m still unable to capture full --verbose logs from CLI 4.1.0 because the store password prompt blocks the session before full output is produced. As a workaround, I’ve attached the verbose logs from CLI v3.94 instead — the issue reproduces there as well and the logs should give enough context to investigate further.https://gist.github.com/OHXTRG/f3a6f222f5e83f74cc8bcc20624e9320

Thanks for the suggestion!

I did try using the CLI-generated preview URLs and while the URL itself loads, the app shows an “Invalid path” error with a raw query string dumped on the page instead of rendering the app (screenshot attached).

The path it’s trying to load looks like:
/?dev-console=show&embedded=1&hmac=...&host=...&shop=bundle-fly-dev.myshopify.com&timestamp=...

Also worth noting — when I run on localhost directly it gives the same “Invalid path” error too, so this doesn’t seem to be a tunnel/URL issue.

also

, the extension path works fine on local — only the app routes seem to have this issue and I’m not sure why, as they should be working the same way.

Hi @Ohxtrg_Sharma

That Invalid path page is actually served by the local reverse proxy that shopify app dev runs, not by your app or by admin. The CLI proxy returns Invalid path /… whenever an incoming request doesn’t match any of its routes and there’s no default route registered.

A default route for / (the URL admin loads when it embeds your app) is only created when app dev is serving a frontend web. So this error almost always means the request reached your dev session, but that session had nothing to serve at the app root. The usual causes:

  • No frontend web is being served. Check that you have a web/shopify.web.toml and that its roles include frontend (older configs used type = "frontend"). A backend-only web won’t register the root route.
  • The web process didn’t start. Scan the shopify app dev output for crashes, port conflicts, or Unreachable target … for path warnings. If you only see extension routes listed, no frontend is running.
  • Stale URLs / wrong tunnel. If your application_url (in the Partner Dashboard and/or your local shopify.app.toml) points at an old tunnel, admin will embed a different/previous dev session that has no matching route. Confirm both point at the current tunnel, and re-run shopify app dev so it rewrites them (or pass --tunnel-url).

A couple of things that’ll help us narrow it down:

  1. The full shopify app dev startup output (the proxy/route list and any warnings).
  2. Your shopify app dev --version.
  3. Your web/shopify.web.toml (with the roles/type lines), and confirmation that the application_url in the dashboard matches the tunnel the CLI prints.

If the URLs aren’t updating on their own, upgrading to the latest CLI is worth trying, since there have been updates which could resolve this.

Thanks for the detailed breakdown!

Turns out the shopify.web.toml file had been accidentally deleted from the project. Once i recreated it with the correct roles and used the --tunnel-url flag to point at the current ngrok tunnel, the dev preview started working as expected.

Appreciate the support!