Skip to content

Accessibility conformance report (VPAT)

This Accessibility Conformance Report (ACR) follows the VPAT® 2.5 format developed by the Information Technology Industry Council (ITI). It describes how Handsontable, a JavaScript data grid component, conforms to the Web Content Accessibility Guidelines (WCAG) 2.2 at Level A and Level AA.

Report details

Product nameHandsontable - JavaScript Data Grid
Report dateMarch 2026
Report version1.1
Standards coveredWCAG 2.2 Level A and AA
VendorHandsontable sp. z o.o.
Contactsupport@handsontable.com
Audit report referenceKinaole (December 2025 - January 2026)
VPAT template versionVPAT® 2.5 (October 2024)

Applicable standards

This report covers the following standard:

WCAG 2.2, published October 2023, supersedes WCAG 2.1. It removes Success Criterion 4.1.1 Parsing and adds nine new success criteria. The Kinaole audit report (December 2025 - January 2026) was conducted against WCAG 2.1; additional WCAG 2.2 criteria are assessed via internal evaluation and noted accordingly.

Notes

Handsontable supports two primary keyboard navigation paradigms configurable by the developer:

  • Spreadsheet Mode (default) - Tab/Shift+Tab as primary navigation, emulating Microsoft Excel and Google Sheets behavior.
  • Data Grid Mode - Arrow-key navigation with a single tab stop; navigable headers via navigableHeaders: true; Tab navigation disabled via tabNavigation: false.

Row and column virtualization is enabled by default. For complete assistive technology support, renderAllRows: true and renderAllColumns: true are recommended, which ensures a complete accessibility tree is available to screen readers.

Known issues are tracked in the public GitHub repository at github.com/handsontable/handsontable and in an internal backlog.

Evaluation methods

  • Manual keyboard-only navigation testing across all major interaction patterns
  • Screen reader testing: VoiceOver (macOS Sequoia 15.3.2 / iOS 18.3) and NVDA 2025.3 (Windows 11)
  • Browsers tested: Chrome 141.0.7390.66, Firefox 143.0.4
  • Additional testing on Android 14
  • Color contrast analysis using contrast ratio measurement tools
  • HTML/ARIA code inspection of rendered markup
  • Kinaole accessibility audit report (December 2025 / January 2026) - this ACR was prepared internally by Handsontable based on that report

Audit scope - 8 interaction patterns evaluated

  • Nested Menus
  • Arabic / RTL Nested Menu
  • Cell Types (dropdown, autocomplete, checkbox, date)
  • Summary Row
  • Pagination and Data Loading
  • Row Parents (nested rows with expand/collapse)
  • Merged Cells with Formula
  • Empty Data State

Conformance summary

The table below summarizes the count of criteria per conformance level across WCAG 2.2 Level A and AA (55 success criteria total).

SupportsPartially SupportsDoes Not SupportNot ApplicableNot Evaluated
8871715

Conformance levels used in this report:

  • Supports - The functionality of the product has at least one method that meets the criterion without known defects or meets with equivalent facilitation.
  • Partially Supports - Some functionality of the product does not meet the criterion.
  • Does Not Support - The majority of product functionality does not meet the criterion.
  • Not Applicable - The criterion is not relevant to this product.
  • Not Evaluated - The criterion has not been evaluated against the conformance level.

WCAG 2.2 Level A

Criteria Conformance level Remarks and explanations
1.1.1 Non-text Content Partially Supports The decorative loading spinner SVG (ht-loading__icon-svg) is not hidden from assistive technologies - it lacks aria-hidden="true" and role="img", causing unnecessary announcements. All other non-text content with functional purpose includes accessible names. Fix is tracked internally (trivial severity).
1.2.1 Audio-only and Video-only (Prerecorded) Not Applicable The product contains no audio-only or video-only content.
1.2.2 Captions (Prerecorded) Not Applicable No audio content in synchronized media.
1.2.3 Audio Description or Media Alternative (Prerecorded) Not Applicable No prerecorded video content.
1.3.1 Info and Relationships Does Not Support Multiple critical and normal severity issues identified in the external audit:
  1. Mixed table/ARIA semantics (Critical): Native <table>, <thead>, <th> elements are combined with ARIA grid roles (rowgroup, row, columnheader, gridcell), causing screen readers to misinterpret header-cell relationships - including announcing the wrong column header.
  2. No table caption (Normal): The grid provides no <caption> or aria-label to describe its purpose (tracked: #3044).
  3. Column header filter button hidden (Critical): The only interactive element inside column headers has aria-hidden="true", making filter access impossible for keyboard/screen reader users.
  4. Checkbox group semantics (Critical): Filter checkboxes use incorrect aria-label values ("Checked"/"Unchecked" instead of option values), preventing users from identifying which option they are selecting.
  5. Menu separators as interactive items (Normal): Separators implemented as role="menuitem" with decorative dash labels, announced as selectable options.
  6. Autocomplete semantics (Major): Autocomplete list implemented using <table> with ARIA listbox roles - conflicting semantics.
  7. Summary row not identified (Critical): The summary/totals row is indistinguishable from data rows programmatically.
  8. Row headers not associated (Critical): Row number headers are in a separate <table>, not programmatically linked to data cells.
1.3.2 Meaningful Sequence Not Evaluated Not included in the external audit scope.
1.3.3 Sensory Characteristics Not Evaluated Not included in the external audit scope.
1.4.1 Use of Color Not Evaluated Not included in the external audit scope.
1.4.2 Audio Control Not Applicable No audio content.
2.1.1 Keyboard Partially Supports The expand/collapse control in the Row Parents (nested rows) feature is accessible via keyboard when navigation menu mode is enabled (navigableHeaders: true). In the default spreadsheet mode, the control has tabindex="-1" and is aria-hidden="true", making it inaccessible via keyboard without this configuration.
2.1.2 No Keyboard Trap Not Evaluated Not explicitly tested in this cycle. No keyboard traps were reported as discovered issues.
2.1.4 Character Key Shortcuts Not Evaluated Not included in the external audit scope.
2.2.1 Timing Adjustable Not Applicable No time-limited content in the product.
2.2.2 Pause, Stop, Hide Not Applicable No moving, blinking, or auto-updating content by default.
2.3.1 Three Flashes or Below Threshold Not Applicable No flashing content.
2.4.1 Bypass Blocks Not Evaluated Not included in the external audit scope.
2.4.2 Page Titled Not Applicable Component-level product. Page title is the responsibility of the host application.
2.4.3 Focus Order Not Evaluated Not explicitly tested. Mixed table/ARIA semantics identified in 1.3.1 may produce unpredictable focus ordering for screen reader users.
2.4.4 Link Purpose (In Context) Not Evaluated Not included in the external audit scope.
2.5.1 Pointer Gestures Partially Supports Column resizing and row reordering are implemented via drag gestures that require a specific path of movement. Single-pointer alternatives that do not require a path are not consistently available for these operations. Not formally included in the Kinaole audit scope; assessed internally.
2.5.2 Pointer Cancellation Supports Functionality is not triggered on the down-event alone. Activation events use the up-event, allowing users to abort unintended interactions by moving the pointer away before release.
2.5.3 Label in Name Partially Supports Some interactive controls expose accessible names that do not contain the visible label text. The top-left corner button ("Select whole grid") has an accessible name conveyed only via aria-label with no matching visible text. Sorting and filter controls may similarly diverge. Under review in the internal backlog.
2.5.4 Motion Actuation Not Applicable No product functionality is operated through device motion or user motion.
3.1.1 Language of Page Not Applicable Component-level product. Page language is the responsibility of the host application.
3.2.1 On Focus Supports Receiving focus does not initiate a change of context. Verified across all tested interaction patterns. Passed in external audit.
3.2.2 On Input Supports Changing settings does not automatically cause a change of context. Verified across all tested interaction patterns. Passed in external audit.
3.2.6 Consistent Help Not Applicable Handsontable is a data grid component and provides no human contact details, self-help mechanism, or automated contact mechanism. (New criterion in WCAG 2.2.)
3.3.1 Error Identification Partially Supports Some input errors are not identified programmatically. Issues are related to labelling failures described under 3.3.2.
3.3.2 Labels or Instructions Partially Supports The top-left corner button ("Select whole grid") provides an accessible name via aria-label for screen reader users but has no visible label, icon, or text to communicate its purpose to sighted users - particularly those with cognitive impairments (Normal severity). Other controls are generally labelled appropriately.
3.3.7 Redundant Entry Not Applicable Handsontable is a data grid component with no multi-step process that requests previously provided information within the same session. (New criterion in WCAG 2.2.)
4.1.2 Name, Role, Value Does Not Support Multiple critical failures across name, role, and value exposure:
  1. Sorting state changes not announced to screen readers (known issue #2375).
  2. Range/area selection not announced (#2343).
  3. Nested column header announcement issues (#2373).
  4. Expand/collapse state management issues in nested rows.
  5. Date picker (Pikaday) not properly announced.
  6. ARIA roles inconsistently applied across components (see 1.3.1).

WCAG 2.2 Level AA

Criteria Conformance level Remarks and explanations
1.2.4 Captions (Live) Not Applicable No live audio content.
1.2.5 Audio Description (Prerecorded) Not Applicable No prerecorded video content.
1.3.4 Orientation Supports Content is not restricted to a single display orientation. Verified on macOS, iOS, Windows, and Android 14. Passed in external audit.
1.3.5 Identify Input Purpose Partially Supports Input purpose identification is partially implemented. Some fields (e.g., website address inputs in certain configurations) do not correctly expose input purpose via autocomplete attributes.
1.4.3 Contrast (Minimum) Does Not Support Insufficient text contrast identified in the Horizon theme:
  1. Summary row: foreground #37bc6c on background #F7F7F9 - contrast ratio 2.29:1 (required: 4.5:1).
  2. Additional link text contrast failures in the Summary area.
Custom themes may vary. Fixes are tracked in the internal backlog.
1.4.4 Resize Text Not Evaluated Not included in the external audit scope.
1.4.5 Images of Text Not Applicable The product does not use images of text for meaningful content.
1.4.10 Reflow Not Evaluated Not included in the external audit scope. A data grid by nature has complex reflow behavior; this criterion warrants dedicated evaluation.
1.4.11 Non-text Contrast Does Not Support UI component contrast failures identified in the Horizon theme:
  1. Green navigation icon (#37bc6c) on white background (#FFFFFF) in Nested Menu / date picker navigation - contrast ratio 2.45:1 (required: 3:1).
  2. Similar icon contrast failure in the Summary area - contrast ratio 2.29:1.
Fixes are tracked in the internal backlog.
1.4.12 Text Spacing Supports Content and functionality are fully preserved when text-spacing overrides are applied (line height 1.5x, paragraph spacing 2x, letter spacing 0.12x, word spacing 0.16x). Passed in external audit.
1.4.13 Content on Hover or Focus Not Evaluated Not included in the external audit scope.
2.4.5 Multiple Ways Not Applicable Single-component product. Multi-page navigation is the responsibility of the host application.
2.4.6 Headings and Labels Does Not Support The column header element that combines sorting and filter menu functionality provides no descriptive label - the only interactive element within it is aria-hidden="true". Users cannot determine the purpose of interactive controls within column headers. Related to failures in 1.3.1.
2.4.7 Focus Visible Supports Keyboard focus indicator is visible across all tested interaction patterns. Passed in external audit.
2.4.11 Focus Not Obscured (Minimum) Not Evaluated Not formally evaluated in the external audit. Frozen rows and frozen columns may potentially obscure the currently focused element. Dedicated evaluation is planned for a future audit cycle. (New criterion in WCAG 2.2.)
2.5.7 Dragging Movements Partially Supports Column resizing and row reordering are implemented via drag operations. A single-pointer alternative that does not require a dragging movement is not consistently available for these interactions. Under review internally; fix is planned. (New criterion in WCAG 2.2.)
2.5.8 Target Size (Minimum) Not Evaluated The minimum 24x24 CSS pixel target size for interactive elements (column resize handles, row header controls, cell editors, filter buttons) has not been formally verified. Evaluation is planned. (New criterion in WCAG 2.2.)
3.1.2 Language of Parts Does Not Support When the grid is configured with RTL/Arabic content, aria-label and other ARIA attributes are not translated to match the page language. Screen reader users hear labels announced in a different language than the surrounding content, creating an inconsistent experience (Normal severity finding in external audit).
3.2.3 Consistent Navigation Supports Navigation mechanisms are consistent across all tested interaction patterns. Passed in external audit.
3.2.4 Consistent Identification Supports Components with the same functionality are consistently identified. Passed in external audit.
3.3.3 Error Suggestion Not Evaluated Not included in the external audit scope.
3.3.4 Error Prevention (Legal, Financial, Transactions) Not Evaluated Not included in the external audit scope.
3.3.8 Accessible Authentication (Minimum) Not Applicable Handsontable does not provide authentication functionality. (New criterion in WCAG 2.2.)
4.1.3 Status Messages Does Not Support Multiple status conditions are not programmatically conveyed:
  1. Sorting state changes not announced (#2375).
  2. Range/area selection state not announced (#2343).
  3. Cell values identified as formula results not exposed (#3046).
  4. Empty cell status not announced (#2441).
  5. Loading state may not be consistently announced in all configurations.

Known open issues

The following issues are acknowledged, tracked, and actively prioritized. Transparency about open issues is integral to our approach to accessibility improvement.

IssueRef.SeverityWCAG Criterion
Sorting state not announced to screen readers#2375High4.1.3
Range/area selection not announced#2343High4.1.2, 4.1.3
Nested column headers announcement issues#2373Normal4.1.2
No mechanism to add accessible table description#3044Normal1.3.1
Cell value as formula result not indicated#3046Normal4.1.2, 4.1.3
Empty cell index not announced#2441Normal4.1.3
Date picker (Pikaday) not properly announced-Normal4.1.2
SVG loading icon not hidden from screen readers-Trivial1.1.1
Menu separators exposed as interactive menu items-Normal1.3.1, 4.1.2
Checkbox group semantics in filter menu-Critical1.3.1, 4.1.2
Color contrast failures in Horizon theme (summary row, icons)-Normal1.4.3, 1.4.11

WCAG 2.2 assessment notes

This report targets WCAG 2.2 Level AA, published October 2023. WCAG 2.2 removes Success Criterion 4.1.1 Parsing and adds the following criteria (all included in the tables above):

  • Level A (new): 3.2.6 Consistent Help, 3.3.7 Redundant Entry - both assessed as Not Applicable to a data grid component.
  • Level A (inherited from WCAG 2.1, now formally assessed): 2.5.1 Pointer Gestures (Partially Supports), 2.5.2 Pointer Cancellation (Supports), 2.5.3 Label in Name (Partially Supports), 2.5.4 Motion Actuation (Not Applicable).
  • Level AA (new): 2.4.11 Focus Not Obscured Minimum (Not Evaluated - frozen rows/columns require dedicated testing), 2.5.7 Dragging Movements (Partially Supports - drag alternatives incomplete), 2.5.8 Target Size Minimum (Not Evaluated - formal verification pending), 3.3.8 Accessible Authentication Minimum (Not Applicable).

The Kinaole audit report (December 2025 - January 2026) covered WCAG 2.1 A and AA criteria. The nine WCAG 2.2-specific criteria have been assessed internally and are clearly labelled in the tables above. A future audit cycle will include formal third-party evaluation of all WCAG 2.2 additions.

This Accessibility Conformance Report was prepared internally by Handsontable, based on the Kinaole audit report (December 2025 - January 2026) and internal evaluation. It represents the product’s conformance status at the time of evaluation.

Accessibility is an ongoing commitment. Handsontable maintains an active issue backlog, regularly updates the product, and continues to invest in improving conformance. This report will be updated as issues are resolved and new evaluations are completed.

Conformance claims reflect the default configuration of Handsontable. Developer-controlled options (navigableHeaders, renderAllRows, renderAllColumns, tabNavigation, and others) may significantly affect the accessible experience. Developers are responsible for implementing appropriate configurations and for overall application-level accessibility.

This document does not constitute a legal certification of conformance. Use of this document is voluntary and for informational procurement purposes.