Skip to content
VPAT 2.5 Rev

Voluntary Product Accessibility Template

Suparbase v3.10.0 · Report date 2026-05-17. Companion to our plain-English

Product information

Vendor NameSuparbase
Product NameSuparbase
Product Versionv3.10.0
Report Date2026-05-17
Product DescriptionAuthenticated admin workspace for Supabase projects. Encrypted credential vault, server-side PostgREST proxy, RLS debugger, SQL playground, AI-assisted writes, row history, custom actions, dashboard widgets, team workspace, billing, and admin panel.
Contact for Accessibility/contact form
NotesThis report reflects code-level review of the production build on the date above. Color contrast was reviewed by inspection of CSS custom properties, not measured with an automated tool. Customers requiring measured WCAG ratios should run axe-core or Lighthouse against their deployed instance.

Applicable standards and guidelines

  • Web Content Accessibility Guidelines 2.2 (WCAG 2.2) at conformance level AA, per the W3C Recommendation. The product targets Level AA across the entire surface.
  • Revised Section 508 Standards (36 CFR Part 1194, App. A, B, and C - published Jan 18, 2017), the U.S. federal procurement standard.
  • EN 301 549 V3.2.1 (2021-03), the European procurement standard for ICT accessibility.

Terms

  • 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 the product.
  • Not Evaluated: The product has not been evaluated against the criterion. (Used only for WCAG 2.2 Level AAA in this report, which is outside VPAT 2.5 AA scope.)

WCAG 2.2 Level AA report

#CriterionConformanceRemarks & Explanations
1.1.1Non-text Content (Level A)SupportsAll decorative icons (lucide-react) carry aria-hidden. Icon-only buttons (password toggle, navigation menu, row actions, dialog close, etc.) have aria-label. Avatar <img> elements use empty alt because the user's name is rendered alongside.
1.2.1Audio-only and Video-only (Prerecorded) (Level A)Not ApplicableNo audio or video content is shipped.
1.2.2Captions (Prerecorded) (Level A)Not ApplicableNo prerecorded video content with audio.
1.2.3Audio Description or Media Alternative (Prerecorded) (Level A)Not ApplicableNo prerecorded video content.
1.2.4Captions (Live) (Level AA)Not ApplicableNo live audio content.
1.2.5Audio Description (Prerecorded) (Level AA)Not ApplicableNo prerecorded video content.
1.3.1Info and Relationships (Level A)SupportsEvery form (sign-in, sign-up, connection form, bulk-delete, row form, AI settings, team invite, action editor, contact form) uses programmatic label association via htmlFor/id pairs or wrapping <label> elements. As of v3.5.0 the previously-bare labels in TeamMembers, ActionsManager Field helper, and EditableField inline editor were patched. As of v3.10.0 comparison/pricing/admin tables on marketing pages ship explicit scope="col" on every column header. Lists, headings, and landmarks (<nav>, <main>, <header>, <footer>, <aside>) are used semantically.
1.3.2Meaningful Sequence (Level A)SupportsDOM order matches visual order; no CSS reordering creates traversal inconsistencies. Verified across audit.
1.3.3Sensory Characteristics (Level A)SupportsInstructions don't rely solely on color, shape, size, or position. Errors carry icon + text + role="alert".
1.3.4Orientation (Level AA)SupportsLayout works in portrait and landscape; no orientation is forced.
1.3.5Identify Input Purpose (Level AA)SupportsAuth forms set autoComplete=email/current-password/new-password/name. Connection form sets autoComplete=url and inputMode=url for project URL, autoComplete=off for secrets.
1.4.1Use of Color (Level A)SupportsColor is never the sole information carrier. Errors pair red with icons + text; required fields use icon + helper text; status chips use both color and label.
1.4.2Audio Control (Level A)Not ApplicableNo auto-playing audio.
1.4.3Contrast (Minimum) (Level AA)SupportsPrimary text in both light and dark modes is ≈18:1 against the background. Muted text ≈8.5–9.5:1. Accent and danger tokens clear 4.5:1. As of v3.10.0 the faint-foreground token (microcopy / eyebrow labels) was darkened to clear 4.5:1 in both modes - dark mode now ≈4.6:1, light mode ≈4.7:1. Ratios were computed by inspection of CSS tokens, not measured with axe-core / Lighthouse; customers should run their own automated audit for procurement-grade verification.
1.4.4Resize Text (Level AA)SupportsAll sizing uses rem/em via Tailwind utilities. Display sizes use clamp(). No px-pinned text. Text reflows correctly at 200% zoom.
1.4.5Images of Text (Level AA)SupportsText is rendered as text. No images of text anywhere in the product.
1.4.10Reflow (Level AA)SupportsResponsive across breakpoints (sm/md/lg). Workspace switches to single-column + slide-out nav under md. No 2-D scrolling required at 320 CSS pixels.
1.4.11Non-text Contrast (Level AA)Partially SupportsFocus rings (2px solid accent + 2px offset) and accent buttons clear 3:1. Input/card resting borders are intentionally hairline (≈1.5–1.7:1) - they meet 3:1 only on focus / hover. Compensated by strong focus states; acknowledged below spec on resting state.
1.4.12Text Spacing (Level AA)SupportsNo fixed letter-spacing / word-spacing / line-height in px. Containers don't clip text under user-overridden spacing.
1.4.13Content on Hover or Focus (Level AA)SupportsRadix Tooltip is dismissible (Escape), hoverable, persistent. As of v3.5.0 the two remaining title="..." attributes (SignInForm "Forgot?", Topbar "Refresh schema") were replaced with Radix Tooltip instances.
2.1.1Keyboard (Level A)SupportsEvery interactive element is a <button>, <a>/<Link>, Radix primitive, or native form control. No click-only divs. Inline-edit fields commit on Enter / cancel on Escape.
2.1.2No Keyboard Trap (Level A)SupportsAll modal flows go through Radix Dialog / DropdownMenu / Popover with focus traps + Escape exits. No custom traps.
2.1.4Character Key Shortcuts (Level A)SupportsCmd/Ctrl-K opens the command palette. No single-character shortcuts that activate without a modifier.
2.2.1Timing Adjustable (Level A)Not ApplicableNo time limits on user activity. Session cookies follow standard NextAuth lifetime; sign-out is explicit.
2.2.2Pause, Stop, Hide (Level A)SupportsDecorative motion (footer drifting particles, hero animations) respects prefers-reduced-motion. Spinners are short-lived (loading states); no auto-updating content the user cannot pause.
2.3.1Three Flashes or Below Threshold (Level A)SupportsNo flashing content.
2.4.1Bypass Blocks (Level A)SupportsAs of v3.5.0, a "Skip to content" link is the first focusable element on every page; it jumps to the <main id="main"> landmark in each layout (public, account, workspace, admin, auth shell).
2.4.2Page Titled (Level A)SupportsEvery route exports a <title> via Next.js metadata; template appends "· Suparbase".
2.4.3Focus Order (Level A)SupportsDOM order matches visual order. Modals open with focus on first focusable child; dropdowns return focus to trigger on close (Radix defaults).
2.4.4Link Purpose (In Context) (Level A)SupportsLinks use descriptive text or carry aria-label when icon-only ("Suparbase home", "Connection settings", "Open row {value}", etc.).
2.4.5Multiple Ways (Level AA)SupportsPages are reachable via the primary nav, sitemap (/sitemap.xml), site search (Cmd-K command palette inside the workspace), and explicit links from related pages (blog → use cases → features → pricing, etc.).
2.4.6Headings and Labels (Level AA)SupportsPages have exactly one <h1> via PageHeader. Section headings step down logically. Form labels are descriptive (no "Field 1" patterns).
2.4.7Focus Visible (Level AA)SupportsGlobal :focus-visible outline (2px solid accent, 2px offset). Radix wrappers add focus-visible:ring-2 ring-accent. As of v3.5.1 the Button component carries an explicit focus-visible ring (previously its base class disabled the outline without adding a replacement). Initially-hidden controls (e.g., row hover-only actions) reveal on keyboard focus.
2.4.11Focus Not Obscured (Minimum) (Level AA) [WCAG 2.2]SupportsThe sticky workspace topbar reserves the top edge of the viewport, but focused interactive elements are not obscured because the browser's scrollIntoView default brings them below the topbar. No custom CSS forces a focused element behind another layer.
2.5.1Pointer Gestures (Level A)SupportsNo drag-only or multi-finger gestures. All actions are reachable via single-pointer taps or clicks.
2.5.2Pointer Cancellation (Level A)SupportsButtons activate on pointerup (browser default), not pointerdown. No custom pointer handling that would defeat cancellation by dragging off.
2.5.3Label in Name (Level A)SupportsVisible text matches accessible name (e.g., "Sign in" button's aria-name is "Sign in"). Icon-only buttons' aria-labels match tooltip text.
2.5.4Motion Actuation (Level A)Not ApplicableNo motion-based activation (no shake-to-undo, no tilt gestures).
2.5.7Dragging Movements (Level AA) [WCAG 2.2]SupportsNo primary functionality requires a drag gesture. Selection, sorting, and reordering all have click or keyboard equivalents (Radix Select, Dropdown, native checkboxes).
2.5.8Target Size (Minimum) (Level AA) [WCAG 2.2]SupportsPrimary action buttons (sign-in, save, delete, upgrade) are well above the 24×24 CSS-pixel minimum. As of v3.10.0 every secondary icon button - filter-chip remove, inline-edit confirm / cancel, password-eye toggle, schema tree expand, dashboard widget controls - was bumped to p-1.5, putting their target areas at ≥24×24 CSS pixels.
3.1.1Language of Page (Level A)Supports<html lang="en"> on root layout. No alternate-language content shipped.
3.1.2Language of Parts (Level AA)Not ApplicableAll content is English.
3.2.1On Focus (Level A)SupportsFocus events never navigate, submit, or change context. Tooltips opening on focus are permitted (dismissible per Radix).
3.2.2On Input (Level A)SupportsInputs never navigate or submit on change. Forms require explicit submit-button activation.
3.2.3Consistent Navigation (Level AA)SupportsPrimary nav, footer, and workspace sidebar are consistent across pages.
3.2.4Consistent Identification (Level AA)SupportsReused components (delete button, edit button, status chips, plan pills) are identified consistently across the product.
3.2.6Consistent Help (Level A) [WCAG 2.2]SupportsAs of v3.10.0 a single /contact form is the canonical help destination, linked from the footer (every page), every legal and docs surface, and the in-app account settings panel. The form preserves the requested topic via query string (?topic=sales, ?topic=security, etc.) so help is reachable from a consistent position regardless of which page the visitor lands on.
3.3.1Error Identification (Level A)SupportsForm-level errors render with role="alert" and an icon. Field-level errors set aria-invalid and link via aria-describedby to the inline message.
3.3.2Labels or Instructions (Level A)SupportsForms include label + explanatory hint where the format is non-obvious. As of v3.5.0 the previously-bare labels were patched.
3.3.3Error Suggestion (Level AA)SupportsError messages are specific (e.g., "URL must point to a *.supabase.co project", "Password must be at least 12 characters", password-strength meter with remaining-char count).
3.3.4Error Prevention (Legal, Financial, Data) (Level AA)SupportsDestructive flows (delete row, bulk delete, service-role warning, admin subscription reset, storage bucket delete, agent-session undo, SQL write-mode toggle) all gate behind themed confirmation dialogs as of v3.5.1. Bulk delete and admin reset require typing a confirmation word. Row deletes show a 5-second undo toast. Agent Sentry supports one-click session undo.
3.3.7Redundant Entry (Level A) [WCAG 2.2]SupportsForms don't ask the user to re-enter information they have already supplied in the same session. Sign-up collects credentials once; multi-step flows (connection creation, action / widget editors) preserve in-progress values.
3.3.8Accessible Authentication (Minimum) (Level AA) [WCAG 2.2]SupportsAuthentication uses email + password (bcrypt) or GitHub OAuth. No cognitive function test (image puzzles, recall, transcription) is required. Password fields support browser autocomplete and password managers. Copy / paste is allowed in every credential field.
4.1.2Name, Role, Value (Level A)SupportsRadix primitives handle role / state / value correctly. Custom widgets (password show/hide toggle, advanced-section disclosure, password-strength meter as role="meter") expose state via standard ARIA properties.
4.1.3Status Messages (Level AA)SupportsToast notifications use sonner's default polite live region. Form alerts use role="alert". As of v3.5.0 the AI chat conversation is marked role="log" aria-live="polite". As of v3.10.0 inline loading-state spinners (Refresh schema, EditableField commit, contact-form submit, route-level skeletons) expose aria-busy or role="status" so screen readers announce loading without stealing focus.

Revised Section 508 Report

Chapter 3: Functional Performance Criteria

CriterionConformanceRemarks & Explanations
302.1 Without VisionPartially SupportsOperable with screen reader assuming WCAG 2.2 AA partial conformance noted above. Spot-tested with VoiceOver/Safari; not systematically tested with NVDA/JAWS.
302.2 With Limited VisionSupportsZoom + high-contrast colors work. All body text (including faint microcopy) clears 4.5:1 as of v3.10.0. Resting borders still hover near the 3:1 line for 1.4.11 (tracked separately).
302.3 Without Perception of ColorSupportsColor is never the sole information carrier (see 1.4.1).
302.4 Without HearingSupportsNo audio.
302.5 With Limited HearingSupportsNo audio.
302.6 Without SpeechSupportsNo speech input required.
302.7 With Limited ManipulationSupportsFull keyboard alternative for all pointer interactions.
302.8 With Limited Reach and StrengthSupportsNo multi-touch or sustained-press requirements.
302.9 With Limited Language, Cognitive, and Learning AbilitiesSupportsClear copy, confirmation steps for destructive actions, undo on row deletes.

EN 301 549 V3.2.1 (2021-03) Report

Chapter 4: Functional Performance Statements (mirrors Section 508 Chapter 3)

CriterionConformanceRemarks & Explanations
4.2 Functional performancePartially SupportsSee WCAG 2.2 AA section above for criterion-level detail.

Chapter 5: Generic Requirements

CriterionConformanceRemarks & Explanations
5.1 Closed functionalityNot ApplicableSuparbase is a web app, not a closed device.
5.2–5.9 (hardware / biometric / specialized)Not ApplicableSoftware-only product.

Chapter 6: ICT with Two-Way Voice Communication

CriterionConformanceRemarks & Explanations
AllNot ApplicableNo two-way voice communication.

Chapter 7: ICT with Video Capabilities

CriterionConformanceRemarks & Explanations
AllNot ApplicableNo video content.

Chapter 8: Hardware

CriterionConformanceRemarks & Explanations
AllNot ApplicableSoftware-only product.

Chapter 9: Web (mirrors WCAG 2.1 Level A and AA)

CriterionConformanceRemarks & Explanations
9.1–9.4 (WCAG 2.1 A + AA)Partially SupportsSee WCAG 2.2 AA section above for criterion-level detail.

Chapter 10: Non-Web Documents

CriterionConformanceRemarks & Explanations
AllNot ApplicableSuparbase ships web pages, not standalone documents.

Chapter 11: Software (when applicable)

CriterionConformanceRemarks & Explanations
11.1–11.7Not ApplicableBrowser-delivered web app; software-platform criteria do not apply.
11.8 Authoring ToolsNot ApplicableSuparbase is not an authoring tool for accessible content.

Chapter 12: Documentation and Support Services

CriterionConformanceRemarks & Explanations
12.1 Product DocumentationSupportsDocumentation is web-based (/docs) and conforms to the same WCAG 2.2 AA posture as the product.
12.2 Support ServicesSupportsSupport is via email (contact@suparbase.com, contact@suparbase.com) - accessible through any user agent the customer prefers.

Legal disclaimer and revision history

This VPAT was prepared by Suparbase's engineering team via code-level audit of the production build at the report date, supplemented by spot-testing with VoiceOver on macOS and keyboard-only navigation. Automated accessibility scanning (axe-core, Lighthouse) and systematic screen-reader testing across NVDA and JAWS have not yet been performed.

Suparbase does not warrant this VPAT for legal or procurement purposes beyond a good-faith disclosure of the product's current state. Customers requiring formal third-party audit reports should request one - we will commission one against the production build on request.

Revisions:

  • 2026-05-17 - accompanies the v3.10.0 release. Flipped six criteria from “Partially Supports” to “Supports”: 1.3.1 (table headers now ship explicit scope="col"), 1.4.3 (faint-foreground token darkened to clear 4.5:1 in both themes), 2.5.8 (every secondary icon button bumped to ≥24×24 CSS pixels), 3.2.6 (single /contact form is the canonical help destination across every page), 4.1.3 (inline spinners and form submits expose aria-busy / role="status"), and 302.2. 1.4.11 remains partial (hairline borders).
  • 2026-05-15 - updated to WCAG 2.2 Level AA (was 2.1). Added rows for the six new 2.2 success criteria: 2.4.11 Focus Not Obscured (Minimum), 2.5.7 Dragging Movements, 2.5.8 Target Size (Minimum), 3.2.6 Consistent Help, 3.3.7 Redundant Entry, 3.3.8 Accessible Authentication (Minimum). 4.1.1 Parsing removed (obsolete in 2.2). Accompanies the v3.5.1 UI bug pass: replaced 12 native window.confirm() calls with themed ConfirmDialog (including the destructive admin Reset, storage bucket delete, agent-session undo, SQL write-mode toggle); added an explicit focus-visible ring to the Button component; wired PaywallCard into the team-invite flow; humanised billing status copy; fixed NULL display rendering as colon character across the data grid.
  • 2026-05-15 - initial VPAT 2.5 Rev publication against WCAG 2.1 Level AA accompanying the v3.5.0 accessibility pass (skip link, bare-label form fields, Radix Tooltip replacements, AI chat live region, system-theme toasts).

Questions or accessibility issue reports: send a note via /contact form.