apps/docs/content/blog/turbo-2-6.mdx
import { Authors } from "@/components/blog/authors"; import { Tabs, Tab } from "fumadocs-ui/components/tabs"; import { Date } from "@/components/blog/date"; import { Accordion, Accordions } from "@/components/geistdocs/accordion"; import { ThemeAwareImage } from "@/components/geistdocs/theme-aware-image"; import MicrofrontendsImageDark from "../../public/images/blog/turbo-2-6/microfrontends-dark.png"; import MicrofrontendsImageLight from "../../public/images/blog/turbo-2-6/microfrontends-light.png"; import TaskSearchImageDark from "../../public/images/blog/turbo-2-6/task-search-dark.png"; import TaskSearchImageLight from "../../public/images/blog/turbo-2-6/task-search-light.png";
<Date>Tuesday, October 28th, 2025</Date>
<Authors authors={["anthonyshew", "tomknickman"]} />
Turborepo 2.6 includes a number of improvements to developer experience for your repository:
localhost portbun.lock/ to focus tasks fasterUpgrade today by running npx @turbo/codemod migrate or get started with npx create-turbo@latest.
# Use the automated upgrade CLI
pnpm dlx @turbo/codemod migrate
# Start a new repository
pnpm dlx create-turbo@latest
# Use the automated upgrade CLI
yarn dlx @turbo/codemod migrate
# Start a new repository
yarn dlx create-turbo@latest
# Use the automated upgrade CLI
npx @turbo/codemod migrate
# Start a new repository
npx create-turbo@latest
# Use the automated upgrade CLI
bunx @turbo/codemod migrate
# Start a new repository
bunx create-turbo@latest
Vertical microfrontends are an architecture where multiple applications are served on one production domain, split into "zones". Each path for the domain is handled by one of the applications.
<ThemeAwareImage className="my-4 flex justify-center" light={{ alt: "", src: MicrofrontendsImageLight, props: { width: 1600, height: 750, className: "dark:hidden block rounded-xl", }, }} dark={{ alt: "", src: MicrofrontendsImageDark, props: { width: 1600, height: 750, className: "hidden dark:block rounded-xl", }, }} />
This strategy gives teams at scale the ability to ship more independently. Release cycles become decoupled, build times can be brought down, and CI pipelines can get more focused, among other benefits.
While this does help production deployments, it can create difficulty for local development since you’ll have to run many applications instead of just one. Each application ends up needing its own development command and port to use.
Today, we’re releasing a microfrontend proxy for local development, so that all of your applications can run on one port, with one command. Add a microfrontends.json file to your parent application and Turborepo will automatically proxy localhost:3024 to the ports for your other applications.
{
"$schema": "https://turborepo.dev/microfrontends/schema.json"
"applications": {
"web": {
"development": {
"local": 3000
}
},
"docs": {
"development": {
"local": 3001
},
"routing": [
{
"paths": ["/docs", "/docs/:path*"]
}
]
}
}
}
Just run turbo dev. In this configuration, your docs app runs its development server on localhost:3001 and will handle requests for /docs and all nested paths in /docs. The web app runs on localhost:3000 and handles all other requests.
Visit the documentation to learn more.
While Turborepo’s native microfrontend proxy is meant for working locally, we’re deeply integrating with infrastructure providers to help you bring your microfrontends architecture to production.
For example, we’ve designed the Turborepo-native microfrontends proxy to work with Vercel’s microfrontends product, which is also releasing to GA today. In fact, Vercel’s microfrontends feature provided the research for Turborepo-native microfrontends. We explored how to build microfrontends, locally and in production, with some of the largest customers at Vercel, and are now extracting those learnings from closed-source to open-source.
When you install @vercel/microfrontends into your repository, Turborepo will dynamically adjust your local environment to use the proxy provided by the package, deeply integrating with your production infrastructure. Visit the Vercel microfrontends documentation to learn more.
We look forward to working with more providers to integrate seamless microfrontends across your stack. If you are an infrastructure provider looking to integrate, please reach out.
Bun is a fast, incrementally adoptable all-in-one JavaScript, TypeScript & JSX toolkit. Today, Bun as a package manager is now stable in Turborepo.
This means that, when you use Bun as your package manager, Turborepo will only miss cache for packages that have changes in their dependencies. If you update a dependency for your web application, your docs application’s tasks will still hit cache.
Since September 2023, Turborepo has had Beta support for Bun’s package manager capabilities. Our first iteration worked with the original bun.lockb lockfile, though it didn’t have granular change detection, so any change to your dependencies would result in cache misses for your whole repository. Since then, Bun’s lockfiles have undergone several changes:
bun.lock, with a v0 version. Because this file is text-based, Turborepo could parse it to intelligently cache tasks for your packages based on dependency changes.bun.lock's format changed from a v0 to v1, breaking the parser we created for v0. A package manager’s lockfile isn’t part of its public API, and Bun got much faster because of this change, so we were excited to see the improvement. But we didn't know if we were going to need to rewrite a new parser every month...After a few months of stability and an inspiring blog post about the new lockfile format by the Bun team, Turborepo now handles the latest v1 lockfile format for Bun.
We’ve updated our Support Policy and the rest of our documentation to reflect this update. We also want to thank the Bun team for sending robobun to help us with the first draft of the PR.
The terminal UI in Turborepo was early to today’s trend of TUI-based experiences that we’re seeing in many AI-based workflows. Turborepo’s terminal UI brings many benefits compared to streamed logs, including improved readability for task logs, easy copy-paste for a specific task, interactive tasks, and more.
But in large repositories, it can be slow to scroll through a large list of tens or hundreds of tasks, one-by-one.
Today, we’re improving on our task search to make it one of the fundamental ways that you interact with a large Turborepo. When using the terminal UI, press / to filter to only the tasks that you’re interested in.
<ThemeAwareImage className="my-4 flex justify-center" light={{ alt: 'A terminal window showing Turborepo's terminal UI. The top bar shows a search query for "docs" and the task list has dimmed every task except the tasks containing the name "docs".', src: TaskSearchImageLight, props: { width: 682, height: 746.5, className: "dark:hidden block rounded-xl", }, }} dark={{ alt: 'A terminal window showing Turborepo's terminal UI. The top bar shows a search query for "docs" and the task list has dimmed every task except the tasks containing the name "docs".', src: TaskSearchImageDark, props: { width: 682, height: 746.5, className: "hidden dark:block rounded-xl", }, }} />
Only the tasks that match your search query will be selected. Visit the terminal UI documentation to learn more.
- feat(tui): more keybinds for scrolling ([#10248](https://github.com/vercel/turborepo/pull/10248))
- feat(tui): configurable scrollback length ([#10247](https://github.com/vercel/turborepo/pull/10247))
- feat(codemod): update `$schema` when versioned ([#10319](https://github.com/vercel/turborepo/pull/10319))
- feat(sidebar): improve folder link accessibility and UX ([#10349](https://github.com/vercel/turborepo/pull/10349))
- feat(ls): add dependents to json output ([#10367](https://github.com/vercel/turborepo/pull/10367))
- feat(dry): include `with` in dry run/summary output ([#10373](https://github.com/vercel/turborepo/pull/10373))
- feat(ui): remove gutter from persisted task output ([#10406](https://github.com/vercel/turborepo/pull/10406))
- feat(tui): momentum-based scrolling ([#10420](https://github.com/vercel/turborepo/pull/10420))
- feat(turbo.json): allow for trailing commas ([#10537](https://github.com/vercel/turborepo/pull/10537))
- feat(env): add Windows user profile variables to pass-through ([#10588](https://github.com/vercel/turborepo/pull/10588))
- feat(auth): optional callback port ([#10666](https://github.com/vercel/turborepo/pull/10666))
- feat(create-turbo): `--no-git` flag ([#10720](https://github.com/vercel/turborepo/pull/10720))
- feat(tui): add shortcut for clearing task logs ([#10828](https://github.com/vercel/turborepo/pull/10828))
- feat: new OAuth flow for Turborepo CLI with Vercel ([#10911](https://github.com/vercel/turborepo/pull/10911))
- feat: update `create-turbo` Bun prompt text ([#10918](https://github.com/vercel/turborepo/pull/10918))
- feat(microfrontends): schema.json for microfrontends.json ([#11008](https://github.com/vercel/turborepo/pull/11008))
- feat: Add support for custom microfrontends.json naming ([#11022](https://github.com/vercel/turborepo/pull/11022))
- fix(microfrontends): ensure that local proxy is loose ([#10289](https://github.com/vercel/turborepo/pull/10289))
- fix(codemod): check for pipeline key before using it ([#10295](https://github.com/vercel/turborepo/pull/10295))
- fix(@turbo/repository): no longer require packageManager to detect npm ([#10314](https://github.com/vercel/turborepo/pull/10314))
- fix(watch): allow usage of turbo.jsonc ([#10340](https://github.com/vercel/turborepo/pull/10340))
- fix(dry): do not perform runtime validations on dry runs ([#10375](https://github.com/vercel/turborepo/pull/10375))
- fix(microfrontends): respect packageName field ([#10383](https://github.com/vercel/turborepo/pull/10383))
- fix(pnpm): read linkWorkspacePackages from pnpm-workspace.yaml ([#10391](https://github.com/vercel/turborepo/pull/10391))
- fix(query): use patched version of async-graphql ([#10448](https://github.com/vercel/turborepo/pull/10448))
- fix(turbo-ignore): no longer attempt to use catalog protocol ([#10458](https://github.com/vercel/turborepo/pull/10458))
- fix(@turbo/repository): correct exports from native lib ([#10475](https://github.com/vercel/turborepo/pull/10475))
- fix(turbo): pass through pnpm store env vars by default ([#10520](https://github.com/vercel/turborepo/pull/10520))
- fix(pnpm): respect deep for linkWorkspacePackages ([#10558](https://github.com/vercel/turborepo/pull/10558))
- fix(query): pin to last graphiql version with artifacts ([#10685](https://github.com/vercel/turborepo/pull/10685))
- fix(logs): no longer output group prefixes if no logs present ([#10760](https://github.com/vercel/turborepo/pull/10760))
- fix(turbo): graceful shutdown on sighup ([#10764](https://github.com/vercel/turborepo/pull/10764))
- fix(logs): create log files for non-cached tasks ([#10806](https://github.com/vercel/turborepo/pull/10806))
- fix(security): update dependencies to resolve warning for `node-plop` ([#10847](https://github.com/vercel/turborepo/pull/10847))
- fix: revert #10847 ([#10882](https://github.com/vercel/turborepo/pull/10882))
- fix: update `ui` suggested value in error message for turbo.json ([#10896](https://github.com/vercel/turborepo/pull/10896))
- fix(eslint-config-turbo): use module.exports for ESLint v8 compatibility ([#10902](https://github.com/vercel/turborepo/pull/10902))
- fix(turborepo-lockfiles): handle missing optional dependencies in Bun lockfiles ([#10909](https://github.com/vercel/turborepo/pull/10909))
- fix(lockfiles): include bundled dependencies in Bun lockfile subgraphs ([#10915](https://github.com/vercel/turborepo/pull/10915))
- fix: update remote cache OAuth refresh flow ([#10916](https://github.com/vercel/turborepo/pull/10916))
- fix: --graph=foo.dot should not require graphviz installed ([#10942](https://github.com/vercel/turborepo/pull/10942))
- fix: `injectWorkspacePackages` for `turbo prune` with pnpm ([#10945](https://github.com/vercel/turborepo/pull/10945))
- fix: adjust binary call for microfrontends proxy on Windows ([#10962](https://github.com/vercel/turborepo/pull/10962))
- fix: added Linux env vars to global passthroughs ([#10984](https://github.com/vercel/turborepo/pull/10984))
- fix: windows symlinking bug ([#10992](https://github.com/vercel/turborepo/pull/10992))
- fix: path validation in `microfrontends.json` ([#11006](https://github.com/vercel/turborepo/pull/11006))
- docs: clarification on Transit Nodes docs ([#9181](https://github.com/vercel/turborepo/pull/9181))
- fix(docs): fix SVG attribute casing to remove React warnings ([#10297](https://github.com/vercel/turborepo/pull/10297))
- fix(docs): update redirects rule to resolve access issue on `getting-started` index page ([#10296](https://github.com/vercel/turborepo/pull/10296))
- docs(fix): persist tabs state ([#10313](https://github.com/vercel/turborepo/pull/10313))
- docs(chore): remove classnames dependency ([#10339](https://github.com/vercel/turborepo/pull/10339))
- docs(chore): remove `/repo` references from a few places ([#10370](https://github.com/vercel/turborepo/pull/10370))
- docs(chore): add robots.txt ([#10371](https://github.com/vercel/turborepo/pull/10371))
- docs(fix): better usability on feedback form ([#10382](https://github.com/vercel/turborepo/pull/10382))
- docs(fix): logos when using system theme ([#10388](https://github.com/vercel/turborepo/pull/10388))
- docs(chore): switch to ESM ([#10405](https://github.com/vercel/turborepo/pull/10405))
- docs(fix): date of 2.5 release post ([#10419](https://github.com/vercel/turborepo/pull/10419))
- docs(chore): temporarily revert to webpack ([#10421](https://github.com/vercel/turborepo/pull/10421))
- docs(fix): layout shift on home page ([#10424](https://github.com/vercel/turborepo/pull/10424))
- docs(chore): cleaning up a few todos ([#10426](https://github.com/vercel/turborepo/pull/10426))
- docs(chore): reenable Turbopack ([#10428](https://github.com/vercel/turborepo/pull/10428))
- docs(examples): drop JS config from Tailwind example ([#10445](https://github.com/vercel/turborepo/pull/10445))
- docs(fix): correct `globalDependencies` defaults ([#10484](https://github.com/vercel/turborepo/pull/10484))
- docs(example): use npx turbo and show filtering ([#10500](https://github.com/vercel/turborepo/pull/10500))
- docs(fix): use `pnpm add <pkg>` instead of `pnpm install <pkg>` ([#10529](https://github.com/vercel/turborepo/pull/10529))
- docs(fix): missing commas in package.json files of jest docs ([#10560](https://github.com/vercel/turborepo/pull/10560))
- docs(fix): css import order bug in tailwindcss docs and example ([#10561](https://github.com/vercel/turborepo/pull/10561))
- docs(fix): incorrect CSS filename in Tailwind CSS setup example ([#10573](https://github.com/vercel/turborepo/pull/10573))
- docs(fix): inconsistent command with the illustration ([#10596](https://github.com/vercel/turborepo/pull/10596))
- docs(fix): inconsistent turbo command with the illustration ([#10602](https://github.com/vercel/turborepo/pull/10602))
- docs: fix JSDoc type for ESLint config in basic example ([#10727](https://github.com/vercel/turborepo/pull/10727))
- docs(run): correct --graph formats; remove incorrect default mention ([#10744](https://github.com/vercel/turborepo/pull/10744))
- docs(run): fix --log-prefix options to match CLI (task, not prefix) ([#10743](https://github.com/vercel/turborepo/pull/10743))
- fix(docs): fix broken anchor links to --graph option ([#10773](https://github.com/vercel/turborepo/pull/10773))
- docs: add GitHub Actions reusable workflow documentation for remote caching ([#10923](https://github.com/vercel/turborepo/pull/10923))
- docs: generate blog release OG images ([#10936](https://github.com/vercel/turborepo/pull/10936))
- docs: fix correct package name from eslint-config-turbo to eslint-plugin-turbo ([#10954](https://github.com/vercel/turborepo/pull/10954))
- docs: adjust compute hours saved component initial value ([#10958](https://github.com/vercel/turborepo/pull/10958))
- docs: align tailwindcss 4 guide to the with-tailwind example ([#10963](https://github.com/vercel/turborepo/pull/10963))
- docs: fix typos and formatting issues in Playwright guide ([#10980](https://github.com/vercel/turborepo/pull/10980))
- docs: clarify passthrough args comparison ([#10990](https://github.com/vercel/turborepo/pull/10990))
- docs: fix profile images on home page ([#10993](https://github.com/vercel/turborepo/pull/10993))
- docs: Clarify passthrough args cache miss ([#11026](https://github.com/vercel/turborepo/pull/11026))
- refactor(examples): enhance `with-nestjs` (#8131) ([#10964](https://github.com/vercel/turborepo/pull/10964))
- fix(examples): fix build in fresh vue example project ([#10277](https://github.com/vercel/turborepo/pull/10277))
- fix(non-monorepo): correct devDependency from 'turb' to 'turbo' ([#10526](https://github.com/vercel/turborepo/pull/10526))
- fix(examples): change docker command ([#10362](https://github.com/vercel/turborepo/pull/10362))
- fix(examples): `with-svelte` classes ([#10363](https://github.com/vercel/turborepo/pull/10363))
- feat(examples): upgrade with-tailwind to TailwindCSS v4 ([#10432](https://github.com/vercel/turborepo/pull/10432))
- fix(examples): TypeScript in with-svelte example ([#10450](https://github.com/vercel/turborepo/pull/10450))
- feat(example): update with-react-native-web, Expo SDK 52 ([#10466](https://github.com/vercel/turborepo/pull/10466))
- fix(examples): use entry instead of entryPoints ([#10503](https://github.com/vercel/turborepo/pull/10503))
- fix(example/with-docker): jest can't resolve @repo/jest-presets/node ([#10551](https://github.com/vercel/turborepo/pull/10551))
- fix(example): add missing Tailwind import to shared ui styles ([#10579](https://github.com/vercel/turborepo/pull/10579))
- refactor(examples): remove duplicate Next.js plugin from app tsconfig files ([#10612](https://github.com/vercel/turborepo/pull/10612))
- fix(examples): css specificity in Tailwind example ([#10657](https://github.com/vercel/turborepo/pull/10657))
- refactor(examples): update CSS variable names to use consistent --color- prefix in tailwind examples ([#10662](https://github.com/vercel/turborepo/pull/10662))
- fix(examples): vitest version upgrade ([#10667](https://github.com/vercel/turborepo/pull/10667))
- fix(examples): update vitest config paths for packages and apps in `with-vitest` ([#10675](https://github.com/vercel/turborepo/pull/10675))
- fix(examples): correct 'test:projects' script to use vitest directly ([#10683](https://github.com/vercel/turborepo/pull/10683))
- fix(examples): add missing extension to with-react-native-web ui tsconfig ([#10694](https://github.com/vercel/turborepo/pull/10694))
- examples: Upgrade core-team-maintained examples to Next.js 16 ([#11014](https://github.com/vercel/turborepo/pull/11014))
Turborepo is the result of the combined work of all of its contributors, including our core team: Anthony and Tom.
Thank you for your continued support, feedback, and collaboration to make Turborepo your build tool of choice. To learn how to get involved, visit the Community page.
We also thank everyone who contributed to this release of Turborepo: @0ri0nexe, @0xmuon, @ahlimanhuseynov, @Alvi24, @andrewjdimola, @ashishkumar901336, @aviramha, @brunoapaulino, @chris-olszewski, @d0lwl0b, @DiegoDev2, @dstewart1911, @emilbjorklund, @eric-hjh, @esauri, @eug-vs, @evsasse, @felipetau, @Franck-Fernandez-pro, @grgsh, @haklee, @hijuliancode, @hugomassing, @JacksonSL, @JamesHenry, @jeonghwan-park, @jferrettiboke, @jihwan1211, @JoeyKamsteeg, @kade-robertson, @kenfdev, @kitfoster, @leopardracer, @mamuso, @mcky, @melroy, @MendyLanda, @mischnic, @mknichel, @mrr11k, @namidapoo, @NathanM2000, @neonerdy, @nivekithan, @ognevny, @oliveirabalsa, @pawbor, @pzion, @Redddy, @richardhuf84, @robbym, @robobun, @safaiyeh, @sahyl, @Satheeshsk369, @schwenkm, @sdavids, @shinjith-dev, @sitek94, @tedw, @tetzng, @vikhyathdevadiga, @xcfio, @yam-codes, and @yamadayutaka