Skip to content

Conversation

@mschienbein
Copy link

@mschienbein mschienbein commented Dec 19, 2025

Summary

Complete React implementation of the A2UI specification, providing a production-ready renderer for React applications.

Core Features

  • Full protocol support: beginRendering, surfaceUpdate, dataModelUpdate, deleteSurface
  • SSE transport with JSONL parsing and automatic reconnection
  • JSON Pointer (RFC 6901) data binding resolution
  • Multi-surface rendering with independent state management
  • Message buffering for out-of-order message delivery

Components (Standard Catalog v0.8)

Category Components
Layout Row, Column, Card, Tabs, Modal, Divider
Content Text (markdown), Image, Icon, Video, AudioPlayer
Interactive Button, TextField, CheckBox, ChoicePicker, DateTimeInput, Slider, List

Architecture

  • MessageProcessor: Central state machine for protocol message handling
  • CatalogRegistry: Version-aware component registration (v0.8, v0.9)
  • A2UISurface: Renders adjacency-list format to React component tree
  • A2UIRoot: Simpler spec-based static rendering

Spec Compliance

  • UserAction format matches client_to_server.json schema exactly
  • Flat structure with sourceComponentId and ISO 8601 timestamp
  • ClientToServerMessage wrapper for wire format

Quick Start

# 1. Build the renderer library
cd renderers/react
npm install
npm run build:lib

# 2. Run the demo
cd ../../samples/client/react
npm install
npm run dev

The demo runs at http://localhost:5173/ with two modes:

  • Spec-Based Demo: Static JSON rendering with theme switching
  • Protocol Demo: Simulated streaming messages with 8 interactive scenarios

Test Plan

  • All 100 unit tests pass (npm test in renderers/react)
  • Run quick start steps above
  • Verify components render in both light/dark themes
  • Test action dispatch from buttons (check browser console)
  • Try Protocol Demo scenarios (Flashcard, Dashboard, Quiz, etc.)

Related

Implements React renderer as discussed in A2UI specification roadmap.

Complete React implementation of the A2UI specification with:

## Core Features
- Full A2UI protocol message processing (beginRendering, surfaceUpdate,
  dataModelUpdate, deleteSurface)
- SSE transport with JSONL parsing and automatic reconnection
- JSON Pointer (RFC 6901) data binding resolution
- Multi-surface rendering with independent state management
- Message buffering for out-of-order delivery

## Components (Standard Catalog v0.8)
- Layout: Row, Column, Card, Tabs, Modal, Divider
- Content: Text (with markdown), Image, Icon, Video, AudioPlayer
- Interactive: Button, TextField, CheckBox, ChoicePicker, DateTimeInput, Slider, List

## Architecture
- MessageProcessor: Central state machine for protocol handling
- CatalogRegistry: Version-aware component registration (v0.8, v0.9)
- A2UISurface: Renders adjacency-list format to React tree
- A2UIRoot: Spec-based static rendering for simpler use cases

## Spec Compliance
- UserAction format matches client_to_server.json schema
- Flat structure with sourceComponentId and ISO 8601 timestamp
- ClientToServerMessage wrapper for wire format

## Sample App
- Interactive demo showcasing all components
- Protocol demo with streaming simulation
- Japanese vocabulary flashcard example
- Light/dark theme support
Document setup instructions and demo modes for the React sample application.
The relative path was wrong (../../ instead of ../../../), causing npm to
create a broken symlink that couldn't resolve the @a2ui/react package.
@github-project-automation github-project-automation bot moved this to Todo in A2UI Jan 20, 2026
@jacobsimionato jacobsimionato added the triage backlog The backlog of issues and PRs which need to be triaged in bulk. label Jan 20, 2026
@lukasmoschitz
Copy link

Hi @mschienbein,,
Thank you for this contribution it looks great!
We appreciate the effort you put into the React renderer, components, and test coverage. We wanted to share that we're collaborating with Google and the React Working Group on the official React renderer for A2UI.
Your work here, especially the component patterns and data binding approach, has been helpful as we've explored the design space.
We'd love to have you involved in the ongoing effort: #542
Thanks for helping push A2UI forward!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage backlog The backlog of issues and PRs which need to be triaged in bulk.

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

3 participants