Skip to main content
totul despre shopify16 Jun 2026·11 min read

"Migrating Shopify Scripts to Functions: Complete Guide Before June 30, 2026"

Dragoș-Adrian BuhoiuDragoș-Adrian BuhoiuFounder · Digital Ecosystem Architect
"Migrating Shopify Scripts to Functions: Complete Guide Before June 30, 2026"
FEATURED.IMG
"Migrating Shopify Scripts to Functions: Complete Guide Before June 30, 2026"
CONTENTS
01TL;DR — two critical dates, not one, and what each means for you02Dual timeline: freeze (April 15, 2026) vs sunset (June 30, 2026)03What happened on April 15: no more creating/editing/publishing new Scripts04What happens on June 30: existing Scripts stop running entirely05Context: the deadline was postponed twice (why you shouldn't bet on a third time)06What plan are you on? any-plan vs Plus-only (the distinction that determines your path)07Any plan: install public apps with Functions from the App Store08Shopify Plus only: run custom apps with Function APIs (built with CLI)09Step 0: run the Shopify Scripts customizations report10Where to find it (Apps > Script Editor > "Replace Shopify Scripts" banner)11What it lists (Payment gateways, Shipping, Product discounts) and what it recommends121 mapping table — Script → Function API13Line item scripts → Discounts + Cart Transform + Cart and Checkout Validation API14Shipping scripts → Delivery Customization API + Discounts API15Payment scripts → Payment Customization API16Method-level mapping (for developers)17change_line_price / split / reject → Discount Function (with exact equivalents)18The trap: change_properties has NO direct equivalent19Zero-downtime migration: passthrough script + TESTER customer tag20Step 1: preview link with draft "Output.cart = Input.cart"21Step 2: test in production on the TESTER tag, then finalize22CLI workflow: shopify app dev and shopify app deploy (requires dev store)23Advanced traps: don't migrate to an already deprecated API24Legacy Product/Order/Shipping Discount APIs (deprecated since 2025-04, replace before 2026-04)25Practical limits: max 25 delivery + max 25 payment customization functions; B2B review for Payment26Why it matters long-term: Functions = durable Web Assembly vs Scripts = EOL

"Dual timeline (freeze April 15 vs sunset June 30), Scripts→Function API mapping table, zero-downtime migration with passthrough + TESTER tag, any-plan vs Plus-only distinction."

Migrating Shopify Scripts to Functions: Complete Guide Before June 30, 2026

Last updated: June 16, 2026 | Sources: shopify.dev/docs — migrating from Scripts, shopify.dev/changelog — Scripts deprecated, help.shopify.com — transitioning to Functions

You have active Scripts in your Shopify Plus store. You have 14 days. This guide gives you exactly what you need: the two critical dates, what replaces what, how to migrate without downtime, and what you can do on your plan.

If you arrived here from our Shopify Editions Summer 2026 article, you already know the context: the Scripts sunset is not a "summer feature" — it's a hard deadline that coincides with the window.

TL;DR — two critical dates, not one, and what each means for you

  • April 15, 2026: You can no longer create, edit, or publish new Scripts. Already published Scripts continue running.
  • June 30, 2026: All existing Scripts stop executing entirely. Your checkout will no longer apply Script logic.

Most articles mention only June 30. But the April 15 freeze already changed the situation: if you discovered a bug in a Script after April 15, you cannot fix it. The only path is migration to Shopify Functions.

Sources: shopify.dev/changelog — Scripts deprecated · changelog.shopify.com — Scripts can no longer be edited.

Dual timeline:freeze (April 15, 2026) vs sunset (June 30, 2026)

What happened on April 15:no more creating/editing/publishing new Scripts

Official quote: "April 15, 2026 — Editing and publishing new Shopify Scripts will no longer be possible."

Practical consequence: Script Editor is effectively read-only. You can view existing code, but you cannot save changes.

Source: shopify.dev/changelog — Scripts deprecated.

What happens on June 30:existing Scripts stop running entirely

Official quote: "Shopify Scripts will be sunset on June 30, 2026. All existing Shopify Scripts will stop functioning after this date."

What this means in practice: complex discounts, custom shipping methods, and payment rules that ran through Scripts will simply stop applying. You won't get a visible error — checkout will work, but without your business logic. Customers will buy at full price, with incorrect shipping, with unconfigured payment methods.

Source: shopify.dev/docs — migrating from Scripts.

Context:the deadline was postponed twice (why you shouldn't bet on a third time)

History: originally August 13, 2024, extended to August 28, 2025, then to June 30, 2026. Each postponement came with months of advance notice. As of June 16, 2026, with 14 days remaining and the freeze already active, there is no official indication of another postponement. Current official deadline: June 30, 2026.

Source: shopify.dev/changelog — support for Scripts will end on August 13, 2024 (published February 13, 2023, updated October 2023).

What plan are you on? any-plan vs Plus-only (the distinction that determines your path)

This is the distinction most guides miss:

Any plan:install public apps with Functions from the App Store

If you're on a standard Shopify plan (Basic, Shopify, Advanced), you can install public apps from the Shopify App Store that contain Functions. You can't build your own Functions — but you can use ones built by others.

Shopify Plus only:run custom apps with Function APIs (built with CLI)

Official quote: "Only stores on a Shopify Plus plan can use custom apps that contain Shopify Function APIs."

This means: if you have active Scripts, you're already on Plus (Script Editor was only available on Plus). But if you have clients on smaller plans who benefited indirectly from your logic, they'll need to switch to public apps from the App Store.

Sources: shopify.dev/docs — migrating from Scripts, Functions availability · help.shopify.com — Script Editor.

Step 0:run the Shopify Scripts customizations report

Before you write a single line of code, you need to know what you have.

Where to find it (Apps > Script Editor > "Replace Shopify Scripts" banner)

Open your store admin. Navigate to Apps > Script Editor. You'll see a banner at the top: "Replace Shopify Scripts". Click it. This generates the diagnostic report.

What it lists (Payment gateways, Shipping, Product discounts) and what it recommends

The report displays all active Scripts, grouped by category:

  • Payment gateways — Scripts that filter/hide payment methods
  • Shipping — Scripts that modify shipping rates or methods
  • Product discounts — Scripts that apply product-line discounts

For each Script, the report shows: name, description, link to source code, and recommendations for compatible public apps or Functions tutorials.

Source: help.shopify.com — transitioning to Functions.

1 mapping table — Script → Function API

Line item scripts → Discounts + Cart Transform + Cart and Checkout Validation API

Line item scripts covered the broadest range of operations (discounts, cart transformations, validations). The Functions equivalent splits into three APIs:

Script OperationEquivalent Function API
Apply line-level discountDiscounts API
Cart transformation (bundle, merge)Cart Transform API
Cart/checkout validationCart and Checkout Validation API

Shipping scripts → Delivery Customization API + Discounts API

Script OperationEquivalent Function API
Hide/rename shipping methodsDelivery Customization API
Discount shipping costDiscounts API

Payment scripts → Payment Customization API

Script OperationEquivalent Function API
Hide/rename/reorder payment methodsPayment Customization API

Source: shopify.dev/docs — migrating from Scripts, Function APIs mapping.

Method-level mapping (for developers)

change_line_price / split / reject → Discount Function (with exact equivalents)

Script MethodFunction Equivalent
change_line_priceDiscount Function — OrderDiscountCandidateValue / ProductDiscountCandidateValue
splitDiscount Function — optional quantity field in ProductDiscountCandidateTarget
rejectDiscount Function — enteredDiscountCodesReject operation

The trap:change_properties has NO direct equivalent

change_properties (which modified custom properties on a line item) has no 1:1 equivalent in Shopify Functions. The alternative: use applyAttributeChange in a checkout UI extension.

This is one of the most common surprises during migration. If you have Scripts that set custom properties on line items (e.g., engraving messages, personalizations), you need to rebuild that logic in a UI extension, not in a Function.

Source: shopify.dev/docs/api/functions — migrate from line item scripts.

Zero-downtime migration:passthrough script + TESTER customer tag

Shopify's official strategy guarantees zero disruptions in production. Here's the flow:

  1. Create a passthrough Script (if you created it before April 15) — minimal code that changes nothing: Output.cart = Input.cart. Save as draft (don't publish).
  2. Generate a preview link from Script Editor.
  3. This preview link lets you test checkout without the original Script being active.

Step 2:test in production on the TESTER tag, then finalize

  1. In your new Function, add targeting logic: check if the customer has the TESTER tag.
  2. Deploy the Function. It runs in parallel with the existing Script — but applies logic only for customers with the TESTER tag.
  3. Manually test a few orders with a test account that has the tag.
  4. When satisfied, remove the test code (tag check), do a final deploy, and deactivate the original Script.

Source: shopify.dev/docs — migrating from Scripts, Step 1 - Step 2.

CLI workflow:shopify app dev and shopify app deploy (requires dev store)

Building and deploying Functions uses Shopify CLI. Essential commands:

# Initialize app
shopify app init

# Local development (tunnel + preview)
shopify app dev

# Deploy to production
shopify app deploy

The official guide assumes familiarity with creating Shopify Functions using CLI. Requires a development store for testing.

Source: shopify.dev/docs — migrating from Scripts, Requirements + deploy steps.

Advanced traps:don't migrate to an already deprecated API

Legacy Product/Order/Shipping Discount APIs (deprecated since 2025-04, replace before 2026-04)

The classic mistake: migrating from Scripts to a Function API that's also on sunset.

The legacy Product Discount, Order Discount, and Shipping Discount Function APIs were deprecated starting with API version 2025-04 and replaced by the new unified Discount Function API. Migration must be completed before API version 2026-04.

If you're migrating now, migrate directly to the new unified API. Don't waste time building on deprecated APIs.

Source: shopify.dev/changelog — deprecation Product/Order/Shipping Discount APIs (May 21, 2025).

Practical limits:max 25 delivery + max 25 payment customization functions; B2B review for Payment

Current operational limits:

  • Maximum 25 delivery customization functions active per store
  • Maximum 25 payment customization functions active per store
  • Review requirement for Payment Customization applies only to B2B orders

If you have a complex store with dozens of rules, you need to consolidate them into fewer Functions.

Sources: shopify.dev/docs/api/functions — delivery-customization · shopify.dev/docs/api/functions — payment-customization.

Why it matters long-term:Functions = durable WebAssembly vs Scripts = EOL

This isn't just a forced migration — it's a fundamental architectural shift:

  • Scripts = interpreted Ruby, running in an isolated sandbox, with full access to the cart object. Dynamic language, hard to optimize at scale.
  • Functions = compiled WebAssembly, running on Shopify's edge infrastructure. GraphQL input, declarative JSON output. Deterministic, sandboxed, scalable.

Functions are not a "patch" — they are Shopify's future architecture for business logic. Migrating now means investing in durable code. Delaying means investing in dead code.

Full details on the Wasm architecture, official limits, and debunked myths: Shopify Functions vs Scripts: The WebAssembly Architecture Explained Correctly.

For the Liquid performance optimization directly connected to this migration, consult our Shopify speed optimization guide.

FAQ.PROTOCOL

Frequently Asked Questions

On June 30, 2026, all existing Scripts stop executing entirely. Checkout will work, but without Script business logic — discounts, custom shipping, and payment filters will no longer apply.
On April 15, 2026, editing and publishing new Scripts became impossible. Already published Scripts continued running. On June 30, 2026, even existing ones stop.
Not directly. Custom apps with Function APIs require a Shopify Plus plan. On standard plans, you can install public apps from the App Store that contain Functions built by other developers.
It depends on the operation: discounts → Discounts API, cart transformations (bundle, merge) → Cart Transform API, validations → Cart and Checkout Validation API.
The official strategy: create a passthrough Script (`Output.cart = Input.cart`) saved as draft, deploy the Function with targeting logic on the `TESTER` tag, test in production on test accounts, then remove the tag check and deactivate the original Script.
It has no 1:1 equivalent in Functions. The alternative is `applyAttributeChange` in a checkout UI extension. If you have Scripts that set custom properties on line items, rebuild the logic in a UI extension.
Admin > Apps > Script Editor > "Replace Shopify Scripts" banner. The report lists all active Scripts by category with alternative recommendations. --- Last updated: June 16, 2026 Official sources used: shopify.dev/docs — migrating from Scripts · shopify.dev/changelog — Scripts deprecated · changelog.shopify.com — Scripts can no longer be edited · help.shopify.com — transitioning to Functions · shopify.dev/changelog — deprecation Discount APIs Need migration assistance? Our team builds optimized Shopify ecosystems. Contact us for a technical audit. ```json { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Migrating Shopify Scripts to Functions: Complete Guide Before June 30, 2026", "description": "Dual timeline (freeze April 15 vs sunset June 30), Scripts→Function API mapping table, zero-downtime migration with passthrough + TESTER tag, any-plan vs Plus-only distinction.", "datePublished": "2026-06-16", "dateModified": "2026-06-16", "author": { "@type": "Organization", "name": "Verdant Mindset", "url": "https://verdantmindset.com" }, "publisher": { "@type": "Organization", "name": "Verdant Mindset", "url": "https://verdantmindset.com" }, "inLanguage": "en", "mainEntityOfPage": "https://verdantmindset.com/en/resources/migrare-shopify-scripts-functions" } ``` ```json { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "When do Shopify Scripts permanently stop working?", "acceptedAnswer": { "@type": "Answer", "text": "On June 30, 2026, all existing Scripts stop executing entirely. Checkout will work, but without Script business logic." } }, { "@type": "Question", "name": "What's the difference between April 15, 2026 and June 30, 2026 for Scripts?", "acceptedAnswer": { "@type": "Answer", "text": "On April 15, 2026, editing and publishing new Scripts became impossible. On June 30, 2026, even existing ones stop executing." } }, { "@type": "Question", "name": "Can I build custom Functions if I'm not on Shopify Plus?", "acceptedAnswer": { "@type": "Answer", "text": "Not directly. Custom apps with Function APIs require a Shopify Plus plan. On standard plans, you can install public apps from the App Store." } }, { "@type": "Question", "name": "What replaces a line item script in Shopify Functions?", "acceptedAnswer": { "@type": "Answer", "text": "Discounts → Discounts API, cart transformations → Cart Transform API, validations → Cart and Checkout Validation API." } }, { "@type": "Question", "name": "How do I migrate from Scripts to Functions without downtime?", "acceptedAnswer": { "@type": "Answer", "text": "Create a passthrough Script (Output.cart = Input.cart) as draft, deploy the Function with TESTER tag targeting, test, then remove the tag check and deactivate the original Script." } }, { "@type": "Question", "name": "Does change_properties have an equivalent in Shopify Functions?", "acceptedAnswer": { "@type": "Answer", "text": "No 1:1 equivalent. Use applyAttributeChange in a checkout UI extension instead." } }, { "@type": "Question", "name": "Where do I find the report of active Scripts in my store?", "acceptedAnswer": { "@type": "Answer", "text": "Admin > Apps > Script Editor > Replace Shopify Scripts banner. Lists all active Scripts by category with alternative recommendations." } } ] } ```