Turborepo 2.10.3 Erkennt nub und aube, Zwei Neue Rust-basierte Node.js-Paketmanager von Colin McDonnell (Zod) und Jeff Dickey (mise)

Turborepo 2.10.3 Erkennt nub und aube, Zwei Neue Rust-basierte Node.js-Paketmanager von Colin McDonnell (Zod) und Jeff Dickey (mise)

lschvn

Turborepo v2.10.3, erschienen am 2026-07-03, ist die achte Release seit dem Turborepo-2.10-Feature-Release am 2026-06-24. Der Patch ist der erste Mainstream-Monorepo-Task-Runner, der First-Class-Support für nub und aube hinzufügt, zwei neue Rust-basierte Node.js-Paketmanager, die im Frühjahr und Sommer 2026 entstanden sind. nub stammt von Colin McDonnell (colinhacks), dem Schöpfer von Zod (43k Sterne), und aube von Jeff Dickey (jdx), dem Schöpfer von mise. colinhacks öffnete die nub-PR (#13120) am 2026-06-30, mit Follow-ups #13187 und #13189. anthonyshew öffnete die aube-PR (#13183). Beide integrieren sich in das bestehende packageManager-Feld in package.json und in devEngines.packageManager.

Das Hauptsignal ist nicht die Patch-Release selbst: Es ist, dass zwei der angesehensten Builder des JS-Toolchains nun Paketmanager liefern, die auf Stock-Node aufsetzen statt es zu ersetzen, und dass Turborepo (Vercels De-facto-Monorepo-Task-Runner, verwendet in Next.js, der Vercel-CLI und den meisten bei Vercel gehosteten Monorepos) der erste Mainstream-Task-Runner ist, der beide formalisiert. Die Release liefert außerdem eine neu gestaltete TUI-Oberfläche, nativen Lockfile-Support für nubs lock.yaml und Bun-Lockfile v2, normalisierte packageManager-Versionen zwischen package.json und devEngines, --production auf turbo prune, und die Workspace-TypeScript-Toolchain wechselt auf 7.0.1-rc.

nub: TypeScript-first Node.js-Erweiterung von colinhacks

nub (@nubjs/nub, v0.2.10, 2,6k GitHub-Sterne, erstellt am 2026-06-03) positioniert sich als « eine Bun-artige DX auf Stock-node, geschrieben in Rust ». Das Repo gehört nubjs auf GitHub, und der Maintainer dahinter ist colinhacks, am besten bekannt als Autor von Zod (43k Sterne) und als Turborepo-Committer (er verfasste die nub-Erkennungs-PR, den nub-Tweaks-Follow-up und den Semver-Range-Fix für devEngines.packageManager.version). Die v0.2.10-Release wurde am 2026-06-30 mit drei Fixes ausgeliefert: Ein unbehandeltes Worker-Thread-Fehler-Leck, das nun zu den Fatal-on-Error-Semantiken von node:worker_threads passt, ein Markengrenz-Leck auf aubts User/Project-Konfig-Dateipfad unter nub (nub liest nun nur noch .npmrc plus die NUB_*-Env-Knöpfe, niemals ~/.config/aube/config.toml), und ein nub watch ---Target-Passthrough, das zum Verhalten von node und pnpm 10 passt.

Das Toolkit liefert sieben Kommandos:

KommandoErsetztBehaupteter Speedup
nub <file>node, tsx, ts-node, dotenv-cliTypeScript-first-Ausführung auf Stock-node
nub run <script>npm run, pnpm run, yarn run24x schneller als pnpm run
nubx <bin>npx, pnpm dlx, pnpm exec, yarn dlx19x schneller als npx
nub installnpm, pnpm, yarnpnpm-kompatibel, round-tripped npm/pnpm/bun-Lockfiles
nub watchnodemon, node --watch, tsx watchAbhängigkeitsgraph-getrieben, überwacht .env* und tsconfig.json
nub pmcorepackIntegrierter Shim-Manager
nub nodenvm, fnm, n, voltaProvisioniert Node bei Bedarf von nodejs.org

Es gibt kein neues Runtime zur Adoption. Jede Erweiterung reitet auf den eigenen Erweiterungsoberflächen von Node (worker_threads, node:fs, node:vm, die Loader-Hook-API). Der Paketmanager round-tripped das bestehende Lockfile des Projekts: Ein nub-Projekt, das ein pnpm-lock.yaml ausliefert, behält dieses Lockfile, und nub install schreibt in dieselbe Datei zurück. Yarn ist Read-only. Der Install-Pfad ist @nubjs/nub auf npm, brew install nubjs/tap/nub auf Homebrew, mise use -g nub oder die offizielle nubjs/setup-nub-GitHub-Action.

Das Framing, das nub wählt, ist dasselbe, das Bun 2023 wählte (« all-in-one, drop-in, fast »), aber ohne den Runtime-Swap. Der 24x-Speedup von nub run dev vs. pnpm run ist eine echte UX-Verbesserung für skriptlastige package.json-Monorepos, und nubx prisma generate mit 19x schneller als npx ist die Art Speedup, die eine 4-Sekunden-Wartezeit in einen kaum bemerkten Blip verwandelt.

aube: lockfile-kompatibles Node.js-Paketmanagement von jdx

aube (@endevco/aube, v1.25.2, 1,6k GitHub-Sterne, erstellt am 2026-04-18) ist ein Rust-basierter Node.js-Paketmanager von Jeff Dickey (jdx), dem Schöpfer von mise (dem asdf-Nachfolger). Das Projekt wird von entire.io und 37signals gesponsert. Der Name bedeutet « aube » auf Französisch, ausgesprochen /ob/. Der Tagline ist « Never forget to install »: Der aubr test-Runner installiert automatisch zuerst, wenn die Abhängigkeiten veraltet sind, und überspringt diese Arbeit dann, wenn sich nichts geändert hat, was dasselbe UX-Pitch ist, das mise seit Jahren hat, aber angewandt auf den Install-Pfad.

Die Hauptzahl ist der Warm-Install-Benchmark auf einem 1400-Paket-Real-World-Fixture, gemessen mit hyperfine unter identischen Bedingungen und zuletzt am 2026-07-02 regeneriert:

PaketmanagerWarm InstallCold Installinstall && 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 ist 7,7x schneller als pnpm und 4,7x schneller als Bun bei Warm-Installs und ~80x schneller als npm auf dem install && run test-Pfad. Der Mechanismus ist derselbe, den pnpm eingeführt hat: Ein globaler inhaltsadressierbarer Store plus ein virtueller Store pro Projekt. pnpm unterstützt einen ähnlichen globalen virtuellen Store, lässt ihn aber standardmäßig deaktiviert; aube aktiviert ihn standardmäßig, was der ganze Grund für die Warm-Install-Lücke ist.

Die Lockfile-Geschichte ist der Teil, der für die Adoption zählt. aube liest und schreibt pnpm-lock.yaml, package-lock.json, npm-shrinkwrap.json, yarn.lock und bun.lock in-place. Ein Team, das aube in ein pnpm-Projekt einbringt, muss pnpm-lock.yaml nicht regenerieren oder die CI aktualisieren; aube liest das bestehende Lockfile, verlinkt gegen den globalen Store und schreibt dasselbe Lockfile zurück. Das packageManager-Feld in package.json wechselt von "pnpm@11.9.0" zu "aube@1.25.2", und der Rest des Toolchains sieht keinen Unterschied.

Die Sicherheitsgeschichte ist das, was aube von « schnelles pnpm » unterscheidet. Die Standardkonfiguration ist das strenge Bundle: Lifecycle-Skripte (preinstall, install, postinstall) warten standardmäßig auf Genehmigung, exotische transitive Abhängigkeiten sind blockiert, Trust-Downgrades schlagen beim Resolve fehl, und brandneue Releases sitzen in einem 24h-Abkühlfenster. Der paranoid: true-Schalter verwandelt jedes Soft-Gate in einen harten Fehler: jailBuilds = true (das einzige Lifecycle-Script-Gefängnis in einem Node.js-Paketmanager), strictStoreIntegrity = true (Fehlschlag, wenn ein Tarball ohne dist.integrity ausgeliefert wird, statt einer Warnung), strictDepBuilds = true (Fehlschlag, wenn eine Dependency ungelesene Build-Skripte hat), advisoryCheck = required (Fehlschlag, wenn OSV nicht erreichbar ist), minimumReleaseAgeStrict = true und trustPolicy = no-downgrade. Für supply-chain-sensible Installs ist paranoid: true der konservative Default.

Die v1.25-Serie fügte hinzu: v1.25.0 Shell-Aktivierung und Shims (sodass einfache node-, pnpm-, yarn- und npm-Familien-Kommandos durch aubts Resolver gehen), v1.25.1 ein Benchmark-Refresh und v1.25.2 ein Fix für eine Cold-Install-Lockfile-Write-Overlap-Race. Der Lockfile-Write-Overlap ist die Art Bug, die nur bei paralleler CI zuschlägt, und die Tatsache, dass er innerhalb des Turborepo-2.10.3-Merge-Fensters gefangen und behoben wurde, ist ein gutes Signal für aubts allgemeine Code-Qualität.

Was Turborepo 2.10.3 tatsächlich geändert hat

Der nub- und aube-Support ist die Schlagzeile, aber der Patch ist groß. Das vollständige Changelog (v2.10.2 zu v2.10.3) umfasst 41 Commits. Die acht, die am meisten für den täglichen Gebrauch zählen:

  1. Streamed-Logs / TUI-Toggle (#13203). Die TUI-Taskliste, eingeführt in Turborepo 2.4, ist nun zur Laufzeit gegen die Legacy-Streamed-Logs-Ansicht togglebar, nicht nur beim Start. Teams, die die strukturierte Fortschrittsansicht in der CI, aber den Klartext in ihrem Editor wollen, können ohne Neustart wechseln.
  2. Click-to-Select für Tasks in der TUI-Taskliste (#13206). Die TUI akzeptiert nun Mausklicks auf Task-Zeilen, um eine Teilmenge von auszuführenden Tasks auszuwählen, statt mit Tastatureingaben zu filtern. Die Release Notes markieren dies als ersten Schritt hin zu « Click-to-Run »-Workflows, bei denen der Benutzer Tasks in der TUI so auswählt, wie er es in einem CI-Dashboard täte.
  3. Automatisches Kopieren von TUI-Selektionen in die Zwischenablage bei Maus-Release (#13208). Ein kleiner UX-Gewinn, der die Schleife « Text in der TUI auswählen, kopieren » ohne Tastenkürzel schließt.
  4. --production auf turbo prune (#13190). Auf einen deploybaren Subset prunen und devDependencies in einem Flag ausschließen, was Docker-Layer für Produktions-Deploys vereinfacht.
  5. Token-Exchange-Wiederherstellungsanleitung (#13192). Wenn der Turborepo-Plattform-Binär-Fetch auf ein abgelaufenes oder fehlerhaftes Token stößt, zeigt der Fehler nun den Benutzer auf das Wiederherstellungs-Kommando, statt mit einer generischen unauthorized-Meldung zu scheitern.
  6. TypeScript 7.0.1-rc als Workspace-Toolchain (#13144). Turborepos eigenes Repo wird nun gegen TypeScript 7.0.1-rc, den Release-Candidate des nativen (Go) TypeScript-7-Compilers, gebaut. Der Move verkürzt die Schleife von « wir liefern ein Feature in Turborepo » zu « wir liefern ein Feature in Turborepo und beweisen es auf dem TS-Compiler der nächsten Generation ».
  7. Thin LTO + codegen-units=1 für Release-Builds (#13160). Die Rust-Release-Binaries verwenden nun Thin LTO und eine einzige Codegen-Unit, was das Standard-Rust-Rezept für kleinere, etwas langsamer zu bauende Release-Binaries ist. Die Zahlen sind nicht in der PR, aber eine vergleichbare Änderung im oxc-Toolchain entfernte ~10-15% der Release-Binary-Größe.
  8. Cache-Hashing-Performance-Fixes (#13209, #13211, #13210). Drei Commits entfernen Deep-Clones aus dem Lockfile-Closure-Cache, der Package-Graph-Wurzel und dem Env-Wildcard-Matcher. Der Hash-Schritt ist die am häufigsten wiederholte Arbeit in turbo run, und das Entfernen von Clones davon zeigt sich bei jeder turbo run build-Aufruf in einem großen Monorepo.

Die Lockfile-Geschichte in 2.10.3 ist ebenfalls bemerkenswert über den nub- und aube-Support hinaus. PR #13119 (tsushanth) sorgt dafür, dass Turborepo Bun-Lockfile v2 akzeptiert, das neue Format, das in Bun 1.3.x landete. PR #13191 sorgt dafür, dass Boundaries-Checks node_modules überspringen, was eine Klasse von False-Positive-« Dependency-Boundary-Violated »-Fehlern schließt, die in Monorepos mit vendored Abhängigkeiten auftraten. PR #13198 verwandelt fehlerhaftes JSON in turbo.json von Panic zu typisiertem Fehler. PR #13199 verbessert die Fehlermeldung, wenn der plattformspezifische Binär-Fetch fehlschlägt (der « haben Sie vergessen, turbo für diese Plattform zu installieren »-Pfad).

Warum das für Monorepo-Nutzer zählt

Die beiden Nachrichtenfäden (nub- und aube-Adoption; die TUI- und Perf-Arbeit) sind durch einen einzigen Shift verbunden: Der JS-Toolchains konsolidiert sich auf das Modell « Stock-Node erweitern » statt auf das Modell « Node durch ein neues Runtime ersetzen ». Bun und Deno wetteten auf ein neues Runtime, und die Wette zahlte sich in Performance aus, kostete das Ökosystem aber eine Migration. nub und aube nehmen die Bun-artige DX und liefern sie obendrauf auf Stock-node, was bedeutet, dass ein Team eines von beiden adoptieren kann, ohne zu ändern, was in Produktion läuft. Turborepo ist der erste Mainstream-Task-Runner, der diese Position formalisiert: Wenn das packageManager-Feld auf nub oder aube zeigt, weiß der Monorepo-Orchestrator, was mit den Install-, Prune-, Generate- und Cache-Hashing-Schritten zu tun ist, ohne dass das Team eigene Detektorlogik schreibt.

Für Monorepo-Nutzer ist der praktische Takeaway ein ruhigeres npx @turbo/codemod migrate- oder bunx @turbo/codemod migrate-Fenster dieses Wochenende. Die Release ist additiv: Bestehende 2.10.x-Monorepos funktionieren weiter, die TUI ist ein Default, der mit TURBO_TUI=0 oder dem Streamed-Logs-Toggle rückgängig gemacht werden kann, und die nub/aube-Erkennung aktiviert sich nur, wenn das packageManager-Feld auf einen der beiden zeigt. Die Perf-Arbeit (Thin LTO, Codegen-Units=1, Entfernung der Lockfile- und Package-Graph-Clones) zeigt sich als kleine, aber messbare Verbesserung bei jedem turbo run build in einem großen Monorepo, ohne sichtbare Config-Änderung.

Das langfristige Signal ist das Autoren-Pairing. colinhacks (Zod, 43k Sterne, TypeScript-first-Schemavalidierung) ist dieselbe Person, die nub geschrieben hat. jdx (mise, der asdf-Nachfolger) ist dieselbe Person, die aube geschrieben hat. Dass der Zod-Autor auf eine Stock-Node-Toolchain wettet und der mise-Autor auf einen Bun-artigen Install-Pfad auf Stock-Node wettet, ist ein starkes Signal dafür, dass sich der JS-Toolchain-Konsens von der « neues-Runtime »-Wette weg bewegt und hin zu « das bestehende Runtime sich so schnell anfühlen lassen wie Bun, ohne die Migration ».

Häufig gestellte Fragen

Verwandte Artikel

Weitere Berichterstattung zu ähnlichen Themen und Tags.

npm 11.18 befördert die `linked`-Installationsstrategie zu stabil, führt den `npm install-scripts`-Namensraum ein und warnt, wenn `min-release-age` einen Audit-Fix blockiert
tooling

npm 11.18 befördert die `linked`-Installationsstrategie zu stabil, führt den `npm install-scripts`-Namensraum ein und warnt, wenn `min-release-age` einen Audit-Fix blockiert

npm 11.18.0 (29. Juni 2026) liefert drei Features und einen langen Bugfix-Backlog, die zusammen die Arbeit am `install-strategy=linked`-(isolated)-Installationsmodus abschließen, die das npm-CLI seit RFC #0042 aus dem Jahr 2022 verfolgt. Die Schlagzeile ist [PR #9677](https://github.com/npm/cli/pull/9677) (Backport von #9674), die `--install-strategy=linked` von experimentell auf stabil hebt. Der Modus installiert jedes Paket in `node_modules/.store/<name>@<version>/node_modules/<dep>` und verlinkt dessen deklarierte Abhängigkeiten in den eigenen `node_modules/<dep>`-Baum, sodass ein Paket nur Abhängigkeiten `require`n kann, die tatsächlich in seinem eigenen `package.json` stehen. Die neue Doku-Empfehlung ([PR #9690](https://github.com/npm/cli/pull/9690)) lautet, `--install-strategy=linked` in CI auszuführen, um Phantom-Abhängigkeiten vor dem Veröffentlichen abzufangen. Um die Beförderung herum liefert die Release den neuen `npm install-scripts`-Namensraum ([#9635](https://github.com/npm/cli/pull/9635), Backport von #9629) mit `approve`, `deny` und `ls`, wobei `npm approve-scripts` / `npm deny-scripts` als Alias erhalten bleiben; einen `install-scripts: prune unused allowScripts entries`-Aufräumdurchlauf ([#9662](https://github.com/npm/cli/pull/9662)); und eine neue Warnung, wenn `min-release-age` einen `npm audit fix` blockiert ([#9564](https://github.com/npm/cli/pull/9564)). Die 43-Commit-Release fixt zudem 19 Bugs der `linked`-Strategie (Audit-Determinismus #9638, verwaiste `.bin`-Shims #9643, Aufräumen veralteter `.store`-Verzeichnisse #9649, ungültiger `filterNode`-Crash #9645, peerOptional-Validierung #9641), drei `npm sbom`-Fixes und einen Prozent-Encoding-Fix für den `vcs_url`-Qualifier in generierten Purls ([#9693](https://github.com/npm/cli/pull/9693)).
Prettier 3.9 überholt fünf Parser: micromark für Markdown, yaml v2, GraphQL.js v17, ein Rust-basierter Flow-Parser und Angular
tooling

Prettier 3.9 überholt fünf Parser: micromark für Markdown, yaml v2, GraphQL.js v17, ein Rust-basierter Flow-Parser und Angular

Prettier 3.9.0, veröffentlicht am 27. Juni 2026 (prettier/prettier, Blogpost von Fisker Cheung), ist eine parserlastige Version, die Markdown von remark-parse v8 auf micromark v4 hebt (bessere CommonMark- und GFM-Konformität sowie eine Reihe lange bestehender Parsing-Bugs behoben), YAML auf yaml v2, GraphQL auf GraphQL.js v17 (Fragment-Argumente und Direktiven auf Direktivdefinitionen), Flow auf den neuen Rust-basierten oxidized-Parser des Flow-Teams (rund 37 % schneller bei Prettiers gültigen Flow-Fixtures und 43 % schneller bei flow_parser.js in lokalen Parser-only-Benchmarks) und Angular. Auch der JavaScript- und TypeScript-Printer wurde überarbeitet, insbesondere im --no-semi-Modus, wo Kommentare um break und continue jetzt über mehrere Durchläufe stabil sind (ein Idempotenz-Fix), sowie redundante Klammern in return, die Ausrichtung von eingebetteten Template-Interpolationen und das Inlining von logischen Negationen. Die Version entfernt die veraltete import ... assert {}-Syntax (Babel 8 hat das Parser-Plugin entfernt; migriert zu with), repariert eine stillschweigend defekte Option --cache-strategy content und verhindert, dass EditorConfig-Dateien oberhalb von Git-Worktrees einsickern. Das Team erinnert daran, die genaue Version in der package.json festzupinnen, da die Formatierungsänderungen Diffs erzeugen.
TypeScript 7.0 RC ist da: Der Go-Compiler erreicht den Release Candidate, rund 10-mal schneller, mit Side-by-Side-Migration
typescript

TypeScript 7.0 RC ist da: Der Go-Compiler erreicht den Release Candidate, rund 10-mal schneller, mit Side-by-Side-Migration

TypeScript 7.0 RC (18. Juni 2026) ist der Release Candidate des Compilers, den Microsoft von seiner in TypeScript gebooteten Codebasis nach Go portiert hat. Er ist oft rund 10-mal schneller als TypeScript 6.0, liefert ein tsc6-Kompatibilitätspaket für den parallelen Betrieb mit 6.0, fügt die Parallelitäts-Flags --checkers/--builders/--singleThreaded und einen neu aufgebauten Watch-Modus auf einem Go-Port von @parcel/watcher hinzu und macht alle Deprecations aus 6.0 zu harten Fehlern. Das stabile Release ist für den kommenden Monat geplant, eine stabile programmierbare API wird auf 7.1 verschoben.

Kommentare

Anmelden Melden Sie sich an, um an der Diskussion teilzunehmen.

Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.