workflo
05.2026 - Present
Rust PostgreSQL SQLx Tokio

Description du projet
workflo est un moteur de workflows pour Rust adossé à PostgreSQL. Son accroche : "Durable workflows on the Postgres you already run."
Chaque exécution est une machine à états persistée en base (pending, running, will_retry, completed, failed), avec ses transitions et son historique d'événements. Si un worker tombe au milieu d'un workflow, l'exécution reste en base et un autre worker la reprend une fois son verrou expiré. Pas de broker, pas de service à déployer : un PgPool suffit, et workflo::migrate(&pool) crée les tables.
Le code métier s'écrit en deux briques. Une Operation est une unité de travail au cycle de vie inspiré des sagas : execute, puis commit, ou rollback en cas d'échec. Un WorkflowResolver lit l'état stocké de l'exécution et renvoie le prochain lot d'opérations, les workflows prérequis à terminer avant de commencer, et les workflows à lancer une fois le workflow terminé.
Les opérations d'un lot s'exécutent en parallèle. Si l'une échoue, celles qui ont réussi sont annulées dans l'ordre inverse. Les erreurs sont classées : une erreur soft (rate limit, contention de verrou) relance sans consommer de tentative, une erreur standard compte dans le nombre maximum d'essais, une violation d'invariant fait échouer l'exécution tout de suite. Les relances suivent un backoff exponentiel avec jitter, plafonné à une heure.
Les workers prennent la prochaine exécution disponible avec FOR UPDATE SKIP LOCKED, ce qui permet d'en lancer plusieurs sur la même base sans qu'ils se marchent dessus. Concurrence et intervalle de polling sont configurables, et un arrêt propre reprogramme l'exécution en cours au lieu de la perdre.
Deux macros derive réduisent le code répétitif : OperationEnum génère le dispatch d'un enum d'opérations, OperationError classe les variantes d'erreur avec les attributs #[soft] et #[invariant]. Le backend de dates se choisit par feature flag (time par défaut, ou chrono).
workflo est open source sous licence MIT, MSRV Rust 1.75. Il est publié sur crates.io en deux crates : workflo et workflo-macros.
Technologies utilisées
Ce projet utilise les technologies suivantes : Rust, PostgreSQL, SQLx, Tokio.