Catalogue A2UI

Bêta privée

Des composants React accessibles pour les interfaces qu’un agent IA génère, et un validateur qui bloque, avant son affichage, toute interface qui enfreint ses règles.

Le site du catalogue, catalog.audit-web.ai, est accessible sur invitation pendant la bêta.

Ce qu’est A2UI

A2UI, pour Agent-to-User Interface, est un format ouvert défini par Google. Il permet à l’agent IA d’une application d’afficher une interface au fil de l’échange : une fiche, des onglets, un carrousel, ou un formulaire pour demander une saisie structurée.

L’agent émet un document JSON ; le catalogue l’affiche en HTML accessible.

La spécification A2UI, sur a2ui.org (en anglais)

Ce qu’il fait

  • 27 composants React : 14 communs au catalogue de base de Google, 5 primitives d’accessibilité ajoutées exprès et 8 composants propres à Audit-Web.
  • Un validateur déterministe de 50 codes, en JavaScript et en Python. Il bloque, avant son affichage, toute interface qui enfreint ses règles.
  • Zéro dépendance d’accessibilité tierce. Le focus, les rôles ARIA, qui décrivent les composants aux lecteurs d’écran, et la navigation au clavier sont écrits dans le catalogue. Ni Radix, ni Floating UI, ni TanStack, ni Headless UI, directement ou par dépendance.
  • Deux usages : l’agent émet l’interface pendant l’exécution, ou il écrit du code React qui importe les composants, vérifié en intégration continue.

Les 27 composants

Composants exportés par le moteur de rendu React 2.0.0
FamilleComposants
Communs au catalogue de base de Google (14)Text, Image, Icon, Row, Column, List, Card, Modal, Tabs, Button, TextField, ChoicePicker, Slider, DateTimeInput
Primitives d’accessibilité ajoutées (5)Heading, Link, Form, Section, Select
Propres à Audit-Web (8)Tag, Spinner, NotificationContainer, Notification, Disclosure, Accordion, Tooltip, Carousel

Un registre personnalisé permet de remplacer ou d’étendre ces composants dans le moteur de rendu.

Le validateur

Le même document donne le même verdict, en JavaScript comme en Python.

  • Deux modes

    Mode strict, par défaut : une erreur bloque l’affichage et fait échouer la construction du projet. Mode d’alerte : toutes les anomalies remontent, rien n’est bloqué. Utile pour mesurer avant de corriger.

  • Un retour fait pour l’agent

    Quand un document échoue, le validateur renvoie une réponse VALIDATION_FAILED : la surface concernée, le chemin de l’élément en cause dans le document, le message et la liste complète des anomalies. L’agent corrige son document et le renvoie.

  • Une ligne de commande

    a2ui-validator applique les mêmes règles que la bibliothèque. Elle sort en code 1 si une erreur bloque, en code 0 sinon : elle s’insère directement dans une intégration continue.

  • JavaScript et Python à l’identique

    Les deux validateurs partagent le même schéma JSON et les mêmes 48 règles : mêmes codes, mêmes sévérités, même ordre. Des tests vérifient cette correspondance.

  • Deux options

    L’option « langue de la page » évite les fausses alertes sur les attributs de langue. L’option « page complète », réservée à une page entière, exige un titre de niveau 1 ; par défaut, elle est désactivée, car un document A2UI s’insère le plus souvent dans une page qui a déjà le sien.

En situation

Le document transmis par l’agent

Le document complet, avec sa version et son enveloppe updateComponents. Il passe le validateur en mode strict.

{
  "version": "v0.9",
  "updateComponents": {
    "surfaceId": "demande-rappel",
    "components": [
      {
        "id": "root",
        "component": "Disclosure",
        "summary": "Pourquoi ces informations ?",
        "content": ["explication"]
      },
      {
        "id": "explication",
        "component": "Text",
        "text": "Votre numéro sert uniquement à vous rappeler."
      }
    ]
  }
}

Son affichage par le catalogue

Rendu du document par le Catalogue A2UI : le bouton « Pourquoi ces informations ? », précédé d’un triangle pointant vers le bas, est déplié et affiche le texte « Votre numéro sert uniquement à vous rappeler. »
Le même document, affiché par le catalogue. Fermé par défaut, le texte est masqué des technologies d’assistance et du clavier. Ouvert au clic ou à la barre d’espace, il devient lisible et atteignable au clavier.
  1. Le bouton, annoncé avec son état, ouvert ou fermé.
  2. Le texte, masqué tant que le bloc est fermé.

Ce que le validateur détecte, par exemple

Quatre des 50 codes du validateur
CodeSévéritéCe qui est détecté
SCHEMAErreur bloquanteUne image sans alternative textuelle : le schéma du document l’interdit, avant même l’application des règles.
RAWEB-7.1-BUTTON-LABEL-IN-NAMEErreur bloquanteUn bouton dont le libellé visible diffère du nom accessible (WCAG 2.5.3). Un utilisateur de commande vocale prononce ce qu’il voit : le bouton ne répondrait pas.
RAWEB-11.13-FORM-MISSING-AUTOCOMPLETEAvertissementUn champ de données personnelles sans indication pour le remplissage automatique.
RAWEB-13.8-CAROUSEL-AUTOPLAY-SHORT-INTERVALAvertissementUn carrousel qui défile automatiquement trop vite.

Une erreur bloque, un avertissement signale sans bloquer. 50 codes sont émis à l’exécution ; cinq autres sont déclarés mais interceptés plus tôt, par le schéma ou par le moteur de rendu.

Ce qu’il ne fait pas

  • Il couvre chaque composant, pas la page qui les assemble : la conformité d’une interface se mesure par un audit.
  • Il ne corrige pas un document : il le refuse et dit pourquoi. La correction revient à l’agent, puis à l’équipe qui relit.
  • Il n’affiche pas le fil de la conversation : il affiche les interfaces que l’agent y insère.
  • En version 1, il ne couvre ni le paiement, ni les graphiques, ni les cartes, ni la vidéo, ni le dépôt de fichiers, ni l’édition de texte riche, ni l’authentification.
  • Il n’existe qu’en React.

Comment il est vérifié

Relevés dans le dépôt du catalogue, 20 octobre 2026
ContrôleRésultat
Tests unitaires932 : 552 pour le moteur de rendu, 200 pour le validateur JavaScript, 180 pour le validateur Python
Contrôles axe-core en intégration continue169, sans violation
Codes de validation50 : 48 règles et 2 codes système
Environnements testésNode.js 22 et 24, Python 3.11, 3.12 et 3.13, à chaque modification

axe-core est un moteur open source de tests d’accessibilité.

Douze doctrines capitalisées

Douze doctrines d’accessibilité sont consignées dans le dépôt. Chacune lie un comportement attendu à son critère RAWeb, au constat d’audit dont elle vient et à la règle du validateur qui l’applique.

Référentiels couverts

Composants conçus selon le RAWeb 1.1, le RGAA 4.1.2, les WCAG 2.2 au niveau AA et la norme européenne EN 301 549.

Statut et accès

Statut et accès au 20 octobre 2026
StatutBêta privée
VersionsMoteur de rendu React 2.0.0, validateur JavaScript 4.0.0
Validateur PythonVersion 0.4.0, en développement. Mêmes règles que le validateur JavaScript ; son canal de distribution est en cours de décision. Accès anticipé sur demande.
Format A2UIVersion 0.9, compatible avec la 0.9.1. La version 1.0, encore candidate, n’est pas suivie.
PrérequisReact 18 ou 19, Node.js 22 ou plus ; Python 3.11 ou plus pour le validateur Python
DistributionPaquets privés, installés avec un jeton fourni avec la licence
LicenceLicence commerciale annuelle
Pour en bénéficierInterfaces et agents IA accessibles

Demander un accès

Dites-nous dans quelle application votre agent génère des interfaces, et pour quels utilisateurs.

Les autres produits

  • a11y-assistant

    Assistant IA d’audit d’accessibilité : il prépare le rapport, la grille de critères et la déclaration, rédige des spécifications à partir des maquettes et explique les critères en contexte.

  • a11y-engine

    294 règles écrites par le cabinet : 62 concluent seules, les autres signalent un point à faire lire par un humain. Aujourd’hui, il alimente sept tests d’a11y-assistant.

  • a11y-raweb

    Skill d’accessibilité pour assistants IA, fondé sur le RAWeb 1.1 : l’assistant dispose des critères et d’exemples de code au moment d’écrire.

  • design-md-a11y

    Écrit les règles d’accessibilité de votre design system dans le fichier que lisent vos assistants de code ; son outil de contrôle, design-md-a11y-lint, vérifie qu’elles sont tenues.