Skip to content

feat: Remove daemon from turbo run, deprecate daemon flags and config#11910

Merged
anthonyshew merged 1 commit intomainfrom
shew/faster-and-faster
Feb 19, 2026
Merged

feat: Remove daemon from turbo run, deprecate daemon flags and config#11910
anthonyshew merged 1 commit intomainfrom
shew/faster-and-faster

Conversation

@anthonyshew
Copy link
Copy Markdown
Contributor

@anthonyshew anthonyshew commented Feb 19, 2026

Summary

  • Remove daemon from turbo run — it provided no measurable performance benefit compared to its overhead now that Turborepo is dramatically faster than it used to be
  • Deprecate --daemon/--no-daemon CLI flags (hidden from help, emit warnings when used)
  • Deprecate daemon option in turbo.json (getter always returns None, warns when set)
  • Mark JSON schemas as deprecated
  • All deprecated options will be removed in version 3.0

The daemon is still used by turbo watch and the Turborepo LSP — those paths are untouched.

Why

Benchmarks across multiple repos (small, medium, large) showed --no-daemon consistently matching (or beating) daemon mode. The daemon's IPC overhead negated any benefit from pre-computed package graphs and file hashes during turbo run. We've dramatically improved baseline performance such that the daemon no longer ands real benefit. It adds a wealth of complexity to our codebase, and many bugs.

What stays

  • turbo daemon subcommand (unchanged)
  • turbo watch daemon connection (creates its own DaemonConnector independently)
  • DaemonPackageDiscovery (still exported for LSP)
  • turbo info daemon status check (unchanged)
  • VS Code extension daemon controls (unchanged)

Testing

A reviewer can verify the deprecation warnings by running:

turbo run build --daemon    # emits deprecation warning, runs normally
turbo run build --no-daemon # emits deprecation warning, runs normally
turbo run build             # no warning, runs normally (no daemon)

You can also add "daemon": false to turbo.json to see similar deprecation warnings for the configuration.

Passing --daemon and --no-daemon together still errors as before.

@anthonyshew anthonyshew requested a review from a team as a code owner February 19, 2026 13:59
@anthonyshew anthonyshew requested review from tknickman and removed request for a team February 19, 2026 13:59
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Feb 19, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-designsystem-docs Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-gatsby-web Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-kitchensink-blog Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-nonmonorepo Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-svelte-web Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-tailwind-web Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
examples-vite-web Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
turbo-site Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
turborepo-agents Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm
turborepo-test-coverage Ready Ready Preview, Comment, Open in v0 Feb 19, 2026 2:53pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 19, 2026

Coverage Report

Metric Coverage
Lines 74.45%
Functions 46.55%
Branches 0.00%

View full report

The daemon provided no measurable performance benefit for turbo run
and added IPC overhead. Benchmarks across multiple repos showed
--no-daemon consistently matching or beating daemon mode.

The daemon is still used by turbo watch and the Turborepo LSP.
The --daemon, --no-daemon flags and the daemon turbo.json option
are deprecated and will be removed in version 3.0.
@anthonyshew anthonyshew force-pushed the shew/faster-and-faster branch from 085802b to 43e777a Compare February 19, 2026 14:51
@anthonyshew anthonyshew enabled auto-merge (squash) February 19, 2026 15:07
@anthonyshew anthonyshew merged commit 0f22994 into main Feb 19, 2026
107 of 108 checks passed
@anthonyshew anthonyshew deleted the shew/faster-and-faster branch February 19, 2026 15:08
github-actions Bot added a commit that referenced this pull request Feb 19, 2026
## Release v2.8.11-canary.6

Versioned docs: https://v2-8-11-canary-6.turborepo.dev

### Changes

- release(turborepo): 2.8.11-canary.5 (#11909) (`59e7c9e`)
- feat: Remove daemon from `turbo run`, deprecate daemon flags and
config (#11910) (`0f22994`)

---------

Co-authored-by: Turbobot <turbobot@vercel.com>
anthonyshew added a commit that referenced this pull request Feb 25, 2026
## Summary

Fixes #11964 — `turbo watch` enters an infinite rebuild loop since
`2.8.11-canary.19`.

When the daemon was removed from `turbo run` in #11910, the daemon
client was also removed from `RunCache`/`TaskCache`. This broke `turbo
watch`: without `get_changed_outputs` and `notify_outputs_written`,
every cache hit unconditionally restores files to disk. The file watcher
sees these writes as changes, triggers another rebuild, which hits cache
again — infinite loop.

## What changed

- Restored the optional `daemon_client` field in `RunCache` and
`TaskCache`
- `RunBuilder` accepts a daemon client via `with_daemon_client()`
builder method
- `WatchClient` connects a daemon client and passes it to every
`RunBuilder` it creates
- Normal `turbo run` passes `None`, keeping the daemon removal from
#11910 fully intact

The daemon client allows the run cache to:
1. **Skip unnecessary cache restores** — `get_changed_outputs` checks if
outputs are already on disk and unchanged, avoiding file writes that
trigger the watcher
2. **Register output globs** — `notify_outputs_written` tells the
daemon's `GlobWatcher` which outputs were just written, so future checks
can skip them

## Testing

Verified by reproducing the original issue:

```sh
git clone https://github.com/remotion-dev/remotion
cd remotion
git checkout 41763f0290db417900551013a1bc8376a1f42103
bun i
bun run watch  # should stop after building, not loop forever
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant