What's Changed
Changelog
- chore: Release Turborepo 2.11.8 by @github-actions[bot] in #14789
- perf: Prefetch Cargo metadata during lazy graph construction by @anthonyshew in #14497
- perf: Compute Berry lockfile closures once across workspaces by @anthonyshew in #14499
- perf: Check cache hit outputs in place instead of on the blocking pool by @anthonyshew in #14524
- perf: Speed up Berry lockfile loading by @anthonyshew in #14500
- perf: Parse bun.lock without building a JSON syntax tree by @anthonyshew in #14502
- perf: Skip the dry run cache batch window when there is no remote cache by @anthonyshew in #14505
- perf: Emit lockfile closures pre-sorted and cheapen closure interning by @anthonyshew in #14525
- perf: Reuse configuration derived from turbo.json between the shim and the CLI by @anthonyshew in #14521
- feat: Report locked tools-only setup plans by @anthonyshew in #14483
- perf: Compute Bun lockfile closures once across workspaces by @anthonyshew in #14501
- perf: Reuse open parent directories when restoring cache archives by @anthonyshew in #14506
- perf: Skip dropping the run right before turbo run exits by @anthonyshew in #14507
- perf: Match literal input exclusions without compiling globs by @anthonyshew in #14510
- perf: Copy pruned package files in parallel by @anthonyshew in #14512
- feat: Report proposed first-lock and refresh setup plans by @anthonyshew in #14571
- perf: Compress large cache archives with multithreaded zstd by @anthonyshew in #14698
- perf: Read tracked file stats from directory listings on Windows by @anthonyshew in #14633
- perf: Diff changed lockfile resolutions with a merge instead of ordered sets by @anthonyshew in #14630
- perf: Write dry run text output through one buffered stdout handle by @anthonyshew in #14625
- perf: Parse pnpm-workspace.yaml once per command by @anthonyshew in #14620
- perf: Write each file trace error to stderr in a single call by @anthonyshew in #14618
- perf: Reuse glob validation results when re-validating turbo.json in the language server by @anthonyshew in #14615
- perf: Keep git subprocesses off the critical path of dry runs by @anthonyshew in #14610
- perf: Classify watch file changes when they arrive instead of on a 100ms poll by @anthonyshew in #14600
- perf: Buffer TUI raw-output spool writes by @anthonyshew in #14597
- perf: Add the turbo query version key without re-parsing the response by @anthonyshew in #14592
- perf: Replay cached task logs in whole-line chunks by @anthonyshew in #14590
- perf: Write each boundaries diagnostic to stderr in a single call by @anthonyshew in #14587
- perf: Walk leading-globstar input trees in parallel without wax by @anthonyshew in #14511
- perf: Reuse open parent directories when writing cache archives by @anthonyshew in #14513
- perf: Index Bun lockfile subgraph lookups instead of rescanning all packages by @anthonyshew in #14514
- perf: Render the pruned lockfile while package files are copied by @anthonyshew in #14515
- feat: Resolve exact native npm lock cohorts by @anthonyshew in #14484
- perf: Batch prefixed task output into one write per chunk by @anthonyshew in #14588
- perf: Share one allocation per external package identity by @anthonyshew in #14528
- perf: Remove quadratic package-name scan from microfrontends discovery by @anthonyshew in #14527
- perf: Render file trace errors on several threads by @anthonyshew in #14623
- perf: Check boundaries packages in parallel again by @anthonyshew in #14598
- perf: Read PTY child output in 8 KiB chunks by @anthonyshew in #14594
- perf: Load each package's tsconfig once when checking boundaries by @anthonyshew in #14589
- perf: Skip the file watcher round trip when checking outputs for new task hashes by @anthonyshew in #14626
- perf: Refresh only memory stats in
turbo infoby @anthonyshew in #14593 - perf: Walk and record prune copy plans in parallel by @anthonyshew in #14522
- feat: Reconcile sealed clone-local setup selections by @anthonyshew in #14485
- test: Add macOS ACL safety prerequisite for setup state by @anthonyshew in #14493
- fix: Accept Homebrew's bundled npm prefix in setup source preflight by @anthonyshew in #14566
- feat: Report ignored version manager declarations during setup by @anthonyshew in #14531
- feat: Provision clone-local setup without lock writes by @anthonyshew in #14486
- feat: Integrate native npm provisioning into setup by @anthonyshew in #14491
- test: Check pruned setup outputs through the real CLI by @anthonyshew in #14529
- feat: Parse Go toolchain declarations for setup by @anthonyshew in #14530
- feat: Parse root uv version requests for setup by @anthonyshew in #14533
- test: Prove Unix process parity for native and npm-wrapped turbo run by @anthonyshew in #14539
- feat: Add root-only
turbo setuppolicy to turbo.json by @anthonyshew in #14541 - test: Interrupt Unix turbo setup through both entrypoints by @anthonyshew in #14542
- feat: Bootstrap a verified repository-scoped rustup by @anthonyshew in #14543
- feat: Follow approved release CDN redirects in verified downloads by @anthonyshew in #14557
- test: Prove native Windows process parity for standalone and npm-wrapped turbo run by @anthonyshew in #14565
- fix: Explain missing Git and non-repository setup roots by @anthonyshew in #14567
- fix: Keep non-UTF-8 arguments from crashing the turbo shim by @anthonyshew in #14570
- feat: Install managed tool generations on native Windows by @anthonyshew in #14582
- feat: Add the shell hook by default from the POSIX installer by @anthonyshew in #14608
- feat: Accept Corepack SHA-224 package manager pins by @anthonyshew in #14640
- fix: Accept official Bun ZIP metadata in verified archives by @anthonyshew in #14657
- fix: Write turbo.lock as indented JSON by @anthonyshew in #14738
- fix: Accept project .npmrc files with only install-layout settings by @anthonyshew in #14740
- feat: Define native lifecycle-script policy for dependency setup by @anthonyshew in #14661
- feat: Resolve uv requests to official locked releases by @anthonyshew in #14537
- feat: Install locked uv with repo-scoped launchers by @anthonyshew in #14538
- feat: Record official Go release artifacts in turbo.lock by @anthonyshew in #14532
- feat: Create, refresh, and freeze uv selections in turbo setup by @anthonyshew in #14547
- feat: Resolve root Python requests through managed uv by @anthonyshew in #14552
- fix: Lock managed Python for every supported architecture by @anthonyshew in #14691
- feat: Select Linux setup artifacts by detecting the host libc at runtime by @anthonyshew in #14637
- feat: Provision verified Go toolchain archives by @anthonyshew in #14544
- feat: Provision locked rustup from turbo setup by @anthonyshew in #14548
- fix: Keep managed setup working under Ubuntu's default 0002 umask by @anthonyshew in #14666
- feat: Provision pnpm 11 releases with their module entry points by @anthonyshew in #14742
- fix: Accept npm and pnpm wrapper environments in setup source policy by @anthonyshew in #14643
- feat: Extract official python-build-standalone archives by @anthonyshew in #14669
- feat: Declare additional repository tools in root setup policy by @anthonyshew in #14574
- fix: Parse JSX in JavaScript files by @sahyl in #14794
- fix: Complete CI frozen setup behavior by @anthonyshew in #14492
- feat: Provision tools with plain turbo setup and report skipped dependencies by @anthonyshew in #14650
- feat: Record trusted setup installations outside the repository by @anthonyshew in #14494
- feat: Provision pnpm 12 native binaries from verified platform packages by @anthonyshew in #14743
- feat: Parse root rust-toolchain files into portable requests by @anthonyshew in #14550
- feat: Provision locked Python interpreters through managed uv by @anthonyshew in #14559
- feat: Sync uv workspaces from the committed uv.lock by @anthonyshew in #14561
- feat: Resolve Rust toolchain requests to exact locked channels by @anthonyshew in #14551
- feat: Authorize prepared tools from private setup evidence by @anthonyshew in #14495
- feat: Install locked Rust toolchains through private rustup by @anthonyshew in #14562
- feat: Create and update Rust selections in turbo.lock by @anthonyshew in #14563
- feat: Prefetch locked Cargo dependencies with managed cargo by @anthonyshew in #14564
- feat: Activate trusted Node and pnpm for task execution by @anthonyshew in #14508
- feat: Enforce managed run compatibility before CLI handoff by @anthonyshew in #14509
- fix: Close managed execution authorization gaps by @anthonyshew in #14516
- fix: Preserve informational exits in managed repositories by @anthonyshew in #14519
- feat: Reuse trusted installations for offline setup by @anthonyshew in #14518
- feat: Add experimental managed Node and pnpm peer capabilities by @anthonyshew in #14517
- feat: Lock additional tool artifacts and detect declaration drift by @anthonyshew in #14575
- feat: Install additional tools through a generic verified artifact backend by @anthonyshew in #14577
- feat: Activate locked uv and Python and check their readiness by @anthonyshew in #14649
- fix: Precompile managed Python bytecode while staging by @anthonyshew in #14670
- feat: Prune setup records for deleted, moved, or re-cloned roots by @anthonyshew in #14655
- feat: Activate locked Rust toolchains and check their readiness by @anthonyshew in #14651
- feat: Provision locked additional tools from turbo setup by @anthonyshew in #14581
- feat: Create and refresh Go entries in turbo.lock during local setup by @anthonyshew in #14553
- feat: Prefetch Go modules without changing go.mod or go.sum by @anthonyshew in #14554
- feat: Advertise the managed Node/pnpm peer contract on GNU Linux x64 by @anthonyshew in #14641
- feat: Provision locked Yarn classic binaries by @anthonyshew in #14555
- feat: Add repository and CLI controls for skipping lifecycle scripts by @anthonyshew in #14662
- feat: Explain whether turbo setup repairs tools or updates the lock by @anthonyshew in #14654
- feat: Reuse verified tool downloads across repositories by @anthonyshew in #14535
- perf: Cache installed tool tree hashes per generation by @anthonyshew in #14653
- test: Exercise global setup then plain turbo run end to end by @anthonyshew in #14642
- feat: Apply root setup policy and CLI overrides in turbo setup by @anthonyshew in #14663
- feat: Pin and verify the xz Rust tarballs rustup downloads by @anthonyshew in #14771
- feat: Hash locked additional-tool artifact identity portably by @anthonyshew in #14583
- feat: Provision locked modern Yarn bundles by @anthonyshew in #14556
- feat: Provision locked Bun binaries without global Bun by @anthonyshew in #14558
- feat: Provision offline setup from verified cached artifacts by @anthonyshew in #14540
- feat: Measure and remove inactive managed tool storage by @anthonyshew in #14549
- feat: Create and update turbo.lock for Yarn and Bun during local setup by @anthonyshew in #14560
- feat: Validate installed Yarn and Bun activation plans and checks by @anthonyshew in #14648
- feat: Set up Bun-only repositories without a Node declaration by @anthonyshew in #14658
- feat: Add a shell hook that activates managed tools in bash and zsh by @anthonyshew in #14603
- feat: Add an uninstall mode to the POSIX installer by @anthonyshew in #14636
- test: Recover setup killed mid-download and mid-unpack by @anthonyshew in #14569
- feat: Route setup downloads through credential-free mirror overrides by @anthonyshew in #14545
- test: Race concurrent setup writers over one shared cache by @anthonyshew in #14573
- feat: Clean up replaced managed tools automatically during setup by @anthonyshew in #14652
- feat: Add the
turbo execcommand surface by @anthonyshew in #14536 - feat: Run
turbo execcommands with the managed environment by @anthonyshew in #14568 - feat: Activate locked Go and check its readiness in turbo setup --check by @anthonyshew in #14644
- feat: Name the missing Node declaration when --no-lock setup cannot start by @anthonyshew in #14701
- feat: Add shell hook support for fish and PowerShell by @anthonyshew in #14606
- fix: Run turbo setup in pruned output without a Git repository by @anthonyshew in #14639
- fix: Accept umask 0002 ancestors of trusted setup records by @anthonyshew in #14702
- fix: Guard managed
turbo execlocal CLI handoff by @anthonyshew in #14572 - feat: Lock and verify system Node.js and pnpm under verify-system policy by @anthonyshew in #14664
- feat: Record and authorize trusted setup roots on native Windows by @anthonyshew in #14659
- test: Verify
turbo execend to end from nested paths by @anthonyshew in #14578 - test: Prove Unix
turbo execparity for standalone and npm wrapper by @anthonyshew in #14580 - feat: Provision managed Node and pnpm on native Windows by @anthonyshew in #14584
- fix: Preserve
turbo execbehavior for Windows.cmdlaunchers and Ctrl+C by @anthonyshew in #14646 - test: Prove native Windows
turbo execentrypoint parity without managed tools by @anthonyshew in #14660 - fix: Stop native Windows turbo setup on Ctrl+C from either entrypoint by @anthonyshew in #14591
- fix: Refuse managed setup on Windows arm64 hosts, including x64 turbo under emulation by @anthonyshew in #14672
- fix: Propose setup plans with every ecosystem's lock resolver by @anthonyshew in #14744
- fix: Detect the host libc for managed turbo run by @anthonyshew in #14710
- feat: Add a frozen npm install adapter for setup dependencies by @anthonyshew in #14718
- feat: Activate additional tool binaries in managed run and exec by @anthonyshew in #14706
- feat: Install locked npm dependencies during turbo setup by @anthonyshew in #14721
- feat: Follow HTTPS redirects for additional-tool artifacts by @anthonyshew in #14707
- feat: Configure setup mirrors in the root setup policy by @anthonyshew in #14700
- feat: Record trusted setup roots for --no-lock installs by @anthonyshew in #14727
- feat: Activate and hash --no-lock selections in plain turbo run by @anthonyshew in #14729
- feat: Install additional-tool archives without a top-level folder by @anthonyshew in #14708
- feat: Mirror Bun, uv, and Python release downloads by @anthonyshew in #14714
- feat: Mirror Go and Rust release downloads by @anthonyshew in #14739
- feat: Provision declared npm without lock writes by @anthonyshew in #14730
- feat: Activate every managed ecosystem in turbo run, including its own probes by @anthonyshew in #14711
- feat: Download additional tools through the shared cache, offline mode, and a mirror by @anthonyshew in #14709
- feat: Resolve native task commands through managed binaries by @anthonyshew in #14712
- test: Cover the Unix additional-tool setup, run, and recovery matrix by @anthonyshew in #14717
- feat: Qualify additional tools on native Windows x64 by @anthonyshew in #14731
- feat: Use verified system tools in managed turbo run by @anthonyshew in #14713
- test: Exercise managed Go setup then plain turbo run without host Go by @anthonyshew in #14719
- test: Exercise managed Rust setup then plain turbo run without host Rust by @anthonyshew in #14720
- test: Exercise managed uv and Python setup then plain turbo run without host Python by @anthonyshew in #14722
- test: Exercise managed Yarn and Bun setup then plain turbo run without host tools by @anthonyshew in #14723
- fix: Let turbo run and turbo exec use verify-system tools on musl hosts by @anthonyshew in #14751
- test: Qualify Yarn classic and modern Yarn setup on native Windows x64 by @anthonyshew in #14746
- feat: Provision managed uv on native Windows x64 by @anthonyshew in #14749
- feat: Provision locked Rust toolchains on native Windows x64 by @anthonyshew in #14752
- fix: Kill the command when
turbo execis killed by @anthonyshew in #14757 - feat: Provision managed Go from the official Windows x64 zip by @anthonyshew in #14748
- feat: Provision managed Python on native Windows x64 by @anthonyshew in #14756
- feat: Activate managed tools from the PowerShell hook on native Windows x64 by @anthonyshew in #14747
- feat: Activate managed Go with a plain GOROOT on native Windows by @anthonyshew in #14754
- feat: Provision locked Bun on native Windows x64 by @anthonyshew in #14750
- fix: Keep PowerShell hook output ASCII so console code pages cannot corrupt PATH by @anthonyshew in #14755
- feat: Provision pnpm 12 native binaries on native Windows x64 by @anthonyshew in #14753
- fix: Kill the local
turbowhen the globalturbothat handed off is killed by @anthonyshew in #14785 - feat: Activate managed Rust on native Windows x64 by @anthonyshew in #14758
- feat: Activate managed Go from the shell hook on native Windows x64 by @anthonyshew in #14764
- fix: Block cache restoration writes to Git metadata by @anthonyshew in #14808
- feat: Report locked dependency actions in turbo setup plans and checks by @anthonyshew in #14724
- feat: Advertise the managed-run peer contract on every claimed platform by @anthonyshew in #14780
- fix: Activate managed tools in turbo watch by @anthonyshew in #14779
- perf: Stamp installed tool trees on native Windows by @anthonyshew in #14774
- feat: Install pnpm dependencies in frozen mode during setup by @anthonyshew in #14726
- feat: Measure setup outcomes through standard telemetry by @anthonyshew in #14546
- feat: Install Yarn dependencies immutably during setup by @anthonyshew in #14733
- fix: Activate managed tools in commands that discover the repository by @anthonyshew in #14784
- feat: Install Bun dependencies from a frozen lock during setup by @anthonyshew in #14734
- feat: Sync locked uv workspaces during turbo setup by @anthonyshew in #14735
- fix: Reject Windows prefixed paths during cache restore by @anthonyshew in #14809
- feat: Prefetch locked Cargo dependencies during turbo setup by @anthonyshew in #14736
- feat: Prefetch Go modules during turbo setup by @anthonyshew in #14737
- test: Cover managed uv and Python setup on native Windows x64 by @anthonyshew in #14761
- feat: Prefetch Cargo dependencies and report the MSVC linker on Windows by @anthonyshew in #14760
- feat: Install locked dependencies offline from native caches by @anthonyshew in #14759
- feat: Prefetch Go modules with managed Go on native Windows by @anthonyshew in #14762
- feat: Install locked JavaScript dependencies on native Windows x64 by @anthonyshew in #14763
- feat: Probe repository-local turbo on Windows and cover pins on every platform by @anthonyshew in #14781
- feat: Export managed runtime variables from the shell hook on every platform by @anthonyshew in #14802
- refactor: Route setup's Git queries through an injectable boundary by @anthonyshew in #14811
- perf: Load each tsconfig once per file trace by @anthonyshew in #14627
- perf: Overlap reading and compression when writing large cache archives by @anthonyshew in #14604
- perf: Speed up pnpm lockfile pruning and encoding in turbo prune by @anthonyshew in #14520
- perf: Prefetch remote cache artifacts as soon as task hashes are known by @anthonyshew in #14585
- perf: Remove the remaining quadratic passes from the Bun prune subgraph by @anthonyshew in #14523
- perf: Memoize Cargo.lock closures and share resolution identities by @anthonyshew in #14498
- perf: Match node_modules-style exclusions by path segment instead of compiling globs by @anthonyshew in #14634
- perf: Avoid waking the rayon pool for small workspaces by @anthonyshew in #14602
- perf: Overlap affected change detection with package graph construction by @anthonyshew in #14496
- perf: Find line breaks in task output a block at a time by @anthonyshew in #14601
- perf: Buffer task log file writes in 64 KiB blocks by @anthonyshew in #14607
- perf: Hand lockfile closures to JavaScript resolution as indices by @anthonyshew in #14596
- perf: Share each file's text across its trace errors by @anthonyshew in #14632
- fix: Preserve task output after non-zero exits by @vercel-gh-bot-3[bot] in #14373
- perf: Overlap reading and compression when building cache archives for upload by @anthonyshew in #14617
- perf: Install cache archives locally while they upload by @anthonyshew in #14622
- perf: Skip newline normalization copies for already-normalized TUI output by @anthonyshew in #14595
- chore: Update with-changesets example by @vercel-gh-bot-3[bot] in #14638
- fix: Attribute Cargo.lock changes to the crates whose dependencies changed by @PedroRosalba in #14656
- fix: Stop installing the Unix shell hook automatically by @anthonyshew in #14813
- chore: Release Turborepo 2.11.9-canary.1 by @github-actions[bot] in #14817
- fix: Allow native package manager configuration during setup by @anthonyshew in #14816
- refactor: Remove setup lifecycle script controls by @anthonyshew in #14818
- docs: Use .NET in the multi-language guide by @sahyl in #14793
- fix(cache): Parallelize dry-run HEAD fallback by @FOWEPJF255 in #14801
New Contributors
- @FOWEPJF255 made their first contribution in #14801
Full Changelog: v2.11.8...v2.11.9