WorkflowKit :
legacy(défaut) — le moteur en mémoire que vous construisez aveccreateWorkflow/WorkflowBuilder. Zéro dépendance supplémentaire, s’exécute en mémoire, l’état vit en mémoire.world— le Vercel Workflow SDK adossé à un world durable : Postgres auto-hébergé (@workflow/world-postgres) ou MongoDB (@workflow-worlds/mongodb). Les runs survivent aux redémarrages (replay durable, file de jobs, journal d’événements).
WorkflowKit vous permet de choisir le moteur via la configuration ; le défaut est toujours legacy, donc le code existant continue de fonctionner et les utilisateurs du mode legacy n’importent jamais une dépendance Vercel.
Quand utiliser lequel
Utilisez
legacy pour l’orchestration rapide en process et le développement local ; utilisez world quand vous avez besoin de durabilité, de suspension (sleep) et de processus longs reprennables.
La façade WorkflowKit
engine: "world" et en fournissant une config world :
kit.start()/kit.stop()gèrent le worker world long-lived. Ce sont des no-ops surlegacy, donc le même code de cycle de vie fonctionne pour les deux moteurs.kit.run(...)dispatche vers le moteur configuré. Vous pouvez surcharger par appel :kit.run(wf, input, { engine: "world" }).
Configuration
engine: "world" sans world lève une erreur, et un world.type inconnu lève également une erreur.
Consultez la référence API WorkflowKit pour la surface complète.
Récupérer le résultat d’un run
Un run world est durable et découplé :kit.run(fn, args) retourne un WorldRunHandle (pass-through du Run SDK), pas la sortie directement. Pour le consommer de manière synchrone — comme le legacy await workflow.run() puis .result — utilisez kit.runAndWait :
returnValue (interroge jusqu’à la fin du run) :
returnValue rejette en cas d’échec (WorkflowRunFailedError) ou d’annulation (WorkflowRunCancelledError), en transportant l’erreur d’origine — encapsulez-le dans un try/catch là où le code legacy inspectait result.status. Pour une consommation différée, stockez runId et reconstituez le handle plus tard avec getRun(runId) depuis workflow/api.
runAndWait fonctionne pour les deux moteurs (legacy retourne la sortie du workflow ; world attend returnValue) et lève une erreur pour tout résultat non réussi — un remplacement drop-in propre pour les workflows consommés de manière synchrone en cours de migration.Installer le moteur world
Le moteur world vit dans un package optionnel afin que le core reste léger :engine: "world" sans @ai_kit/workflow-world installé, WorkflowKit lève une erreur claire vous demandant de l’installer.
Écrire des workflows world
Un workflow world est une simple fonction async marquée avec la directive"use workflow" ; le vrai travail se passe dans des fonctions "use step". Ces directives sont détectées à la compilation par le compilateur workflow/nitro.
Il n’existe pas de helper runtime
defineWorldStep. Le compilateur Vercel n’instrumente les directives que sur des liaisons de niveau supérieur (une fonction nommée, ou une flèche/fonction liée directement à un const). Passer la fonction à un appel wrapper casserait silencieusement la détection — l’étape s’exécuterait comme du code ordinaire non durable. Écrivez donc la directive vous-même et annotez (optionnellement) avec les types exportés.@ai_kit/workflow-world exporte les types WorldStep / WorldWorkflow pour l’ergonomie :
Le flux de contrôle est du JavaScript natif
Parce qu’un workflow world est simplement une fonction async, vous n’avez pas besoin de primitives spéciales — utilisez le langage :
Le corps
"use workflow" doit rester déterministe (pas de Date.now(), Math.random(), fetch, I/O directe) — mettez ces effets dans des fonctions "use step".
Postgres : provisionner le schéma une fois
Avant le premier run, le world Postgres a besoin que son schéma soit créé (sinon vous obtenez une erreurundefined_table / 42P01). C’est une opération unique au déploiement :
MongoDB (expérimental)
Le world MongoDB est maintenu par la communauté. Seule la configuration change ; le code applicatif est identique à Postgres :Contraintes de build & de runtime
Le Vercel Workflow SDK impose :- Une étape de build — Nitro compile les fonctions
"use workflow"/"use step". Ajoutez le moduleworkflow/nitroaunitro.config.tsde votre application hôte. AI Kit simplifie la configuration runtime mais ne peut pas supprimer cette étape de build. - Un worker long-lived — le world interroge la base de données pour les jobs, donc le moteur world n’est pas compatible avec les déploiements purement serverless.
Migrer un workflow legacy vers le moteur world
La migration est une réécriture du builder déclaratif vers une fonction impérative — il n’existe pas de traducteur automatique. Avant (legacy) :Couverture fonctionnelle
Parce que le moteurworld embarque le vrai SDK Vercel, il hérite de toutes ses capacités : exécution durable, sleep, webhooks/hooks (human-in-the-loop), streaming, agents durables, nouvelles tentatives automatiques, et le tableau de bord d’observabilité npx workflow web. Les API runtime avancées s’utilisent directement depuis le package workflow — la fine façade WorkflowKit gère uniquement la sélection du moteur, le cycle de vie et le dispatch des runs.