vercel/turborepo · warning
`turbo` uses Graphviz to generate an image of your graph, bu
Error message
`turbo` uses Graphviz to generate an image of your graph, but Graphviz isn't installed on this machine.\n\nNote: --graph output to .png, .jpg, .pdf, and .json is deprecated and will be removed in version 3.0. Use .svg, .html, .mermaid, or .dot instead.\n\nIn the meantime, you can use this string output with an online Dot graph viewer.
What it means
`turbo run --graph <file>` in an image format (.png/.jpg/.pdf) shells out to Graphviz `dot`. emit_graphviz_warning (crates/turborepo-lib/src/run/mod.rs:1624-1636) fires when `dot` is not installed: it explains the missing dependency, notes that image outputs are deprecated and removed in v3 (use .svg/.html/.mermaid/.dot instead), and suggests pasting the emitted dot output into an online viewer.
Source
Thrown at crates/turborepo-lib/src/run/mod.rs:1632
&self,
show_progress: bool,
) -> std::pin::Pin<
Box<
dyn std::future::Future<
Output = Result<
turborepo_boundaries::BoundariesResult,
turborepo_boundaries::Error,
>,
> + Send
+ '_,
>,
> {
Box::pin(std::future::ready(self.check_boundaries(show_progress)))
}
}
fn emit_graphviz_warning() -> Result<(), io::Error> {
turborepo_log::warn(
turborepo_log::Source::turbo(turborepo_log::Subsystem::Run),
"`turbo` uses Graphviz to generate an image of your graph, but Graphviz isn't installed \
on this machine.\n\nNote: --graph output to .png, .jpg, .pdf, and .json is deprecated \
and will be removed in version 3.0. Use .svg, .html, .mermaid, or .dot instead.\n\nIn \
the meantime, you can use this string output with an online Dot graph viewer.",
)
.emit();
Ok(())
}
#[cfg(test)]
mod tests {
use std::{future::pending, time::Duration};
use turborepo_signals::ShutdownReason;
use super::{
remote_cache_status_message, CacheShutdownOutcome, ForceShutdownReason, RemoteCacheStatus,View on GitHub (pinned to f9245100cf)
Solutions
- Install Graphviz (apt-get install graphviz / brew install graphviz / choco install graphviz) so `dot` is on PATH.
- Prefer future-proof outputs that don't depend on local tooling: switch to `--graph out.svg`, out.html, out.mermaid, or keep out.dot.
- If you cannot install locally, capture the emitted dot text and render it with an online Graphviz viewer.
- Update any docs/scripts still producing .png/.jpg/.pdf before turbo 3.0 removes them.
Example fix
# before: image output needs local graphviz turbo run build --graph=graph.png # -> Graphviz isn't installed on this machine # after: no external dependency, v3-safe turbo run build --graph=graph.svg # or .html / .mermaid / .dot
Defensive patterns
Strategy: validation
Validate before calling
#!/usr/bin/env bash if ! command -v dot >/dev/null; then echo "graphviz 'dot' not installed — use --graph=graph.svg/.dot instead" >&2 exit 1 fi turbo run build --graph=graph.png
Prevention
- Default to .svg/.html/.mermaid/.dot outputs which avoid the Graphviz dependency and survive turbo 3.0.
- If image formats are required, add graphviz to the CI image explicitly.
- Lint scripts/docs for --graph=*.png|jpg|pdf and migrate them ahead of v3.
When it happens
Trigger: Requesting --graph out.png (or .jpg/.pdf) on a machine without graphviz in PATH. The command still emits the graphviz dot string/preview rather than failing. Note the deprecation: even with graphviz installed, these formats go away in turbo 3.0.
Common situations: Local machines and slim CI containers without the graphviz package; docs screenshots pipelines; users upgrading toward turbo 3.x needing to migrate graph exports to a supported format.
Related errors
- [33m"turbo-ignore" is deprecated. Use "turbo query affected
- Found both turbo.json and turbo.jsonc in the same directory:
- Found both turbo.json and turbo.jsonc in the same directory:
- refusing to write structured log to symlink: {}
- error creating log file directory: {err:?}
AI-assisted analysis of vercel/turborepo@f9245100cf (2026-08-17).
Data as JSON: /api/errors/ff85a1057a01e6e7.
Report an issue: GitHub.