Les Scripts historiques ont cessé de s'exécuter le 30 juin. Voici comment retrouver la logique de remise, de livraison et de paiement qui a disparu sans bruit de votre boutique, et par quoi commencer la reconstruction.
Shopify Scripts a cessé de s'exécuter le 30 juin 2026. L'édition et la publication étaient déjà désactivées depuis le 15 avril, si bien que la plupart des équipes ont pris la date finale pour une formalité. Pour les boutiques ayant terminé leur migration, c'en était une. Pour les autres, le 1er juillet a été le premier jour d'une panne très particulière : rien n'a planté, aucune alerte ne s'est déclenchée, et les commandes ont continué d'arriver. La seule chose qui a changé, c'est que certaines étaient mal tarifées.
Nous avons passé la première semaine de juillet à réaliser des audits post extinction pour des marchands Plus. Le schéma était assez constant pour être documenté.
Les Scripts couvraient trois surfaces, et chacune échoue différemment maintenant que le moteur Ruby a disparu.
| Type de script | Ce qu'il pilotait | Symptôme après le 1er juillet |
|---|---|---|
| Scripts de ligne | Remises panier, prix par palier, logique de bundles, cadeau offert | Commandes traitées au prix fort, sans aucune erreur affichée |
| Scripts de livraison | Renommage, masquage, réordonnancement des tarifs, livraison offerte conditionnelle | Tous les tarifs transporteurs apparaissent bruts, y compris ceux que vous masquiez |
| Scripts de paiement | Masquage ou réordonnancement des moyens de paiement selon le panier ou le client | Toutes les passerelles activées s'affichent au paiement |
Aucun de ces cas ne produit un échec de commande. C'est précisément le problème. Une application cassée renvoie une erreur 500 et quelqu'un s'en aperçoit dans l'heure. Une remise absente ressemble simplement à un client qui n'a pas utilisé son code promo.
Si votre boutique utilisait des Scripts et que personne n'a rapproché les montants de remise depuis le 1er juillet, partez du principe que vous expédiez des commandes mal tarifées depuis une semaine. Le rapprochement passe avant la reconstruction.
Les migrations que nous avons revues étaient rarement incomplètes par défaut d'ingénierie. Elles l'étaient par défaut d'inventaire. Trois causes reviennent.
Des scripts sans propriétaire. L'éditeur de Scripts permettait à toute personne disposant d'un accès Plus de publier du Ruby. Plusieurs boutiques auditées contenaient des scripts écrits par une agence qui n'intervenait plus depuis 2022. Rien dans le dépôt n'y faisait référence.
Une logique conditionnelle rarement déclenchée. Un script qui applique une remise uniquement aux clients grossistes au-delà d'un certain seuil peut se déclencher deux fois par mois. Il n'apparaîtra pas dans un contrôle rapide des commandes de la semaine, ni dans une recette sur boutique de développement si personne ne construit délibérément ce panier.
Des applications qui installaient des scripts pour vous. Certaines applications d'abonnement, de fidélité ou de bundles écrivaient des scripts de ligne lors de leur configuration. Si l'éditeur a migré vers Functions dans son propre cycle de publication, tout va bien. Si l'application a été désinstallée en laissant le script orphelin, ou si l'éditeur a discrètement abandonné le support, non.
Pour l'étape deux, une courte requête sur l'API GraphQL Admin fournit les données de rapprochement sans attendre la construction d'un rapport.
// Compare l'application des remises de part et d'autre de l'extinction des Scripts.
// À exécuter une fois pour le 16-29 juin, une fois pour le 1er-14 juillet, puis à comparer.
const query = `
query OrdersInWindow($cursor: String, $search: String!) {
orders(first: 250, after: $cursor, query: $search) {
pageInfo { hasNextPage endCursor }
edges {
node {
name
createdAt
totalDiscountsSet { shopMoney { amount } }
discountApplications(first: 10) {
edges { node { __typename allocationMethod targetType } }
}
}
}
}
}
`;
async function windowTotals(searchWindow) {
let cursor = null;
let orderCount = 0;
let discountTotal = 0;
do {
const res = await adminGraphql(query, { cursor, search: searchWindow });
const page = res.data.orders;
for (const edge of page.edges) {
orderCount += 1;
discountTotal += Number(edge.node.totalDiscountsSet.shopMoney.amount);
}
cursor = page.pageInfo.hasNextPage ? page.pageInfo.endCursor : null;
} while (cursor);
return {
orderCount,
discountTotal,
discountPerOrder: orderCount ? discountTotal / orderCount : 0
};
}Comparez discountPerOrder entre les deux fenêtres. La saisonnalité fait bouger ce chiffre de quelques pourcents. Un script disparu le fait bouger beaucoup plus, et à une date unique et précise.
La correspondance entre Scripts et Functions est presque univoque, et c'est la bonne nouvelle. Le travail se situe dans la sémantique, pas dans le périmètre.
Les différences qui piègent les équipes sont celles dont personne ne parle avant les tests. Les Functions compilent en WebAssembly et s'exécutent dans un budget de ressources strict : un script qui bouclait sur un gros panier et appelait un service externe n'a donc aucun équivalent direct. Toute donnée nécessaire à l'évaluation doit être présente dans la requête d'entrée, ce qui suppose généralement de déplacer les paliers clients, les prix contractuels ou les définitions de bundles vers des metafields ou des metaobjects avant que la Function puisse seulement fonctionner.
C'est cette étape de modélisation des données qui consomme l'essentiel des délais de reconstruction. Nous avons détaillé la structure sous-jacente dans notre guide développeur des metaobjects et metafields, et le séquencement global de la migration dans notre playbook Scripts vers Functions. Si vous hésitez encore sur ce qui relève d'une Function plutôt que d'une application ou du thème, cette analyse est la lecture la plus courte.
Scripts est la dernière dépréciation de ce cycle, mais ce ne sera pas la dernière tout court. Deux changements méritent d'être faits pendant que l'incident est encore frais.
Posez un garde-fou sur le rapprochement des remises. Une tâche quotidienne comparant la valeur de remise par commande à une moyenne glissante sur sept jours, avec alerte au-delà d'un seuil, aurait détecté le problème en vingt-quatre heures au lieu de deux semaines. Cela coûte un après-midi.
Ensuite, documentez ce que fait réellement votre checkout. Pas le code, le comportement : chaque règle qui modifie un prix, un tarif ou un moyen de paiement, qui l'a demandée, et où elle vit désormais. La plupart des boutiques que nous auditons sont incapables de produire ce document, ce qui explique précisément qu'une dépréciation annoncée quatorze mois à l'avance ait fini en surprise.
Nous réalisons des audits post extinction à périmètre fixe pour les marchands Plus : rapprochement des remises, comparaison des comportements de checkout et plan de reconstruction. Voir notre service de développement d'applications Shopify, ou contactez-nous.
Non. L'éditeur de Scripts a été retiré et le code Ruby n'est pas récupérable via l'API Admin. Sans export réalisé avant le 15 avril 2026, il faut reconstituer le comportement à partir de l'historique de commandes, des archives merchandising et de l'observation du checkout.
Elle n'a pas été repoussée et le moteur a déjà été retiré. Il n'existe aucun retour en arrière.
Les Functions s'exécutent sur l'infrastructure Shopify sans coût par exécution sur les plans éligibles. L'écart de coût porte sur le développement et la maintenance, pas sur le runtime.
Faites au minimum le rapprochement de l'étape deux. Les scripts rarement déclenchés, comme les paliers grossistes ou les bundles saisonniers, n'apparaîtront pas dans une semaine ordinaire mais vous coûteront dès la première fois que la condition sera remplie.
Une remise simple en pourcentage ou par palier prend généralement quelques jours, tests inclus. Une logique dépendant des segments clients ou des prix contractuels prend davantage, car le modèle de données doit exister avant que la Function puisse le lire.

Le 30 juin 2026 est un mur. L'édition des Scripts est déjà verrouillée. Si vos remises de checkout, règles de livraison ou logique de paiement tournent encore sur Scripts, voici le playbook de migration, les modes d'échec et ce que ça coûte.

L'échéance de migration hors checkout.liquid pour les pages de remerciement et de statut de commande est tombée le 26 août pour les boutiques non Plus. Si vos pixels de conversion, vos ventes additionnelles post-achat ou votre tracking d'affiliation y vivaient encore, ils se sont arrêtés.

Les Editions Summer '26 ont rendu Checkout Components généralement disponible sur Shopify Plus. Ce qui change sur le plan architectural, ce que l'adoption coûte réellement, et comment séquencer une migration sans mettre le pic saisonnier en danger.