Performance
Unlike libraries that re-render the entire chart on every bar change:
TaskStore— external store with per-task version countersTaskBar—React.memowith custom comparator; subscribes only to its task's version- Drag/resize —
updateTask()bumps one task version → only that bar re-renders - Grid, headers, dependency layer — separate memoized components
- Timeline context — ref-stabilized via metrics signature
- Task tooltip — isolated overlay; chart does not hold tooltip position state
TaskStore API
ts
const store = new TaskStore(initialTasks);
store.subscribe(listener); // → unsubscribe
store.getSnapshot();
store.getVersion();
store.getTaskVersion(taskId);
store.setTasks(tasks);
store.updateTask(taskId, patch);
store.replaceTasks(tasks);Import TaskStore directly for custom integrations.
Column virtualization
For large timelines, columnScrollBufferPercent (default 10%) controls the horizontal buffer. Utilities:
getVisibleColumnRangegetViewportColumnRangemaintainBufferedColumnRangeuseVirtualColumnSegments
See Large Timeline example for 50 rows over four years.