| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-07-18 | 7.0 kB | |
| v0.3.5 source code.tar.gz | 2026-07-18 | 8.3 MB | |
| v0.3.5 source code.zip | 2026-07-18 | 8.5 MB | |
| Totals: 3 Items | 16.8 MB | 0 | |
ChartGPU v0.3.5
Compare: v0.3.4…v0.3.5
Scope: 239 files, ~42k insertions / ~17k deletions, 65+ commits, PRs #166–#177.
This release is primarily a performance and architecture update, driven by work against the SciChart.js JavaScript Chart Performance Suite (ingestion rate and FPS, production dist). It also includes streaming/time-axis correctness fixes, logarithmic axes, candlestick price-axis UI, and site updates.
Performance and architecture (#166)
Upload / data residency
- Ranged append for full-raw and GPU-decimation line buffers
- Fixed-capacity ring FIFO:
appendData(..., { maxPoints }) - Equal-N y-only rewrite paths (line and scatter)
- Dual-store hit-test skip when tooltips are off
- Axes-only
setOptionreuse when series element identities are stable - Domain-space bar packing for axes-only redraws
- Unbounded append near device storage limits auto-windows like
maxPoints(avoids domain/GPU desync pastmaxStorageBufferBindingSize)
Frame graph
compute (scatter density + line decimation)
→ main 4× MSAA
→ optional dense-hairline sampleCount-1 pass
→ overlay 4× MSAA
→ swapchain
- Dense hairline LOD for high point counts / multi-series segment budgets (draw-only)
- Multi-chart submit batching on a shared
GPUDevice(microtask-coalescedqueue.submit) - Sticky auto-range domains for streaming (Y headroom; X tracks data max with headroom 0)
Coordinator structure
- Thin
createRenderCoordinatorshell - Composition root and domain modules under
src/core/renderCoordinator/ - Docs/architecture updated for the current pass graph
Suite-related work in this PR covered axes-only redraws, ring FIFO + GPU decimation, scatter/y-update/unsorted-line rewrites, FIFO large-N paths, N×M line series, and multi-chart batching.
Streaming and correctness (#167, [#168])
- Time-axis packing affine so epoch-ms domains stay on-screen
- Pure
type: 'area'through DataStore with ranged append and ring/staging geometry - Full-width unbounded streaming (no empty-right grow/reset from X headroom)
- Modular ring raw lines: shaders use
ringStart/ringCapacityso wrap order is logical - CPU LTTB keeps domain x in Float64 through index selection (avoids epoch-ms collapse)
- Dual-store / tooltip-off resync and related hit-test ownership fixes
performance.lod: 'auto' | 'strict'auto(default): dense hairline, scatter radius compaction, equal-N LTTB sticky indicesstrict: honor stroke width / marker size; full LTTB recompute on equal-N y change
Other fixes
| PR | Change |
|---|---|
| #169 | Time-axis precision and streaming zoom (#161) |
| #170 | Chart sizing under page zoom and CSS zoom (#155) |
| #171 | Area fill disconnects on null gaps instead of fanning to origin (#153) |
| #172 | Line null gaps preserved under zoom; legend above axis labels |
Features
Logarithmic axes (#174 / [#135])
AxisType: 'log', optionallogBase- Shader-side log projection; DataStore stays linear
- Dual
logBaseX/logBaseY, log-space affines, tick-aligned grids - Sticky log domains, positive-only auto-bounds, area baseline guards on log Y
- Candlestick streaming: instance re-upload on append / forming-bar updates
Candlestick price axis (#175, [#176])
- Candle-primary charts: first Y-axis defaults to the right (dual-Y-safe gutters)
- Series
priceLabel: last-price DOM badge, optional price line, optional bar-close countdown - Axis
headertop-rail label
Site (#176)
The project homepage on GitHub Pages is now the live landing site (previously separate from the Pages homepage). It includes live WebGPU demos (multi-series hero stream, multi-chart dashboard wall, candlestick price-axis demo), install CTA, and basic project links. Served from the repo’s Pages setup; source lives with the dev-site landing work in this PR.
URL: https://chartgpu.github.io/ChartGPU/
Version (#177)
- Package version bumped to
0.3.5
Consumer-facing notes
:::ts
chart.appendData(seriesIndex, newPoints, { maxPoints: 1_000_000 });
ChartGPU.create(el, {
performance: { lod: 'auto' }, // or 'strict'
});
// log axis
yAxis: { type: 'log', logBase: 10 }
// candlestick
series: [{ type: 'candlestick', data: ohlc, priceLabel: true }]
| Topic | Behavior |
|---|---|
| Streaming | Prefer appendData + maxPoints over sliding-window full setOption |
| Axes-only updates | Keep series object identity stable for the reuse path |
| LOD | auto may hairline dense lines / compact dense scatter; use strict for exact width/markers |
| Storage | Very long unbounded streams may auto-window near device storage caps |
| Tooltips | Off skips dual-store hit-test work on streaming frames |
See docs/performance.md (github.com).
Pull requests
| PR | Title |
|---|---|
| #166 | perf: upload architecture, frame graph, and modular coordinator |
| #167 | fix: time-axis affine, area streaming, and full-width append |
| #168 | fix: close PR 167 correctness blockers (ring, LTTB, dual-store, LOD) |
| #169 | fix: improve time-axis precision and streaming zoom (#161) |
| #170 | fix: correct chart sizing under page zoom and CSS zoom (#155) |
| #171 | fix: area fill null gaps fan to origin (#153) |
| #172 | fix: preserve line null gaps under zoom; stack legend above axis labels |
| #174 | feat: logarithmic axes (#135) and streaming candlestick re-upload |
| #175 | feat: candlestick exchange-style Y-axis (right rail + last-price badge) |
| #176 | Candlestick price axis, live landing site, and GitHub Pages homepage |
| #177 | chore: bump version to 0.3.5 |
Full changelog: https://github.com/ChartGPU/ChartGPU/compare/v0.3.4...v0.3.5
:::bash
npm install @chartgpu/chartgpu@0.3.5