
Shopify Functions : guide developpeur complet
Les Shopify Functions representent une avancee majeure dans la maniere dont les developpeurs peuvent personnaliser la logique metier d'une boutique Shopify. Contrairement aux themes ou aux Shopify App Extensions qui modifient l'interface visible, les Functions agissent directement sur le backend : elles permettent d'injecter du code personnalise dans les processus critiques de Shopify, comme le calcul des remises, la validation du panier ou la personnalisation des options de livraison et de paiement au checkout.
Qu'est-ce que Shopify Functions ? Le futur de la personnalisation backend
Definition : une Shopify Function est un code backend securise, compile en WebAssembly (Wasm), execute sur l'infrastructure de Shopify. Mecanisme : elle recoit une entree definie par une requete GraphQL, applique une logique metier, et retourne une sortie JSON -- le tout en moins de 5 ms, sans aucun serveur externe.
La configuration de chaque Function s'appuie sur les metafields (champs meta), qui permettent au marchand de parametrer le comportement de la fonction sans toucher au code. L'ensemble s'execute dans un environnement sandbox conforme a WASI (WebAssembly System Interface), ce qui signifie aucune possibilite d'appel reseau sortant ni d'acces au systeme de fichiers -- une garantie de securite totale.
Pour les developpeurs et les agences e-commerce, les Shopify Functions offrent un levier de differenciation puissant : elles permettent de creer des experiences d'achat sur mesure -- comme des remises complexes du type "Achetez 2 produits de la collection A, obtenez 1 produit de la collection B avec 50 % de reduction, reserve aux clients VIP tagges" -- nativement integrees a la plateforme.
Principaux avantages des Shopify Functions
- Performance : execution en moins de 5 ms, contre 300 a 800 ms de latence typique pour un serveur tiers. Chaque 100 ms de latence en moins au checkout peut augmenter le taux de conversion de maniere significative.
- Securite : sandbox WASI isole, sans acces reseau ni systeme de fichiers.
- Scalabilite native : l'infrastructure de Shopify gere les pics de trafic (Black Friday, ventes flash) sans aucune intervention.
- Reduction des couts operationnels : aucun serveur a heberger, monitorer ou maintenir.
- Experience unifiee : la personnalisation fonctionne sur le checkout en ligne, les Draft Orders et le Shopify POS.
- Distribution via le Shopify App Store : les boutiques sur n'importe quel plan peuvent beneficier des Functions via des applications publiques (les applications personnalisees restent reservees a Shopify Plus).
Au-dela de l'API : la nouvelle philosophie de personnalisation
Historiquement, personnaliser le comportement d'une boutique Shopify necessitait de passer par des webhooks et des serveurs externes. L'application recevait une notification, traitait la requete sur son propre serveur, puis renvoyait une reponse a Shopify. Ce modele traditionnel, bien que flexible, introduisait une latence non negligeable et une complexite operationnelle liee a la gestion d'infrastructure (hebergement, monitoring, scalabilite).
Les Shopify Functions changent radicalement ce paradigme. Au lieu d'un aller-retour reseau, votre code tourne directement dans l'environnement d'execution de Shopify. Shopify orchestre l'appel via des extension targets -- des points d'ancrage predetermines dans le parcours d'achat, comme purchase.discount.run ou purchase.payment-customization.run -- et execute votre logique en sandbox. Le resultat : une personnalisation qui s'integre de maniere transparente au flux natif.
Cette philosophie s'inscrit dans le mouvement plus large du Checkout Extensibility, ou Shopify ouvre progressivement son architecture aux developpeurs via des API standardisees (GraphQL), des composants d'interface (Shopify App Extensions) et desormais des fonctions backend. L'objectif est clair : permettre une personnalisation profonde tout en preservant la stabilite, la securite et la performance de la plateforme.
L'avenir s'annonce tout aussi prometteur. Comme annonce lors des Shopify Editions recentes, Shopify continue d'etendre les extension targets -- notamment pour les scenarios post-achat et la gestion avancee de l'objet client. L'integration progressive avec les capacites d'intelligence artificielle de la plateforme (Shopify Magic) laisse entrevoir des Functions capables de s'adapter dynamiquement au comportement de chaque acheteur.
Shopify Functions vs Shopify Scripts : le guide de migration strategique
Si vous travaillez sur l'ecosysteme Shopify depuis plusieurs annees, vous avez probablement utilise Shopify Scripts, l'ancien systeme de personnalisation reserve aux boutiques Shopify Plus. Les Scripts permettaient de modifier les prix, les options de livraison et les moyens de paiement via du code Ruby execute dans le moteur Liquid. Les Shopify Functions sont leur successeur direct, et Scripts est en cours de depreciation.
| Critere | Shopify Scripts | Shopify Functions |
|---|---|---|
| Langages | Ruby (environnement proprietaire) | Rust (recommande), JavaScript/TypeScript via Javy, tout langage compilable en Wasm |
| Portee | 3 types (line items, shipping, payment) | 10+ API : discounts, livraison, paiement, validation panier, routage commandes, bundles, fulfillment, retrait |
| Execution | En ligne uniquement | Checkout + Draft Orders + Shopify POS |
| Concurrence | 1 Script actif par type | Jusqu'a 25 fonctions simultanees, independantes |
| Accessibilite | Shopify Plus uniquement | Apps publiques (toutes boutiques) ; apps custom (Plus) |
| Limites | Non documentees | 10 Mo memoire, ~256 Ko binaire Wasm, aucun appel reseau sortant |
| Deploiement | Editeur integre dans l'admin | Shopify CLI + versioning + deploiement via app |
| Configuration | Code Ruby a modifier | Metafields + App Bridge UI (zero code pour le marchand) |
| Cas d'usage avances | Remises simples, masquage basique | Bundles dynamiques, validation complexe, routage fulfillment, prix B2B |
Pour les equipes qui dependent encore de Scripts, voici une approche de migration structuree :
- Audit des Scripts Ruby existants : inventoriez chaque Script actif, documentez sa logique metier et identifiez l'API Function correspondante (Discount API, Payment Customization API, etc.).
- Choix du langage : optez pour Rust si la performance est critique (paniers volumineux, logiques complexes) ou pour JavaScript/TypeScript (compile via Javy) si la rapidite de developpement prime.
- Developpement et tests : utilisez le Shopify CLI pour scaffolder le projet, ecrire la logique, puis tester en local avec des donnees simulees.
- Deploiement progressif : publiez l'application via le Partner Dashboard et utilisez les metafields pour activer la Function sur un sous-ensemble de clients ou de marches. Validez les resultats en production avant de generaliser.
- Desactivation des Scripts : une fois la parite fonctionnelle confirmee, desactivez les anciens Scripts Ruby.
Quand les Functions ne sont pas la solution
Les Shopify Functions ne couvrent pas tous les cas d'usage :
- Appels reseau vers un ERP, PIM ou service tiers : les Functions ne peuvent pas effectuer d'appels HTTP sortants. Utilisez plutot un webhook couple a un serveur externe.
- Taches asynchrones longues : le traitement post-achat complexe necessitant plus de 5 ms depasse les limites d'execution. Privilegiez une architecture basee sur des jobs asynchrones.
- Etat persistant complexe : les Functions sont stateless. Si votre logique necessite de maintenir un etat entre les executions, combinez les Functions avec les metafields ou un service de base de donnees externe.
Comment fonctionnent les Shopify Functions ? L'architecture expliquee
Comprendre l'architecture interne des Shopify Functions est essentiel pour les utiliser efficacement. Derriere la simplicite apparente se cache un pipeline d'execution optimise qui combine GraphQL, WebAssembly et un systeme d'extension targets pour garantir performance et securite.
Le coeur du systeme : Input, logique Wasm et Output
Chaque Shopify Function suit un schema d'execution en trois etapes :
-
Input (entree) : vous definissez une requete GraphQL dans un fichier
input.graphqlqui specifie exactement les donnees dont votre fonction a besoin -- produits du panier, tags client, metafields, montants. Shopify execute cette requete et transmet le resultat sous forme d'objet JSON a votre fonction. Cette approche declarative garantit que seules les donnees necessaires sont transmises, minimisant la charge memoire. -
Logique (traitement) : votre code metier -- compile en un module WebAssembly -- recoit cet objet JSON, applique les regles de calcul ou de validation, puis genere un resultat. Le code peut etre ecrit en Rust (recommande par Shopify pour les performances optimales sur les paniers volumineux), en JavaScript/TypeScript (compile via l'outil Javy de Shopify), ou dans tout langage supportant la compilation vers Wasm.
-
Output (sortie) : la fonction retourne un objet JSON conforme au schema de sortie defini par l'API ciblee. Par exemple, une Discount Function retourne les operations de remise a appliquer ; une Payment Customization Function retourne les operations de masquage ou de reordonnancement des moyens de paiement. Shopify applique ces instructions instantanement dans le parcours d'achat.
L'avantage WebAssembly : performance, securite et portabilite
Le choix de WebAssembly (Wasm) comme format d'execution n'est pas anodin. Wasm est un format binaire bas niveau, concu pour une execution quasi native dans un environnement sandbox. Voici pourquoi Shopify l'a adopte :
- Vitesse d'execution : le code est pre-compile en binaire compact. Il n'y a pas d'interpretation ni de compilation a la volee (JIT), ce qui garantit des temps d'execution inferieurs a 5 ms -- un ordre de grandeur plus rapide qu'un appel API externe typique (300-800 ms).
- Isolation totale : conforme a la specification WASI, chaque Function s'execute dans un sandbox hermetique. Aucun acces reseau sortant, aucun acces au systeme de fichiers, aucune interaction avec d'autres fonctions.
- Portabilite : le format Wasm est independant du langage source. Que votre equipe code en Rust, JavaScript, C++ ou tout autre langage compilable, le binaire resultant s'execute de maniere identique sur l'infrastructure de Shopify.
- Taille optimisee : les binaires Wasm des Functions sont limites a environ 256 Ko. Des partenaires comme Discount Kit ont reduit la taille de leurs fonctions de 40 % en optimisant leur code, ce qui se traduit directement par des checkouts plus rapides.
Le role des extension targets dans le parcours d'achat Shopify
Les extension targets sont les points d'ancrage ou Shopify autorise l'execution de votre code personnalise. Chaque target correspond a un moment precis du parcours d'achat et a une API specifique.
| Extension target | Code | Cas d'usage principal |
|---|---|---|
| Discount | purchase.discount.run | Promotions complexes (paliers, conditions multiples, achats groupes) |
| Delivery Customization | purchase.delivery-customization.run | Masquer, renommer ou reordonner les options de livraison |
| Payment Customization | purchase.payment-customization.run | Masquer ou reordonner les passerelles de paiement |
| Cart Validation | purchase.validation.run | Valider le contenu du panier (limites, restrictions) |
| Cart Transform | purchase.cart-transform.run | Fusionner des articles en bundles, modifier les prix |
| Fulfillment Constraints | purchase.fulfillment-constraint.run | Regles de routage logistique (allocation par entrepot) |
| Order Routing (preview) | purchase.order-routing-location-rule.run | Classement personnalise des emplacements de fulfillment |
Chaque target definit les inputs disponibles (quelles donnees vous pouvez demander via GraphQL) et le format d'output attendu. Maitriser cette cartographie est la premiere etape pour concevoir des Functions efficaces.
Votre workflow de developpement de A a Z
Passer de l'idee au deploiement d'une Shopify Function suit un processus structure, outille par le Shopify CLI et le Partner Dashboard.
Prerequis : Shopify CLI, compte Partenaire et dev store
Avant de coder votre premiere Function, assurez-vous de disposer de ces elements :
- Node.js (version 18+) et npm ou pnpm installes sur votre machine.
- Le Shopify CLI installe globalement (
npm install -g @shopify/cli). - Un compte Shopify Partner actif, avec acces au Partner Dashboard.
- Une dev store de test associee a votre compte Partenaire, avec le Checkout Extensibility active.
Creer votre premiere Function : structure de fichiers demystifiee
La creation d'une Function commence par une commande CLI qui genere un projet complet :
shopify app generate extension --template discount_function --language rustCette commande cree un repertoire avec la structure suivante :
input.graphql: la requete GraphQL qui definit les donnees d'entree.src/main.rs(Rust) ousrc/index.js(JavaScript) : le fichier principal contenant votre logique metier.shopify.extension.toml: le fichier de configuration qui declare l'extension target, la version de l'API et les metadonnees de la Function.
Voici un exemple minimaliste de fichier input.graphql pour une fonction de remise :
query Input {
cart {
lines {
quantity
merchandise {
... on ProductVariant {
id
product {
hasTags(tags: ["VIP-DISCOUNT"]) {
hasTag: value
}
}
}
}
}
}
discountNode {
metafield(namespace: "discount-config", key: "percentage") {
value
}
}
}Le fichier input.graphql agit comme un contrat entre votre code et Shopify. En ne demandant que les donnees strictement necessaires, vous reduisez l'empreinte memoire et accelerez l'execution.
L'integration indispensable avec les Shopify App Extensions
Une Shopify Function ne fonctionne jamais seule. Elle fait partie d'une application Shopify plus large qui peut egalement inclure des Shopify App Extensions pour l'interface utilisateur :
- La Function gere la logique backend (calcul de remise, validation, personnalisation).
- L'App Extension (via App Bridge et l'admin Shopify) fournit l'interface de configuration qui permet au marchand de creer et gerer les instances de la Function sans ecrire une ligne de code.
Par exemple, pour une Function de remise personnalisee, l'App Extension affiche un formulaire dans l'admin Shopify ou le marchand peut definir les conditions de la promotion (pourcentage, collection ciblee, tag client requis). Ces parametres sont stockes dans les metafields et transmis a la Function lors de chaque execution.
Deploiement, versioning et configuration par le marchand
Une fois votre Function testee en local, le deploiement suit ce processus :
- Build : le Shopify CLI compile votre code en un module WebAssembly optimise.
- Deploy : la commande
shopify app deploypousse le binaire Wasm et la configuration vers Shopify. - Publication : via le Partner Dashboard, vous publiez une nouvelle version de votre application.
- Activation : le marchand installe l'application, puis cree une instance de la Function dans son admin (par exemple, un nouveau type de remise). La configuration se fait via l'interface App Bridge, sans code.
Shopify gere le versioning de vos Functions : chaque deploiement cree une nouvelle version, et le marchand peut a tout moment revenir a une version anterieure en cas de probleme.
Catalogue complet des API Shopify Functions
Shopify propose actuellement plus de 10 API Functions couvrant l'ensemble du parcours d'achat. Voici un panorama structure des principales API et leurs applications concretes.
API de promotions et reductions (Discounts)
La Discount Function API (unifiee depuis avril 2025, remplacant les trois anciennes API separees Order Discount, Product Discount et Shipping Discount) permet de creer des types de remise entierement personnalises.
Cas d'usage concrets :
- Remises par paliers de quantite : 10 % a partir de 100 EUR, 15 % a partir de 200 EUR, 20 % a partir de 300 EUR -- sans code promo.
- Promotions conditionnelles par marche : "2 pour 22 EUR" au Canada, "2 pour 20 USD" aux Etats-Unis, sans dependance au taux de change.
- Remises reservees aux membres VIP : 5 % supplementaires automatiquement appliques aux clients tagges "VIP".
- Remises sur les frais de livraison : 25 % de reduction sur l'option express pendant la periode des fetes.
API de personnalisation de la livraison (Delivery Customization)
La Delivery Customization API permet de trier, renommer, masquer ou reordonner les options de livraison affichees au checkout.
Cas d'usage concrets :
- Masquer les options de livraison internationale pour les paniers contenant des articles volumineux ou fragiles.
- Renommer les options de livraison pour ajouter des informations contextuelles ("Livraison express -- recevez avant Noel").
- Reordonner les options selon les preferences du client ou la localisation geographique.
API de personnalisation des paiements (Payment Customization)
La Payment Customization API controle l'affichage et l'ordre des passerelles de paiement au checkout.
Cas d'usage concrets :
- Masquer l'option "Paiement a la livraison" pour les nouveaux clients sans historique d'achat.
- Placer la passerelle de paiement la moins couteuse en frais de transaction en premiere position.
- Afficher des options de paiement specifiques selon le pays ou le montant du panier.
API de validation et transformation du panier
Deux API complementaires gerent la validation et la transformation du panier :
- La Cart and Checkout Validation API permet de bloquer la finalisation de la commande si certaines conditions ne sont pas remplies (limite de quantite par produit, restriction d'age, obligation de connexion). Elle couvre egalement les options de paiement express (Apple Pay, Google Pay).
- La Cart Transform API permet de fusionner des articles en bundles dynamiques, de modifier les prix affiches, les titres ou meme les images des lignes du panier. C'est l'outil cle pour creer des offres groupees sophistiquees.
API de logistique et routage des commandes
Plusieurs API gerent la logistique post-panier :
- Fulfillment Constraints Function API (GA) : definit des regles d'allocation des commandes par entrepot (geofencing, limitation du split shipping).
- Local Pickup Delivery Option Generator API (GA, Shopify Plus) : genere des options de retrait en magasin personnalisees avec tarification conditionnelle.
- Pickup Point Delivery Option Generator API (early access, Plus) : genere des options de retrait en points relais tiers (bureaux de poste, commerces partenaires).
- Order Routing Location Rule API (developer preview) : classe les emplacements de fulfillment selon une logique personnalisee (proximite, stock disponible, priorite de liquidation).
- Discounts Allocator API (developer preview) : controle la logique d'allocation des remises (plafond de remise, empilement sur une meme ligne, application au produit le moins cher).
Tester et debugger vos Shopify Functions
Le testing est une etape critique souvent negligee. Une Function defaillante peut bloquer le checkout de vos clients -- la fiabilite est non negociable.
Tests unitaires et d'integration en local
Le Shopify CLI permet de tester vos Functions en local avant tout deploiement :
- Tests unitaires : ecrivez des tests qui alimentent votre Function avec des objets JSON d'entree simules et verifiez que la sortie correspond aux attentes. En Rust, utilisez le framework de test natif (
#[test]). En JavaScript, utilisez Jest ou Vitest. - Commande
shopify app function run: permet d'executer la Function en local avec un fichier JSON d'input fourni manuellement, simulant le comportement en production. - Tests d'integration : testez la Function dans le contexte complet de l'application en utilisant
shopify app devavec votre dev store. Verifiez que l'interface de configuration (App Extension) et la logique backend (Function) fonctionnent de concert.
Voici un exemple de test unitaire en Rust pour une fonction de remise :
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_discount_applied_for_vip() {
let input = serde_json::from_str::<Input>(
include_str!("./fixtures/vip_cart.json")
).unwrap();
let result = function(input);
assert!(result.discount_application_strategy.is_some());
assert_eq!(result.discounts.len(), 1);
}
#[test]
fn test_no_discount_for_regular_customer() {
let input = serde_json::from_str::<Input>(
include_str!("./fixtures/regular_cart.json")
).unwrap();
let result = function(input);
assert!(result.discounts.is_empty());
}
}Strategies de logging et monitoring en production
Une fois deployee, le monitoring passe par le Partner Dashboard :
- La page dediee aux Functions affiche les metriques d'execution : nombre d'invocations, temps d'execution moyen, erreurs et timeouts.
- Les logs d'execution permettent d'identifier les cas limites (paniers avec un grand nombre d'articles, configurations de metafields inattendues).
- En cas d'erreur, Shopify retourne un message dans les logs de la Function. Adoptez une strategie de logging structuree dans votre code (output vers stderr) pour faciliter le diagnostic.
Bonne pratique : mettez en place des alertes sur le taux d'erreur et le temps d'execution moyen. Une degradation progressive peut indiquer un probleme de performance lie a la croissance du catalogue ou a la complexite des paniers.
Comprendre et respecter les limites techniques
Les Shopify Functions operent dans un environnement contraint pour garantir la performance globale de la plateforme. Connaitre ces limites est indispensable pour eviter les echecs en production.
Limites d'execution, de memoire et de taille de paquet
| Contrainte | Valeur de la limite |
|---|---|
| Temps d'execution | Objectif < 5 ms (limite stricte plus elevee, mais au-dela Shopify peut throttle) |
| Memoire | 10 Mo maximum par execution |
| Taille du binaire Wasm | Environ 256 Ko maximum |
| Instructions Wasm | Limite sur le nombre total d'instructions executees par invocation |
| Appels reseau | Aucun -- pas d'HTTP sortant, pas de fetch, pas de websocket |
| Acces fichier | Aucun -- sandbox WASI strict |
| Functions par boutique | 25 fonctions maximum actives simultanement |
| Etat | Stateless -- aucune persistance entre les executions |
Bonnes pratiques pour optimiser votre code Wasm
- Minimisez l'input GraphQL : ne demandez que les champs strictement necessaires. Chaque champ supplementaire augmente la taille du JSON d'entree et le temps de parsing.
- Privilegiez Rust pour les paniers volumineux : JavaScript compile via Javy produit des binaires plus lourds et plus lents. Pour des boutiques avec des paniers de 50+ articles ou des logiques complexes, Rust est le choix recommande par Shopify.
- Evitez les allocations memoire inutiles : en Rust, utilisez des references plutot que des copies. En JavaScript, evitez de creer de grands objets intermediaires.
- Testez avec des paniers realistes : simulez les cas les plus exigeants (panier maximum, toutes les conditions actives) pour verifier que votre Function reste dans les limites.
- Optimisez la taille du binaire : en Rust, activez les optimisations de compilation (
opt-level = 'z',lto = true,strip = true). L'experience de Discount Kit montre qu'une reduction de 40 % de la taille du binaire est atteignable avec ces techniques.
Cas d'usage avances et architectures modernes
Combiner Functions et metafields pour des experiences ultra-personnalisees
Les metafields sont le mecanisme de configuration privilegie des Shopify Functions. En definissant des metafields sur les produits, les clients ou la boutique, vous pouvez creer des Functions dont le comportement s'adapte dynamiquement :
- Prix B2B : un metafield sur le client indique son niveau de tarification. La Function de remise applique automatiquement le bon pourcentage de reduction selon le segment.
- Restrictions geographiques : un metafield sur le produit indique les zones de livraison autorisees. La Function de validation bloque la commande si l'adresse de livraison ne correspond pas.
- Promotions saisonnieres : un metafield sur la boutique definit les dates de debut et de fin de la promotion. La Function verifie les dates a chaque execution, sans redeploiement du code.
Integrer Shopify Functions dans une architecture headless
Les Shopify Functions sont parfaitement compatibles avec les architectures headless utilisant Next.js, Shopify Hydrogen ou tout autre framework front-end connecte au Storefront API. Dans une architecture headless :
- Le front-end (Next.js, Hydrogen) gere l'affichage et l'experience utilisateur.
- Le Storefront API (GraphQL) gere les interactions avec le panier et le checkout.
- Les Shopify Functions s'executent automatiquement cote backend lors du calcul du checkout -- que le front-end soit un theme Liquid classique ou une application headless.
L'avantage majeur : vos regles metier personnalisees (remises, validation, personnalisation) fonctionnent de maniere identique quel que soit le canal de vente. Une Function deployee une fois s'applique au checkout en ligne, au POS, aux Draft Orders et a toute application headless connectee via le Storefront API.
Pour les agences qui deploient des architectures headless sur Shopify, les Functions eliminent le besoin de reimplementer la logique metier cote front-end. La personnalisation reste centralisee sur la plateforme, ce qui simplifie la maintenance et garantit la coherence entre les canaux.
FAQ : questions frequentes sur Shopify Functions
Quelle est la difference entre Shopify Functions et les anciens Shopify Scripts ?
Les Shopify Scripts sont un systeme de personnalisation legacy, base sur Ruby, reserve a Shopify Plus et en cours de depreciation. Les Shopify Functions sont leur successeur : elles supportent Rust et JavaScript, couvrent 10+ API (contre 3 pour Scripts), fonctionnent sur tous les canaux (checkout, POS, Draft Orders) et permettent 25 fonctions actives simultanement. La migration est strategiquement incontournable avant la fin de support des Scripts.
Comment tester et debugger une Shopify Function avant de la deployer ?
Utilisez la commande shopify app function run du Shopify CLI pour executer votre Function en local avec un fichier JSON d'input simule. Ecrivez des tests unitaires (framework de test natif en Rust, Jest ou Vitest en JavaScript) et des tests d'integration via shopify app dev avec une dev store. En production, surveillez les metriques dans le Partner Dashboard.
Quelles sont les limites de performance d'une Shopify Function ?
Les principales limites sont : 10 Mo de memoire par execution, environ 256 Ko pour le binaire Wasm compile, un objectif de temps d'execution inferieur a 5 ms, et aucun appel reseau sortant. Une boutique peut executer jusqu'a 25 fonctions simultanement. Les Functions sont stateless : aucun etat n'est conserve entre les executions.
Peut-on utiliser les Shopify Functions avec une boutique headless ?
Oui. Les Shopify Functions s'executent cote backend, independamment du front-end. Que vous utilisiez Next.js, Shopify Hydrogen ou tout autre framework headless connecte au Storefront API, les Functions s'appliquent automatiquement lors du calcul du checkout. Vos regles metier personnalisees fonctionnent de maniere identique sur tous les canaux de vente.