Repository navigation
shopify app deploy blocked by phantom [events]: Required — Partner Dashboard shows no Events feature enabled #8386
Description
Activity
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, thenNew version released to users. - 24 Aug 07:16 UTC,
shopify@4.7.0, then:
Validation error in shopify.app.<config>.toml: [events]: RequiredThe 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]: RequiredOne 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.Reacted by Diyesh Santoso, Armin Ulrich, mujtabarumi and Władysław Kulik- 21 Aug 06:14 UTC,
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 │ │ │ ╰────────────────────────────────────────────────────────────────────────────────╯Reacted by Diyesh Santoso, Armin Ulrich, mujtabarumi, YuvalChabra and MammonReacted by Md Fahad Hasan and Armin UlrichSame issue started occurring today with Shopify CLI 4.7.0. Our app has never used
[events]and only has a[webhooks]section.
shopify app devnow 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]: RequiredandUnsupported 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.Reacted by Diyesh Santoso, Armin Ulrich and YuvalChabraSame issue here
shopify app deployandshopify app config validatefail with[events]: Requiredon an app whoseshopify.app.tomlhas never had an[events]section, and whose dashboard shows no Events featureVersion-independent (matches the report): reproduced identically on
@shopify/cli 4.7.0(our CI, vianpm install -g @shopify/cli@latest) and3.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:
shopify app config linkcan't round-trip it. Re-linking the app (on both3.94.3and4.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--allow-deletesis also blocked.shopify app deploy --allow-deletesfails at the same[events]: Requiredvalidation step
Reacted by Diyesh Santoso, Armin Ulrich and mujtabarumiSame here, one extra data point ruling out local caching.
Custom app (not public), single dev store. Timeline matches the backend theory exactly:
shopify app devran 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 validatefails with[events]: Requiredon 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]withapi_versionflips the error to[events.subscription]: RequiredplusUnsupported 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.Reacted by Diyesh Santoso, Armin Ulrich and mujtabarumiLast 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-bundleartifact written by that successful run.Nothing changed locally between the two runs:
- The app config TOML is unmodified (
git statusclean, no diff against the committed version) - No
npm install, no dependency changes —@shopify/cliwas pinned at4.0.0for 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]: Requiredafter adding a minimal [events] section
Validation errors found.
• [events.api_version]: Required
• [events.subscription]: Required
• Unsupported section(s) in app configuration: eventsReacted by Diyesh Santoso- The app config TOML is unmodified (
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.Reacted by Diyesh SantosoSame 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 --jsonReacted by Diyesh SantosoSame issue here
CLI version: 4.2.0
Reacted by Diyesh SantosoSame 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
Requiredcomes from. The CLI builds theshopify.app.tomlschema at runtime from the module specifications it fetches from the platform (specificationsquery →validationSchema.jsonSchemaper module), merging each configuration spec's schema into the app config schema. Theeventsspec 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
eventsspec before it reaches the schema. No toml change. Indist, 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 thegrep -lmatched 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.Reacted by Diyesh Santoso and Giorgia BoselloIndependent 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.tomlhas 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.tomlDeploy result no [events]section (our original, unchanged for weeks)Validation error in shopify.app.toml: [events]: Required[events]withapi_version = "unstable"and no subscriptionsValidation error in shopify.app.toml: [events.subscription]: RequiredThis 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
eventsobjectThis may explain why apps that never opted into Events are being asked for it.
In
@shopify/cli@3.93.0,dist/index.js, theeventsmodule's schema treats the section
as optional:PGr = Qb.extend({ events: fe.any().optional() })
But its
reversetransform 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 : Yparses as(n ?? i) ? X : Y, notn ?? (i ? X : Y). With no[events]
section bothnandiareundefined, so(undefined ?? undefined)is falsy and the
function returns{ events: {} }.So the serializer emits an empty
eventsobject rather than omitting the key. If the
backend treats a present-but-emptyeventsas an opt-in and then validates its required
fields, that would produce[events]: Requiredfor 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 deployentirely for apps that don't use Events, with no
configuration that passes.Reacted by Diyesh SantosoSame issue here. Started today.
CLI version: 4.7.0
both
shopify app devandshopify app deploynot working.Reacted by Diyesh SantosoI'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.
Reacted by Giorgia Bosello and Armin UlrichI 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"`Reacted by Manideep and Giorgia BoselloReacted by ManideepSubject: 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]: RequiredWe 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].
Same issue here. Run dev order fail suddenly. I ever not activate events config.
Validation error in apps/portal-bff/shopify.app.toml:
[events]: RequiredSame.
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
Reacted by Giorgia Bosello and muhammadamir786this works without placeholder subs
[events] api_version = "unstable" subscription = []Reacted by muhammadamir786, Miguel, Barrie Dawson, Harsh Parmar, Valentin Vasilev, yuki.N, Kurl-Adam, Władysław Kulik, Giorgia Bosello and Alexander PavliukovReacted by Władysław Kulik and Giorgia Bosellothis 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!
Reacted by YuvalChabrathis 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!
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. 👍
Confirming on CLI 4.7.0, and adding one detail that cost a failed deploy here —
api_versionis not free-form.Where the requirement comes from. Capturing the CLI's own
specifications(organizationId)response fromapp.shopify.com/app_management/unstable/graphql.jsonshowseventsis the only one of elevenconfiguration-experience specs whosevalidationSchema.jsonSchemadeclares 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
eventsspec declaresevents: 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,createConfigExtensionInstancesreturns no claimed keys for it, so the unclaimed-key check then reports the very section the schema demanded.api_versionmust beunstable. The remote schema constrains it only withminLength: 1, soconfig validateaccepts 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
subscriptionis safe because JSON Schema appliesrequiredonly to objects — the array satisfies the shape and subscribes to nothing. With that,shopify app deploycompleted for us end to end (functions + theme extension released).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 upgradeandshopify 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.
Looks to be fixed. I just did
shopify app config validate...and it came through as valid. 👍Reacted by Giorgia Bosello and Armin UlrichConfirming the fix from our side: as of roughly 13:00 UTC,
shopify app config validatepasses 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.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.
CLI version: reproduced identically on 4.7.0, 4.6.1, 4.0.0, and 3.94.3
Problem
shopify app deploy(andshopify app config validate) fails with:even though
shopify.app.tomlhas 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
shopify.app.tomlthat has never used[events](just a plain[webhooks]section withapi_versionset, no subscriptions).shopify app config validate(orshopify app deploy).What I tried
@shopify/cli4.7.0, 4.6.1, 4.0.0, and 3.94.3 (full major-version spread) vianpx @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.[events]block toshopify.app.toml:Expected behavior
shopify app deployshould 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
[webhooks]section (api_versionset, no subscriptions configured yet).