Skip to content
EliteChart
v0.1 — early access

Trading charts, built for production.

A TypeScript charting library for Next.js — 30+ indicators, 46 drawing tools, replay, alerts, and a plugin API. 60fps on 100k+ candles, 150KB gzipped.

Get started View on GitHub
30+Indicators46Drawing tools150KBGzipped core60fps@ 100k bars0Runtime deps
The walk-through

Every part, paired with the code that drives it.

Each panel below cycles a real chart through a real surface — the same call signatures you would write in your app. Hover the demo to interrupt the cycle and try it yourself.

A trading desk you can drop in.

tsx
import { EliteChart } from '@elitechart/elitechart';
import '@elitechart/elitechart/styles.css';

export default function Page() {
  return <EliteChart symbol="BTCUSD" timeframe="1h" />;
}

One component, every surface — top bar, drawing rail, watchlist, screeners, theming, replay. Synthetic 1.5-second ticks under the hood so the chart breathes the moment it mounts.

Read the quickstart

Switch candle kinds without rewiring.

tsx
const setKind = useChartStore((s) => s.setKind);

setKind('candle');
setKind('bar');
setKind('line');
setKind('area');

Bull and bear candles, OHLC bars, simple lines, area fills — every series kind plugs into the same store. No re-mount, no flicker.

Read the full guide

Try every timeframe.

tsx
const setTimeframe = useChartStore((s) => s.setTimeframe);

setTimeframe('1m');
setTimeframe('5m');
setTimeframe('15m');
setTimeframe('1h');
setTimeframe('4h');
setTimeframe('1D');
setTimeframe('1W');

Nine resolutions out of the box — minute through monthly — backed by a deterministic mock feed in dev and your real WebSocket in prod.

Read the full guide
View source on GitHub →

Pick a drawing tool, draw on price.

tsx
const setActiveTool = useUIStore((s) => s.setActiveTool);

setActiveTool('cursor');
setActiveTool('trend-line');
setActiveTool('ray');
setActiveTool('fib-retracement');
setActiveTool('rectangle');
setActiveTool('ellipse');
setActiveTool('text');

46 drawing tools, all snap-to-bar with a magnet, all touch-aware. Tap an icon — the cursor arms with that tool and the next click on price plants it.

Read the full guide

Show or hide every panel, live.

tsx
const setSidebarPanel = useUIStore((s) => s.setSidebarPanel);
const setBottomTab = useUIStore((s) => s.setBottomTab);

setSidebarPanel('watchlist');  // right rail on
setBottomTab('trading-panel'); // bottom strip on
setSidebarPanel(null);          // chart only

Watchlist, alerts, news, screeners, trading panel — every chrome surface is a controlled state in the public store. Hide what your product does not need.

Read the full guide
View source on GitHub →

Theme it your way, at runtime.

tsx
const setThemeMode = useUIStore((s) => s.setThemeMode);

setThemeMode('dark');
setThemeMode('light');

// or fine-grained:
chart.patchTheme({ seriesUp: '#22c55e' });

OKLCH design tokens drive every surface, candle, grid, and crosshair. Toggle the whole shell in one frame, or override a single token without rebuilding.

Read the full guide
Built for the desk

Everything a real trading product needs.

Every part of ChartForge ships as an opt-in package. Tree-shake what you don't use; bring your own datafeed, broker, indicator, or drawing tool when you do.

30+ indicators

EMA, RSI, MACD, Bollinger, Ichimoku, VWAP, Pivots, Keltner — every indicator the desk reaches for, in pure functions you can compose.

46 drawing tools

Trend lines, channels, Fibonacci retracements, harmonics, long/short positions, text. Snap-to-bar and magnet, on touch and trackpad.

Themable to the pixel

OKLCH design tokens for surfaces, candles, grids, crosshair. Swap the palette at runtime — light, dark, or your brand — in under 30 seconds.

60fps on 100k bars

Hand-tuned canvas renderer with offscreen layers, dirty regions, and zero-alloc hot paths. 10k bars draw in <16ms, 100k in <50ms.

SSR-safe out of the box

Built for Next.js App Router — no top-level window, no hydration warnings. The chart mounts inside a Client Component and that is all.

Plugin API

Bring your own indicator, drawing, or datafeed. Side-effect-free interfaces; tree-shakeable from the core. 0 runtime deps in @elitechart/core.