Overview
FastComments is an embedded commenting and chat widget delivered as a JavaScript bundle that renders inside a host page. Our accessibility work targets WCAG 2.1 Level AA and the U.S. Section 508 ICT Refresh (which incorporates WCAG 2.0 AA by reference). This statement applies to the FastComments comment widget, live chat widget, and the public fastcomments.com marketing site.
The administrative dashboard (used by site owners and moderators, not end commenters) is covered by best-effort accessibility but is not the primary focus of this statement. Tenant-side customization (custom CSS, custom themes, translation overrides) can affect end-user accessibility in ways outside of our control; please review any customization you apply.
Conformance Status
FastComments is partially conformant with WCAG 2.1 Level AA. "Partially conformant" means that some parts of the content do not fully meet the standard. The table below reflects our honest current state, not an aspirational claim. Items marked "Partially Supports" or "Does Not Support" are tracked on our internal roadmap.
Standards Used
- Web Content Accessibility Guidelines (WCAG) 2.1, Level A and Level AA
- U.S. Section 508 of the Rehabilitation Act (29 U.S.C. 794d), as updated by the 2018 ICT Refresh
- EN 301 549 (European harmonized standard) clauses that map to WCAG 2.1 AA
WCAG 2.1 Level A & AA Conformance Table
The "Conformance Level" column uses the standard VPAT terminology: Supports, Partially Supports, Does Not Support, and Not Applicable. Where an item is "Not Applicable," the criterion does not apply to an embedded widget that renders only text content, or the responsibility falls to the host page.
| Criterion | Level | Conformance | Remarks |
|---|---|---|---|
| 1.1.1 Non-text Content | A | Partially Supports | Avatars, status icons, and toolbar icons have alt text. Some icon-only buttons rely on adjacent text or title attributes rather than explicit aria-label. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | A | Not Applicable | The widget does not present audio or video content directly. Embedded media in comment bodies is the responsibility of the linking commenter. |
| 1.2.2 Captions (Prerecorded) | A | Not Applicable | No prerecorded synchronized media is delivered by the widget. |
| 1.2.3 Audio Description or Media Alternative | A | Not Applicable | No prerecorded synchronized media is delivered by the widget. |
| 1.2.4 Captions (Live) | AA | Not Applicable | No live synchronized media is delivered by the widget. |
| 1.2.5 Audio Description (Prerecorded) | AA | Not Applicable | No prerecorded video is delivered by the widget. |
| 1.3.1 Info and Relationships | A | Partially Supports | Forms use semantic input and label elements. Comment threads use nested lists structurally. Editor toolbar buttons currently use div elements with data-action handlers rather than native button elements; replacing these is on our roadmap. |
| 1.3.2 Meaningful Sequence | A | Supports | DOM order matches reading order. |
| 1.3.3 Sensory Characteristics | A | Supports | No instructions depend on shape, color, or spatial location alone. |
| 1.3.4 Orientation | AA | Supports | The widget reflows to both portrait and landscape. |
| 1.3.5 Identify Input Purpose | AA | Partially Supports | Email and name inputs accept autocomplete; some optional fields do not yet declare autocomplete tokens. |
| 1.4.1 Use of Color | A | Supports | Color is not the sole means of conveying state (votes, validation errors, status badges all include text or icons). |
| 1.4.2 Audio Control | A | Not Applicable | The widget does not auto-play audio. |
| 1.4.3 Contrast (Minimum) | AA | Partially Supports | Default light and dark themes meet 4.5:1 for body text against background. Tenants may apply custom CSS that overrides these values; we recommend tenants verify contrast on customized deployments. |
| 1.4.4 Resize Text | AA | Supports | Layout reflows up to 200% zoom without loss of content or functionality. |
| 1.4.5 Images of Text | AA | Supports | No images of text are used for UI labels. |
| 1.4.10 Reflow | AA | Supports | Content reflows at 320 CSS pixels width without horizontal scrolling. |
| 1.4.11 Non-text Contrast | AA | Partially Supports | Default theme meets the 3:1 ratio for active UI controls and graphical objects in most cases. Vote arrows and some hover states are being reviewed. |
| 1.4.12 Text Spacing | AA | Supports | User-applied text-spacing overrides do not break the layout. |
| 1.4.13 Content on Hover or Focus | AA | Partially Supports | Tooltips and dropdowns are dismissible and hoverable. A small number of hover-triggered popovers do not yet support keyboard-equivalent dismissal. |
| 2.1.1 Keyboard | A | Partially Supports | Submission, voting, reply, sign-in, and search are keyboard-operable. The rich-text formatting toolbar (bold, italic, link, image, etc.) is currently activated via mouse and arrow-key navigation rather than full tab order; this is on our roadmap. |
| 2.1.2 No Keyboard Trap | A | Supports | Modals and inline editors can be exited with Escape or by tabbing out. |
| 2.1.4 Character Key Shortcuts | A | Supports | The widget does not bind single-character shortcuts at the document level. |
| 2.2.1 Timing Adjustable | A | Not Applicable | No time limits are imposed on reading or composing comments. Sign-in sessions follow the host site's policy. |
| 2.2.2 Pause, Stop, Hide | A | Partially Supports | Live-update streams can be disabled at the tenant level. We do not yet expose a per-user toggle to pause incoming live comments. |
| 2.3.1 Three Flashes or Below Threshold | A | Supports | No content flashes more than three times per second. |
| 2.4.1 Bypass Blocks | A | Not Applicable | The widget is one block of content within a host page; bypass links are the host page's responsibility. |
| 2.4.2 Page Titled | A | Not Applicable | The widget does not set the host page title. |
| 2.4.3 Focus Order | A | Supports | Focus order follows DOM order and matches reading order. |
| 2.4.4 Link Purpose (In Context) | A | Supports | Link text describes destination; permalink and reply links are paired with comment context. |
| 2.4.5 Multiple Ways | AA | Not Applicable | Applies to a set of pages, not to an embedded widget. |
| 2.4.6 Headings and Labels | AA | Partially Supports | Form labels are descriptive. The widget does not currently emit heading elements for comment-thread sections; individual comment authors and timestamps are exposed as labelled regions instead. |
| 2.4.7 Focus Visible | AA | Does Not Support | The widget relies on browser-default focus rings. Tenants whose host CSS removes outlines globally will inherit that loss of focus indication. Adding explicit, opinionated focus-visible styles to the widget shell is a tracked roadmap item. |
| 2.5.1 Pointer Gestures | A | Supports | All actions can be performed with a single-point activation; no path-based or multi-point gestures. |
| 2.5.2 Pointer Cancellation | A | Supports | Actions trigger on pointer-up, allowing cancellation by dragging off the target. |
| 2.5.3 Label in Name | A | Partially Supports | Most accessible names include the visible label text. A small number of icon-only buttons use a synonymous aria-label that does not match the visible tooltip word-for-word. |
| 2.5.4 Motion Actuation | A | Not Applicable | No motion-triggered functionality. |
| 3.1.1 Language of Page | A | Not Applicable | The widget honors the host page's lang attribute and serves localized strings accordingly; the host page is responsible for declaring lang on its document. |
| 3.1.2 Language of Parts | AA | Supports | The widget does not mix languages within a single rendered string; commenter content is delivered as authored. |
| 3.2.1 On Focus | A | Supports | Focusing an element does not initiate a context change. |
| 3.2.2 On Input | A | Supports | Changing an input value does not initiate an unexpected context change. |
| 3.2.3 Consistent Navigation | AA | Supports | The widget renders the same controls in the same order on every page where it is embedded. |
| 3.2.4 Consistent Identification | AA | Supports | Components with the same functionality (vote, reply, report) are identified consistently. |
| 3.3.1 Error Identification | A | Partially Supports | Server-side errors are surfaced inline near the relevant form field. Some client-side validation errors are not yet associated with their input via aria-describedby. |
| 3.3.2 Labels or Instructions | A | Supports | All form inputs have visible labels or placeholders paired with descriptions. |
| 3.3.3 Error Suggestion | AA | Partially Supports | Errors describe what went wrong and, where possible, how to fix it. Some validation messages are generic. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | AA | Supports | Comment deletion and account deletion are confirmable and reversible within a grace window. |
| 4.1.1 Parsing (obsolete in WCAG 2.2) | A | Supports | Generated markup is well-formed. |
| 4.1.2 Name, Role, Value | A | Partially Supports | Native form controls expose correct names and roles. Custom div-based toolbar buttons do not yet declare role=button or aria-pressed where applicable; this is a tracked roadmap item. |
| 4.1.3 Status Messages | AA | Does Not Support | New incoming comments, successful submissions, and toast notifications are not currently announced via aria-live regions. We are scoping a polite-priority live region for these events. |
Known Gaps and Roadmap
We track the following items as the highest-priority accessibility work:
- Visible focus styles baked into the widget shell so they survive aggressive host-page CSS resets (addresses 2.4.7).
- aria-live status region for new-comment arrivals, submission success, and validation toasts (addresses 4.1.3).
- Native button elements for the rich-text editor toolbar, with proper role, name, and aria-pressed where applicable (addresses 1.3.1, 2.1.1, 4.1.2).
- Per-user toggle to pause the live-update stream from within the widget (addresses 2.2.2).
- Continued contrast audit of icon controls and hover states in both default themes (addresses 1.4.11).
Compatibility With Assistive Technology
FastComments is designed to work with current versions of:
- NVDA and JAWS on Windows (Chrome, Edge, Firefox)
- VoiceOver on macOS (Safari, Chrome) and iOS (Safari)
- TalkBack on Android (Chrome)
- Operating-system zoom and browser zoom up to 200%
- Keyboard-only navigation (Tab, Shift+Tab, Enter, Space, Escape, arrow keys within composers)
Browser Support
FastComments supports the latest two major versions of Chrome, Firefox, Safari, and Edge. Older browsers may degrade accessibility in ways outside our control.
Tenant Responsibilities
Site owners who embed FastComments influence end-user accessibility through their own host page. To preserve accessibility:
- Set a correct
langattribute on your host page'shtmlelement. - Ensure the widget appears inside a properly structured landmark (e.g., a
mainorsectionwith a heading). - Avoid CSS that removes focus outlines globally (e.g.,
*:focus { outline: none }). - If applying a custom theme, verify text contrast meets WCAG 2.1 Level AA (4.5:1 for body text, 3:1 for large text and UI controls).
- Test the embedded experience with a screen reader and with keyboard-only navigation before launching.
Formal Approach
Our accessibility approach combines automated linting in CI (axe-core based checks), targeted manual testing during feature work, and periodic full audits against the WCAG 2.1 AA checklist. We do not currently hold a third-party accessibility certification; this self-assessment is performed by the FastComments engineering team.
VPAT
A formal VPAT 2.5 (revision 508/WCAG/EN edition) is available on request for procurement teams. The contents mirror the conformance table above. Please contact us at the email below and we will provide the current PDF.
Feedback and Contact
We welcome feedback on the accessibility of FastComments. If you encounter an accessibility barrier, please let us know what page or interaction was involved, your assistive technology, and your browser. We aim to respond within five business days.
Email us at: Click to Show Email
This statement was last reviewed on May 19th 2026.