Shopify Scripts vs Functions — migreren voor de deadline
Terug naar blog

Shopify Scripts vs Functions — migreren voor de deadline

AuthorRuthger Idema
15 juli 20268 min leestijd

Shopify Scripts wordt per augustus 2025 uitgefaseerd. Leer hoe je discount-, shipping- en payment-logica migreert naar Shopify Functions — met stappenplan en codevoorbeelden.

Shopify Scripts vs Functions — migreren voor de deadline

Shopify Scripts wordt per augustus 2025 definitief uitgefaseerd. Als je vandaag nog Scripts gebruikt voor kortingen, cart-logica of checkout-aanpassingen, heb je een probleem. Niet morgen, maar nu. Shopify Functions is het vervangende model — en het denkt fundamenteel anders.

Dit artikel legt uit wat er verandert, hoe je je logica herbouwt en hoe je de migratie aanpakt zonder je Black Friday-campagnes in gevaar te brengen.


Waarom Shopify Scripts verdwijnt

Shopify Scripts draait als Ruby-code in een sandbox op Shopify's servers. Het model is krachtig, maar heeft structurele nadelen. De sandbox is traag op te starten, slecht schaalbaar bij pieken, en vrijwel onmogelijk te debuggen. Shopify kon Scripts nooit breed uitrollen buiten Shopify Plus — de infrastructuurkosten waren te hoog.

Shopify Functions lost dit op met WebAssembly (Wasm). Je schrijft je logica in Rust, JavaScript of TypeScript, compileert naar Wasm, en Shopify voert dat uit in een deterministische sandbox. Uitvoeringstijd ligt doorgaans onder de 5 milliseconden. Geen koude starts, geen timeouts bij piekverkeer.

Het gevolg: Functions werken voor alle Shopify-plannen, niet alleen Plus. De migratie is dus ook een kans om logica te democratiseren over je hele store-setup.


Wat verandert er in het model

De kernverschillen zijn groter dan het lijkt.

EigenschapShopify ScriptsShopify Functions
TaalRubyRust, JS/TS (Wasm-gecompileerd)
UitvoeringstijdDoorgaans 50–200msDoorgaans < 5ms
Plan vereistShopify PlusAlle plannen
DebuggingVrijwel geen toolingShopify CLI + lokale tests
Input/output modelImperatiief (muteer cart)Declaratief (return transformaties)
Aanpasbare UINeeJa, via checkout extensions
Limiet op bewerkingenGeen vaste limietMax 5MB output, max 11ms CPU

Het grootste conceptuele verschil: Scripts muteren objecten direct. Functions ontvangen een input (JSON via GraphQL-query), berekenen een output, en returnen die als declaratieve transformatie. Je zegt niet "verwijder product X" — je returnt een nieuwe cart-state zonder product X.


Welke Scripts-typen moet je migreren

Shopify Scripts kent drie categorieën. Elk heeft een Functions-equivalent.

1. Discount Scripts → Discount Functions

Kortingslogica is de meest gebruikte Scripts-categorie. Denk aan: koop-drie-betaal-twee, trapsgewijze volume-kortingen of klantgroep-specifieke prijzen.

In Discount Functions werk je met het cart-transform API of de dedicated discount functions. Voor order-kortingen gebruik je order-discounts, voor product-kortingen product-discounts.

Een vereenvoudigd voorbeeld in JavaScript/TypeScript:

typescript
// extensions/discount-function/src/index.ts
import type { RunInput, FunctionRunResult } from "../generated/api";

export function run(input: RunInput): FunctionRunResult {
  const discountPercentage = 10;
  const minimumQuantity = 3;

  const targets = input.cart.lines
    .filter(line => line.quantity >= minimumQuantity)
    .map(line => ({
      productVariant: {
        id: line.merchandise.id,
      },
    }));

  if (targets.length === 0) {
    return { discounts: [], discountApplicationStrategy: "FIRST" };
  }

  return {
    discounts: [
      {
        targets,
        value: {
          percentage: {
            value: String(discountPercentage),
          },
        },
      },
    ],
    discountApplicationStrategy: "FIRST",
  };
}

Let op: je definieert in een input.graphql-bestand precies welke cart-data je nodig hebt. Shopify geeft je alleen wat je vraagt — dit maakt de functie sneller en voorspelbaarder.

2. Shipping Scripts → Delivery Customization

Verzendopties aanpassen (verbergen, hernoemen, sorteren) doe je voortaan via Delivery Customization Functions. De logica is vergelijkbaar: je krijgt een lijst beschikbare shipping rates en returnt een gefilterde of gesorteerde lijst.

Wij zien bij klanten dat dit de meest onderschatte migratie is. Shipping Scripts bevatten soms twintig regels uitzonderingen voor specifieke postcodes, gewichten of klantgroepen. Dat is herbouwbaar — maar plan er tijd voor in.

3. Payment Scripts → Payment Customization

Betaalmethoden tonen of verbergen op basis van cart-waarde of klantdata. Hetzelfde declaratieve model: input is beschikbare betaalmethoden + cart, output is de gefilterde set.


De migratie stap voor stap

Stap 1: Inventariseer bestaande Scripts

Open de Shopify Admin, ga naar Settings > Apps and sales channels > Script Editor. Exporteer elke actieve Script — inclusief naam, categorie en beschrijving van de business-logica.

Maak ook een screenshot van welke Scripts actief zijn en op welke store(s). Bij meerdere Shopify-stores (via Shopify Plus organizations) herhaal je dit per store.

Stap 2: Beoordeel complexiteit

Verdeel je Scripts in drie categorieën:

  • Eenvoudig — standaard volume-korting, één conditie. Herteken dit direct als Function.
  • Middel — meerdere condities, klantgroepen of datum-checks. Reserveer twee tot vier uur per Script.
  • Complex — afhankelijkheid van externe data (klant-API, loyalty-systeem, ERP). Dit vereist ook een app-proxy of metafield-strategie.

Complexe Scripts zijn het risico. Scripts konden bij elke cart-request externe data ophalen via de Shopify API. Functions kunnen dat niet — de sandbox heeft geen outbound network access. Alle benodigde data moet beschikbaar zijn via metafields op cart, klant of product.

Stap 3: Bouw de Functions-extensie

Installeer de Shopify CLI en maak een nieuwe app (of voeg een extensie toe aan een bestaande).

bash
# Nieuwe Shopify app aanmaken
npm install -g @shopify/cli
shopify app create node

# Of: extensie toevoegen aan bestaand project
shopify app generate extension
# Kies het type: Discount, Delivery Customization, Payment Customization

De gegenereerde boilerplate bevat al een input.graphql en een TypeScript-entry. Pas de GraphQL-query aan op de data die jouw logica nodig heeft — niet meer, niet minder.

Stap 4: Test lokaal

bash
shopify app function run

Dit geeft je een interactieve CLI-sessie waar je JSON-input kunt invoeren en de output direct ziet. Schrijf ook unit tests — de Wasm-sandbox is deterministisch, dus testen is eenvoudig.

Wij testen altijd minimaal:

  • Hoofdpad (conditie is waar)
  • Grenswaarden (exact op de drempel)
  • Leeg cart of ontbrekende metafields
  • Maximaal aantal cart-regels (stress-test)

Stap 5: Deploy en activeer

bash
shopify app deploy

Na deployment activeer je de Function via de Shopify Admin of via de App UI die je zelf bouwt. Zet de oude Script gelijktijdig uit. Doe dit buiten piekuren — en niet in de week voor Black Friday.

Stap 6: Monitor

Shopify Functions loggen niet standaard naar een dashboard. Gebruik de Shopify Partner Dashboard voor foutmeldingen, en bouw zelf logging in via een metafield of webhook als je bedrijfskritische logica hebt.


Valkuilen die wij in de praktijk zien

Externe data ophalen werkt niet meer direct. De meest voorkomende blokkade. Je hebt een loyalty-systeem of ERP waarvan je het saldo wil checken bij het berekenen van korting. In Scripts kon dat via een HTTP-call. In Functions niet. Oplossing: sla het saldo op als metafield op de klant, en update dat via een backend-job (bijvoorbeeld Laravel) bij elke login of aankoop. Datum- en tijdlogica is kwetsbaar. Functions draaien in UTC. Als je kortingen activeert op basis van lokale tijd (bijv. "Alleen op zaterdag"), houd dan rekening met tijdzone-correctie in je input of via een metafield. Meerdere kortingen stapelen. Scripts lieten je meerdere kortingen combineren met volledige controle. Functions gebruiken een discountApplicationStrategy (FIRST, MAXIMUM, ALL). Niet elke combinatie is mogelijk. Test dit expliciet. Checkout extensions zijn apart. Wil je ook de checkout-UI aanpassen (velden toevoegen, berichten tonen)? Dat is een apart type extensie: Checkout Extensions. Verwar dit niet met Functions — het zijn twee verschillende APIs die wel kunnen samenwerken.

Wanneer is migreren NIET de juiste keuze

Als je Scripts minimaal gebruikt — één eenvoudige korting, zelden aangepast — overweeg dan een app uit de Shopify App Store. Apps als Automatic Discounts of Bold Discounts dekken standaard-kortingsscenarios zonder dat je zelf hoeft te bouwen.

Bouw alleen een custom Function als je logica te specifiek is voor een app, of als je performance en controle nodig hebt. Custom Functions kosten initieel meer tijd, maar geven je volledige ownership over de logica.

Voor Shopify Plus-merchants die ook custom checkout-flows of B2B-pricing nodig hebben: migratie naar Functions is dan sowieso de investering waard. Je legt dan meteen de basis voor uitbreidingen die later makkelijker worden.

Kosteninschatting voor de migratie

Een ruwe indicatie van wat je kunt verwachten qua ontwikkeltijd en budget:

ScenarioBouwtijdIndicatief budget
1–2 eenvoudige Scripts1–2 dagenReken op €800–€1.600
3–5 middel-complexe Scripts1–2 wekenReken op €3.000–€6.000
Complex met externe data + backend3–5 wekenMaatwerk traject

Dit zijn geen harde prijzen maar richtlijnen. De grootste kostenpost is niet de Functions zelf — het is het herbouwen van de datastromen als je externe systemen hebt gekoppeld via Scripts.


Tijdlijn en urgentie

Shopify heeft de deadline voor Scripts-deprecation meerdere keren verschoven, maar augustus 2025 staat nu vast. Scripts die nog actief zijn na de deadline worden door Shopify uitgeschakeld — zonder fallback. Je kortingslogica stopt gewoon met werken.

Reken op de volgende doorlooptijden:

  • Eenvoudige Script herbouwen als Function: 4–8 uur
  • Middel-complexe Script: 1–3 dagen
  • Complexe Script met externe data: 3–7 dagen + backend-aanpassingen

Start nu als je meer dan twee actieve Scripts hebt. De combinatie van bouwtijd, testcycli en acceptatie door je team maakt dat je al snel aan twee tot drie weken zit voor een complete migratie.


Veelgestelde vragen

Werkt Shopify Functions ook zonder Shopify Plus?

Ja. Dit is juist een van de voordelen ten opzichte van Scripts. Functions zijn beschikbaar op alle betaalde Shopify-plannen. Alleen checkout extensions vereisen nog steeds Shopify Plus.

Kan ik mijn bestaande Scripts exporteren en direct omzetten?

Nee. Scripts zijn in Ruby geschreven; Functions vereisen JavaScript/TypeScript of Rust. De logica vertaalt je handmatig. Er zijn geen geautomatiseerde converters beschikbaar. Behandel het als herbouwen, niet als converteren.

Wat als mijn Script externe data nodig heeft uit een ERP of loyalty-systeem?

Functions hebben geen outbound network access. Externe data moet vooraf in metafields worden opgeslagen. Bouw een synchronisatiestroom via je Laravel-backend of een webhook-handler die metafields up-to-date houdt.

Hoe test ik een Function voordat ik hem activeer?

Met shopify app function run test je lokaal met willekeurige JSON-input. Voor staging gebruik je een development store. Shopify heeft geen preview-modus voor Functions in een live store — activeer dus altijd eerst op een test-omgeving.


Heb je Shopify Scripts die je voor de deadline wilt migreren, of twijfel je welke aanpak het beste past bij jouw store? Neem contact op — wij kijken mee en geven een eerlijk advies.

Ruthger Idema

Geschreven door Ruthger Idema

15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.

Meer over ons team →
Deel dit artikel:

Wil je jouw e-commerce naar het volgende niveau?

Plan een vrijblijvend gesprek met onze experts over Magento, Shopify of Laravel maatwerk.

Plan een Tech Check