Skip to content

shopify app deploy blocked by phantom [events]: Required — Partner Dashboard shows no Events feature enabled #8386

Description

@diyesh

CLI version: reproduced identically on 4.7.0, 4.6.1, 4.0.0, and 3.94.3

Problem

shopify app deploy (and shopify app config validate) fails with:

[events]: Required

even though shopify.app.toml has no [events] section and never has. I checked the Partner Dashboard for this app — there's no mention of "Events" / "Next-Gen Events" anywhere, no toggle, nothing to enable or configure.

Steps to reproduce

  1. Have an existing app with a shopify.app.toml that has never used [events] (just a plain [webhooks] section with api_version set, no subscriptions).
  2. Run shopify app config validate (or shopify app deploy).
  3. Observe:
    ╭─ error ──────────────────────────────────────────────────────────────────────╮
    │                                                                              │
    │  Validation errors found.                                                    │
    │                                                                              │
    │  • [events]: Required                                                        │
    │                                                                              │
    ╰──────────────────────────────────────────────────────────────────────────────╯
    

What I tried

  1. Confirmed it's not a local-CLI-version issue — reproduced the identical error on @shopify/cli 4.7.0, 4.6.1, 4.0.0, and 3.94.3 (full major-version spread) via npx @shopify/cli@<version> app config validate. Since the required-field set differs across those releases, this points to the check coming from the Partners backend, not code bundled in the CLI.
  2. Added a minimal [events] block to shopify.app.toml:
    [events]
    api_version = "2026-07"
    This flips to two contradictory errors:
    [events.subscription]: Required
    Unsupported section(s) in app configuration: events
    
    So the backend simultaneously demands the section and rejects it as unsupported for this app — no toml content can satisfy both at once.

Expected behavior

shopify app deploy should succeed without requiring a section for a feature that isn't enabled for the app/org, or the error message should point at what actually needs enabling instead of a self-contradictory pair of validation errors.

Context

  • App has an existing, working [webhooks] section (api_version set, no subscriptions configured yet).
  • Partner Dashboard shows no "Events" (developer preview) toggle or notice for this app.

Activity

  1. kurtwarwick-ekko commented on Aug 24, 2026

    @kurtwarwick-ekko

    Same error here, with a before-and-after that points at the backend too.

    Our CI deploys with npx shopify app deploy --config <config>. Same config file, same CLI version, opposite results three days apart, with no change to the file in between:

    • 21 Aug 06:14 UTC, shopify@4.7.0, then New version released to users.
    • 24 Aug 07:16 UTC, shopify@4.7.0, then:
    Validation error in shopify.app.<config>.toml:
    
    [events]: Required
    

    The config file was last modified on 13 August, and the commit deployed on 24 August touched nine application source files and no toml. Reproduced outside CI the same day, so it is not a runner artefact:

    npx shopify@4.7.0 app config validate --config <config>
    • [events]: Required
    

    One difference worth noting: our [webhooks] section is populated, four topic subscriptions and three compliance subscriptions, so this is not limited to an app with an empty webhooks section. The app also declares [access_scopes], [auth], [app_proxy] and [pos], has never declared [events], and shows nothing about Events in the dashboard.

  2. zalkyn commented on Aug 24, 2026

    @zalkyn

    facing same issue. everything was good yesterday. after updating to 4.7.0 it was still working. but having the validation error now:

    > dev
    > shopify app dev
    
    ╭─ error ────────────────────────────────────────────────────────────────────────╮
    │                                                                                │
    │  Validation error in shopify.app.toml:                                         │
    │                                                                                │
    │  [events]: Required                                                            │
    │                                                                                │
    ╰────────────────────────────────────────────────────────────────────────────────╯
    
  3. leffin23 commented on Aug 24, 2026

    @leffin23

    Same issue started occurring today with Shopify CLI 4.7.0. Our app has never used [events] and only has a [webhooks] section.
    shopify app dev now fails with [events]: Required.

    Re-linking from the server doesn't fix it. Running shopify app config link (re-fetching the config straight from Shopify's Partner/Dev Dashboard, not the local file) still produced a config with no [events], and validation still failed with [events]: Required. Rules out a stale local file as the cause.

    Adding [events] manually flips it to a contradictory pair of errors - [events.subscription]: Required and Unsupported section(s) in app configuration: events at the same time. No TOML content can satisfy both, since one says the section needs more content and the other says the section isn't even allowed.

  4. pulkitvyas08 commented on Aug 24, 2026

    @pulkitvyas08

    Same issue here

    shopify app deploy and shopify app config validate fail with [events]: Required on an app whose shopify.app.toml has never had an [events] section, and whose dashboard shows no Events feature

    Version-independent (matches the report): reproduced identically on @shopify/cli 4.7.0 (our CI, via npm install -g @shopify/cli@latest) and 3.94.3 (local global install)

    Timeline points at a backend change, not our code: deploys were passing until 2026-08-24; the failure started with no change to the toml (the failing push only touched application source files). Public, embedded app, [webhooks] is populated (2 topic subscriptions + 3 compliance topics), plus [access_scopes], [auth], and [build] include_config_on_deploy = true`

    Two additional findings not yet in the thread:

    1. shopify app config link can't round-trip it. Re-linking the app (on both 3.94.3 and 4.7.0) writes a toml with no [events] block, then immediately fails validation with [events]: Required (or [events.subscription]: Required if a bare [events] api_version = "..." is present). So the app cannot be linked to a valid local config at all right now
    2. --allow-deletes is also blocked. shopify app deploy --allow-deletes fails at the same [events]: Required validation step
  5. giorgiabosello commented on Aug 24, 2026

    @giorgiabosello

    Same here, one extra data point ruling out local caching.

    Custom app (not public), single dev store. Timeline matches the backend theory exactly: shopify app dev ran fine twice on 2026-08-21 (the second run already on 4.7.0, right after the auto-upgrade). Today, 2026-08-24, shopify app config validate fails with [events]: Required on the identical toml (last touched on the 21st, only an [access_scopes] change). Reproduced on 4.7.0 and on a freshly installed 4.6.1, same error on both.

    What I can add to the thread: I also cleared the CLI's local conf store cache (~/Library/Preferences/shopify-cli-kit-nodejs/config.json, which holds cached GraphQL responses keyed per CLI version and app GID). No effect, the error persists on the very next run, so the schema driving this validation is fetched fresh from the backend every time and there is no client-side cache to bust.

    Also confirming the contradictory pair others reported: adding a bare [events] with api_version flips the error to [events.subscription]: Required plus Unsupported section(s) in app configuration: events, so no toml content can pass.

    Our app declares [access_scopes], [auth], [webhooks] (api_version plus one subscription with an empty topics list), [app_proxy], and [pos]. Never [events], and nothing about Events in the dashboard.

  6. ShinyaRewired commented on Aug 24, 2026

    @ShinyaRewired

    Last successful deploy: 2026-08-24 06:34 UTC. First failure was roughly 90 minutes later, around 08:00 UTC the same day. The 06:34 figure is not from memory — it is the mtime of the local .shopify/deploy-bundle artifact written by that successful run.

    Nothing changed locally between the two runs:

    • The app config TOML is unmodified (git status clean, no diff against the committed version)
    • No npm install, no dependency changes — @shopify/cli was pinned at 4.0.0 for both the successful and the failing run
    • Same command both times (shopify app deploy --config shopify.app.<env>.toml)

    So on this end the only variable is the backend, which matches your finding that the error reproduces identically across 3.94.3 → 4.7.0.

    Identical symptoms to the original report:

    with no [events] section (the committed state)

    Validation error in shopify.app..toml:
    [events]: Required

    after adding a minimal [events] section

    Validation errors found.
    • [events.api_version]: Required
    • [events.subscription]: Required
    • Unsupported section(s) in app configuration: events

  7. soulbeateilo commented on Aug 24, 2026

    @soulbeateilo

    Confirming the same issue today with Shopify CLI 4.7.0.
    shopify app config validate, shopify app dev, and our production config all fail with [events]: Required.
    Adding an [events] section instead produces the contradictory [events.subscription]: Required + Unsupported section(s): events errors.
    We also reproduced the same behavior on CLI 4.6.1.
    Our app uses webhooks and has never used Events.

  8. edtorba commented on Aug 24, 2026

    @edtorba

    Same issue here. No real change. The CI pipeline suddenly started failing, requiring events.

    CLI version: 4.5.2

    The error can be easily reproduced using:
    shopify app config validate --config=my-config --json

  9. damian-stitch commented on Aug 24, 2026

    @damian-stitch

    Same issue here

    CLI version: 4.2.0

  10. aktasumut34 commented on Aug 24, 2026

    @aktasumut34

    Same failure here (4.7.0, app with populated [webhooks], [access_scopes], [auth], [pos], never an [events] section). Adding to the backend theory with the code path, plus a local patch that unblocks it in the meantime.

    Where the Required comes from. The CLI builds the shopify.app.toml schema at runtime from the module specifications it fetches from the platform (specifications query → validationSchema.jsonSchema per module), merging each configuration spec's schema into the app config schema. The events spec bundled in the CLI is:

    zo.extend({ events: F.any().optional() })   // z.any().optional() — cannot produce "Required"

    so the requirement can only be arriving in the remote spec's jsonSchema, which is then validated on top of the local zod result. That lines up with the version-independence and with @giorgiabosello's finding that clearing the conf-store cache changes nothing.

    Workaround: drop the remote events spec before it reaches the schema. No toml change. In dist, the fetched specs are filtered in one place:

    (await e.specifications(t)).filter(a=>["extension","configuration"].includes(a.experience))

    Appending &&a.identifier!=="events" restores the pre-incident behavior:

    -(await e.specifications(t)).filter(a=>["extension","configuration"].includes(a.experience)).map(...)
    +(await e.specifications(t)).filter(a=>["extension","configuration"].includes(a.experience)&&a.identifier!=="events").map(...)

    Applied to the installed CLI (on 4.7.0 this lands in dist/chunk-ACTDYTAV.js, but the chunk name varies per build, so grep for it):

    DIST="$(dirname "$(readlink -f "$(which shopify)")")/../dist"
    F="$(grep -l '\["extension","configuration"\]\.includes' "$DIST"/*.js)"
    sed -i.bak 's/\["extension","configuration"\]\.includes(a\.experience)/&\&\&a.identifier!=="events"/' "$F"

    Before:

    {"valid": false, "issues": [{"file": ".../shopify.app.toml", "message": "Required", "path": ["events"]}]}

    After:

    {"valid": true, "issues": []}

    (shopify app config validate --json, same toml, same CLI version, only the patch in between.)

    Caveats: it patches installed node_modules, so an auto-upgrade or reinstall silently drops it — cp "$F.bak" "$F" to revert. The minified parameter name (a) can differ between builds, so confirm the grep -l matched exactly one file before running. And it only makes sense for apps that genuinely have no events module: it makes the CLI ignore that specification entirely rather than satisfying it.

  11. youseai commented on Aug 24, 2026

    @youseai

    Independent reproduction, plus a possible mechanism from the bundled CLI source.

    We hit this today on an extension-only app (theme app extension + web pixel) whose
    shopify.app.toml has never contained an [events] section. Nothing in our repo changed —
    the config file's last commit predates the failure by weeks, and the same pipeline deployed
    successfully from it before.

    The two states we tested

    Both fail, with errors that point at each other:

    shopify.app.toml Deploy result
    no [events] section (our original, unchanged for weeks) Validation error in shopify.app.toml: [events]: Required
    [events] with api_version = "unstable" and no subscriptions Validation error in shopify.app.toml: [events.subscription]: Required

    This matches the contradiction reported above: absent is rejected, and the minimal block
    that satisfies the first error trips a second one. We have no Events subscriptions to
    declare, so there is no third state to try — adding a real [[events.subscription]] would
    mean registering a delivery endpoint for a feature we don't use.

    CLI pinned at 3.93.0 in CI. Consistent with the report that this reproduces on 3.94.3
    through 4.7.0, this looks like backend validation rather than version-specific CLI behavior.

    Possible mechanism: the CLI emits an empty events object

    This may explain why apps that never opted into Events are being asked for it.

    In @shopify/cli@3.93.0, dist/index.js, the events module's schema treats the section
    as optional:

    PGr = Qb.extend({ events: fe.any().optional() })

    But its reverse transform is:

    function Yqt(e) {
      let t = Dd(e, "events"),
          n = Dd(t, "api_version"),
          i = Dd(t, "subscription")?.map(o => { let { identifier: s, ...l } = o; return l });
      return { events: n ?? i ? { api_version: n, subscription: i } : {} };
    }

    n ?? i ? X : Y parses as (n ?? i) ? X : Y, not n ?? (i ? X : Y). With no [events]
    section both n and i are undefined, so (undefined ?? undefined) is falsy and the
    function returns { events: {} }.

    So the serializer emits an empty events object rather than omitting the key. If the
    backend treats a present-but-empty events as an opt-in and then validates its required
    fields, that would produce [events]: Required for an app whose TOML never mentioned
    events — which is the symptom here.

    Worth noting the precedence bug is in the CLI regardless of whether it's the trigger for
    this specific validation error; { events: {} } looks unintended in either case. If the
    backend rule is the real cause, the empty object may just be what makes it visible.

    Impact

    This blocks shopify app deploy entirely for apps that don't use Events, with no
    configuration that passes.

  12. kutaysahindev commented on Aug 24, 2026

    @kutaysahindev

    Same issue here. Started today.

    CLI version: 4.7.0

    both shopify app dev and shopify app deploy not working.

  13. edtorba commented on Aug 24, 2026

    @edtorba

    I've emailed Shopify Plus Support about this issue as it's currently blocking our deployments. Hopefully they can help escalate it internally and get it in front of the right team.

  14. muhammadamir786 commented on Aug 24, 2026

    @muhammadamir786

    I got the same issue.
    used the following in .toml file and it's working now.

    `[events]
    api_version = "unstable"

    [[events.subscription]]
    handle = "my_product_events"
    topic = "Product"
    actions = ["update"]
    uri = "https://your-app.com/events"`

  15. shpakva1npd commented on Aug 24, 2026

    @shpakva1npd

    Subject: App deploys fail with undocumented [events]: Required validation error (CLI 3.94.3, config unchanged)

    Summary: Since ~Aug 22, 2026, shopify app deploy and shopify app config validate fail for our app with:

    Validation error in shopify.app.stage.toml:
    [events]: Required

    We do not use Events at all. Our shopify.app*.toml files have not changed since June 4, 2026, and the same deploy succeeded on Aug 21, 2026.

    Evidence this is a server-side validation change, not our setup:

    Shopify CLI is pinned at 3.94.3 via package-lock.json (unchanged since July 1). Verified identical locally and in CI: npx shopify version → 3.94.3 in both, exact same node_modules install. No version drift.
    The 3.94.3 CLI bundle's local schema defines events as optional (events: he.any().optional() in dist/index.js). The "Required" error comes from validation specs fetched from Shopify's API at runtime — so the requirement was introduced server-side between Aug 21 and Aug 24.
    shopify app config validate --json reproduces it locally with zero CI involved:
    { "valid": false, "issues": [{ "message": "Required", "path": ["events"] }] }

    Impact: Every app deploy / app config validate for apps on CLI 3.x without an [events] section is blocked. This contradicts the docs: Events is documented as developer preview, unstable-API-only, with "for all production use cases continue to use webhooks" (https://shopify.dev/docs/apps/build/events/subscribe), and no changelog entry announces [events] becoming mandatory.
    complete [events] section with a real subscription makes validation pass — but that creates an actual Events subscription we don't want.

    Reproduction: any CLI ≥3.92 app, shopify app config validate --json on a config without [events].

  16. vincent-wyx-xds commented on Aug 24, 2026

    @vincent-wyx-xds

    Same issue here. Run dev order fail suddenly. I ever not activate events config.
    Validation error in apps/portal-bff/shopify.app.toml:
    [events]: Required

  17. sa4tfm commented on Aug 24, 2026

    @sa4tfm

    Same.

  18. Eagleclaw123 commented on Aug 24, 2026

    @Eagleclaw123

    I got the same issue. used the following in .toml file and it's working now.

    `[events] api_version = "unstable"

    [[events.subscription]] handle = "my_product_events" topic = "Product" actions = ["update"] uri = "https://your-app.com/events"`

    this worked for me too. but i used like this for safety purposes.

    [events]
    api_version = "unstable"

    [[events.subscription]]
    handle = "unused-placeholder"
    topic = "Product"
    actions = ["update"]
    uri = "/events/unused"

    use this in the toml file

  19. chr33s commented on Aug 24, 2026

    @chr33s

    this works without placeholder subs

    [events]
    api_version = "unstable"
    subscription = []
    
  20. silverwebgroup commented on Aug 24, 2026

    @silverwebgroup

    this works without placeholder subs

    [events]
    api_version = "unstable"
    subscription = []
    

    I can confirm it! I added that code at the bottom of the shopify.app.toml file, and it worked! Thanks a lot!

  21. fairjm commented on Aug 24, 2026

    @fairjm

    this works without placeholder subs

    [events]
    api_version = "unstable"
    subscription = []
    

    I needed to test my code after making some changes, but it suddenly stopped working. I asked Codex to investigate, and after searching through a lot of official documentation and reading the source code, it came up with a bunch of useless solutions. But yours actually worked—thank you so much!

  22. edtorba commented on Aug 24, 2026

    @edtorba

    I've emailed Shopify Plus Support about this issue as it's currently blocking our deployments. Hopefully they can help escalate it internally and get it in front of the right team.

    A little feedback from Shopify. I've been told that the ticket has been escalated internally and that their devs are already investigating. 👍

  23. jonnyvector commented on Aug 24, 2026

    @jonnyvector

    Confirming on CLI 4.7.0, and adding one detail that cost a failed deploy here — api_version is not free-form.

    Where the requirement comes from. Capturing the CLI's own specifications(organizationId) response from app.shopify.com/app_management/unstable/graphql.json shows events is the only one of eleven configuration-experience specs whose validationSchema.jsonSchema declares a top-level required key:

    { "type": "object", "required": ["events"], "properties": { "events": { "$ref": "#/definitions/EventsOptions" } } }

    The CLI validates the whole app config against each spec's remote schema, replacing that spec's local schema — and the CLI's own local events spec declares events: z.any().optional(). So nothing client-side participates, which is why downgrading doesn't help.

    The [events] / Unsupported section(s) pair some have seen is one failure, not two. When the section fails its schema, createConfigExtensionInstances returns no claimed keys for it, so the unclaimed-key check then reports the very section the schema demanded.

    api_version must be unstable. The remote schema constrains it only with minLength: 1, so config validate accepts anything non-empty. The server does not. Using our app's actual webhook version passed validation and then failed at the release step — after the Rust functions and the theme extension had already built:

    Version couldn't be created.
      [events.api_version]: Expected 'unstable'. Received '2026-04'
    

    So the working form is exactly what @chr33s posted:

    [events]
    api_version = "unstable"
    subscription = []

    Empty subscription is safe because JSON Schema applies required only to objects — the array satisfies the shape and subscribes to nothing. With that, shopify app deploy completed for us end to end (functions + theme extension released).

  24. lucas-paiano commented on Aug 24, 2026

    @lucas-paiano

    Same issue:

    Confirmed on Windows with a newly created extension-only app.

    Shopify CLI: 4.7.0

    I deleted the app and scaffolded it again from scratch. The issue persists:

    shopify app config validate --json

    returns:

    {
    "valid": false,
    "issues": [
    {
    "message": "Required",
    "path": ["events"]
    }
    ]
    }

    I also ran shopify upgrade and shopify app config pull; neither changed the result.

    This blocks shopify app generate extension --template discount --name rate-shipping-discount.

    The app is intentionally extension-only, so adding a fake Events subscription is not a viable workaround.

  25. edtorba commented on Aug 24, 2026

    @edtorba

    Looks to be fixed. I just did shopify app config validate... and it came through as valid. 👍

  26. giorgiabosello commented on Aug 24, 2026

    @giorgiabosello

    Confirming the fix from our side: as of roughly 13:00 UTC, shopify app config validate passes again on the same clean toml that failed all morning, on CLI 4.7.0, with no local changes. We also observed a brief window of 403 responses from the validation endpoint about two hours before the fix landed, consistent with a backend rollout.

  27. github-actions commented on Oct 6, 2026

    @github-actions
    Contributor

    This issue seems inactive. If it's still relevant, please add a comment saying so. Otherwise, take no action.
    → If there's no activity within a week, then a bot will automatically close this.
    Thanks for helping to improve Shopify's dev tooling and experience.

    P.S. You can learn more about why we stale issues here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions