Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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, knip en place)
  • En cas de croissance de l’équipe, les conflits de merge peuvent augmenter sur les fichiers partagés