DevelopmentNew Release12 min readPublished July 12, 2026

Tree ranks the slowest span first · Waterfall separates parallel from sequential — inside the log entry

Vercel Traces: Tree and Waterfall Views for Slow Spans

Vercel’s July 10 changelog added two in-line views to Traces inside Vercel Logs: a Tree view that sorts spans slowest-first, and a Waterfall view that lays every span on one chronological timeline. The changelog describes the views; it doesn’t tell you when to reach for which. This is the perf-audit workflow — plus a find-the-bottleneck walkthrough on a Next.js route.

DA
Digital Applied Team
Senior strategists · Published Jul 12, 2026
PublishedJul 12, 2026
Read time12 min
SourcesVercel changelog + docs
In-line trace views
2
Tree + Waterfall
Shipped Jul 10
Span types rendered
4
infra · fetch · framework · custom
Trace data per request
10MB
compressed, hard cap
Span truncation line
1MB
largest attributes trimmed first

Vercel Traces now render two in-line views inside individual log entries: a Tree view that sorts spans by duration so the slowest appear first, and a Waterfall view that lays every span along a single chronological timeline. Vercel announced the change in its July 10, 2026 changelog. It sounds like a small dashboard tweak — it’s actually the difference between scrolling a flat span list and running a structured performance audit without leaving the log entry.

The two views answer different questions, and Vercel’s own changelog copy doesn’t spell out the distinction. Tree view answers which span is slowest — a ranked suspect list. Waterfall view answers why the request is slow — whether work that could run in parallel is executing sequentially. Mistake one question for the other and you can spend an afternoon optimizing a database query while three serialized fetches were the real problem.

This guide covers what shipped, how Vercel’s trace model actually works, a decision table for which view to open first, a find-the-bottleneck walkthrough on a hypothetical Next.js route, and the size limits and retention windows that decide whether the span you’re hunting is even still there. Everything below is sourced from Vercel’s changelog and documentation — this is a platform changelog, not a press-covered launch, so all claims are vendor-stated and framed that way.

Key takeaways
  1. 01
    Two views shipped inside the log entry on July 10.Per Vercel's changelog, Traces now support Tree and Waterfall views inside individual log entries in Vercel Logs — span hierarchy and timing are inspectable without leaving the log-entry panel.
  2. 02
    Tree view is a ranked suspect list.On load, spans are sorted by duration so the slowest appear first, per the changelog. Parent-child hierarchy shows which subtree owns the time — no manual expanding of every branch.
  3. 03
    Waterfall view exposes serialization.A chronological timeline makes parallel spans visually distinct from sequential, blocking work. It is the view that catches three awaits running back-to-back when they could run together.
  4. 04
    Traces and runtime logs have separate limit systems.Traces cap at 10 MB compressed per request and 1 MB per span (truncated, then dropped). Runtime logs cap at 256 lines, 256 KB per line, 1 MB per request. Debugging a missing span against the wrong limit wastes time.
  5. 05
    This is platform observability, not agent observability.Vercel Traces cover the request path — CDN, middleware, function, outbound fetches. Agent and LLM-call tracing is a different layer of the stack with different tooling, covered separately in our observability guide.

01What ShippedTwo views, in-line where the logs already live.

On July 10, 2026, Vercel announced that Traces support tree and waterfall views inside individual log entries in Vercel Logs. The positioning, per the changelog, is that engineers no longer need to leave the log-entry context to inspect span hierarchy and timing — a vendor-stated UX claim, but a plausible one given where the data previously lived.

That location matters more than it first appears. The log-details sidebar already surfaced an “Events” timeline and an “Outgoing Requests” panel before this change — the same underlying span data, readable only as a list. The new views formalize and visualize that data instead of asking you to reconstruct the request’s shape in your head. And because the Logs search bar supports a dedicated traceId field — alongside sessionId and invocationId — a specific trace can be pulled up directly by ID rather than browsed to.

Release snapshot
Per Vercel’s changelog of July 10, 2026: Traces render both a Tree view (spans sorted by duration, slowest first) and a Waterfall view (spans on a chronological timeline) inside the individual log entry panel in Vercel Logs. No separate tracing product to open, no context switch — and a specific trace is directly addressable via the traceId search field.

One honesty note before the workflow: this is a low-profile platform changelog, not a press-covered launch. There is no independent third-party benchmark of the views and no community reaction to report — every claim in this post traces back to Vercel’s own changelog and docs, and we hedge accordingly. The walkthrough in section 06 is our own illustrative scenario, not a reported case study.

02Trace AnatomyTraces and spans in two minutes.

Vercel’s tracing docs put it plainly: “You can think of a trace as the story of a single request: Request arrives at Vercel CDN → Middleware executes → Function handler processes request → Database query runs → Response returns to client.” If that request lifecycle is unfamiliar, our guide to how Vercel Functions execute requests walks the full path. A span, per the same docs, is a single unit of work inside that story — it carries a name, a start time, an end time, and a duration. The trace is the tree; spans are the nodes.

Coverage is layered. Vercel automatically instruments infrastructure and outbound-fetch spans with no code changes, once Trace Drains or Session Tracing are enabled. Framework spans — the route- and rendering-level detail that makes a Next.js trace actually legible — require the @vercel/otel package; Next.js 13.4+ contributes those spans automatically once OpenTelemetry instrumentation is installed. That framework layer keeps getting more relevant as Next.js itself accelerates — see Next.js 16.3’s Turbopack persistent cache for where build-side performance is heading in parallel.

To see traces in the dashboard at all, Session Tracing must be enabled via the Vercel toolbar — either as a single-page “Page Trace” or an ongoing “Session Trace,” per the docs. The dashboard then renders four visually distinct span types:

Automatic
Infrastructure spans
black/white · triangle icon

Vercel's own platform work — routing, function invocation, the request scaffolding. Instrumented automatically with no code changes once tracing is enabled.

Zero config
Automatic
Fetch spans
green

Outbound HTTP requests from your functions — CMS calls, payment APIs, third-party services. Auto-instrumented, and usually where the bottleneck hides.

Watch these first
@vercel/otel
Framework spans
blue

Route- and rendering-level spans from Next.js 13.4+ once OpenTelemetry instrumentation is installed. This is what separates 'the function was slow' from 'this render phase was slow.'

Requires setup
Your code
Custom spans
blue

Spans you emit yourself around business logic. Caveat per Vercel's docs: custom spans from Edge-runtime functions don't appear in Session Tracing or Trace Drains.

Edge gap — see §07

03Tree ViewTree view: a ranked suspect list.

Tree view renders the trace as a parent-child hierarchy — which span invoked which — and applies one opinionated default that does most of the work:

"On load, spans are sorted by duration so the slowest appear first."— Vercel Changelog, July 10, 2026

That single sort order changes the triage workflow. A flat span list — or an alphabetical or insertion-ordered tree — makes you scan and expand every branch to find the expensive one. Duration sort means the worst offender is the first thing you see, and because the hierarchy is preserved, you also see which subtree owns the time: a slow parent with fast children points at the parent’s own work; a slow parent whose time is fully explained by one slow child pushes the investigation one level down.

What Tree view doesn’t tell you is anything about time relationships. Two 300 ms spans look identical in a duration-sorted tree whether they ran simultaneously or back-to-back — and that distinction is often the entire performance story. That’s the waterfall’s job.

04Waterfall ViewWaterfall view: parallel vs sequential, made visible.

Waterfall view lays every span along a single chronological timeline. Per Vercel’s changelog, that is what makes parallel execution — spans running side by side — visually distinct from sequential, blocking work. Spans that overlap in time occupy the same horizontal region; spans that serialize stack end-to-end, each starting only after the previous one finishes.

The waterfall is where the most common Next.js performance defect becomes undeniable: independent async operations awaited one after another. In a tree view, three sequential 300 ms fetches read as three medium spans — nothing alarming. On a timeline, they form a staircase with each step starting exactly where the last ended, and the staircase shape itself is the diagnosis. The fix — batching independent work with Promise.all — collapses the staircase into overlapping bars, and the waterfall is also the view that proves the fix landed.

Gaps matter too. Empty horizontal space between spans — time the request spent with no span active — points at work that isn’t instrumented yet, or at platform-level effects like cold starts that sit outside your application code.

05Decision ReferenceWhich view to open first.

Vercel’s changelog describes the two views independently — it never gives you the side-by-side. The table below is our own workflow framing built on the confirmed mechanics: duration-sorted hierarchy on one side, chronological timeline on the other. Bookmark the last row.

Tree view versus Waterfall view in Vercel Traces: the question each answers, how spans are ordered, what each is best at revealing, what each can hide, and when to open each first. Workflow synthesis by Digital Applied from the Vercel changelog of July 10, 2026 and Vercel tracing documentation.
DimensionTree viewWaterfall view
Question it answersWhich span is slowest?Why is the request slow overall?
How spans are orderedSorted by duration on load — slowest first, per Vercel's changelogChronological, every span placed on a single shared timeline
Best at revealingThe single worst offender inside a deep parent-child hierarchySequential blocking chains, gaps, and work that could run in parallel
What it can hideTiming relationships — whether slow spans overlap or run back-to-backThe single slowest span, which can get lost among many short rows
Open it first whenTriaging an unfamiliar slow route and you need a ranked suspect listVerifying a parallelization fix or hunting serialized awaits you suspect exist

The pattern that emerges: Tree view is a triage tool — open it first on an unfamiliar slow route to get a ranked list of suspects in seconds. Waterfall view is a diagnosis and verification tool — open it once you have a suspect, to understand whether the problem is one expensive operation or an execution-shape problem, and open it again after the fix to confirm the shape actually changed. Neither view replaces the other; the workflow is a loop between them.

06WalkthroughFind the bottleneck on a Next.js route.

Here’s the loop in practice, on a hypothetical, illustrative scenario — the timings below are ours for teaching purposes, not measured production data. Picture a Next.js Server Component page that awaits a CMS content fetch, then a database query, then a pricing-API fetch, then renders. None of the three data operations depends on another’s result — they’re just written as consecutive awaits.

Step 1 — Tree view. The route’s p95 has crept past a second, so you pull up a slow request in Vercel Logs and open the trace. Duration sort puts the CMS fetch on top at 380 ms, the pricing fetch next at 310 ms, the database query at 240 ms. Useful — but no single villain. Nothing here explains a 1,000 ms+ request on its own, and this is exactly the case where tree view alone sends you optimizing the wrong thing.

Step 2 — Waterfall view. Switch views and the story changes instantly: three bars in a staircase, each starting where the previous one ends, no overlap anywhere. The problem isn’t any one span — it’s that ~930 ms of independent work is running single-file. The waterfall also shows a small gap before the first span; on a cold invocation that kind of dead time is platform-level, which is the territory covered by Fluid Compute’s cold-start elimination rather than by your application code.

Step 3 — the fix. Wrap the three independent operations in a single Promise.all, redeploy, and re-trace the route.

Illustrative Next.js route · sequential awaits vs Promise.all

Hypothetical example by Digital Applied — illustrative timings, not measured data
Total — sequential routeawait CMS → await pricing → await DB → render
1,020 ms
CMS content fetchfetch span · independent of the other two
380 ms
Pricing API fetchfetch span · independent of the other two
310 ms
Database queryindependent of both fetches
240 ms
Render + responseframework span · depends on all three
90 ms
Total — after Promise.alllongest parallel branch (380 ms) + render (90 ms)
≈470 ms

Step 4 — verify in the waterfall. After the fix, the three bars overlap in the same horizontal region and total request time collapses toward the longest single branch plus the render: 380 ms + 90 ms ≈ 470 ms in this illustration, down from the 1,020 ms sum of all four sequential steps. The tree view, notably, looks almost unchanged after the fix — same spans, same durations, same sort order. Only the waterfall proves the execution shape changed. That asymmetry is the whole argument for having both views one click apart.

07Limits & RetentionThe limits that decide whether your span is still there.

A trace view is only as good as the spans that survive to reach it, and Vercel documents two entirely separate limit systems that govern that — scattered across two docs pages. Traces are measured in compressed span data; runtime logs are measured in lines and kilobytes of console output. Engineers debugging “why did my span disappear” routinely check the wrong one. The consolidated reference:

Vercel trace and runtime-log size limits and retention windows at a glance: compressed trace data caps per request and per span, runtime log line and size caps, and plan-gated runtime log retention. Consolidated by Digital Applied from Vercel’s tracing documentation and runtime-logs documentation, retrieved July 2026.
LimitValueWhat happens / notes
Trace data — compressed spans (per Vercel's tracing docs)
Trace data per request10 MB compressedHard cap on the total compressed trace payload for a single traced request.
Single span size1 MB compressedVercel truncates the largest attributes first and adds a matching <attribute>.truncated boolean flag. Spans still over 1 MB after truncation are dropped entirely.
Runtime logs — console output (per Vercel's runtime-logs docs)
Log lines per request256 linesA separate limit system from traces — measured in lines of console output, not compressed span data.
Log line size256 KB per lineIndividual lines beyond this size are subject to the runtime-log limit system.
Log total per request1 MBTotal uncompressed console output per request — not the same 1 MB as the per-span trace cap above.
Runtime log retention by plan (per Vercel's docs)
Hobby1 hourOlder runtime logs are no longer queryable past the retention window.
Pro1 dayExtends to 30 days with the Observability Plus add-on, per Vercel's docs.
Enterprise3 daysExtends to 30 days with the Observability Plus add-on, per Vercel's docs.
The two-limit trap
Both systems contain a 1 MB figure — and they are different limits. Traces: 1 MB compressed per span, with the largest attributes truncated first and spans dropped if still over the line. Runtime logs: 1 MB uncompressed per request of total console output. If a span vanished, check the trace limits; if console lines vanished, check the log limits. The retention figures are per Vercel’s docs as retrieved for this post — confirm current numbers before relying on them for an incident-response process.

Two more documented gotchas belong in the same mental file. First, custom spans from functions on the Edge runtime don’t appear in Session Tracing or Trace Drains — a real coverage gap for teams mixing Edge and Node.js functions, since your most latency-sensitive routes may be the least observable ones. Second, if you run Sentry alongside Vercel’s instrumentation, Vercel documents adding skipOpenTelemetrySetup: true to the Sentry SDK v8+ init in instrumentation.ts so the two don’t break trace propagation between them. And note these limits all concern runtime observability — build logs are a separate surface with their own recent changes, covered in how Vercel redacts secrets in build logs.

08Stack FitWhere in-line traces fit your observability stack.

One boundary worth drawing precisely, because generic “observability” content blurs it constantly: this is platform observability — Vercel tracing its own request path through CDN, middleware, functions, and outbound fetches. It is not agent or LLM observability, which traces prompts, tool calls, and token spend through tools like LangSmith, Langfuse, and Arize. That layer has its own economics and its own stack, covered in our guide to the AI-agent observability stack. An AI-heavy Next.js app genuinely needs both: the platform trace tells you the route spent 4 seconds in an outbound fetch; the agent trace tells you what the model was doing inside it.

Day-to-day
In-dashboard Tree + Waterfall

Zero-setup triage for slow routes: enable Session Tracing via the toolbar, add @vercel/otel for framework spans, and run the tree-then-waterfall loop from section 05 on any slow log entry.

Start here
Longer horizons
Trace Drains to your APM

Per Vercel's docs, traces export to third-party observability providers via Vercel Drains — a custom HTTP endpoint or a native Marketplace integration. The move when you need longer retention or correlation with non-Vercel services.

Add when retention bites
AI features
Agent/LLM-layer tracing

Prompt-level and tool-call-level visibility lives in dedicated agent-observability tooling, not in platform traces. Different layer, different tools — don't expect Vercel's waterfall to explain model behavior.

Separate tooling

The trend this release fits is bigger than one changelog entry: platforms are pulling capabilities in-house that used to require a dedicated APM subscription just to get started. A duration-sorted span tree inside the log entry is triage that previously meant exporting traces elsewhere first — and every step removed between “this route is slow” and “this span is why” makes it more likely the investigation happens at all. Our working projection: expect the in-dashboard layer to keep absorbing first-response debugging while exported traces via Drains remain the home for long-horizon analysis — and expect the Edge-runtime custom-span gap to become more visible as more teams route latency-critical paths through Edge. This is exactly the layer we tune in our web development engagements: the fix is usually cheap once the right view has named the bottleneck.

09ConclusionTwo views, one workflow.

The takeaway

Tree view names the suspect. Waterfall view explains the crime.

Vercel’s July 10 changelog reads like a minor dashboard update, but the two views encode a real audit workflow. Tree view — spans sorted slowest-first inside a parent-child hierarchy — is the triage pass that hands you a ranked suspect list. Waterfall view — every span on one chronological timeline — is the diagnosis pass that separates one expensive operation from an execution-shape problem like serialized awaits, and the verification pass that proves a Promise.all fix actually changed the shape.

The operational details decide whether the workflow works when you need it: enable Session Tracing, add @vercel/otel for framework spans on Next.js 13.4+, remember that trace data and runtime logs live under separate limit systems, and know that Edge-runtime custom spans won’t show up at all. All of it is vendor-documented behavior — verify against Vercel’s current docs before hard-wiring a team process around any specific number.

The habit to build is the loop: tree to rank, waterfall to explain, fix, waterfall again to verify. It costs a minute per slow route, it runs where the logs already live, and it replaces the most expensive debugging pattern in web performance — optimizing the span that was never the problem.

Make slow routes fast

Most slow routes aren’t one slow query — they’re work running single-file.

Our team audits and tunes Next.js applications on Vercel — tracing slow routes to the actual bottleneck, fixing execution shape, and setting up the observability layer your team will actually use.

Free consultationExpert guidanceTailored solutions
What we work on

Performance engagements

  • Next.js route-level performance audits
  • Tracing + observability setup on Vercel
  • Serialized-await and execution-shape fixes
  • Core Web Vitals and p95 latency programs
  • Platform + agent observability architecture
FAQ · Vercel Traces

Vercel tracing questions, answered.

Per Vercel's changelog, Traces now support two views inside individual log entries in Vercel Logs: a Tree view and a Waterfall view. Tree view renders the parent-child span hierarchy and sorts spans by duration on load so the slowest appear first. Waterfall view lays every span along a single chronological timeline, which makes parallel execution visually distinct from sequential, blocking work. Both views live inside the log-entry panel, so span hierarchy and timing are inspectable without leaving the log context — a vendor-stated UX framing, but consistent with where the underlying span data already surfaced in the log-details sidebar's Events and Outgoing Requests panels.