ADR-001 - Architecture monorepo avec Turborepo et Bun workspaces
- Statut : Accepté
- Date : 2026-04-05
Contexte
Le projet Cerops comprend plusieurs applications (web-agri, web-pilots, server) et packages partagés (api, auth, db, env, config).
Ces composants sont fortement couplés : un changement de schéma de base de données impacte simultanément le backend et les deux frontends.
Il est donc nécessaire de choisir une stratégie d’organisation du code source qui minimise la friction entre équipes et garantit la cohérence des types partagés.
Décision
Nous organisons le projet sous forme de monorepo géré avec Turborepo et Bun workspaces.
Alternatives considérées
- Polyrepo : un dépôt Git par application/package — versioning indépendant mais synchronisation complexe entre dépôts, gestion fastidieuse des versions des packages partagés
- Monorepo sans outil de build : organisation simple mais pas de cache ni de pipeline de build optimisé
- Nx : alternative à Turborepo, plus complet mais plus complexe à configurer pour une petite équipe
Conséquences
- Partage de code facilité entre les packages (
api,auth,db) et les applications - Refactoring atomique : un seul commit peut modifier frontend, backend et packages partagés
- Cache de build et exécution parallèle des tâches via Turborepo
- Configuration unifiée (TypeScript, Biome, tests) à la racine du dépôt
- Catalog Bun workspaces pour centraliser les versions des dépendances et éviter les dérives
- Dépôt potentiellement plus lourd à cloner pour un contributeur ne travaillant que sur une partie
- Nécessite une bonne discipline de gestion des dépendances (outils
sherif,knipen place) - En cas de croissance de l’équipe, les conflits de merge peuvent augmenter sur les fichiers partagés