There is a date a lot of Shopify merchants are about to back into without realising it: June 30, 2026. That is the day Shopify Scripts stop executing, permanently. Not deprecated-with-a-warning, not soft-sunset; they simply cease to run. The deadline was already extended once, from 2025, and Shopify has been explicit that this one is final. If your store leans on Scripts for a custom discount, a bespoke shipping rate, or a payment rule, that logic disappears on a fixed date, and the only question is whether you migrated it on your schedule or scrambled on Shopify's.
The reason this catches people is that Scripts tend to be invisible until they break. They were set up once, often years ago, often by someone who has since left, and they have quietly worked ever since. Nobody thinks about them because nothing draws attention to them, which is exactly why the deadline is dangerous: the systems most at risk are the ones nobody remembers they have. The migration to Shopify Functions is not hard in the abstract, but it has a hard stop, and the work is mostly in finding and triaging what you actually run.
Know the two dates, not just the one
Everyone fixates on June 30, but there is an earlier date that matters just as much for planning. From April 15, 2026, you can no longer create or edit Shopify Scripts at all. After that, your existing Scripts keep running until June 30, but they are frozen; you cannot tweak one, cannot fix a bug in one, cannot adjust a discount rule. So the window for making any change to a Script while it still exists closes in mid-April, and the window for it running at all closes at the end of June.
Practically, that means the real deadline for "do something about this" is earlier than the headline date suggests. If you discover in late June that a Script needs a small adjustment before you migrate it, you cannot make that adjustment, because editing has been off since April. Treat April 15 as the date the door to Scripts closes and June 30 as the date the lights go off.
Start with the report, because you do not remember everything
The single most useful first step costs nothing: run the Shopify Scripts customizations report. It lists the customizations you actually have, broken out across payment gateways, shipping, and product discounts, and it is the only reliable way to know your real exposure. We have never once seen a merchant's memory of their Scripts match the report. There is always one nobody remembered, usually the one doing something important.
You cannot plan a migration for logic you have forgotten you are running, so this audit is the foundation of everything that follows. Go through the report line by line and, for each customization, answer three questions: what business rule does this implement, does Shopify Functions support that rule today, and what happens to the store if this logic vanishes on June 30. That last question sorts the list into "must migrate" and "would be nice," which is how you spend the limited time on what matters.
Most of it moves to Functions, and some of it does not yet
The good news is that the categories Scripts handled, discounts, shipping, and payments, are exactly the areas Shopify Functions has been built to cover, so the majority of typical Scripts have a Functions equivalent. A tiered discount, a shipping rate rule, hiding a payment method under certain conditions, these are squarely what Functions do, and the migration is a rewrite of the logic into a Function rather than a redesign. If you want the deeper decision of how to build those Functions, the Rust-versus-JavaScript and should-it-be-a-Function-at-all questions are covered in our Shopify Functions strategy piece.
The honest part is that not everything has a clean Functions equivalent yet. Functions are still gaining capabilities, and a Script doing something unusual may not have a like-for-like replacement available today. Shopify's own guidance acknowledges this and allows Scripts and Functions to run side by side in the same store during the transition, which is the key to a calm migration: you move everything that can move now, and you keep the holdouts on Scripts while their Functions support catches up, with a plan to migrate them the moment it does. What you do not do is assume every Script has a replacement waiting; check each one against current Functions capabilities rather than discovering the gap in June.
The Scripts that belong in an app, not a Function
A subset of Scripts will not map to a Function even when Functions mature, because the logic needs something Functions structurally cannot do, most often data that lives outside Shopify or a decision that requires a network call. A Function is sandboxed and cannot reach an external system mid-checkout, so a Script whose rule depends on, say, live inventory from a warehouse system or a customer attribute from an external CRM is not a Functions migration at all. It is an app, or a precompute step that syncs the needed data into Shopify ahead of time so a Function can read it.
Spotting these early is what separates a smooth migration from a late-June emergency, because they take the most work and have the longest lead time. As you triage the report, flag anything whose logic depends on external data or real-time calls, and treat those as their own track that needs an app-based or precompute approach rather than a straight Function rewrite. The decision between a custom app and other paths is its own question, which we walk through in custom app versus public app versus App Store.
A migration plan that finishes before the deadline, not at it
The workable plan is short and front-loaded. Run the customizations report now and inventory every Script, because the audit is the part people skip and the part that determines everything. Triage each one into migrate-to-Function, needs-an-app, or no-equivalent-yet, and rank by what breaks the store if it goes dark. Migrate the straightforward Functions cases first, since they are quick wins that shrink the risk, and start the app-based ones early because they take longest. Keep the no-equivalent-yet Scripts running alongside your new Functions, and watch Shopify's Functions capabilities so you can move them the moment support lands. Aim to be done well before June 30 with margin, not on June 30 with none, and remember that after April 15 you cannot touch the Scripts at all, so any cleanup of the old logic has to happen before then.
The deadline itself is not the hard part. The hard part is that the work is invisible until you go looking, and the clock does not care whether you looked. The merchants who sail through this are the ones who ran the report in spring and triaged calmly; the ones who struggle are the ones who assumed it would sort itself out and found, at the end of June, that a discount they depended on had quietly stopped existing.








