Turborepo 2.10.3 Reconnaît nub et aube, Deux Nouveaux Gestionnaires de Paquets Node.js en Rust par Colin McDonnell (Zod) et Jeff Dickey (mise)

Turborepo 2.10.3 Reconnaît nub et aube, Deux Nouveaux Gestionnaires de Paquets Node.js en Rust par Colin McDonnell (Zod) et Jeff Dickey (mise)

lschvn

Turborepo v2.10.3 est sorti le 2026-07-03 comme la huitième release depuis la release de fonctionnalité Turborepo 2.10 du 2026-06-24. Le patch est le premier orchestrateur de tâches de monorepo mainstream à ajouter le support de première classe pour nub et aube, deux nouveaux gestionnaires de paquets Node.js en Rust qui ont émergé au printemps et à l'été 2026. nub est écrit par Colin McDonnell (colinhacks), créateur de Zod (43k étoiles), et aube par Jeff Dickey (jdx), créateur de mise. colinhacks a ouvert la PR nub (#13120) le 2026-06-30, avec les suivis #13187 et #13189. anthonyshew a ouvert la PR aube (#13183). Les deux s'intègrent au champ packageManager existant dans package.json et à devEngines.packageManager.

Le signal principal n'est pas la release patch elle-même: c'est que deux des builders les plus respectés du toolchain JS livrent désormais des gestionnaires de paquets qui s'appuient sur Node stock au lieu de le remplacer, et que Turborepo (l'orchestrateur de tâches de monorepo de facto de Vercel, utilisé dans Next.js, la CLI Vercel, et la plupart des monorepos hébergés chez Vercel) est le premier orchestrateur de tâches mainstream à formaliser les deux. La release apporte aussi une surface TUI refondue, le support natif du lockfile lock.yaml de nub et de Bun lockfile v2, la normalisation des versions packageManager entre package.json et devEngines, --production sur turbo prune, et la toolchain TypeScript du workspace passe à 7.0.1-rc.

nub: l'augmentation Node.js TypeScript-first par colinhacks

nub (@nubjs/nub, v0.2.10, 2,6k étoiles GitHub, créé le 2026-06-03) se positionne comme « une DX façon Bun sur du node stock, écrite en Rust ». Le repo appartient à nubjs sur GitHub, et le mainteneur derrière est colinhacks, surtout connu comme l'auteur de Zod (43k étoiles) et comme committer Turborepo (il a écrit la PR de reconnaissance de nub, le suivi des tweaks nub, et le fix de plages semver pour devEngines.packageManager.version). La release v0.2.10 est sortie le 2026-06-30 avec trois corrections: une fuite d'erreur non gérée sur les Worker threads qui correspond désormais aux sémantiques fatal-on-error de node:worker_threads, une fuite de boundary de marque sur le chemin de fichier de config user/project d'aube sous nub (nub ne lit désormais que .npmrc plus les variables d'env NUB_*, jamais ~/.config/aube/config.toml), et un passage de cibles nub watch -- qui correspond au comportement de node et de pnpm 10.

Le toolkit livre sept commandes:

CommandeRemplaceGain revendiqué
nub <file>node, tsx, ts-node, dotenv-cliExécution TypeScript-first sur node stock
nub run <script>npm run, pnpm run, yarn run24x plus rapide que pnpm run
nubx <bin>npx, pnpm dlx, pnpm exec, yarn dlx19x plus rapide que npx
nub installnpm, pnpm, yarnCompatible pnpm, fait des allers-retours avec les lockfiles npm/pnpm/bun
nub watchnodemon, node --watch, tsx watchPiloté par le graphe de dépendances, surveille .env* et tsconfig.json
nub pmcorepackGestionnaire de shims intégré
nub nodenvm, fnm, n, voltaProvisionne Node depuis nodejs.org à la demande

Il n'y a pas de nouveau runtime à adopter. Chaque augmentation s'appuie sur les surfaces d'extension propres à Node (worker_threads, node:fs, node:vm, l'API des loader hooks). Le gestionnaire de paquets fait des allers-retours avec le lockfile existant du projet: un projet nub qui livre un pnpm-lock.yaml garde ce lockfile, et nub install réécrit dans le même fichier. Yarn est en lecture seule. Le chemin d'install est @nubjs/nub sur npm, brew install nubjs/tap/nub sur Homebrew, mise use -g nub, ou l'Action GitHub officielle nubjs/setup-nub.

Le framing que nub choisit est le même que celui que Bun avait choisi en 2023 (« all-in-one, drop-in, fast »), mais sans le swap de runtime. Le gain de 24x de nub run dev vs pnpm run est une vraie amélioration UX pour les monorepos à forte intensité de scripts package.json, et nubx prisma generate à 19x plus rapide que npx est le genre de gain qui transforme une attente de 4 secondes en un blip à peine remarqué.

aube: gestion de paquets Node.js compatible lockfile par jdx

aube (@endevco/aube, v1.25.2, 1,6k étoiles GitHub, créé le 2026-04-18) est un gestionnaire de paquets Node.js en Rust de Jeff Dickey (jdx), le créateur de mise (le successeur d'asdf). Le projet est sponsorisé par entire.io et 37signals. Le nom signifie « aube » en français, prononcé /ob/. Le tagline est « Never forget to install »: le runner aubr test fait l'install en premier quand les dépendances sont périmées, puis saute ce travail quand rien n'a changé, ce qui est le même pitch UX que mise a eu pendant des années mais appliqué au chemin d'install.

Le chiffre principal est le benchmark d'install à chaud sur un fixture réel de 1400 paquets, mesuré avec hyperfine dans des conditions identiques et regénéré pour la dernière fois le 2026-07-02:

Gestionnaire de paquetsInstall à chaudInstall à froidinstall && run test
aube 1.25.2319 ms14,63 s10 ms
bun 1.3.141,49 s5,10 s66 ms
deno 2.9.11,44 s9,15 s81 ms
pnpm 11.9.02,44 s12,99 s388 ms
npm 11.9.07,19 s10,89 s825 ms
yarn 4.17.08,49 s13,18 s1,82 s

aube est 7,7x plus rapide que pnpm et 4,7x plus rapide que Bun sur les installs à chaud, et ~80x plus rapide que npm sur le chemin install && run test. Le mécanisme est le même que celui que pnpm a inauguré: un store global adressable par contenu plus un store virtuel par projet. pnpm supporte un store virtuel global similaire, mais le laisse désactivé par défaut; aube l'active par défaut, ce qui est toute la raison du gap à l'install à chaud.

L'histoire du lockfile est la partie qui compte pour l'adoption. aube lit et écrit pnpm-lock.yaml, package-lock.json, npm-shrinkwrap.json, yarn.lock et bun.lock en place. Une équipe qui installe aube dans un projet pnpm n'a pas besoin de régénérer pnpm-lock.yaml ni de mettre à jour la CI; aube lit le lockfile existant, lie au store global, et réécrit le même lockfile. Le champ packageManager dans package.json bascule de "pnpm@11.9.0" à "aube@1.25.2", et le reste du toolchain ne voit aucune différence.

L'histoire de la sécurité est ce qui distingue aube du « pnpm rapide ». La config par défaut est le bundle strict: les scripts de cycle de vie (preinstall, install, postinstall) attendent une approbation par défaut, les dépendances transitives exotiques sont bloquées, les downgrades de trust échouent au resolve, et les nouvelles releases passent par une fenêtre de refroidissement de 24h. Le switch paranoid: true transforme chaque soft gate en hard fail: jailBuilds = true (la seule jail de scripts de cycle de vie dans n'importe quel gestionnaire de paquets Node.js), strictStoreIntegrity = true (échec quand un tarball arrive sans dist.integrity au lieu d'un warning), strictDepBuilds = true (échec quand une dépendance a des scripts de build non relus), advisoryCheck = required (échec quand OSV est injoignable), minimumReleaseAgeStrict = true, et trustPolicy = no-downgrade. Pour les installs sensibles à la supply chain, paranoid: true est le défaut conservateur.

La série v1.25 a ajouté: v1.25.0 l'activation shell et les shims (de sorte que les commandes node, pnpm, yarn, et la famille npm passent par le resolver d'aube), v1.25.1 un refresh des benchmarks, et v1.25.2 un fix pour une race de chevauchement d'écriture de lockfile à l'install à froid. Le chevauchement d'écriture de lockfile est le genre de bug qui ne mord que sur de la CI parallèle, et le fait qu'il ait été détecté et corrigé dans la fenêtre de merge Turborepo 2.10.3 est un bon signal pour la qualité globale du code d'aube.

Ce que Turborepo 2.10.3 a réellement changé

Le support de nub et aube est le titre, mais le patch est large. Le changelog complet (v2.10.2 to v2.10.3) porte 41 commits. Les huit qui comptent le plus pour l'usage quotidien:

  1. Toggle logs-streamés / TUI (#13203). La liste de tâches TUI introduite dans Turborepo 2.4 est désormais toggleable contre la vue logs-streamés legacy au runtime, plus seulement au lancement. Les équipes qui veulent la vue de progression structurée en CI mais le texte brut dans leur éditeur peuvent basculer sans redémarrer.
  2. Sélection de tâches au clic dans la liste TUI (#13206). La TUI accepte désormais les clics de souris sur les lignes de tâches pour sélectionner un sous-ensemble de tâches à exécuter, au lieu de filtrer avec les inputs clavier. Les release notes signalent ça comme le premier pas vers des workflows « click-to-run » où l'utilisateur choisit les tâches dans la TUI comme il le ferait dans un dashboard CI.
  3. Copie automatique des sélections TUI au presse-papiers au relâchement de la souris (#13208). Une petite victoire UX qui ferme la boucle « sélectionner du texte dans la TUI, le copier » sans raccourci clavier.
  4. --production sur turbo prune (#13190). Pruner vers un sous-ensemble déployable et exclure les devDependencies en un flag, ce qui simplifie les couches Docker pour les déploiements de production.
  5. Guide de récupération token-exchange (#13192). Quand la récupération binaire de la plateforme Turborepo tombe sur un token expiré ou malformé, l'erreur pointe maintenant l'utilisateur vers la commande de récupération au lieu d'échouer avec un message unauthorized générique.
  6. TypeScript 7.0.1-rc comme toolchain de workspace (#13144). Le repo Turborepo lui-même est désormais construit contre TypeScript 7.0.1-rc, le release candidate du compilateur natif (Go) TypeScript 7. Le move raccourcit la boucle de « on livre une feature dans Turborepo » à « on livre une feature dans Turborepo et on la prouve sur le compilateur TS de nouvelle génération ».
  7. Thin LTO + codegen-units=1 pour les builds de release (#13160). Les binaires Rust de release utilisent désormais thin LTO et un seul codegen unit, ce qui est la recette Rust standard pour des binaires de release plus petits, légèrement plus longs à builder. Les chiffres ne sont pas dans la PR, mais un changement comparable dans le toolchain oxc a retiré ~10-15% de la taille des binaires de release.
  8. Corrections de perf sur le cache-hashing (#13209, #13211, #13210). Trois commits suppriment les deep clones du cache de fermeture de lockfile, de la racine du graphe de paquets, et du matcher d'env-wildcard. L'étape de hash est le travail le plus répété dans turbo run, et retirer des clones dessus se voit sur chaque invocation de turbo run build dans un gros monorepo.

L'histoire du lockfile dans 2.10.3 est aussi notable au-delà du support de nub et aube. La PR #13119 (tsushanth) fait que Turborepo accepte Bun lockfile v2, qui est le nouveau format arrivé dans Bun 1.3.x. La PR #13191 fait que les checks de boundaries skip node_modules, ce qui ferme une classe d'erreurs « dependency boundary violated » en faux positif qui apparaissait dans les monorepos avec des dépendances vendored. La PR #13198 transforme le JSON malformé dans turbo.json de panic en erreur typée. La PR #13199 améliore le message d'erreur quand la récupération du binaire spécifique à la plateforme échoue (le chemin « avez-vous oublié d'installer turbo pour cette plateforme »).

Pourquoi ça compte pour les utilisateurs de monorepos

Les deux fils d'actualité (l'adoption de nub et aube; le travail TUI et perf) sont connectés par un seul shift: le toolchain JS se consolide sur le modèle « augmenter Node stock » plutôt que sur le modèle « remplacer Node par un nouveau runtime ». Bun et Deno ont parié sur un nouveau runtime, et le pari a payé en performance mais a coûté une migration à l'écosystème. nub et aube prennent la DX façon Bun et la livrent par-dessus du node stock, ce qui signifie qu'une équipe peut adopter l'un ou l'autre sans changer ce qui tourne en production. Turborepo est le premier orchestrateur de tâches mainstream à formaliser cette position: quand le champ packageManager pointe vers nub ou aube, l'orchestrateur de monorepo sait quoi faire avec les étapes d'install, prune, generate, et cache-hashing sans que l'équipe écrive de logique de détection custom.

Pour les utilisateurs de monorepos, le takeaway pratique est une fenêtre plus tranquille pour npx @turbo/codemod migrate ou bunx @turbo/codemod migrate ce week-end. La release est additive: les monorepos 2.10.x existants continuent de fonctionner, la TUI est un défaut qui peut être annulé avec TURBO_TUI=0 ou le toggle logs-streamés, et la détection nub/aube ne s'active que quand le champ packageManager pointe vers l'un des deux. Le travail de perf (thin LTO, codegen-units=1, suppression des clones de lockfile et de graphe de paquets) apparaît comme une amélioration petite mais mesurable sur chaque turbo run build dans un gros monorepo, sans changement de config visible côté utilisateur.

Le signal long terme est le pairing d'auteurs. colinhacks (Zod, 43k étoiles, validation de schéma TypeScript-first) est la même personne qui a écrit nub. jdx (mise, le successeur d'asdf) est la même personne qui a écrit aube. L'auteur de Zod qui parie sur un toolchain Node stock et l'auteur de mise qui parie sur un chemin d'install façon Bun sur du Node stock est un signal fort que le consensus du toolchain JS s'éloigne du pari « nouveau runtime » et va vers « faire que le runtime existant se sente aussi rapide que Bun, sans la migration ».

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

npm 11.18 promeut la stratégie d'installation `linked` en stable, ajoute l'espace de noms `npm install-scripts` et avertit quand `min-release-age` bloque un correctif d'audit
tooling

npm 11.18 promeut la stratégie d'installation `linked` en stable, ajoute l'espace de noms `npm install-scripts` et avertit quand `min-release-age` bloque un correctif d'audit

npm 11.18.0 (29 juin 2026) livre trois fonctionnalités et un long backlog de corrections de bugs qui, ensemble, achèvent le travail que le CLI npm mène sur le mode d'installation `install-strategy=linked` (isolated) depuis la RFC #0042 en 2022. L'événement phare est la [PR #9677](https://github.com/npm/cli/pull/9677) (backport de #9674), qui fait passer `--install-strategy=linked` d'expérimental à stable. Le mode installe chaque paquet dans `node_modules/.store/<name>@<version>/node_modules/<dep>` et lie symboliquement ses dépendances déclarées dans son propre `node_modules/<dep>`, de sorte qu'un paquet ne peut `require` que les dépendances réellement déclarées dans son propre `package.json`. La nouvelle recommandation des docs ([PR #9690](https://github.com/npm/cli/pull/9690)) consiste à exécuter `--install-strategy=linked` en CI pour intercepter les dépendances fantômes avant publication. Autour de cette promotion, la release livre un nouveau namespace `npm install-scripts` ([#9635](https://github.com/npm/cli/pull/9635), backport de #9629) qui possède `approve`, `deny` et `ls`, avec `npm approve-scripts` / `npm deny-scripts` conservés comme alias ; une passe de ménage `install-scripts: prune unused allowScripts entries` ([#9662](https://github.com/npm/cli/pull/9662)) ; et un nouvel avertissement quand `min-release-age` bloque un `npm audit fix` ([#9564](https://github.com/npm/cli/pull/9564)). La release de 43 commits corrige aussi 19 bugs de la stratégie `linked` (déterminisme de l'audit #9638, stubs `.bin` orphelins #9643, nettoyage des `.store` périmés #9649, crash `filterNode` invalide #9645, validation peerOptional #9641), trois fixes `npm sbom` et un fix d'encodage en pourcentage du qualificateur `vcs_url` dans les purls générées ([#9693](https://github.com/npm/cli/pull/9693)).
Prettier 3.9 refond cinq parseurs : micromark pour Markdown, yaml v2, GraphQL.js v17, un parseur Flow en Rust et Angular
tooling

Prettier 3.9 refond cinq parseurs : micromark pour Markdown, yaml v2, GraphQL.js v17, un parseur Flow en Rust et Angular

Prettier 3.9.0, publié le 27 juin 2026 (prettier/prettier, billet de Fisker Cheung), est une release centrée sur les parseurs qui fait passer Markdown de remark-parse v8 à micromark v4 (meilleure conformité CommonMark et GFM et une série de bugs de parsing de longue date corrigés), YAML à yaml v2, GraphQL à GraphQL.js v17 (arguments de fragment et directives sur les définitions de directive), Flow au nouveau parseur oxidized basé sur Rust de l'équipe Flow (environ 37 % plus rapide sur les fixtures Flow valides de Prettier et 43 % plus rapide sur flow_parser.js en benchmarks parser-only locaux) et Angular. Le formateur JavaScript et TypeScript est aussi retravaillé, en particulier en mode --no-semi où les commentaires autour de break et continue sont maintenant stables entre plusieurs passages (un fix d'idempotence), plus la suppression des parenthèses redondantes dans les return, l'alignement des interpolations de template embarquées et l'inlining des expressions de négation logique. La release retire la syntaxe legacy import ... assert {} (Babel 8 a supprimé le plugin de parseur ; migrez vers with), corrige une option --cache-strategy content silencieusement cassée et empêche les fichiers EditorConfig au-dessus des worktrees Git de s'infiltrer. L'équipe rappelle d'épingler la version exacte dans package.json car les changements de formatage vont produire des diffs.
TypeScript 7.0 RC arrive : le compilateur Go atteint le Release Candidate, environ 10 fois plus rapide, avec une migration côte à côte
typescript

TypeScript 7.0 RC arrive : le compilateur Go atteint le Release Candidate, environ 10 fois plus rapide, avec une migration côte à côte

TypeScript 7.0 RC (18 juin 2026) est le release candidate du compilateur que Microsoft a porté depuis sa base de code TypeScript auto-amorcée vers Go. Il est souvent environ 10 fois plus rapide que TypeScript 6.0, fournit un paquet de compatibilité tsc6 pour fonctionner côte à côte avec 6.0, ajoute les options de parallélisme --checkers/--builders/--singleThreaded et un mode watch reconstruit sur un port Go de @parcel/watcher, et transforme toutes les dépréciations de 6.0 en erreurs fatales. La version stable est prévue dans le mois qui vient, une API programmatique stable étant repoussée à 7.1.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.