A four-state streamgraph whose bands stack on a wiggle-minimising baseline — inside-out ordering, overshoot-free monotone curves, a per-column readout and an sr-only series-by-tick table.
Preview in your theme
Loading preview…
This component is part of Pro
The install command, prompt and concept map are included with a Pro license — one purchase unlocks every Pro component, forever.
status="ready" · six channels over 14 weeks, offset="wiggle" + order="inside-out" (the defaults). "Launch day PR" only exists in weeks 4-7 and "Affiliate" does not start until week 8 — inside-out puts both late arrivals on the outer edges so the middle layers are not shoved around.
Acquisition mix · weekly sessions
Six channels over 14 weeks
13,704 sessions · 6 series · busiest W36 (1,110 sessions)
Streamgraph: Acquisition mix · weekly sessions. 6 series stacked across 14 columns from W23 to W36, 13,704 sessions in total. Largest share Organic search at 47.7%, thickest at W35 with 561 sessions. The combined total peaks at W36 (1,110 sessions) and is lowest at W23 (831 sessions). Biggest riser Affiliate, 0 sessions to 174 sessions. Biggest faller Paid social, 310 sessions to 97 sessions. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Acquisition mix · weekly sessions: every series at every point, bottom of the stack first, with its total and its share of 13,704 sessions.
Series
W23
W24
W25
W26
W27
W28
W29
W30
W31
W32
W33
W34
W35
W36
Total
Share
Affiliate
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
38 sessions
35 sessions
61 sessions
99 sessions
125 sessions
174 sessions
532 sessions
3.9%
Referrals
18 sessions
44 sessions
45 sessions
58 sessions
63 sessions
91 sessions
86 sessions
122 sessions
106 sessions
124 sessions
153 sessions
135 sessions
149 sessions
171 sessions
1,365 sessions
10%
Paid social
310 sessions
287 sessions
274 sessions
253 sessions
248 sessions
215 sessions
188 sessions
188 sessions
174 sessions
145 sessions
155 sessions
116 sessions
100 sessions
97 sessions
2,750 sessions
20.1%
Newsletter
119 sessions
120 sessions
154 sessions
150 sessions
155 sessions
149 sessions
125 sessions
113 sessions
121 sessions
112 sessions
94 sessions
120 sessions
115 sessions
124 sessions
1,771 sessions
12.9%
Launch day PR
0 sessions
0 sessions
0 sessions
0 sessions
143 sessions
222 sessions
235 sessions
156 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
756 sessions
5.5%
Organic search
384 sessions
391 sessions
398 sessions
414 sessions
431 sessions
432 sessions
471 sessions
461 sessions
480 sessions
497 sessions
535 sessions
531 sessions
561 sessions
544 sessions
6,530 sessions
47.7%
All series
831 sessions
842 sessions
871 sessions
875 sessions
1,040 sessions
1,109 sessions
1,105 sessions
1,040 sessions
919 sessions
913 sessions
998 sessions
1,001 sessions
1,050 sessions
1,110 sessions
13,704 sessions
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 sessions.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
status="empty" · a valid contract with no series at all, told apart from "loading" and "fetch failed".
Acquisition mix · weekly sessions
Six channels over 14 weeks
No composition to show yet
A stream needs at least one series measured across at least one point in time.
status="loading" · three skeleton bands, aria-hidden, no timer involved; no flashing under reduced-motion.
Acquisition mix · weekly sessions
Six channels over 14 weeks
Loading stream
status="error" · the fetch failed; "Try again" only appears when onRetry is passed, and it flips to ready.
Acquisition mix · weekly sessions
Six channels over 14 weeks
Couldn't load this chart
The data source didn't respond.
offset="zero" · the same data as a plain stacked area chart: the baseline is pinned at 0, a real value axis appears on the left, and the top edge is the total. Use it when the question is "did the total grow".
Acquisition mix · weekly sessions
Six channels over 14 weeks
13,704 sessions · 6 series · busiest W36 (1,110 sessions)
Streamgraph: Acquisition mix · weekly sessions. 6 series stacked across 14 columns from W23 to W36, 13,704 sessions in total. Largest share Organic search at 47.7%, thickest at W35 with 561 sessions. The combined total peaks at W36 (1,110 sessions) and is lowest at W23 (831 sessions). Biggest riser Affiliate, 0 sessions to 174 sessions. Biggest faller Paid social, 310 sessions to 97 sessions. Stacked from zero, so the top edge is the combined total.
Acquisition mix · weekly sessions: every series at every point, bottom of the stack first, with its total and its share of 13,704 sessions.
Series
W23
W24
W25
W26
W27
W28
W29
W30
W31
W32
W33
W34
W35
W36
Total
Share
Affiliate
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
38 sessions
35 sessions
61 sessions
99 sessions
125 sessions
174 sessions
532 sessions
3.9%
Referrals
18 sessions
44 sessions
45 sessions
58 sessions
63 sessions
91 sessions
86 sessions
122 sessions
106 sessions
124 sessions
153 sessions
135 sessions
149 sessions
171 sessions
1,365 sessions
10%
Paid social
310 sessions
287 sessions
274 sessions
253 sessions
248 sessions
215 sessions
188 sessions
188 sessions
174 sessions
145 sessions
155 sessions
116 sessions
100 sessions
97 sessions
2,750 sessions
20.1%
Newsletter
119 sessions
120 sessions
154 sessions
150 sessions
155 sessions
149 sessions
125 sessions
113 sessions
121 sessions
112 sessions
94 sessions
120 sessions
115 sessions
124 sessions
1,771 sessions
12.9%
Launch day PR
0 sessions
0 sessions
0 sessions
0 sessions
143 sessions
222 sessions
235 sessions
156 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
756 sessions
5.5%
Organic search
384 sessions
391 sessions
398 sessions
414 sessions
431 sessions
432 sessions
471 sessions
461 sessions
480 sessions
497 sessions
535 sessions
531 sessions
561 sessions
544 sessions
6,530 sessions
47.7%
All series
831 sessions
842 sessions
871 sessions
875 sessions
1,040 sessions
1,109 sessions
1,105 sessions
1,040 sessions
919 sessions
913 sessions
998 sessions
1,001 sessions
1,050 sessions
1,110 sessions
13,704 sessions
100%
Stacked from zero, so the top edge is the combined total.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
offset="silhouette" + order="descending" · a symmetric baseline (the classic ThemeRiver), with the largest layer sinking to the bottom. The baseline still carries no value; the bracket on the left is the scale.
Acquisition mix · weekly sessions
Six channels over 14 weeks
13,704 sessions · 6 series · busiest W36 (1,110 sessions)
Streamgraph: Acquisition mix · weekly sessions. 6 series stacked across 14 columns from W23 to W36, 13,704 sessions in total. Largest share Organic search at 47.7%, thickest at W35 with 561 sessions. The combined total peaks at W36 (1,110 sessions) and is lowest at W23 (831 sessions). Biggest riser Affiliate, 0 sessions to 174 sessions. Biggest faller Paid social, 310 sessions to 97 sessions. The stack is centred on a silhouette baseline, so height on the page carries no value — only the thickness of a band does.
Acquisition mix · weekly sessions: every series at every point, bottom of the stack first, with its total and its share of 13,704 sessions.
Series
W23
W24
W25
W26
W27
W28
W29
W30
W31
W32
W33
W34
W35
W36
Total
Share
Organic search
384 sessions
391 sessions
398 sessions
414 sessions
431 sessions
432 sessions
471 sessions
461 sessions
480 sessions
497 sessions
535 sessions
531 sessions
561 sessions
544 sessions
6,530 sessions
47.7%
Paid social
310 sessions
287 sessions
274 sessions
253 sessions
248 sessions
215 sessions
188 sessions
188 sessions
174 sessions
145 sessions
155 sessions
116 sessions
100 sessions
97 sessions
2,750 sessions
20.1%
Newsletter
119 sessions
120 sessions
154 sessions
150 sessions
155 sessions
149 sessions
125 sessions
113 sessions
121 sessions
112 sessions
94 sessions
120 sessions
115 sessions
124 sessions
1,771 sessions
12.9%
Referrals
18 sessions
44 sessions
45 sessions
58 sessions
63 sessions
91 sessions
86 sessions
122 sessions
106 sessions
124 sessions
153 sessions
135 sessions
149 sessions
171 sessions
1,365 sessions
10%
Launch day PR
0 sessions
0 sessions
0 sessions
0 sessions
143 sessions
222 sessions
235 sessions
156 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
756 sessions
5.5%
Affiliate
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
38 sessions
35 sessions
61 sessions
99 sessions
125 sessions
174 sessions
532 sessions
3.9%
All series
831 sessions
842 sessions
871 sessions
875 sessions
1,040 sessions
1,109 sessions
1,105 sessions
1,040 sessions
919 sessions
913 sessions
998 sessions
1,001 sessions
1,050 sessions
1,110 sessions
13,704 sessions
100%
The stack is centred on a silhouette baseline, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 sessions.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
curve="linear" + order="contract" · smoothing off: boundaries run straight from column to column instead of guessing the shape in between, and the order is exactly what the contract gave (use it when the layer order itself means something).
Acquisition mix · weekly sessions
Six channels over 14 weeks
13,704 sessions · 6 series · busiest W36 (1,110 sessions)
Streamgraph: Acquisition mix · weekly sessions. 6 series stacked across 14 columns from W23 to W36, 13,704 sessions in total. Largest share Organic search at 47.7%, thickest at W35 with 561 sessions. The combined total peaks at W36 (1,110 sessions) and is lowest at W23 (831 sessions). Biggest riser Affiliate, 0 sessions to 174 sessions. Biggest faller Paid social, 310 sessions to 97 sessions. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Acquisition mix · weekly sessions: every series at every point, bottom of the stack first, with its total and its share of 13,704 sessions.
Series
W23
W24
W25
W26
W27
W28
W29
W30
W31
W32
W33
W34
W35
W36
Total
Share
Organic search
384 sessions
391 sessions
398 sessions
414 sessions
431 sessions
432 sessions
471 sessions
461 sessions
480 sessions
497 sessions
535 sessions
531 sessions
561 sessions
544 sessions
6,530 sessions
47.7%
Paid social
310 sessions
287 sessions
274 sessions
253 sessions
248 sessions
215 sessions
188 sessions
188 sessions
174 sessions
145 sessions
155 sessions
116 sessions
100 sessions
97 sessions
2,750 sessions
20.1%
Newsletter
119 sessions
120 sessions
154 sessions
150 sessions
155 sessions
149 sessions
125 sessions
113 sessions
121 sessions
112 sessions
94 sessions
120 sessions
115 sessions
124 sessions
1,771 sessions
12.9%
Referrals
18 sessions
44 sessions
45 sessions
58 sessions
63 sessions
91 sessions
86 sessions
122 sessions
106 sessions
124 sessions
153 sessions
135 sessions
149 sessions
171 sessions
1,365 sessions
10%
Launch day PR
0 sessions
0 sessions
0 sessions
0 sessions
143 sessions
222 sessions
235 sessions
156 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
756 sessions
5.5%
Affiliate
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
0 sessions
38 sessions
35 sessions
61 sessions
99 sessions
125 sessions
174 sessions
532 sessions
3.9%
All series
831 sessions
842 sessions
871 sessions
875 sessions
1,040 sessions
1,109 sessions
1,105 sessions
1,040 sessions
919 sessions
913 sessions
998 sessions
1,001 sessions
1,050 sessions
1,110 sessions
13,704 sessions
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 sessions.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Degenerate data · a single series holding 100% at every column: the wiggle baseline has one layer to keep still, so it tracks that series and draws as a centred ribbon.
Self-serve signups · single channel
One series, so its share is 100% at every column
2,238 signups · 1 series · busiest D10 (253 signups)
Streamgraph: Self-serve signups · single channel. 1 series stacked across 10 columns from D1 to D10, 2,238 signups in total. Largest share Self-serve at 100%, thickest at D10 with 253 signups. The combined total peaks at D10 (253 signups) and is lowest at D1 (195 signups). Biggest riser Self-serve, 195 signups to 253 signups. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Self-serve signups · single channel: every series at every point, bottom of the stack first, with its total and its share of 2,238 signups.
Series
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
Total
Share
Self-serve
195 signups
198 signups
244 signups
249 signups
234 signups
218 signups
203 signups
213 signups
231 signups
253 signups
2,238 signups
100%
All series
195 signups
198 signups
244 signups
249 signups
234 signups
218 signups
203 signups
213 signups
231 signups
253 signups
2,238 signups
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 50 signups.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Degenerate data · one column: there is no horizontal distance to travel, so the component paints a constant band across the plot rather than a zero-width sliver.
Revenue mix · one reporting period
A single column: composition without a timeline
738 k · 4 series · Q3
Streamgraph: Revenue mix · one reporting period. 4 series stacked across 1 column at Q3, 738 k in total. Largest share Platform at 56.9%, thickest at Q3 with 420 k. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Revenue mix · one reporting period: every series at every point, bottom of the stack first, with its total and its share of 738 k.
Series
Q3
Total
Share
Platform
420 k
420 k
56.9%
Services
180 k
180 k
24.4%
Support
96 k
96 k
13%
Training
42 k
42 k
5.7%
All series
738 k
738 k
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 k.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Degenerate data · every column totals 1,000: the outline is dead flat and wiggle has nothing left to minimise — which is exactly what a streamgraph is best at, where the total says nothing and only the mix moves.
Plan mix · constant seat count
Every column totals 1,000 seats; only the mix moves
12,000 seats · 4 series · busiest M1 (1,000 seats)
Streamgraph: Plan mix · constant seat count. 4 series stacked across 12 columns from M1 to M12, 12,000 seats in total. Largest share Free at 30.2%, thickest at M4 with 361 seats. The combined total peaks at M1 (1,000 seats) and is lowest at M1 (1,000 seats). Biggest riser Enterprise, 144 seats to 305 seats. Biggest faller Pro, 275 seats to 147 seats. Every column totals the same 1,000 seats, so the outline is flat and only the mix moves. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Plan mix · constant seat count: every series at every point, bottom of the stack first, with its total and its share of 12,000 seats.
Series
M1
M2
M3
M4
M5
M6
M7
M8
M9
M10
M11
M12
Total
Share
Free
275 seats
314 seats
345 seats
361 seats
359 seats
340 seats
311 seats
277 seats
250 seats
241 seats
256 seats
298 seats
3,627 seats
30.2%
Pro
275 seats
266 seats
250 seats
229 seats
205 seats
180 seats
157 seats
137 seats
124 seats
120 seats
128 seats
147 seats
2,218 seats
18.5%
Team
306 seats
311 seats
314 seats
314 seats
313 seats
310 seats
307 seats
302 seats
295 seats
285 seats
270 seats
250 seats
3,577 seats
29.8%
Enterprise
144 seats
109 seats
91 seats
96 seats
123 seats
170 seats
225 seats
284 seats
331 seats
354 seats
346 seats
305 seats
2,578 seats
21.5%
All series
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
1,000 seats
12,000 seats
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 seats. Every column totals the same, so only the mix moves.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Degenerate data · the whole window is 0 — measured zero, not missing data. The domain collapses to a point, so the component gives it a one-unit domain, draws the flat line in the middle and says so in the footnote.
Incident minutes · quiet week
Measured and zero, which is not the same as no data
0 min · 3 series · busiest Mon (0 min)
Streamgraph: Incident minutes · quiet week. 3 series stacked across 7 columns from Mon to Sun, 0 min in total. Every value in this window is zero. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Incident minutes · quiet week: every series at every point, bottom of the stack first, with its total and its share of 0 min.
Series
Mon
Tue
Wed
Thu
Fri
Sat
Sun
Total
Share
Background jobs
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0%
Web app
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0%
API
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0%
All series
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0 min
0%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 0.2 min. Every value in this window is zero.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Degenerate data · nine series with very long names: the palette has five tokens, so colours wrap from the sixth and the bands are told apart by hatching/dots plus the legend and table. Inline labels only appear on bands thick enough to hold them, and they truncate rather than spill.
Pipeline sources · nine channels
More series than the palette has colours
10,130 leads · 9 series · busiest 2026-12 (1,138 leads)
Streamgraph: Pipeline sources · nine channels. 9 series stacked across 12 columns from 2026-01 to 2026-12, 10,130 leads in total. Largest share Lifecycle email re-activation at 15.3%, thickest at 2026-03 with 169 leads. The combined total peaks at 2026-12 (1,138 leads) and is lowest at 2026-01 (567 leads). Biggest riser Paid search · brand keywords, 34 leads to 154 leads. Biggest faller Events, meetups and conferences, 163 leads to 137 leads. The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does.
Pipeline sources · nine channels: every series at every point, bottom of the stack first, with its total and its share of 10,130 leads.
Series
2026-01
2026-02
2026-03
2026-04
2026-05
2026-06
2026-07
2026-08
2026-09
2026-10
2026-11
2026-12
Total
Share
Community and open-source funnel
62 leads
40 leads
46 leads
80 leads
76 leads
78 leads
67 leads
88 leads
99 leads
130 leads
161 leads
177 leads
1,104 leads
10.9%
Partner-sourced marketplace referrals
51 leads
57 leads
55 leads
47 leads
66 leads
68 leads
74 leads
69 leads
92 leads
90 leads
96 leads
110 leads
875 leads
8.6%
Enterprise self-serve trials (EMEA)
16 leads
30 leads
38 leads
41 leads
41 leads
50 leads
52 leads
85 leads
68 leads
78 leads
78 leads
88 leads
665 leads
6.6%
Paid search · non-brand keywords
39 leads
71 leads
81 leads
125 leads
149 leads
174 leads
168 leads
159 leads
147 leads
123 leads
114 leads
130 leads
1,480 leads
14.6%
Events, meetups and conferences
163 leads
173 leads
126 leads
99 leads
75 leads
97 leads
98 leads
87 leads
93 leads
97 leads
125 leads
137 leads
1,370 leads
13.5%
Lifecycle email re-activation
110 leads
131 leads
169 leads
169 leads
156 leads
146 leads
109 leads
106 leads
105 leads
101 leads
109 leads
135 leads
1,546 leads
15.3%
Outbound sequences · tier 1 accounts
66 leads
63 leads
44 leads
51 leads
61 leads
71 leads
90 leads
73 leads
72 leads
94 leads
98 leads
85 leads
868 leads
8.6%
Paid search · brand keywords
34 leads
70 leads
74 leads
67 leads
67 leads
102 leads
127 leads
134 leads
161 leads
164 leads
175 leads
154 leads
1,329 leads
13.1%
Docs & developer education
26 leads
32 leads
48 leads
67 leads
80 leads
71 leads
71 leads
71 leads
105 leads
90 leads
110 leads
122 leads
893 leads
8.8%
All series
567 leads
667 leads
681 leads
746 leads
771 leads
857 leads
856 leads
872 leads
942 leads
967 leads
1,066 leads
1,138 leads
10,130 leads
100%
The baseline floats to minimise how much the layers move, so height on the page carries no value — only the thickness of a band does. The bracket on the left is 200 leads.
Point at the stream for the value at that column, click a band or a chip to pin it; with a chip focused, ← and → walk the timeline and Home / End jump to its ends.
Contract violation · a -180 in week 29: a stacked stream draws thickness, and thickness cannot be negative, so inspectStreamData refuses by name instead of drawing a band that folds through itself.
Net contribution · signed series
One channel goes negative in week 29
This stream can't be drawn
"Paid social" is -180 at W29. A stacked stream draws a part as thickness and thickness cannot go below zero — split the signed measure into a gains series and a losses series, or use a chart with a real zero axis.
Degenerate data · status="ready" with zero rows and zero columns: it takes the empty branch rather than drawing a chart with nothing in it.
Acquisition mix · new workspace
status="ready" with zero series
No composition to show yet
A stream needs at least one series measured across at least one point in time.