← All comparisons
Chart.ts vs Plotly.js
Plotly.js is a scientific charting library popular in data science. It supports 65+ chart types but ships an enormous bundle and is primarily designed for Python/R workflows, not modern JavaScript frameworks.
| Feature | Chart.ts | Plotly.js |
|---|---|---|
| Bundle size | <15kb min+gzip (entire library) | ~1MB min+gzip (full), ~300kb partial |
| Tree-shaking | Full (import only what you use) | Partial bundles available but still very large |
| TypeScript | Built-in, strict mode, full inference | Community types (@types/plotly.js) |
| SSR | Native SSR, works with any framework | Not supported (DOM-dependent) |
| Accessibility | WCAG AA, keyboard nav, screen readers, pattern fills | Basic |
| Tailwind CSS | Native className on every element, dark: variants | Not supported (imperative config) |
| Chart types | 65+ built-in (52 core + 13 WebGL/3D) | 40+ (including 3D, maps) |
| Frameworks | React, Vue, Svelte, Solid, Angular, Vanilla JS | React wrapper (react-plotly.js) |
| License | MIT | MIT |
| Rendering | Triple engine: SVG + Canvas + WebGL (auto-switching at 10k/100k points) | SVG + WebGL (for scatter) |
| Real-Time | Built-in streaming, WebSocket, SSE, HTTP polling via @chartts/websocket | Plotly.extendTraces() |
| GPU / 3D | WebGL renderer + @chartts/gl with 13 3D chart types (Scatter3D, Surface3D, Globe3D, etc.) | WebGL scatter only |
| Financial | @chartts/finance: SMA, EMA, RSI, MACD, Bollinger Bands, ATR, VWAP, Sharpe ratio | Candlestick, OHLC |
| Plugins | defineChartType() with render context, hit testing, custom scales | No |
| Interactions | Zoom, pan, brush selection, crosshair, linked charts | Zoom, pan, hover |
| Advanced Charts | Sankey, treemap, sunburst, chord, geo maps, network graphs, 3D globe | 40+ types (3D, maps, sankey) |
| Theme Presets | 34 presets (Nord, Dracula, Catppuccin, Tokyo Night, Material, etc.) | 3 templates |
Why switch from Plotly.js?
Chart.ts advantages
- Under 15kb vs 300kb-1MB bundle
- JavaScript-first, not a Python port
- Full SSR support vs DOM-dependent
- Native Tailwind CSS integration
- Full WebGL/3D (not just scatter)
Plotly.js limitations
- Enormous bundle size (~1MB full, ~300kb partial)
- Python/R-first ecosystem, JS is secondary
- No SSR support, requires DOM
- Not Tailwind-native, imperative config objects
- No tree-shaking for individual chart types
Ready to switch?
Get started with Chart.ts in 30 seconds.
$
npm install @chartts/core