veilletech.fr
14 nov. Feed du jour
#07 VERCEL Article

Workflow SDK 5 : chiffré de bout en bout, par région

Le journal d'événements n'a plus à voir vos données en clair.

Vercel publie Workflow SDK 5 : chiffrement AES-256-GCM de bout en bout avec une clé par exécution, état de chaque exécution hébergé dans sa région d'origine, et un moteur réécrit qui ramène le délai entre deux étapes de 618 à 109 ms sur le banc de Vercel. Aucune rupture majeure n'est annoncée pour migrer depuis la version 4.

4 min de lectureavancévidéo 1:19
Partager
Sommaire7 sections
  1. Ce qui se passe
  2. Chiffrement
  3. Régions
  4. Vitesse
  5. Limites
  6. Comment s'y prendre
  7. À retenir

Ce qui se passe

Workflow SDK permet d'écrire du JavaScript asynchrone ordinaire, avec "use workflow" et "use step", qu'un moteur durable fait survivre aux plantages, aux déploiements et aux longues attentes (un sleep("3d"), par exemple). La version 5 sort après plus de 4 milliards d'étapes et 700 millions d'exécutions, qui ont fait émerger deux usages : l'automatisation (ETL, commandes, abonnements) et les agents, longs et coûteux, donc durables par nature. Vercel annonce des changements sur la sécurité, la fiabilité et la vitesse, sans rupture majeure.

Chiffrement

Le journal d'événements stocke les arguments et les retours de chaque étape pour reprendre après un incident. Cela peut contenir des données de clients, du contexte de modèle, des identifiants. La version 5 chiffre chaque charge utile de bout en bout, avant qu'elle quitte votre code : entrées et sorties des workflows et des étapes, charges des hooks, flux. L'algorithme est AES-256-GCM, avec une clé propre à chaque exécution ; le backend, Vercel compris, ne voit que du chiffré.

Les écritures entre exécutions (reprendre le hook d'une autre exécution, démarrer une exécution dans un autre déploiement, écrire dans un flux d'une autre) sont chiffrées pour la clé publique de la cible. Avec experimental_retention: 0, entrées, sorties et contenus de flux sont supprimés dès la fin ou l'échec d'une exécution ; les métadonnées restent. Les attributs d'exécution, nouveaux, sont en clair : n'y mettez aucun secret.

Régions

En version 4, toute exécution vivait en iad1 (Washington), même pour un projet déployé dans plusieurs régions : une étape ailleurs faisait des requêtes inter-régions pour noter sa progression. En version 5, chaque exécution a une région d'origine : état, file et flux y sont servis, par défaut celle de la fonction qui la démarre. Pour la choisir :

TypeScript
// Garder les données de ce client à Francfort
const run = await start(processOrder, [order], { region: "fra1" });

L'option region décide où vivent les données ; les étapes tournent là où l'application est déployée, il faut donc y déployer aussi. Les exécutions de la version 4 restent en iad1. Avec le basculement de fonctions de Vercel, les étapes peuvent tourner dans une région de repli, mais l'état reste dans sa région d'origine.

Vitesse

Le moteur est réécrit : une invocation peut enchaîner plusieurs étapes en ligne, y compris en parallèle, avant de rendre la main, et la relecture est incrémentale. Banc de Vercel (v4.8.12 contre v5.2.0, 8 octobre 2026, production iad1, 1 Ko de JSON par étape) :

Mesure v4.8.12 v5.2.0
Première étape, p75 418 ms 172 ms
Entre deux étapes, p75 618 ms 109 ms
Surcoût en fin de course, p75 1 748 ms 70 ms
1 020 étapes, médiane 21,0 min 3,0 min
Livraison d'un flux, médiane 226,1 s 53,5 s

Les flux passent par WebSocket sur le World de Vercel, et la compression réduit d'environ 80 % les jetons de modèle diffusés.

Limites

Ce sont des mesures du fournisseur, sur une charge, dans une région : Vercel les présente comme une vue du surcoût du moteur, non comme une prévision pour toute application. Le chiffrement géré par Vercel garde les clés côté plateforme ; l'auto-hébergement exige de gérer les siennes.

Comment s'y prendre

  1. Lire la page « what's new » de la version 5, puis pnpm add workflow@latest sur un projet de test.
  2. Décider de la région des données sensibles, avec { region }.
  3. Poser experimental_retention: 0 si vous n'avez pas à conserver les charges après exécution.

Source : Vercel, en anglais.