Angular adopte ngp, un préprocesseur hybride basé sur Rust
Le nouveau compilateur Angular, baptisé ngp, déploie une architecture hybride en utilisant Rust pour la phase d’analyse, ce qui permet d’accélérer notablement les temps de construction des applications complexes. Cette évolution intervient suite à l’adoption de TypeScript 7, dont la réécriture en Go a retiré l’API de transformation de code que le compilateur précédent, ngc, utilisait.
L’objectif principal de ngp est de découpler la génération du code Angular de l’API de typage de TypeScript. Le compilateur précédent s’appuyait sur le Transformer API de TypeScript pour transformer des décorateurs comme @Component ou @Pipe en instructions d’exécution. Cependant, la version Go de TypeScript ne propose pas d’équivalent direct à cette API, et le passage constant entre JavaScript et Go serait trop coûteux en performance.
L’équipe Angular a choisi une refonte partielle. Elle externalise l’analyse du code vers Oxc, la chaîne d’outils en Rust déjà utilisée par Vite. Ce frontend Rust analyse les fichiers en parallèle pour découvrir les déclarations Angular et résoudre les métadonnées. Ensuite, le compilateur TypeScript existant prend le relais pour générer deux artefacts : un fichier de code d’exécution et un fichier .ngtypecheck.ts contenant le Type Check Block (TCB) pour la vérification des types dans les templates.

Les bénéfices de cette séparation sont mesurables. Cédric Exbrayat, de Ninja Squad, a benchmarké cette version bêta sur trois projets, allant de 15 à 1 714 composants. Il a relevé une accélération de 2 à 3 fois sur les builds à froid. Sur le plus grand projet testé, la consommation mémoire est passée de 2,8 Go à 1,4 Go. Le pipeline le plus rapide est obtenu en associant ngp avec des outils en aval comme tsrs et Rolldown.
Le processus se décompose en trois étapes. D’abord, l’analyse en Rust extrait les métadonnées d’un composant, par exemple, en envoyant au backend TypeScript les informations sur le sélecteur et le template. Ensuite, le backend TypeScript produit les deux fichiers : le premier contient la fonction de rendu, tandis que le second contient le TCB, permettant à TypeScript de détecter les erreurs de propriétés manquantes dans le template.
Au-delà de l’analyse en Rust, le pipeline peut gagner du temps en aval. Le traitement en aval, qui gère l’émission du JavaScript, peut désormais utiliser tsgo, qui est plusieurs fois plus rapide que l’ancienne version de TypeScript. De plus, des implémentations alternatives de tsgo pourraient offrir des gains supplémentaires.
En parallèle de cette évolution officielle, des développeurs ont expérimenté le compilateur via des plugins. Christopher Holder, de push-based.io, a développé vite-plugin-ngp. Sur un projet de 252 composants, ce prototype a permis au serveur de développement d’atteindre la première page en 10,5 secondes, contre 17,4 secondes avec l’outil standard. Sur un projet généré de 5 000 composants, l’écart s’est creusé, atteignant 1,6 seconde contre 28,4 secondes. Holder précise que ce plugin reste un « prototype sur un prototype ».
L’adoption de ngp est attendue dans une future version mineure d’Angular 22, une fois que TypeScript 7.1 restaurera l’API du compilateur. En attendant, les productions doivent rester sur ngc.
Sources
- refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli · angular/angular@4e4ad75, github.com
- How much faster is the new Angular compiler?, blog.ninja-squad.com
- Angular’s TypeScript 7-Powered Compiler Enters Beta with Rust-Based Preprocessor, InfoQ, 11 novembre 2026



