React versioning : tout savoir sur la gestion des versions

Dans cet article

  • React suit le Semantic Versioning (SemVer) avec un format MAJOR.MINOR.PATCH depuis sa version 15
  • La version stable actuelle est React 19, sortie fin 2024 avec les Server Components et Actions intégrés
  • Les versions majeures de React bénéficient d’un support d’environ 18 à 24 mois avant d’être considérées comme legacy
  • La migration entre versions majeures nécessite de suivre les codemods officiels et les guides de migration fournis par l’équipe React
  • Le versionning de votre propre application React peut être automatisé avec npm version ou des outils comme standard-version
  • React 18 reste une option LTS de fait pour les projets qui ne peuvent pas migrer immédiatement vers React 19

Après plus de dix ans à travailler sur des projets web, j’ai vu React évoluer d’une simple librairie de rendu vers un écosystème complet. Et à chaque nouvelle version majeure, la même question revient dans les équipes : faut-il migrer maintenant, attendre, et comment gérer le react versioning sans casser la production ?

Je vous partage ici tout ce que j’ai appris sur la gestion des versions de React : comment le système fonctionne, quelles versions sont encore supportées, et surtout comment organiser concrètement le versioning de vos projets.

Comprendre le Semantic Versioning appliqué à React

React utilise le Semantic Versioning (SemVer) depuis la version 15. Ce standard, adopté par la quasi-totalité de l’écosystème npm, structure chaque numéro de version en trois segments : MAJOR.MINOR.PATCH.

Concrètement, voici ce que chaque segment signifie pour React :

  • MAJOR (ex : 17 → 18 → 19) : introduit des changements incompatibles avec la version précédente (breaking changes). Certaines API sont supprimées ou modifiées en profondeur.
  • MINOR (ex : 18.2 → 18.3) : ajoute de nouvelles fonctionnalités tout en restant rétrocompatible. Votre code existant continue de fonctionner.
  • PATCH (ex : 18.2.0 → 18.2.1) : corrige des bugs sans ajouter de fonctionnalité. Ce sont les mises à jour les plus sûres à appliquer.

L’équipe React, comme l’explique la documentation officielle sur la politique de versioning, s’engage à limiter les breaking changes aux versions majeures. Les versions mineures et patches ne doivent jamais casser votre code existant. C’est un contrat de confiance essentiel pour les équipes qui gèrent des projets en production.

En pratique, j’ai constaté que React respecte cette politique de manière exemplaire. Les rares exceptions concernent des corrections de sécurité critiques qui peuvent, dans de très rares cas, modifier un comportement même dans un patch. Mais l’équipe core communique toujours clairement sur ces situations.

Terminal affichant les commandes npm pour vérifier les versions des dépendances React
Terminal affichant les commandes npm pour vérifier les versions des dépendances React

Historique des versions majeures de React

Pour bien comprendre le react versioning, un retour sur l’historique des versions majeures est indispensable. Chaque version a marqué un tournant dans la façon dont on développe des interfaces utilisateur. Si vous travaillez avec React plutôt qu’Angular, vous savez que l’écosystème évolue vite.

  • React 0.x (2013-2015) : les débuts chez Facebook. L’API change fréquemment, le SemVer n’est pas encore respecté. À ne surtout plus utiliser.
  • React 15 (avril 2016) : première version à suivre officiellement le SemVer. Introduction d’un meilleur support SVG et refonte du système d’erreurs.
  • React 16 (septembre 2017) : réécriture complète du moteur de rendu avec Fiber. Arrivée des Portals, Error Boundaries, et du rendu côté serveur amélioré. Un changement architectural majeur.
  • React 17 (octobre 2020) : version de transition volontaire. Aucune nouvelle fonctionnalité côté développeur, mais un nouveau système d’attachement d’événements qui permet la coexistence de plusieurs versions de React sur la même page.
  • React 18 (mars 2022) : arrivée du Concurrent Rendering, du batching automatique, de Suspense pour le data fetching, et des transitions. Un changement de paradigme pour les performances.
  • React 19 (décembre 2024) : intégration native des Server Components, des Actions, et de nouveaux hooks comme useActionState et useOptimistic. La version la plus ambitieuse depuis React 16.

Vous remarquerez qu’il n’y a jamais eu de React 20 à ce jour. L’équipe React prend le temps nécessaire entre chaque version majeure, parfois plus de deux ans, pour s’assurer que les changements sont mûrs et bien testés.

React 19 : ce que la version stable apporte

La question revient souvent : React 19 est-il stable ? Oui, React 19 est officiellement stable depuis décembre 2024. La version 19.1 a suivi avec des correctifs, et la branche continue de recevoir des patches réguliers. Pour ceux qui se demandent si React 19.2 est stable : au moment où j’écris, vérifiez le registre officiel des versions React pour connaître le dernier patch en date.

Voici les nouveautés principales de React 19 que je trouve les plus impactantes en production :

  • Server Components : le rendu côté serveur devient natif dans React, sans framework tiers obligatoire. Les composants serveur ne sont jamais envoyés au navigateur, ce qui réduit considérablement la taille du bundle.
  • Actions et useActionState : la gestion des formulaires et mutations de données est simplifiée avec un pattern intégré pour gérer les états de chargement, d’erreur et de succès.
  • useOptimistic : un hook dédié pour les mises à jour optimistes de l’interface, rendant les interactions utilisateur plus fluides.
  • use() : cette nouvelle API permet de lire des ressources (promesses, contextes) directement dans le rendu, simplifiant le code asynchrone.
  • Ref comme prop : plus besoin de forwardRef dans la plupart des cas, les refs se passent désormais comme des props classiques.

En tant que développeur qui travaille aussi beaucoup avec PHP et Symfony, je trouve que les Server Components rapprochent React d’une philosophie plus traditionnelle du web, où le serveur gère la logique métier. C’est un retour aux sources bienvenu.

Comment vérifier et changer sa version de React

Première étape avant toute opération de versioning : savoir quelle version de React tourne dans votre projet. Voici les méthodes que j’utilise au quotidien.

Vérifier la version installée

La commande la plus directe dans votre terminal :

npm list react
# ou avec yarn
yarn list --pattern react

Vous pouvez aussi vérifier directement dans votre fichier package.json les entrées react et react-dom. Attention aux préfixes : le ^ devant le numéro de version (ex : ^18.2.0) autorise les mises à jour mineures et patches automatiques, tandis que le ~ ne permet que les patches.

Pour vérifier la version en cours d’exécution dans le navigateur, ouvrez la console et utilisez les React DevTools ou tapez :

// Dans la console du navigateur
React.version
Session de pair programming pour planifier une migration entre versions de React
Session de pair programming pour planifier une migration entre versions de React

Changer de version de React

Pour mettre à jour vers la dernière version :

npm install react@latest react-dom@latest
# ou
yarn add react@latest react-dom@latest

Pour installer une version spécifique :

npm install [email protected] [email protected]

Et pour répondre à la question fréquente sur comment changer la version de React de 18 vers 17 (downgrade) : c’est techniquement possible mais rarement recommandé. Voici la procédure :

# Downgrade vers React 17
npm install [email protected] [email protected]

# Vérifiez les dépendances incompatibles
npm ls react

Attention : un downgrade implique souvent de modifier du code qui utilise des fonctionnalités de la version supérieure. Les hooks comme useId, useDeferredValue ou useTransition n’existent pas en React 17. Vérifiez aussi la compatibilité de vos dépendances tierces, car beaucoup de librairies modernes exigent React 18 minimum. Pour mieux comprendre les structures de contrôle JavaScript utilisées dans React, consultez mon guide sur la boucle for en JavaScript.

Politique de support et LTS : combien de temps une version est-elle maintenue ?

Contrairement à Node.js qui a un programme LTS formel avec des dates précises, React n’a pas de politique LTS officielle. C’est un point qui surprend souvent les développeurs venant d’autres écosystèmes.

En pratique, voici comment le support fonctionne :

  • Version actuelle (React 19) : reçoit toutes les nouvelles fonctionnalités, corrections de bugs et patches de sécurité.
  • Version précédente (React 18) : continue de recevoir les patches de sécurité critiques pendant une période non définie. L’équipe React publie encore des correctifs quand nécessaire.
  • Versions plus anciennes (React 17 et avant) : ne reçoivent plus de mises à jour. Elles fonctionnent toujours, mais vous êtes seul face aux failles de sécurité éventuelles.

D’après mon expérience, une version majeure de React reste viable en production pendant environ 2 à 3 ans après la sortie de la version suivante. Au-delà, l’écosystème (librairies tierces, outils de build, navigateurs) commence à abandonner le support.

Mon conseil : planifiez vos migrations dans les 12 mois suivant la sortie d’une nouvelle version majeure. Cela vous laisse le temps d’attendre que l’écosystème se stabilise (les premiers mois sont toujours les plus agités) tout en ne prenant pas trop de retard. Si votre projet utilise un système de gestion de versions comme Git avec GitHub ou GitLab, créez une branche dédiée pour tester la migration.

Versionner sa propre application React

Au-delà des versions de React lui-même, il y a la question du versioning de votre propre application. C’est un sujet que je vois trop souvent négligé dans les projets que j’audite.

Utiliser npm version

La méthode la plus simple pour versionner une application créée avec Create React App ou Vite :

# Incrémenter le patch (1.0.0 → 1.0.1)
npm version patch

# Incrémenter la version mineure (1.0.1 → 1.1.0)
npm version minor

# Incrémenter la version majeure (1.1.0 → 2.0.0)
npm version major

Cette commande met à jour le champ version de votre package.json et crée automatiquement un tag Git. C’est simple, efficace, et intégré nativement.

Afficher la version dans l’application

Pour afficher le numéro de version dans votre interface (utile pour le debug et le support) :

// Importer la version depuis package.json
import { version } from '../package.json';

function AppFooter() {
  return <footer>Version {version}</footer>;
}

Avec les variables d’environnement de Vite, vous pouvez aussi injecter la version au build :

// vite.config.js
import { defineConfig } from 'vite';
import pkg from './package.json';

export default defineConfig({
  define: {
    __APP_VERSION__: JSON.stringify(pkg.version)
  }
});

Automatiser avec des outils dédiés

Pour les projets plus matures, j’utilise des outils qui automatisent le versioning en se basant sur les messages de commit conventionnels :

  • standard-version : génère automatiquement le changelog et incrémente la version selon les commits (feat → minor, fix → patch, BREAKING CHANGE → major).
  • semantic-release : va plus loin en automatisant aussi la publication npm et la création de releases GitHub.
  • changeset : particulièrement adapté aux monorepos, il gère le versioning de multiples packages interdépendants.
Tableau blanc illustrant une stratégie de versioning et de branches pour un projet React
Tableau blanc illustrant une stratégie de versioning et de branches pour un projet React

Migrer entre versions majeures sans casse

La migration entre versions majeures de React est le moment où le versioning devient concret et parfois douloureux. Voici ma méthodologie éprouvée sur des dizaines de projets.

Étape 1 : Auditer les dépendances

# Vérifier les dépendances obsolètes
npm outdated

# Vérifier les peer dependencies
npm ls react

Avant de toucher à React, assurez-vous que vos librairies tierces supportent la version cible. React Router, Redux, Material UI : vérifiez chaque dépendance majeure. C’est souvent là que les problèmes surgissent, pas dans votre propre code.

Étape 2 : Utiliser les codemods officiels

L’équipe React fournit des scripts de migration automatique (codemods) pour chaque version majeure :

# Exemple pour migrer vers React 19
npx @react-codemod/update-react-imports

Ces codemods gèrent les modifications syntaxiques les plus courantes : imports, API dépréciées, patterns obsolètes. Ils ne couvrent pas tout, mais éliminent 70 à 80 % du travail mécanique.

Étape 3 : Activer le mode strict

<React.StrictMode>
  <App />
</React.StrictMode>

Le StrictMode détecte les patterns problématiques et les API dépréciées en développement. Il double-exécute certains effets et rendus pour identifier les bugs potentiels. C’est votre meilleur allié pour préparer une migration.

Étape 4 : Tester progressivement

Sur les gros projets, je recommande une migration progressive. React 17 a introduit la possibilité de faire cohabiter plusieurs versions de React, et c’est un pattern que j’ai utilisé avec succès pour migrer des applications de plus de 200 composants. Cela rejoint les bonnes pratiques de gestion de projets React complexes.

Tableau comparatif des versions React

Pour y voir clair d’un coup d’œil, voici un comparatif des versions majeures de React avec leurs caractéristiques essentielles.

Version Date de sortie Fonctionnalité phare Support actuel Node.js minimum
React 15 Avril 2016 Adoption du SemVer Abandonné Node 4+
React 16 Sept. 2017 Fiber, Portals, Error Boundaries Abandonné Node 8+
React 17 Oct. 2020 Nouveau système d’événements Abandonné Node 10+
React 18 Mars 2022 Concurrent Rendering, Suspense Patches de sécurité Node 14+
React 19 Déc. 2024 Server Components, Actions, use() Actif (dernière stable) Node 18+

Ce tableau montre bien l’accélération du rythme : si React 16 a tenu presque trois ans avant React 17, les versions récentes se succèdent plus rapidement. L’écosystème JavaScript évolue vite, et React suit le mouvement tout en gardant une stabilité appréciable. Pour comprendre comment ces outils s’intègrent dans une infrastructure moderne, je vous recommande mon article sur la différence entre Kubernetes et Docker.

Bonnes pratiques de versioning en projet React

Après des années à gérer des projets React en production, voici les pratiques que je considère comme non négociables :

Verrouiller les versions en production

Utilisez un fichier package-lock.json (npm) ou yarn.lock et commitez-le toujours dans votre dépôt. Sans ce fichier, deux développeurs peuvent installer des versions différentes de React sur la même branche. J’ai vu des bugs de production causés uniquement par un lock file absent du dépôt Git.

Épingler les versions critiques

Pour React et ReactDOM, je recommande d’épingler la version exacte (sans le préfixe ^) dans votre package.json :

{
  "dependencies": {
    "react": "19.1.0",
    "react-dom": "19.1.0"
  }
}

Cela empêche les mises à jour automatiques involontaires. Les mises à jour de React doivent être des décisions explicites, testées et validées, pas des effets de bord d’un npm install.

Automatiser les audits de sécurité

# Vérifier les vulnérabilités connues
npm audit

# Corriger automatiquement ce qui peut l'être
npm audit fix

Intégrez cette commande dans votre pipeline CI/CD. Les failles de sécurité dans les dépendances sont la première raison pour laquelle vous devez maintenir vos versions à jour, même quand « tout fonctionne ». Si vous déployez avec Docker, assurez-vous que vos images sont aussi à jour ; consultez mon guide sur comment configurer un serveur VPS Linux pour héberger vos applications React en production.

Documenter les décisions de versioning

Maintenez un fichier CHANGELOG.md ou utilisez les releases GitHub pour tracer chaque changement de version. Quand un collègue vous demande « pourquoi on est encore en React 18 ? », la réponse doit être documentée quelque part, pas dans la mémoire d’un développeur parti en vacances.

Pour les méthodes de manipulation de données en JavaScript utilisées dans vos composants React, notamment les tableaux, mon article sur splice en JavaScript couvre les fondamentaux à connaître.

À retenir

  • Vérifiez votre version React avec npm list react avant toute opération de migration
  • Épinglez les versions exactes de React et ReactDOM dans package.json sans le préfixe ^
  • Utilisez les codemods officiels pour automatiser 70 à 80 % du travail de migration
  • Planifiez vos migrations dans les 12 mois suivant une version majeure pour rester dans la fenêtre de support
  • Commitez toujours votre fichier lock (package-lock.json ou yarn.lock) dans le dépôt Git

Questions fréquentes


Comment vérifier sa version de React ?

La méthode la plus rapide est de lancer npm list react dans le terminal à la racine de votre projet. Vous pouvez aussi vérifier le champ « dependencies » de votre fichier package.json, ou taper React.version dans la console du navigateur si les React DevTools sont installées. Pour un audit complet, npm outdated vous montre en un coup d’œil si des mises à jour sont disponibles.


React 19.2 est-il stable ?

React 19 est officiellement stable depuis décembre 2024. Les patches successifs (19.0.x, 19.1.x) corrigent des bugs et améliorent les performances. Pour vérifier si un patch spécifique comme 19.2 est publié et stable, consultez la page officielle des versions sur react.dev/versions ou le registre npm avec npm view react versions. Les patches sont par définition des versions stables qui ne contiennent que des corrections.


Comment passer de React 18 à React 17 (downgrade) ?

Installez les versions cibles avec npm install [email protected] [email protected], puis vérifiez la compatibilité de vos dépendances avec npm ls react. Supprimez ou remplacez tout code utilisant des fonctionnalités exclusives à React 18 : hooks useId, useTransition, useDeferredValue, batching automatique, et Suspense pour le data fetching. Testez ensuite exhaustivement, car un downgrade est une opération risquée qui peut casser des comportements subtils.


Combien de temps les versions de React sont-elles supportées ?

React n’a pas de programme LTS formel contrairement à Node.js. En pratique, la version précédente (actuellement React 18) continue de recevoir des patches de sécurité critiques pendant environ 18 à 24 mois après la sortie de la suivante. Les versions plus anciennes (React 17 et antérieures) ne reçoivent plus aucune mise à jour. Il est recommandé de migrer dans les 12 mois suivant une nouvelle version majeure pour rester dans la fenêtre de support de l’écosystème.


Quelle est la différence entre React et Angular pour le versioning ?

Angular publie une version majeure tous les six mois avec un calendrier prévisible et un support LTS formel de 18 mois. React adopte une approche plus organique : les versions majeures sortent quand elles sont prêtes, sans calendrier fixe, et le support LTS est implicite plutôt qu’officiel. En pratique, React offre une meilleure stabilité entre versions (moins de breaking changes), tandis qu’Angular offre plus de prévisibilité sur le calendrier. Pour un comparatif détaillé, consultez mon article React vs Angular.


Comment automatiser le versioning d’une application React ?

Utilisez des outils basés sur les commits conventionnels : standard-version analyse vos messages de commit pour incrémenter automatiquement la version et générer un changelog. semantic-release va plus loin en publiant automatiquement sur npm et en créant des releases GitHub. Pour les monorepos, changeset gère le versioning de multiples packages. La commande native npm version patch/minor/major reste la solution la plus simple pour les petits projets.


Damien Roux
Damien Roux

Ingénieur système et expert hébergement web. Fondateur de web-city.fr, il partage guides pratiques, comparatifs objectifs et outils gratuits pour choisir le bon hébergeur et créer son site WordPress.

Retour en haut