Open source · Compose Multiplatform
wickplot
Candlestick / trading charts for Compose Multiplatform, drawn directly on a native Compose Canvas — no WebView, no JS bridge, no platform chart library underneath.
Definition
A wick is the thin line above or below a candle's body, marking the bar's high and low.
Features
What it does
- Candlesticks + volume band from any
List<Candle>— implement the smallCandleinterface on your own bar type (zero-copy), or use the bundledOhlcvCandle. - Line overlays for host-computed indicators — VWAP, moving averages, band edges (
overlays: List<LineOverlay>; per-line colour, stroke width, and optional legend label). - Exact-price trade entry/exit markers (
PriceMarkerdiamonds). - Crosshair with OHLCV legend, price axis, adaptive time axis (intraday HH:MM / daily MM-DD).
- Cursor-anchored scroll zoom and drag pan, clamped to the data.
ChartColors.Dark/ChartColors.Lightpresets, fully customizable.- Trade-centric initial framing via
ChartInitialView(calendar or intraday modes). - Pure, unit-tested pan/zoom/viewport math; the renderer is exercised by a Skia screenshot harness.
Presets
Philosophy
wickplot renders what you give it — the Lightweight-Charts philosophy. Indicator values (VWAP, moving averages, …) are computed by your app and passed in as plain LineOverlays; the library never computes market math.
Why not Vico?
Why not Vico?
Vico is a great general-purpose Compose chart engine and has a candlestick layer, but no built-in trading overlays. wickplot is purpose-built for trade analysis: volume, indicator line overlays, and exact-price trade markers out of the box, with indicator panes on the roadmap.
Quick start
Install
commonMain.dependencies {
implementation("io.github.earlisreal:wickplot:0.1.1")
}
Use it
val bars: List<Candle> = listOf(
OhlcvCandle(LocalDateTime(2026, 7, 1, 9, 30), open = 100.0, high = 103.5, low = 99.2, close = 102.8, volume = 120_000),
// ...
)
CandlestickCanvasChart(
bars = bars,
markers = listOf(PriceMarker(barIndex = 12, price = 101.25, isBuy = true)),
title = "ACME · D",
colors = ChartColors.Dark, // or ChartColors.Light
overlays = emptyList(), // indicator lines
intraday = false, // switches the time-axis format
)
Roadmap
Roadmap
- →Stacked sub-panes sharing the X axis (for host-computed RSI / MACD / volume studies).
- →Android target.
Runs on