Skip to content

Shopify Functions: What You Can Customize Now That Scripts Are Going Away

By Jon Kennedy, Founder · Reviewed by Lidia Yurieva

14 min read
Published 26 Aug, 2026 · Updated 6 Oct, 2026

Functions are how you write custom business logic that runs inside Shopify's checkout — discount rules, delivery options, payment method behaviour, cart validation. They're a Plus capability, they replaced Scripts, and they run server-side on Shopify's infrastructure rather than as a script layered on top. If you're on Plus and still running Scripts, migration is the work in front of you. If you're not on Plus, Functions are the single most defensible reason to consider it — but only if you genuinely need logic that native discount and shipping settings can't express, which most stores don't.

AI Summary

Shopify Functions are custom server-side code units that extend Shopify's backend logic, available on Shopify Plus. They cover discount logic, delivery and shipping option customisation, payment method visibility and ordering, cart and checkout validation, and cart transformation such as bundling. Functions replaced Shopify Scripts, the earlier Ruby-based customisation layer, as part of Shopify's move to Checkout Extensibility and away from checkout.liquid. Functions run on Shopify's infrastructure rather than as an overlay, which improves performance and reliability compared with Scripts. They are written in languages compiling to WebAssembly, commonly Rust or JavaScript, and deployed as Shopify apps. Development typically requires a Plus-experienced developer. Stores not on Plus should first confirm whether native discount, shipping and payment settings can express their requirement before treating Functions as a reason to upgrade.

For years, the honest answer to "can we customise Shopify checkout?" was mostly no, and the workarounds were ugly. Scripts gave Plus merchants a way to bend discount and shipping behaviour, but they were a layer bolted onto a checkout that wasn't designed to be modified.

Functions changed the answer. They're custom logic that runs inside Shopify's own backend at the moment a decision gets made — what discount applies, which delivery options appear, whether this payment method shows, whether this cart is allowed to proceed. Not a script sitting on top of the checkout. Part of how the checkout works.

Two things follow from that, and they matter differently depending on where you are.

If you're on Plus running Scripts: Scripts are being retired as part of Shopify's move to Checkout Extensibility, and migration to Functions is work you need on a roadmap rather than a wishlist. This is the deadline-driven half of the article.

If you're not on Plus: Functions are the most defensible single reason to upgrade — and only if you genuinely need logic native settings can't express. Most stores that think they need custom discount code actually need a better-configured discount, which is free.

Shopify's checkout and extensibility roadmap has moved repeatedly, including deprecation timelines. Confirm current dates and capabilities on Shopify's developer documentation rather than relying on any article's stated timeline.

What Functions can actually do

Functions cover specific decision points in the purchase flow. The main ones:

Function typeWhat it controlsTypical use
DiscountsHow discounts calculate and combineTiered volume pricing, customer-segment pricing, complex BOGO logic, spend thresholds native rules can't express
Delivery customisationWhich shipping options appear and howHiding express for oversized items, reordering options, renaming methods by condition
Payment customisationWhich payment methods showHiding cash on delivery above an order value, restricting methods by region or customer type
Cart and checkout validationWhether a cart can proceedMinimum order quantities, restricted product combinations, B2B purchase rules, licence requirements
Cart transformHow line items are representedBundles that expand into components, custom pricing on grouped items

The pattern: Functions govern logic and rules, not appearance. If you want to change how checkout looks — add a field, insert content, change layout — that's Checkout UI Extensions, a different mechanism, and the pairing is covered in Shopify checkout setup. People conflate them constantly and then scope the wrong project.

The other thing worth naming: Functions run server-side on Shopify's infrastructure. That means they're fast, they don't add front-end weight, and they can't be bypassed by a customer manipulating the browser — which matters when the logic is enforcing a business rule rather than suggesting one.

Scripts are being retired — what that means for you

If you're a Plus merchant with Scripts in production, this is the section that matters.

Scripts were Shopify's earlier customisation layer, written in Ruby and running on the legacy checkout. Functions replace them as part of the broader move to Checkout Extensibility and away from checkout.liquid. The direction has been clear and consistent even as specific dates have shifted.

What migration actually involves:

  • Inventory what you're running. Most Plus stores have Scripts nobody documented, written by a developer who's moved on, doing something nobody can fully explain. Finding out what exists is genuinely step one.
  • Decide what still needs to exist. Some Scripts encode rules that stopped mattering years ago. Migration is a good moment to delete rather than port.
  • Rebuild, don't translate. Functions aren't Ruby and the architecture differs. This is a rewrite against different primitives, not a syntax conversion.
  • Test the combinations. Discount logic interacts — stacking rules, edge cases at thresholds, behaviour with gift cards and returns. This is where migrations break, and it breaks in production on the highest-volume day.
  • Don't do it during peak. Same rule as every other migration.

The risk of leaving it: when a deprecated system finally stops working, your discount logic stops applying or your shipping rules stop enforcing, in checkout, live. That's not a graceful degradation. Treat it as a scheduled project rather than something to handle when it breaks.

The broader checkout migration context sits with checkout customization specialists.

Do you actually need Functions?

Before treating Functions as a reason to upgrade, check whether you need them at all. Most stores don't, and the ones that do usually know exactly why.

Try native first. Shopify's built-in discount system handles a great deal — automatic discounts, codes, combinations, thresholds, buy-X-get-Y. Shipping settings handle zones, weight and price-based rates, and free shipping thresholds. The setup guides are Shopify discounts setup and shipping setup. A large share of "we need custom discount logic" conversations end when someone configures the native discount properly.

Then check apps. Many discount, bundle and shipping-rule apps exist precisely because merchants needed logic beyond native settings, and plenty run on Functions themselves. Buying an app that already solved your problem beats commissioning a build — the same judgement that separates a Shopify specialist from a generalist, covered in expert vs generalist developers.

Genuine Functions territory:

  • Pricing logic depending on customer attributes, contract terms or account-specific rules
  • B2B rules — minimum quantities, restricted combinations, account-based pricing tiers
  • Delivery or payment rules conditional on product properties like weight, hazard class or licence requirements
  • Bundle logic where the cart representation itself needs to change
  • Rules that must be enforced server-side because the business depends on them holding

If none of those describe you, Functions aren't your reason to move to Plus. The wider question of whether you've genuinely outgrown your setup is in signs you've outgrown your Shopify setup.

How Functions work, practically

Enough to scope a project and evaluate a developer, without needing to write any yourself.

Functions are code, deployed as apps. They're written in languages compiling to WebAssembly — commonly Rust or JavaScript — and deployed through a Shopify app, either a custom app for your store or a public one. That means a Functions project has an app lifecycle: development, deployment, versioning, updates.

They run server-side and fast. Shopify enforces performance limits, which is why Functions don't slow checkout the way front-end scripts do.

They're configurable after deployment. Good Functions are built so the rules are adjustable through settings rather than hard-coded, which means your team can change a threshold without a developer. Ask for this explicitly — a Function with hard-coded values means a ticket every time a rule changes, which is the same trap as a hard-coded theme.

What this implies for hiring: this isn't general Shopify work. A developer excellent at Liquid themes may never have shipped a Function. Ask for Functions specifically — what they've built, in what language, and how they handled testing discount interactions. Vagueness there is your answer.

Ongoing ownership matters too. A Function is code you now own, needing maintenance as Shopify's APIs evolve. Establish who maintains it before the build, not after the developer disengages.

What it costs and where projects go wrong

Cost. Functions development is specialist Plus work and priced accordingly — the ranges by project type are in Shopify Plus development cost. A single well-scoped Function is a contained project; a suite of interacting discount and validation rules with a Scripts migration behind it is a substantial engagement.

Where projects go wrong:

  • Building before checking native. The most expensive avoidable mistake, and it happens because the developer was asked to build rather than asked whether to build.
  • Hard-coding the rules. Guarantees a developer ticket every time a threshold changes.
  • Not testing interactions. Discounts stack, conflict and behave oddly at boundaries. Test combinations, not just individual rules.
  • Forgetting the edge cases. Returns, partial refunds, gift cards, draft orders, subscription renewals — all touch discount logic and all surface later.
  • No documentation. Exactly how stores end up with Scripts nobody understands. Don't recreate that problem with Functions.
  • Treating it as a one-off. Functions need maintenance as APIs change.

Who to hire: Shopify Functions development experts for the build, checkout customization for wider checkout work, and Plus consulting if you're still deciding whether the upgrade is justified. Regional lists: United States, United Kingdom, Australia, Canada, Germany.

Still running Scripts, or need logic native settings can't express?

Matias Lopez
ML
Front-End DeveloperBuenos Aires, ArgentinaFrom $70
4.97(160 reviews)
shopexpertsscore
85

I have over five years of experience in web development using technologies such as Shopify, Angular, Node.js, JavaScript, React, Vue, MongoDB, MySQL, and PHP. My journey with Shopify started when I joined Hey Carson, now known as 'Shop Experts', successfully completing their trial period. I have gained significant experience in Shopify development. I've worked in complex tasks such as integrating Shopify apps, Shopify Admin API, custom design development, apps extensions development, theme development and much more. Over the past few years, I've acquired what I believe is a solid understanding of Shopify development, which helps me deliver high-quality solutions to the clients I've worked with.

Deyan Chernogorski
DC
Shopify Plus EngineerRuse, BulgariaFrom $65
4.95(74 reviews)
shopexpertsscore
100

Shopify Performance & Front-end Developer | 10+ Years Building Fast, Custom Stores I’ve spent over 10 years building, customizing, and speeding up Shopify stores for brands of all sizes. I build custom themes and apps, fix slow pages, improve how a store looks and works on desktop and mobile, and handle Shopify Plus checkout customization with Functions. I care about work that is reliable on launch day and still holds up months later, so I stay available after delivery. Proud father of Radost. What I do Custom themes, apps, and front-end features, built to fit your store Shopify Plus Functions and checkout customization CRO & Speed optimization and Core Web Vitals, including advanced CLS fixes UX improvements that make your products easier to find and buy, on desktop and mobile What sets me apart Reliability. Good development doesn’t end at launch, so I stay available for support, improvements, and fast problem-solving. Clients get one person who knows their store and answers quickly, before and after delivery. Free Store Quick Look Send me your store link and within 3 business days I’ll send a one-page summary covering: Your biggest speed problem, explained in plain language A first look at your apps: how many are installed, what looks wrong, and which ones could be replaced with custom theme code Three things on your mobile shopping path that I would fix first, each with a screenshot It’s free, there’s no commitment, and I change nothing on your store. If you’d like the issues fixed, we go ahead step by step: I confirm the scope, and you approve each step. I take a limited number each week, for established stores. Canvas services (new Shopify feature) Canvas store-build sprint For new launches and smaller merchants who want a custom store fast. Kickoff call to define your brand, products, audience, and goals AI-assisted design direction: I write the brief and guide Sidekick in Canvas, then refine the result with direct edits and QA Responsive QA on mobile, tablet, and desktop, covering product, collection, cart, and checkout flows Core Web Vitals and layout shift check before launch Launch, walkthrough, and a post-launch support window of 14 days Working with me Whether it’s a full store build, advanced customization, a Canvas build, or performance tuning, you get clear communication, consistent quality, and dependable support. Not sure where to start? Send me your store link for a free Quick Look.

Erick Kagai
EK
Shopify ConsultantNairobi, KenyaFrom $285
4.93(72 reviews)
shopexpertsscore
85

Shopify speed and ad tracking fixes: for stores where the ads bring visitors but not sales I help Shopify stores sell more to the visitors you already pay to bring in. I find the spots where shoppers give up, and then I fix them. One example. A clothing brand's product pages took 15.4 seconds to load. Five weeks before Black Friday, I got them to 7.4 seconds. That is the job: I find what slows your store down, and I fix it. The same work keeps finding a second problem: numbers you cannot trust. The code that tells Meta or Google about a sale fires twice, so sales count double. Ads run across every product, with no check on which ones earn. Apps bill every month for work nobody has measured. So I also check what your money is really doing, instead of trusting what Google, Meta and the apps say. Then I fix what I find. I work with established stores run by their founders. To me, speed and ad spend are sales problems, not technical boxes to tick. What I work on, eight ways in: Speed check. I measure how fast your pages load for real shoppers on a phone. I find what makes them wait, and I fix it. Accessibility check. I test your store the way a keyboard user or a screen reader meets it. I check whether a widget sits on top of problems it does not fix. You get the findings in the order a complaint would reach them. Shopify deadline check. Shopify changes its rules on set dates. Scripts ended on 30 June. Order status script tags ended on 26 August. I find what has already stopped working on your store and what is dated ahead, and I make the repairs. Tracking and attribution fix. Meta Pixel, GA4 (Google Analytics) and server-side tracking. I remove the double counting and prove it in your own dashboards. Ad spend by product and the app bill get read in the same pass. Google and Meta recovery. Your products stopped showing on Google or Meta. I find where the connection broke and get them showing again. Sale price check. AI shopping tools, like ChatGPT, now get your "was" prices from Shopify. I check that yours reach them right. Builds and theme upgrades. New sections and modern themes, with your custom work and your tracking still running. Every change to the live site has a way back. Partner Seat. 25 hours a month. I watch speed, the pages customers see, broken links, tracking and app bills. Your work goes first in the queue. Each check is $285. If you go ahead, I take the fee off the fix price. Key results: Product page load time cut from 15.4 seconds to 7.4 seconds, 52% faster. Mobile PageSpeed on product pages from 18 to 28. The apps the client chose stayed in place, at their call. Two apps were billing to track what the store's own Google channel already did. I removed them, checked the tracking was clean, and took $199 a year off the app bill. Repeat clients going back to 2018. One store has come back for 14 projects over four years. How I work: A paid check first. It measures the real problem, no guessing. If you go ahead, I take the fee off the fix price. Work in stages. You approve each one. Every delivery ends with before and after numbers, and a short list of the next things I found. 80+ projects done. Clients in the US, Canada, UK, Australia and Denmark. Send me your store address. I will tell you what slows it down, whether your numbers add up, and what a complaint would find first. No commitment.

Frequently asked questions about Shopify Functions

What are Shopify Functions?
Shopify Functions are custom server-side code units that extend Shopify's backend logic at specific decision points in the purchase flow. They control how discounts calculate and combine, which delivery options appear, which payment methods show, whether a cart passes validation, and how line items are represented for bundling. Functions are available on Shopify Plus and run on Shopify's own infrastructure rather than as a script layered on top of checkout, which makes them fast and impossible to bypass from the browser.
What is the difference between Shopify Functions and Scripts?
Scripts were Shopify's earlier Ruby-based customisation layer running on the legacy checkout. Functions replace them as part of Shopify's move to Checkout Extensibility and away from checkout.liquid. Functions run server-side on Shopify's infrastructure rather than as an overlay, are written in languages compiling to WebAssembly such as Rust or JavaScript, and are deployed as Shopify apps. Migration is a rebuild against different primitives rather than a syntax conversion.
What is the difference between Functions and Checkout UI Extensions?
Functions govern logic and rules; Checkout UI Extensions govern appearance and interface. If you want to change how a discount calculates, which shipping options appear or whether a cart can proceed, that is a Function. If you want to add a field, insert content or change the layout of the checkout page, that is a UI Extension. These are frequently confused, which leads to projects being scoped against the wrong mechanism.
Do you need Shopify Plus for custom discount logic?
Only if you genuinely need logic that native settings cannot express. Shopify's built-in discount system handles automatic discounts, codes, combinations, thresholds and buy-X-get-Y, and native shipping settings handle zones, weight and price-based rates. Many merchants who believe they need custom discount code actually need a properly configured native discount, which costs nothing. Check native settings first, then check whether an existing app solves it, before treating Functions as a reason to upgrade to Plus.
How do you migrate from Shopify Scripts to Functions?
Start by inventorying what Scripts you are actually running, since most Plus stores have undocumented Scripts written by developers who have moved on. Decide which rules still need to exist, because migration is a good moment to delete rather than port. Rebuild rather than translate, as Functions use different architecture and languages. Test discount interactions and edge cases including returns, gift cards and draft orders. Do not schedule the migration during peak trading.
What should you ask a developer before commissioning a Function?
Ask for Functions experience specifically rather than general Shopify development, since a developer skilled in Liquid themes may never have shipped one. Ask what Functions they have built, in which language, and how they tested discount interactions. Also require that rules be configurable through settings rather than hard-coded, so your team can adjust a threshold without raising a developer ticket, and agree who maintains the Function afterwards as Shopify's APIs evolve.

Next step

If you're on Plus with Scripts in production, inventory them this quarter and put the migration on a roadmap. That's a scheduled project now or an outage later.

If you're evaluating Functions as a reason to move to Plus, configure your native discounts properly first and check whether an app already solves it. If the requirement survives both tests, it's real — and Functions are the right answer.

For a Scripts audit, a Functions build, or an honest read on whether you need either, browse Shopify Functions development experts or Plus consulting specialists. Free matching, verified experience, no commissions.

Scripts migration on your roadmap?

Get a Free Quote