A comprehensive SolidJS wrapper for Highcharts that provides type-safe, reactive chart components with proper lifecycle management.
- π― Type-Safe: Full TypeScript support with proper type inference
- β‘ Reactive: Seamless integration with SolidJS reactivity system
- ποΈ Modular: Support for all Highcharts variants (Core, Stock, Maps, Gantt)
- π§Ή Clean: Automatic cleanup and memory management
- π± Responsive: Built-in responsive chart behavior
- π¨ Customizable: Full access to Highcharts configuration options
Important: This wrapper library (@dschz/solid-highcharts
) is MIT licensed, but Highcharts itself is a commercial product that requires a license for most use cases.
- π’ Commercial Use: Requires a Highcharts license for commercial projects
- π Non-Commercial: Free for personal projects, school websites, and non-profit organizations
- π§ͺ Evaluation: Free for testing and evaluation purposes
Use Case | Highcharts License Required |
---|---|
Personal/hobby projects | β Free |
Educational/school websites | β Free |
Non-profit organizations | β Free |
Commercial websites/applications | β License Required |
SaaS products | β License Required |
Products for sale | β License Required |
π Before using Highcharts in your project, please review the official Highcharts license terms to determine if you need to purchase a license.
This wrapper library simply provides SolidJS integration - all Highcharts licensing terms apply to your usage of the underlying Highcharts library.
# Using npm
npm install highcharts @dschz/solid-highcharts
# Using yarn
yarn install highcharts @dschz/solid-highcharts
# Using pnpm
pnpm install highcharts @dschz/solid-highcharts
# Using bun
bun install highcharts @dschz/solid-highcharts
All Highcharts functionality is available from the single highcharts
package via different import paths.
π¦ Highcharts v12+: As of Highcharts version 12, you should use ESM import paths for better compatibility and tree-shaking. The examples below show the recommended ESM imports.
// Core Highcharts (standard charts) - ESM import
import Highcharts from "highcharts/esm/highcharts";
// Stock Charts (financial/time-series data) - ESM import
import HighchartsStock from "highcharts/esm/highstock";
// Maps (geographical data) - ESM import
import HighchartsMaps from "highcharts/esm/highmaps";
// Gantt Charts (project timelines) - ESM import
import HighchartsGantt from "highcharts/esm/highcharts-gantt";
// Additional modules (optional) -- ORDER MATTERS! MUST BE IMPORTED AFTER Highcharts IMPORT!
import "highcharts/esm/modules/accessibility";
import "highcharts/esm/modules/exporting";
import "highcharts/esm/modules/export-data";
See this post for more details.
Legacy UMD imports (pre-v12) are still supported but ESM is recommended:
// Legacy UMD imports (still works but not recommended)
import Highcharts from "highcharts";
import HighchartsStock from "highcharts/highstock";
import HighchartsMaps from "highcharts/highmaps";
import HighchartsGantt from "highcharts/highcharts-gantt";
// Additional modules (optional) -- ORDER MATTERS! MUST BE IMPORTED AFTER Highcharts IMPORT!
import "highcharts/modules/accessibility";
import "highcharts/modules/exporting";
import "highcharts/modules/export-data";
This library exposes four factory functions that create the Highcharts components to use in your Solid application.
import Highcharts from "highcharts/esm/highcharts";
import { createChart } from "@dschz/solid-highcharts";
// Highcharts Chart component
const Chart = createChart(Highcharts);
// To create a StockChart
import Highcharts from "highcharts/esm/highstock";
import { createStockChart } from "@dschz/solid-highcharts";
// Highcharts StockChart component
const StockChart = createStockChart(Highcharts);
// To create a MapChart
import Highcharts from "highcharts/esm/highmaps";
import { createMapChart } from "@dschz/solid-highcharts";
// Highcharts MapChart component
const MapChart = createMapChart(Highcharts);
// To create a GanttChart
import Highcharts from "highcharts/esm/highcharts-gantt";
import { createGanttChart } from "@dschz/solid-highcharts";
// Highcharts GanttChart component
const GanttChart = createGanttChart(Highcharts);
For additional modules like exporting
and accessibility
, you simply import them to register with Highcharts:
import Highcharts from "highcharts/esm/highcharts";
import "highcharts/esm/modules/accessibility";
import "highcharts/esm/modules/exporting";
import "highcharts/esm/modules/export-data";
import { createChart } from "@dschz/solid-highcharts";
const Chart = createChart(Highcharts);
Note: You may need to disable import sorting rules (like simple-import-sort
or Prettier) for these imports to prevent automatic reordering that would break functionality as the additional modules must be imported AFTER the target Highcharts module import.
All chart components returned from the factory functions accept the same props interface:
type HighchartOptions = Highcharts.Options & {
animation?: boolean | Partial<AnimationOptionsObject>;
};
type HighchartsComponentProps = HighchartOptions & {
/** CSS class for container */
class?: string;
/** CSS styles for container */
style?: JSX.CSSProperties;
/** Access to container element */
ref?: (container: HTMLDivElement) => void;
/** Callback when chart is created */
onCreateChart?: (chart: Highcharts.Chart) => void;
};
// Basic styling
<Chart
class="my-chart"
style={{ height: '400px', border: '1px solid #ccc' }}
title={{ text: 'Styled Chart' }}
series={[{ type: 'line', data: [1, 2, 3] }]}
/>
// Chart reference and callbacks
<Chart
ref={(container) => console.log('Container:', container)}
onCreateChart={(chart) => {
// Access chart instance
chart.setTitle({ text: 'Updated Title' });
// Add custom event listeners
chart.container.addEventListener('click', () => {
console.log('Chart clicked!');
});
}}
series={[{ type: 'line', data: [1, 2, 3] }]}
/>
/* Global chart container styles */
.highcharts-container {
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* Custom chart class */
.my-chart {
background: #f5f5f5;
padding: 16px;
}
/* Responsive behavior */
.chart-responsive {
width: 100%;
height: 400px;
min-height: 300px;
}
@media (max-width: 768px) {
.chart-responsive {
height: 300px;
}
}
import Highcharts from "highcharts/esm/highcharts";
import { createChart } from "@dschz/solid-highcharts";
// Apply global theme
Highcharts.setOptions({
colors: ["#058DC7", "#50B432", "#ED561B", "#DDDF00"],
chart: {
backgroundColor: "#f9f9f9",
style: {
fontFamily: "Inter, sans-serif",
},
},
title: {
style: {
color: "#333",
fontSize: "18px",
},
},
});
const Chart = createChart(Highcharts);
import Highcharts from "highcharts/esm/highcharts";
import "highcharts/esm/modules/boost";
<Chart
boost={{
useGPUTranslations: true,
seriesThreshold: 50,
}}
series={[
{
type: "line",
data: largeDataset, // 1000+ points
boostThreshold: 100,
},
]}
/>;
All contributions are welcome! Please see our Contributing Guide for details.
# Clone the repository
git clone https://github.com/dsnchz/solid-highcharts.git
cd solid-highcharts
# Install dependencies
bun install
# Run tests
bun test
# Build the library
bun run build
# Start development server
bun start
MIT Β© Daniel Sanchez