Highcharts Accessibility Module Configuration
Permalink to "Highcharts Accessibility Module Configuration"Highcharts has one of the most complete accessibility implementations among commercial chart libraries. Its accessibility module (built into recent versions and enabled by default when loaded) adds keyboard navigation between series and points, a hidden screen reader section describing the chart, ARIA labels on points, legend items as toggle buttons and options for data tables and sonification. The defaults are good. The problems in real dashboards come from charts without descriptions, point descriptions without units, and dense charts that produce hundreds of verbose announcements.
This guide belongs to chart library accessibility.
Spec reference
Permalink to "Spec reference"accessibility.enabled— on by default when the module is loaded.accessibility.description/caption.text— chart-level description and visible caption.accessibility.point.valueDescriptionFormat,valuePrefix,valueSuffix,descriptionFormatter— how each point is announced.accessibility.keyboardNavigation.order— which parts (legend, series, zoom, range selector, chart menu) are reachable and in what order.accessibility.screenReaderSection.beforeChartFormat— the hidden text before the chart; can include title, type, axes, description and a link to the data table.exporting.showTable/ “View data table” — renders an HTML table of the data.- Relevant criteria: SC 1.1.1, 2.1.1, 4.1.2 (A), SC 1.4.11 (AA) for the visuals.
When to use — and when not to
Permalink to "When to use — and when not to"Use the module on every Highcharts chart; there is no good reason to disable it. Write a real description for each chart and units for each series.
Do not rely on the auto-generated description alone (“Line chart with 3 lines”). Do not make every point of a 1,000-point series individually announced without considering verbosity; use pointDescriptionEnabledThreshold or series-level descriptions for dense data.
The misapplication: loading the module but leaving valueSuffix empty, so users hear “Q3, 4.2” without knowing whether it is millions of euros or percent.
Annotated code example
Permalink to "Annotated code example"Highcharts.chart('revenue', {
title: { text: 'Revenue by region, 2026' },
caption: { text: 'North grew fastest (+18%); South declined in Q3.' }, // visible summary
accessibility: {
description: 'Quarterly revenue in millions of euros for three regions.',
point: { valueSuffix: ' million euros', valueDecimals: 1 }, // units (SC 1.1.1)
keyboardNavigation: { order: ['series', 'legend', 'chartMenu'] },
screenReaderSection: {
beforeChartFormat: '<h3>{chartTitle}</h3><div>{typeDescription}</div><div>{chartLongdesc}</div><div>{viewTableButton}</div>',
},
series: { pointDescriptionEnabledThreshold: 200 }, // limit verbosity on dense series
},
exporting: { showTable: false }, // table available via button
xAxis: { categories: ['Q1', 'Q2', 'Q3', 'Q4'], title: { text: 'Quarter' } },
yAxis: { title: { text: 'Revenue (million euros)' } },
series: [{ name: 'North', data: [4.0, 4.4, 4.6, 4.7] }, { name: 'South', data: [3.1, 3.3, 2.9, 3.0], dashStyle: 'Dash' }],
});
dashStyle gives a non-colour distinction between series (SC 1.4.1); markers with different symbols work similarly.
Keyboard & AT behaviour
Permalink to "Keyboard & AT behaviour"| Key | Behaviour | Expected announcement |
|---|---|---|
| Tab | Into chart keyboard navigation | First series or point |
| Left / Right | Previous / next point | “Q3, 4.6 million euros. North.” |
| Up / Down | Previous / next series | Series name and first point |
| Tab | Next navigation group (legend) | “Show North, toggle button, pressed” |
| Enter on legend item | Toggle series | Pressed state |
| Escape | Leave chart navigation | — |
Integration context
Permalink to "Integration context"General chart alternatives are in data visualization & chart alternatives; colour guidance in chart colour & contrast. Highcharts-specific chart types are discussed in chart type-specific patterns. Sonification, which Highcharts supports, is discussed in sonifying time series charts.
Gotchas
Permalink to "Gotchas"Licensing and versions. Accessibility features have expanded across Highcharts versions; some options differ between major versions. Check the API for your version.
Custom tooltips. HTML tooltips (useHTML: true) must not trap focus or contain unique information.
Exported images. PNG exports have no text alternative; offer the data table alongside.
Worked example
Permalink to "Worked example"A SaaS dashboard used Highcharts for twelve widgets with the module loaded but no descriptions or units. Screen reader users heard “Line chart with 4 lines” and unitless values. The team added a description and caption per widget, units through valueSuffix, a consistent keyboard order and a “View as table” button in the screen reader section, and set a point description threshold for dense series. Feedback from a blind analyst: the charts went from “decoration” to usable, with the table view as the main route for detailed work.
Shared defaults
Permalink to "Shared defaults"// One place for accessibility defaults across every chart
Highcharts.setOptions({
accessibility: {
keyboardNavigation: { order: ['series', 'legend', 'chartMenu'] },
screenReaderSection: { beforeChartFormat: '<h3>{chartTitle}</h3><div>{typeDescription}</div><div>{chartLongdesc}</div><div>{viewTableButton}</div>' },
series: { pointDescriptionEnabledThreshold: 200 },
},
plotOptions: { series: { marker: { enabled: true } } }, // symbols help distinguish series
});
Per-chart code then only needs a title, caption, description and units, which keeps reviews focused on content rather than configuration.
Testing it with a screen reader
Permalink to "Testing it with a screen reader"- Reach the chart in browse mode; confirm the screen reader section reads title, type, description and table link.
- Tab into the chart; move between points; confirm values with units.
- Move between series with Up and Down; confirm series names.
- Tab to the legend; toggle a series; confirm pressed state.
- Open the data table; confirm headers and values.
Common mistakes
Permalink to "Common mistakes"- No description or caption.
- Unitless point values.
- Default keyboard order including rarely used parts.
- Colour-only series distinction.
Adoption checklist for teams
Permalink to "Adoption checklist for teams"- Create a Highcharts theme or defaults object with accessibility options pre-set.
- Require
title,captionandaccessibility.descriptionfor every chart in code review. - Set units per series through
valueSuffix. - Provide dash styles or marker symbols per series.
- Include the data table link in the screen reader section.
FAQ
Permalink to "FAQ"Is the accessibility module enabled by default?
In recent versions, when the module is loaded it is enabled by default. Make sure it is included in your bundle.
Does Highcharts handle colour-blind users?
It provides options (dash styles, markers, patterns via the pattern-fill module); you configure them.
Can screen reader users get the raw data?
Yes, through the data table view or export features.
How do I limit verbosity on large series?
Use point description thresholds and rely on series descriptions and the data table.
Does it support sonification?
Yes, through the sonification module; offer it as an optional feature.
Are Highcharts legends accessible?
Legend items are exposed as toggle buttons with the module.
What about Highcharts Stock and Maps?
They use the same accessibility module, with additional components such as range selectors that need labels and keyboard order.
How do I describe annotations on a chart?
Highcharts annotations can carry descriptions that the module includes; also mention the most important annotations in the chart’s caption.
Related
Permalink to "Related"- ECharts aria and decal patterns — another configurable library
- Accessible chart legends as toggle filters — legend behaviour
- Writing chart summaries — descriptions that help