A modern, high-performance JavaScript charting library optimized for financial and economic data visualization.
- Canvas 2D for standard datasets (< 50K points)
- WebGL for large datasets (50K+ points) with GPU acceleration
- SVG fallback for maximum compatibility
- Automatic renderer selection based on data size and browser capabilities
- Line Charts with customizable curves (linear, step, cardinal, monotone) and area fill capability
- Bar Charts with grouped and stacked options
- Panel Views for multi-dataset comparative analysis
- Moving Averages: Simple (SMA) and Exponential (EMA)
- Bollinger Bands with configurable periods and standard deviations
- Statistical Lines: Zero line, average line, median line
- Recession Indicators with customizable periods and styling
- Interactive Crosshairs with data point tooltips
- Dynamic Legends with dataset management
- Ending Labels for latest values
- Grid System with major/minor lines
- Custom Color Palettes with color picker integration
- Browser Support Detection with capability reporting
- Coordinate System Normalization across all renderers
- Data Processing Pipeline with caching and optimization
- Path Generation with curve smoothing and interpolation
- Memory Management with efficient resource cleanup
# Via npm
npm install visioncharts
# Via CDN
<script type="module" src="https://unpkg.com/visioncharts@latest/dist/visioncharts.esm.js"></script>
import { LineChart } from 'visioncharts';
// Create a line chart
const chart = new LineChart({
container: '#my-chart',
data: [{
id: 'dataset-1',
name: 'Stock Price',
color: '#1468a8',
data: [
{ x: new Date('2024-01-01'), y: 100 },
{ x: new Date('2024-01-02'), y: 105 },
{ x: new Date('2024-01-03'), y: 98 }
]
}],
options: {
title: 'Stock Performance',
xAxisName: 'Date',
yAxisName: 'Price ($)',
width: 800,
height: 400
}
});
// Render the chart
await chart.render();
import { LineChart } from 'visioncharts';
const chart = new LineChart({
container: '#advanced-chart',
data: [/* your time series data */],
options: {
title: 'Advanced Financial Chart',
showRecessionLines: true,
isLogarithmic: false,
margin: { top: 40, right: 60, bottom: 60, left: 80 }
}
});
await chart.render();
// Add technical indicators
chart.addStudy('sma', {
name: 'SMA (20)',
period: 20,
color: '#FF6B35',
strokeWidth: 2
});
chart.addStudy('bollinger', {
name: 'Bollinger Bands',
period: 20,
standardDeviations: 2,
color: '#9C27B0'
});
// Initialize
const chart = new Chart(config);
// Configuration methods
chart.addDataset(dataset);
chart.removeDataset(datasetId);
chart.updateDataset(datasetId, updates);
// Rendering
await chart.render();
chart.update();
chart.resize(width, height);
// Interaction
chart.toggleLogarithmicScale(enabled);
chart.toggleRecessionLines(enabled);
chart.toggleZeroLine(enabled);
const lineChart = new LineChart({
container: '#chart',
data: datasets,
options: {
// Line-specific options
curve: 'monotone', // 'linear', 'step', 'cardinal', 'monotone'
fillArea: false,
fillOpacity: 0.3
}
});
const barChart = new BarChart({
container: '#chart',
data: datasets,
options: {
// Bar-specific options
barWidth: 0.8,
groupPadding: 0.1,
showValues: true
}
});
// Simple Moving Average
const smaId = chart.addStudy('sma', {
name: 'SMA (50)',
datasetId: 'dataset-1',
parameters: { period: 50 },
color: '#34A853',
strokeWidth: 2,
visible: true
});
// Exponential Moving Average
const emaId = chart.addStudy('ema', {
name: 'EMA (20)',
datasetId: 'dataset-1',
parameters: { period: 20 },
color: '#EA4335',
strokeWidth: 2,
visible: true
});
// Bollinger Bands
const bollingerId = chart.addStudy('bollinger', {
name: 'Bollinger Bands',
datasetId: 'dataset-1',
parameters: {
period: 20,
standardDeviations: 2
},
color: '#9C27B0',
strokeWidth: 1,
visible: true
});
// Update study parameters
chart.updateStudy(studyId, {
parameters: { period: 30 },
color: '#FF5722'
});
// Remove study
chart.removeStudy(studyId);
// Get all studies
const studies = chart.getAllStudies();
// Get visible studies only
const visibleStudies = chart.getVisibleStudies();
const dataset = {
id: 'unique-id', // Required: Unique identifier
name: 'Display Name', // Required: Human-readable name
color: '#1468a8', // Required: Chart color
data: [ // Required: Array of data points
{
x: Date | number, // X-axis value (timestamp or number)
y: number // Y-axis value
}
],
// Optional properties
fill: false, // Enable area fill (LineChart only)
fillOpacity: 0.3, // Fill opacity (0-1)
strokeWidth: 2, // Line width
strokeOpacity: 1, // Line opacity (0-1)
visible: true, // Dataset visibility
interpolation: 'linear' // Curve interpolation method
};
// Preferred format for financial data
const timeSeriesData = [
{ x: new Date('2024-01-01T09:30:00'), y: 150.25 },
{ x: new Date('2024-01-01T09:31:00'), y: 151.10 },
{ x: new Date('2024-01-01T09:32:00'), y: 149.85 }
];
// Also supports timestamps
const timestampData = [
{ x: 1704110400000, y: 150.25 }, // milliseconds since epoch
{ x: 1704110460000, y: 151.10 },
{ x: 1704110520000, y: 149.85 }
];
const options = {
// Dimensions
width: 800,
height: 400,
margin: { top: 40, right: 60, bottom: 60, left: 80 },
// Content
title: 'Chart Title',
xAxisName: 'Date',
yAxisName: 'Value',
// Data processing
xField: 'x', // X data field name
yField: 'y', // Y data field name
xType: 'time', // 'time', 'number', 'category'
yType: 'number', // Data type for Y axis
// Visualization
isLogarithmic: false, // Enable logarithmic Y scale
showGrid: true, // Show grid lines
showLegend: true, // Show legend
showRecessionLines: false,// Show recession indicators
// Styling
titleFontSize: 16,
titleFontFamily: 'Arial, sans-serif',
titleColor: '#333333',
backgroundColor: 'white',
// Advanced
enableCrosshair: true, // Enable crosshair interaction
enableZoom: true, // Enable zoom/pan
enableTooltips: true, // Enable data tooltips
animationDuration: 300 // Animation duration (ms)
};
// Define custom color palette
const customPalette = [
'#FF6B6B', '#4ECDC4', '#45B7D1',
'#96CEB4', '#FECA57', '#FF9FF3'
];
// Apply to datasets
datasets.forEach((dataset, index) => {
dataset.color = customPalette[index % customPalette.length];
});
/* Override default styles */
.visioncharts-container {
border: 1px solid #e0e0e0;
border-radius: 8px;
}
.visioncharts-title {
font-family: 'Helvetica Neue', sans-serif;
font-weight: 300;
}
.visioncharts-legend-item {
cursor: pointer;
transition: opacity 0.2s ease;
}
.visioncharts-crosshair-line {
stroke-dasharray: 3,3;
}
VisionCharts automatically detects browser capabilities and selects the optimal renderer:
Browser | Canvas 2D | WebGL | SVG | Notes |
---|---|---|---|---|
Chrome 60+ | β | β | β | Full support |
Firefox 55+ | β | β | β | Full support |
Safari 12+ | β | β | β | Full support |
Edge 79+ | β | β | β | Full support |
IE 11 | β | β | β | Limited (no WebGL) |
import { browserSupport } from 'visioncharts';
// Check browser capabilities
const capabilities = browserSupport.getSupportSummary();
console.log('Canvas 2D:', capabilities.canvas2d);
console.log('WebGL:', capabilities.webgl);
console.log('High DPI:', capabilities.isHighDPI);
// Get recommended renderer for dataset size
const renderer = browserSupport.suggestRenderer(dataPointCount);
console.log(`Recommended renderer: ${renderer}`);
Data Points | Recommended Renderer | Expected Performance |
---|---|---|
< 1,000 | SVG or Canvas 2D | Excellent |
1,000 - 10,000 | Canvas 2D | Very Good |
10,000 - 50,000 | Canvas 2D | Good |
50,000+ | WebGL | Excellent |
// For large datasets, use WebGL
const chart = new LineChart({
container: '#chart',
data: largeDataset,
options: {
preferredRenderer: 'webgl', // Force WebGL
enableDataSampling: true, // Sample data for better performance
maxDataPoints: 100000 // Limit maximum points
}
});
// Pre-process data for better performance
const processedData = chart.dataProcessor.processData(rawData, {
removeOutliers: true,
interpolateGaps: true,
downsample: true,
targetPoints: 10000
});
visioncharts/
βββ src/
β βββ core/ # Core chart classes
β β βββ Chart.js # Base chart class
β β βββ Axis.js # Axis rendering
β β βββ Scale.js # Scale management
β βββ charts/ # Chart implementations
β β βββ LineChart.js # Line/area charts
β β βββ BarChart.js # Bar charts
β βββ components/ # Reusable components
β β βββ Legend.js # Legend component
β β βββ Grid.js # Grid system
β β βββ Crosshair.js # Crosshair interaction
β βββ renderers/ # Rendering backends
β β βββ CanvasRenderer.js# Canvas 2D renderer
β β βββ WebGLRenderer.js # WebGL renderer
β βββ utils/ # Utility modules
β β βββ DataProcessor.js # Data processing
β β βββ PathGenerator.js # Path generation
β β βββ BrowserSupport.js# Browser detection
β βββ index.js # Main export
βββ examples/ # Demo and examples
βββ index.html # Interactive demo
βββ scripts/ # Demo script
βββ styles/ # Demo page style
βββ data/ # Sample JSON data
# Clone the repository
git clone https://github.com/visionkernel/visioncharts.git
cd visioncharts
# Install dependencies
npm install
# Build the library
npm run build
# Run development server
npm run dev
- GitHub Issues: Report bugs and request features
- Discussions: Join our community discussions
This project is licensed under the MIT License - see the LICENSE file for details.
VisionCharts v2.0.0 | Β© 2025 VisionKernel Team