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 name | Handsontable - JavaScript Data Grid |
| Report date | March 2026 |
| Report version | 1.1 |
| Standards covered | WCAG 2.2 Level A and AA |
| Vendor | Handsontable sp. z o.o. |
| Contact | support@handsontable.com |
| Audit report reference | Kinaole (December 2025 - January 2026) |
| VPAT template version | VPAT® 2.5 (October 2024) |
Applicable standards
This report covers the following standard:
- Web Content Accessibility Guidelines 2.2 - https://www.w3.org/TR/WCAG22/ - Level A and Level AA
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 viatabNavigation: 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).
| Supports | Partially Supports | Does Not Support | Not Applicable | Not Evaluated |
|---|---|---|---|---|
| 8 | 8 | 7 | 17 | 15 |
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.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:
|
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.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.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:
|
Known open issues
The following issues are acknowledged, tracked, and actively prioritized. Transparency about open issues is integral to our approach to accessibility improvement.
| Issue | Ref. | Severity | WCAG Criterion |
|---|---|---|---|
| Sorting state not announced to screen readers | #2375 | High | 4.1.3 |
| Range/area selection not announced | #2343 | High | 4.1.2, 4.1.3 |
| Nested column headers announcement issues | #2373 | Normal | 4.1.2 |
| No mechanism to add accessible table description | #3044 | Normal | 1.3.1 |
| Cell value as formula result not indicated | #3046 | Normal | 4.1.2, 4.1.3 |
| Empty cell index not announced | #2441 | Normal | 4.1.3 |
| Date picker (Pikaday) not properly announced | - | Normal | 4.1.2 |
| SVG loading icon not hidden from screen readers | - | Trivial | 1.1.1 |
| Menu separators exposed as interactive menu items | - | Normal | 1.3.1, 4.1.2 |
| Checkbox group semantics in filter menu | - | Critical | 1.3.1, 4.1.2 |
| Color contrast failures in Horizon theme (summary row, icons) | - | Normal | 1.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.
Legal disclaimer
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.