NXL Forge.Pendant que le marché rédige — nous livrons
Technique Odoo··4 min de lecture

Owl 3 entre dans Odoo 20 : onWillUpdateProps et this.props partent

La version 3 d'Owl entre dans la ligne Odoo 20 et retire des conventions que vos composants utilisent partout : this.props implicite, onWillUpdateProps et les t-ref par chaîne. Le script officiel ne traite que le squelette, la logique de réactivité reste manuelle.

Odoo 20Owl 3JavaScriptmigrationdéveloppement

Depuis plusieurs versions, tout composant JavaScript écrit pour Odoo repose sur Owl, le framework maison. La version 3 d'Owl est en cours d'intégration dans la branche master qui alimente la ligne Odoo 20, et elle modifie des conventions de base que vos modules utilisent sans même y penser. Si vous maintenez des composants frontend custom, c'est du travail manuel qui vous attend, pas une conversion entièrement automatique.

Passons aux points qui touchent directement le code existant.

this.props n'existe plus par défaut

En Owl 2, un composant disposait automatiquement de this.props. En Owl 3, cet accès implicite disparaît. Il faut déclarer explicitement les props via une fonction props() dans le composant 1. Concrètement, une ligne du type props = props() devient nécessaire, et le typage passe en argument de cette même fonction.

Les propriétés statiques static props et static defaultProps suivent le même sort. Le typage et les valeurs par défaut passent désormais en arguments :

props = props({
  name: t.string,
  "visible?": t.boolean,
}, { leaveDuration: 100 });

Le second argument porte les valeurs par défaut. La couche de compatibilité interdit les anciennes déclarations statiques, donc un module qui s'y appuie ne démarre pas tel quel.

onWillUpdateProps est retiré

Le hook onWillUpdateProps servait à réagir quand les props changeaient. Owl 3 le supprime 2. À la place, on dérive un état avec computed(), ou on réagit avec un effet.

Le cœur d'Odoo a déjà engagé ce chantier. La PR #279617, fusionnée le 21 septembre 2026 sur la branche master et visant la 20.1, remplace onWillUpdateProps par useOnChange avec l'option initialRun: false, pour ne déclencher l'effet que sur un changement réel et pas au montage du composant 3. C'est le genre de détail qui compte en pratique : un effet qui s'exécute une fois de trop au montage, et vous introduisez un bug difficile à reproduire.

Les t-ref par chaîne de caractères disparaissent

Avant, on posait une référence avec useRef("name") côté JS et t-ref="name" côté template. Owl 3 abandonne les identifiants de template sous forme de chaîne. On passe par un signal :

div = signal(null);
// template : <div t-ref="this.div">

L'accès se fait ensuite via this.div() au lieu de .el. Les signaux deviennent les primitives de réactivité, avec signal() pour l'état mutable et computed() pour les valeurs dérivées qui suivent automatiquement leurs dépendances.

Un script de migration, mais partiel

Odoo fournit un script pour la partie mécanique 1. Sa première phase remplace les t-ref par t-custom-ref, préfixe les variables libres par this., convertit les t-esc en t-out et insère les déclarations props = props() dans les composants. C'est utile, mais la logique de réactivité reste à votre charge. Un onWillUpdateProps qui faisait plus qu'une simple comparaison demande une relecture humaine.

Où en est réellement le chantier

Il faut rester précis sur l'état d'avancement. Le jalon Owl 3.0 sur GitHub affiche 47 % d'avancement, avec 9 tickets ouverts et 8 fermés, dernière mise à jour le 4 août 2026 2. Le travail porte un label owl-3 et couvre aussi le retrait des rendus profonds, la révision de la syntaxe t-att et une réflexion sur t-call. Odoo 20 est sorti le 24 septembre 2026 4. La bascule vers Owl 3 s'étale donc sur la ligne 20.x plutôt que sur un instant unique, et certaines API peuvent encore bouger avant d'être figées.

La direction est confirmée par les PR du cœur et par le jalon public. Le détail exact de l'API finale, lui, reste mouvant. Figer aujourd'hui du code sur une signature non stabilisée vous expose à une seconde réécriture dans quelques mois.

Notre lecture

Pour un studio qui maintient des modules Odoo, le signal à retenir tient en une phrase : tout composant frontend custom va demander une passe manuelle, et le script officiel ne couvre que le squelette. Nous recommandons un inventaire dès maintenant, qui liste les composants utilisant onWillUpdateProps, ceux qui lisent this.props en direct, et ceux qui posent des t-ref par chaîne. Ce sont les points qui cassent de façon certaine.

Ensuite, séparez ce qui est mécanique, comme les préfixes this. ou le passage de t-esc à t-out, de ce qui demande du jugement, comme la logique de réactivité. Le premier lot passe au script, le second se planifie. Tant que le jalon Owl 3 n'est pas clos, nous gardons les réécritures de réactivité pour la fin, quand l'API sera stable. Pour le chiffrage global d'une migration côté JavaScript, nous avions déjà posé les ordres de grandeur dans notre analyse du coût réel d'une migration Odoo 19.

Sources

Footnotes

  1. Guide de migration Owl 3 rédigé par ged-odoo (Géry Debongnie, Odoo), détaillant le passage de this.props à la fonction props(), le remplacement des t-ref par chaîne et les phases du script de migration. ↩ ↩2

  2. Jalon « Version 3.0 » du dépôt odoo/owl sur GitHub : 47 % d'avancement, 9 tickets ouverts et 8 fermés, dernière mise à jour le 4 août 2026, retrait de onWillUpdateProps et des identifiants de template par chaîne. ↩ ↩2

  3. Pull request #279617 du dépôt odoo/odoo, fusionnée le 21 septembre 2026 sur la branche master pour la 20.1, remplaçant onWillUpdateProps par useOnChange avec initialRun: false. ↩

  4. Date de sortie d'Odoo 20, annoncée au 24 septembre 2026 par la presse spécialisée Odoo. ↩

Sur le même thème

Votre idée mérite un vrai logiciel

Une question, un projet Odoo ?

Modules préconfigurés, intégration, sur-mesure — parlons-en sans engagement.