You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With an app that has a Function extension, shopify app dev starts the app-logs poller (as designed), but every poll fails and the app-logs panel loops forever:
app-logs │ Error while polling app logs.
app-logs │ Retrying in 5 seconds.
The underlying request returns HTTP 400 {"errors":["Malformed JWT"]}. The CLI never shows the status or body, so the failure is undiagnosable without patching the CLI.
Expected behavior
shopify app dev streams Function run logs to the terminal under the app-logs prefix.
Actual behavior
Every app_logs/poll request fails from the first request to the end of the session, repeating every 5 seconds. shopify app logs -s <dev-store> reproduces the identical failure standalone, so it is not specific to app dev.
Note: only apps that contain a Function extension poll app logs at all (allExtensions.some(isFunctionExtension) gates the poller), so apps without a Function extension are unaffected and will not show this.
Reproduction
Use an app that contains a Function extension (e.g. any type = "function" extension in shopify.extension.toml).
Link a development store.
Run shopify app dev (or shopify app logs -s <dev-store>).
Observe the loop.
Evidence (captured on CLI 4.9.4)
AppLogsSubscribe (App Management API) succeeds and returns a jwtToken. The subsequent poll is then rejected:
Request: GET https://app.shopify.com/app_management/unstable/organizations/<org-id>/app_logs/poll
headers sent (per the CLI's own builder): authorization: Bearer <jwt> and X-Shopify-Access-Token: Bearer <jwt>
Response: HTTP 400
Body: {"errors":["Malformed JWT"]}
The JWT is fresh (30 minutes from expires_at) and its payload carries no organization claim:
The poll endpoint is organization-scoped, and the token contains no organization claim. That mismatch is one hypothesis; it is also consistent with a signing/secret mismatch on the server side. Either way the minted subscription token is not accepted by the poll endpoint for any shop or organization.
CLI defect (separate, makes this hard to diagnose)
The poller's error handler drops the status code and response body before printing Error while polling app logs. (onUnknownError). --verbose shows the request but not the response, so the 400 + Malformed JWT only surfaces if the CLI is patched.
Environment
Shopify CLI 4.9.4 (Homebrew), macOS (arm64)
Node 26.11.1
App has exactly one function extension
organizationId resolves correctly for this app (appByKey returns it), so this is not a missing-organization problem
Shopify staff acknowledged on 2026-10-13 that the relevant team is investigating; filing this to track the root cause and the CLI's missing error detail.
Activity
sam-masscreations commentedon Oct 22, 2026
Any update on this ?