Gathering detailed insights and metrics for highcharts-react-official
Gathering detailed insights and metrics for highcharts-react-official
Gathering detailed insights and metrics for highcharts-react-official
Gathering detailed insights and metrics for highcharts-react-official
highcharts-react-official-fix
Official minimal [Highcharts](https://www.highcharts.com/) wrapper for React.
@highcharts/react
Official Highcharts integration for React
@ahrefs/bs-highcharts-react
Bucklescript bindings for highcharts-react-official
highcharts-react-official-unofficial
Official Highcharts integration for React
The official Highcharts supported wrapper for React
npm install highcharts-react-official
Typescript
Module System
Node Version
NPM Version
JavaScript (100%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
NOASSERTION License
1,144 Stars
170 Commits
110 Forks
23 Watchers
11 Branches
53 Contributors
Updated on Jul 13, 2025
Latest Version
3.2.2
Package Id
highcharts-react-official@3.2.2
Unpacked Size
234.84 kB
Size
53.98 kB
File Count
38
NPM Version
10.9.0
Node Version
22.12.0
Published on
Apr 28, 2025
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
Official minimal Highcharts integration for React.
Note: the beta of the upcoming v4 of the Highcharts React integration is
now available at @highcharts/react@next
Make sure you have node, NPM and React up to date. Tested and required versions:
node
8.11.3+npm
6.4.1+ or similar package managerThis integration also requires highcharts and react packages with the following versions installed in your project:
For version 2.x.x :
react
16.4+highcharts
5.0.0+For version 3.x.x :
react
16.8+highcharts
6.0.0+Get the package from NPM in your React app:
1npm install highcharts-react-official
If Highcharts is not already installed, get the package with Highcharts:
1npm install highcharts highcharts-react-official
Import into your React project and render a chart:
1import React from 'react' 2import { render } from 'react-dom' 3import Highcharts from 'highcharts' 4import HighchartsReact from 'highcharts-react-official' 5 6const options = { 7 title: { 8 text: 'My chart' 9 }, 10 series: [{ 11 data: [1, 2, 3] 12 }] 13} 14 15const App = () => <div> 16 <HighchartsReact 17 highcharts={Highcharts} 18 options={options} 19 /> 20</div> 21 22render(<App />, document.getElementById('root'))
Live example: https://stackblitz.com/edit/react-starter-typescript-cfcznt
1import React, { useRef } from 'react'; 2import * as Highcharts from 'highcharts'; 3import { HighchartsReact } from 'highcharts-react-official'; 4 5// The integration exports only a default component that at the same time is a 6// namespace for the related Props interface (HighchartsReact.Props) and 7// RefObject interface (HighchartsReact.RefObject). All other interfaces 8// like Options come from the Highcharts module itself. 9 10const options: Highcharts.Options = { 11 title: { 12 text: 'My chart' 13 }, 14 series: [{ 15 type: 'line', 16 data: [1, 2, 3] 17 }] 18}; 19 20const App = (props: HighchartsReact.Props) => { 21 const chartComponentRef = useRef<HighchartsReact.RefObject>(null); 22 23 return ( 24 <HighchartsReact 25 highcharts={Highcharts} 26 options={options} 27 ref={chartComponentRef} 28 {...props} 29 /> 30 ); 31}; 32// Render your App component into the #root element of the document. 33ReactDOM.render(<App />, document.getElementById('root'));
Since version 3.2.1 it is also possible to import types for props
and ref
independently:
1import HighchartsReact, { HighchartsReactRefObject, HighchartsReactProps } from 'highcharts-react-official';
Next.js executes code twice - on server-side and then client-side. First run is done in an environment that lacks window
and causes Highcharts to be loaded, but not initialized. Easy fix is to place all modules inits in a if
checking if Highcharts is an object or a function. It should be an object for modules initialization to work without any errors, so code like below is an easy fix:
1import React from 'react' 2import Highcharts from 'highcharts' 3import HighchartsExporting from 'highcharts/modules/exporting' 4import HighchartsReact from 'highcharts-react-official' 5 6if (typeof Highcharts === 'object') { 7 HighchartsExporting(Highcharts) 8} 9 10...
This is a know issue with NextJS and is covered here: https://github.com/vercel/next.js/issues/5354
A good practice is to keep all chart options in the state. When setState
is called, the options are overwritten and only the new ones are passed to the chart.update
method.
Live example: https://stackblitz.com/edit/react-hketvd?file=index.js
Optimal way to update with React Hooks: https://stackblitz.com/edit/react-nwseym?file=index.js
1import React, { Component } from 'react'; 2import { render } from 'react-dom'; 3import HighchartsReact from 'highcharts-react-official'; 4import Highcharts from 'highcharts'; 5 6class LineChart extends Component { 7 constructor(props) { 8 super(props); 9 10 this.state = { 11 // To avoid unnecessary update keep all options in the state. 12 chartOptions: { 13 xAxis: { 14 categories: ['A', 'B', 'C'], 15 }, 16 series: [ 17 { data: [1, 2, 3] } 18 ], 19 plotOptions: { 20 series: { 21 point: { 22 events: { 23 mouseOver: this.setHoverData.bind(this) 24 } 25 } 26 } 27 } 28 }, 29 hoverData: null 30 }; 31 } 32 33 setHoverData = (e) => { 34 // The chart is not updated because `chartOptions` has not changed. 35 this.setState({ hoverData: e.target.category }) 36 } 37 38 updateSeries = () => { 39 // The chart is updated only with new options. 40 this.setState({ 41 chartOptions: { 42 series: [ 43 { data: [Math.random() * 5, 2, 1]} 44 ] 45 } 46 }); 47 } 48 49 render() { 50 const { chartOptions, hoverData } = this.state; 51 52 return ( 53 <div> 54 <HighchartsReact 55 highcharts={Highcharts} 56 options={chartOptions} 57 /> 58 <h3>Hovering over {hoverData}</h3> 59 <button onClick={this.updateSeries.bind(this)}>Update Series</button> 60 </div> 61 ) 62 } 63} 64 65render(<LineChart />, document.getElementById('root'));
Available options with example values:
1 <HighchartsReact 2 options = { this.state.chartOptions } 3 highcharts = { Highcharts } 4 constructorType = { 'mapChart' } 5 allowChartUpdate = { true } 6 immutable = { false } 7 updateArgs = { [true, true, true] } 8 containerProps = {{ className: 'chartContainer' }} 9 callback = { this.chartCallback } 10 />
Parameter | Type | Required | Defaults | Description |
---|---|---|---|---|
options | Object | yes | - | Highcharts chart configuration object. Please refer to the Highcharts API documentation. |
highcharts | Object | yes | - | Used to pass the Highcharts instance after modules are initialized. If not set the component will try to get the Highcharts from window. |
constructorType | String | no | 'chart' | String for constructor method. Official constructors: - 'chart' for Highcharts charts - 'stockChart' for Highstock charts - 'mapChart' for Highmaps charts - 'ganttChart' for Gantt charts |
allowChartUpdate | Boolean | no | true | This integration uses chart.update() method to apply new options to the chart when changing the parent component. This option allow to turn off the updating. |
immutable | Boolean | no | false | Reinitialises the chart on prop update (as oppose to chart.update() ) - useful in some cases but slower than a regular update. |
updateArgs | Array | no | [true, true, true] | Array of update() 's function optional arguments. Parameters should be defined in the same order like in native Highcharts function: [redraw, oneToOne, animation] . Here is a more specific description of the parameters. |
containerProps | Object | no | - | The props object passed to the chart container in React.createElement method. Useful for adding styles or class. |
callback | Function | no | - | A callback function for the created chart. First argument for the function will hold the created chart . Default this in the function points to the chart . This option is optional. |
Create custom component ./components/MyStockChart.jsx
:
1import React from 'react' 2import Highcharts from 'highcharts/highstock' 3import HighchartsReact from 'highcharts-react-official' 4 5const options = { 6 title: { 7 text: 'My stock chart' 8 }, 9 series: [{ 10 data: [1, 2, 3] 11 }] 12} 13 14const MyStockChart = () => <HighchartsReact 15 highcharts={Highcharts} 16 constructorType={'stockChart'} 17 options={options} 18/> 19 20export default MyStockChart
Render your custom chart component like below:
1import React from 'react' 2import { render } from 'react-dom' 3import MyStockChart from './components/MyStockChart.jsx' 4 5const App = () => <div> 6 <MyStockChart /> 7</div> 8 9render(<App />, document.getElementById('root'))
Clone github repository and install dependencies:
1git clone https://github.com/highcharts/highcharts-react 2cd highcharts-react 3npm install
Examples and tests require Highcharts library, don't forget to:
1npm install highcharts
There are several interesting examples in the demo folder that use all available constructors and several modules.
Bundle these with:
1npm run build-demo
Demo is located under demo/index.html
Live example: https://stackblitz.com/edit/react-4ded5d?file=index.js
This integration contains tests for: testing environment, chart rendering and passing down container props. To run tests, type:
1npm run test
The changelog is available here.
Technical support will help you with Highcharts and with the integration.
If you have a bug to report or an enhancement suggestion please submit Issues in this repository.
The NPM package is registered as highcharts-react-official
because highcharts-react
was already taken.
For class components and version prior to 3.0.0 use React.createRef
:
1constructor(props) { 2 super(props) 3 this.chartRef = React.createRef(); 4} 5 6render() { 7 return ( 8 <HighchartsReact 9 highcharts={ Highcharts } 10 options={ options } 11 ref={ this.chartRef } 12 /> 13 ); 14}
For functional components and version 3.0.0 and later use useRef
hook:
1 const chartComponent = useRef(null); 2 const [options] = useState({...}); 3 4 useEffect(() => { 5 const chart = chartComponent.current.chart; 6 ... 7 }, []); 8 9 return <HighchartsReact ref={chartComponent} highcharts={Highcharts} options={options} />;
Alternatively store a chart reference in a callback function:
1afterChartCreated = (chart) => { 2 // Highcharts creates a separate chart instance during export 3 if (!chart.options.chart.forExport) { 4 this.internalChart = chart; 5 } 6} 7 8componentDidMount() { 9 // example of use 10 this.internalChart.addSeries({ data: [1, 2, 3] }) 11} 12 13render() { 14 return ( 15 <div> 16 <h2>Highcharts</h2> 17 <HighchartsReact 18 highcharts={ Highcharts } 19 options={ options } 20 callback={ this.afterChartCreated } 21 /> 22 </div> 23 ); 24}
To add a module, import it like so:
1import Highcharts from 'highcharts' 2import highchartsGantt from "highcharts/modules/gantt"; // The Gantt module 3import HighchartsReact from 'highcharts-react-official' 4 5// Init the module (only for Highcharts v < 12) 6if (typeof highchartsGantt === 'function') { 7 highchartsGantt(Highcharts); 8}
By using Portals it is possible to add a component to every HTML chart element.
Live example: https://codesandbox.io/s/1o5y7r31k3
It can be confusing, since React props are read-only, but Highcharts for performance reasons mutates the original data array. This behaviour is NOT changed by our integration. You need to pass a copy of your data to the integration if you want to prevent mutations.
Issue: https://github.com/highcharts/highcharts-react/issues/326
More discussion here: https://github.com/highcharts/highcharts/issues/4259
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
0 existing vulnerabilities detected
Reason
2 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 9
Reason
license file detected
Details
Reason
Found 7/23 approved changesets -- score normalized to 3
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2025-07-07
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More