LiveChart renders a single line series by default. History comes from a
SharedValue<LiveChartPoint[]> and the live tip from a SharedValue<number>.
Live example:
app/demo/line-and-area.tsx
in the example app.Line & area
Line styling
Override the stroke with theline prop, and the area fill with gradient:
gradient={false} to remove the area fill entirely.
Animating the line and fill color
line.color also accepts a SharedValue<string>, and gradient.colors a
SharedValue<string[]>. The chart hands them to Skia as they are, so the stroke
and the area fill change color on the UI thread with no re-render. Drive both
from one progress value to keep them in step:
line.color reaches the stroke and the built-in scrub selection
dot. The parts that read the line color at render time — a custom
selectionDot.component’s color, the segment base color, the area-dot tint,
and the threshold split stroke’s rest color — use the palette line color (from
accentColor) instead. An animated gradient.colors must hold at least 2 stops
at all times, and its positions apply as given, so keep their lengths equal.
In the Line & area demo, select Animated line and Default gradient fill.
Tap Fade to green, then drag horizontally across the chart while it fades to
see the selection dot follow the stroke. The demo offers Default and Off
fill in Animated mode; Custom is available with the static line modes.
Dimming replacement data
Keep the current chart visible while fetching a replacement range, then dim only the plotted data through a UI-thread shared value. Axes, reference lines, and scrub controls remain readable.seriesOpacity affects the line and area fill, candles and volume bars, value
line, badge, and inline value text. While it is below 1, the live dot and its
pulse ring fade completely out instead of becoming translucent over the stroke;
they fade back in after the series returns to full opacity. Pass the same shared
value to a candle chart—no mode-specific configuration is required. The Line &
area example’s Dim while loading control demonstrates the transition by
pausing its synthetic feed, freezing the current range, and replacing that range
when loading completes.
Dotted area fill
For a textured fill,areaDots paints a screen-fixed dot lattice clipped to the
area beneath the line (the line scrolls over the dots; nothing is drawn above
it). It composes with gradient, or use it alone with gradient={false}:
spacing (lattice pitch), size (dot diameter), color, and opacity.
Like gradient, it’s a line-mode feature (inert in candle mode).
Live example:
app/showcase/kraken.tsx
pairs the dotted area fill with a thin line, Y-axis labels, and a dashed scrub
crosshair.Curve & edges
By default the line is a smooth monotone cubic with rounded joins and caps. For an angular, hard-edged look — think the Robinhood tokenized-stock style — switch the interpolation tolinear and sharpen the corners:
curve ("monotone" | "linear"), join ("round" | "miter" | "bevel"),
and cap ("round" | "butt" | "square") are independent — e.g. keep the
smooth curve but flatten the ends with cap: "butt". curve: "linear" applies to
the area fill as well, so the gradient follows the same straight segments.
Live example:
app/showcase/robinhood.tsx
pairs all three for a fully hard-edged line.Denoising dense paths
Useline.simplify when dense samples make the plotted path look busier than the
screen can meaningfully show:
0 (the default) disables it;
0.75–1.5 is a useful starting range for subtle denoising.
See Line denoising for the raw-vs-simplified example,
tolerance guidance, multi-series overrides, and rendering-cost details.
Badge, dot, and value line
By default the chart draws a value badge at the tip, a pulsing live dot, and (optionally) a dashed value line across the plot.dot — the same DotConfig that LiveChartSeries uses. A soft
static glow is available separately and remains off unless explicitly enabled:
glow: true uses restrained defaults (radius: 7, blur: 5, opacity: 0.18,
dot fill color). A config object can tune every value or supply its own color.
The glow is a static Skia layer and starts no frame callback; pulse remains the
separate expanding-ring animation.
Most boolean-ish props accept
true (defaults), false (off), or a config object — for
example badge, pulse, valueLine, gradient, scrub, and yAxis.Live value overlay
Render the current value as large text in the top-left, optionally tinted by momentum:Formatting
Customize axis, badge, and tooltip text withformatValue and formatTime:
LiveChart reference.