From Static Designs to Dynamic Experiences
The way we design user interfaces is facing a fundamental shift. Traditional UI patterns – identical for all users, statically defined, and manually optimised – are reaching their limits. Generative UI marks the transition from designing for the many to dynamic generation for the individual.
The Nielsen Norman Group defines GenUI precisely: AI creates personalised interfaces in real time for user-specific experiences. Instead of developers coding a fixed UI for all use cases, an AI agent composes the optimal interface for the respective task at the moment of interaction.
Table of Contents
Video Introduction: Understanding GenUI
Before we dive into the technical details, these two videos offer an excellent introduction to the topic.
Nielsen Norman Group: GenUI Explained
The UX experts at the Nielsen Norman Group explain the concept of Generative UI and why it represents a paradigm shift in interface design.
Klick lädt YouTube (Datenschutz)
Kate Moran and Sarah Gibbons discuss how AI generates personalised interfaces in real-time. The video explains the differences between traditional UI design and the GenUI approach – essential knowledge for UX designers and developers.
Google A2UI: Technical Deep Dive
This tutorial shows Google's A2UI protocol in action. From the JSON structure to concrete implementation examples.
Klick lädt YouTube (Datenschutz)
The video demonstrates the integration of A2UI into various frameworks. Particularly relevant are the sections on security architecture and the component registry pattern, which we will revisit later in the TYPO3 integration.
The Efficiency Problem: Text-Based Agents Fail
Text-based LLM dialogues are suitable for simple requests. In more complex scenarios – structured data entry, visualisation of multidimensional information – inefficient ping-pong dialogues emerge, which significantly increase the cognitive load on users.
The Restaurant Booking Dilemma
User: "Book a table for 2."
Agent: "Okay, for what day?"
User: "Tomorrow."
Agent: "What time?"
User: "Maybe 7pm"
Agent: "We do not have reservation availability then, any other times?"
User: "When do you have reservations?"
Agent: "We have availability at 5:00, 5:30, 6:00, 8:30, 9:00, 9:30 and 10:00.
Do any of those work for you?"Multiple slow round trips: Every question-and-answer round costs time and increases the likelihood of abandonment.
Cognitive overload: Users have to mentally cross-reference a text list with their availability – a classic failure that visual interfaces have long since solved.
Susceptibility to errors: Typos, misunderstandings regarding time formats, missing context information.
The solution does not lie in better text, but in richer communication methods: a graphical calendar with available time slots, interactive sliders for the number of people, a map with table positions. This is where A2UI comes in.
A2UI: The technical foundation for intelligent interfaces
Agent-to-User Interface (A2UI) is an open-source protocol by Google that empowers AI agents to "speak UI". Instead of just sending text, agents generate rich, interactive user interfaces that are rendered natively within the host application.
Four core principles
Security First
Agents send data, not code. The client app maintains a catalogue of trusted, pre-approved UI components. LLM-generated code is never executed – critical attack surfaces are eliminated.
LLM-Friendly
UI as a flat list with IDs. Easy for LLMs to generate and incrementally update. Progressive rendering as the conversation develops.
Framework-Agnostic
A JSON payload, native rendering everywhere: Web, Flutter, React, SwiftUI. The abstract UI structure is separated from the concrete implementation.
Open & Flexible
Open Registry Pattern: Developers integrate any of their own components, encapsulate their design system, and retain full control over sandboxing.
Architecture: From generation to rendering
A2UI data flow: From agent to native user interface
The maxim: A2UI is "as secure as data, but as expressive as code" – a crucial advantage for enterprise adoption.
JSON payload example
{
"version": "0.8",
"components": [
{
"id": "date-picker-1",
"type": "date-picker",
"props": {
"label": "Reservierungsdatum",
"minDate": "2025-12-31",
"maxDate": "2026-03-31",
"value": "2026-01-15"
}
},
{
"id": "time-slots-1",The agent describes intent, not implementation. The client decides what a date-picker concretely looks like – perfect brand consistency guaranteed.
Use Cases: From Concept to Practice
Restaurant Finder with Interactive Map
User Request
Agent Analyses
UI Generation
Native Interaction
Instead of a long text list, the user receives a dynamically generated, interactive results map. Each result offers direct integration with Google Maps. The entire process feels like a seamless, purpose-built app.
Three Key Categories
An agent generates a tailor-made form with exactly matching input elements based on the context:
- Service Booking: Date selection, slider for budget, dropdown for service type
- Onboarding Process: Conditional fields that only appear after specific answers
- Feedback Collection: Star ratings, text areas, multiple-choice – context-dependent
The form adapts to the conversation, not the other way around.
Agent-Client Communication in Detail
Workflow of an A2UI-based interaction
A2UI in the Developer Ecosystem
A2UI is not an isolated project, but a specialised protocol in the rapidly evolving landscape of agent frameworks.
Technology Synergies
| Technology/Protocol | Role relative to A2UI |
|---|---|
| AG UI / CopilotKit | Full-stack framework for agent apps. Provides infrastructure for state synchronisation and communication, integrating A2UI as a message format. |
| A2A Protocol | Transport protocol for communication between agents across trust boundaries. A2UI messages can be transported via A2A. |
| GenUI SDK for Flutter | SDK for generative UI experiences in Flutter apps. Uses A2UI as a format for UI declaration when communicating with server-side agents. |
| REST / HTTP | Future planned support for additional transport protocols for increased interoperability and easy integration into existing systems. |
A2A: The Sister Protocol for Agent-to-Agent Communication
While A2UI governs the communication between agent and human, Google's second protocol – Agent2Agent (A2A) – addresses the communication between agents themselves. Together, they form the foundation for a fully agent-driven architecture.
A2UI – Agent-to-User
Direction of communication: Agent → Human
Enables AI agents to generate dynamic, native UI components that are displayed to users in host applications. Focuses on user experience and secure UI generation.
A2A – Agent-to-Agent
Direction of communication: Agent ↔ Agent
Enables various AI agents, regardless of framework or provider, to communicate with each other, exchange information, and coordinate tasks.
A2A was introduced in April 2025 with the support of over 50 technology partners such as Atlassian, PayPal, Salesforce, SAP, ServiceNow, and Workday. The protocol is based on established standards like HTTP, SSE, and JSON-RPC.
Interaction of A2A and A2UI in the agent ecosystem
A2A Design Principles
| Principle | Description |
|---|---|
| Agentic Capabilities | True multi-agent scenarios – agents collaborate in their natural, unstructured modalities, even without shared memory, tools, or context. |
| Existing Standards | Built on HTTP, SSE (Server-Sent Events), and JSON-RPC. Integration into existing IT stacks is thereby significantly simplified. |
| Enterprise Security | Enterprise authentication and authorisation with parity to OpenAPI authentication schemes. |
| Long-Running Tasks | Support for everything from quick tasks to in-depth research over hours or days – with real-time feedback. |
| Modality Agnostic | Not limited to text – supports various modalities including audio and video streaming. |
Practical Example: Recruiting Workflow
A typical A2A scenario: A manager tasks their agent with finding candidates for a developer position:
- Main Agent receives the task and identifies specialised agents
- Sourcing Agent searches candidate databases
- Screening Agent evaluates qualifications
- Calendar Agent schedules interviews
- Background Check Agent conducts background checks
All agents communicate via A2A, whilst the UI output for the manager is handled via A2UI – seamless orchestration across system boundaries.
Positioning: A2UI vs. Alternatives
| Feature | A2UI | MCP Apps | OpenAI ChatKit |
|---|---|---|---|
| Native UI Integration | ✓ | ✕ | ✓ |
| Cross-platform | ✓ | Limited | ✕ |
| Multi-agent transparent | ✓ | ✕ | N/A |
| Full design control | ✓ | ✕ | Limited |
| Security model | Whitelist | Sandboxed iFrame | Vendor-controlled |
| Open Source | ✓ | ✓ | ✕ |
Crucial difference from MCP Apps: MCP treats UI as a resource (typically HTML in a sandboxed iframe). A2UI follows a "native-first" approach – the UI blends seamlessly into the styling of the host app. In multi-agent systems, an orchestrator effortlessly understands the lightweight A2UI message content of a sub-agent.
Industry Voices
These statements demonstrate how leading technology companies are already using A2UI in production:
Roadmap & Community Involvement
A2UI was deliberately released early (Version 0.8) to foster open collaboration. The project invites you to shape the future of agent-driven UI together.
Official Roadmap to v1.0
Spec Stabilization
Additional Renderers
Additional Transports
Agent Framework Integration
Open Source Repository
As an Apache 2.0 project, the success of A2UI relies on the community. Contributions are welcome in:
- Specification Refinement: Format extensions, edge case handling
- Client Libraries: Renderers for new frameworks (Vue, Solid, Svelte)
- Tooling: Dev tools, debugging utilities, component validators
- Examples: Real-world implementations, best practice guides
TYPO3 Integration: A2UI in the Enterprise CMS
The integration of A2UI into TYPO3 opens up new possibilities for intelligent, context-aware backend interfaces: editors receive dynamically generated forms based on the content type, AI assistants support SEO optimisation, and workflows adapt to the current task.
Vision: AI-Powered TYPO3 Workflows
Context-Sensitive Forms
The AI agent analyses the content type and generates an optimised input form featuring exactly the fields relevant to this context.
Intelligent Dashboards
Dynamic admin dashboards that adapt to the user's role and current tasks. Relevant metrics, shortcuts, and actions available on demand.
SEO Assistant
An AI agent analyses page content in real-time and generates an interactive UI with concrete optimisation suggestions and direct editing options.
Architecture Overview
TYPO3 A2UI Integration Architecture
Test Extension: a2ui_integration
I present a complete TYPO3 extension that demonstrates A2UI concepts in TYPO3 13/14.
Extension Structure
a2ui_integration/
├── Classes/
│ ├── Controller/
│ │ └── A2UIController.php
│ ├── Domain/
│ │ ├── Model/
│ │ │ └── A2UIComponent.php
│ │ └── Repository/
│ │ └── ComponentRegistry.php
│ ├── Service/
│ │ ├── AgentService.php
│ │ └── RendererService.php
│ └── ViewHelpers/
│ └── RenderComponentViewHelper.php
├── Configuration/1. Extension Configuration
{
"name": "webconsulting/a2ui-integration",
"type": "typo3-cms-extension",
"description": "A2UI Protocol Integration for TYPO3 - AI-driven dynamic UI generation",
"license": "GPL-2.0-or-later",
"authors": [
{
"name": "webconsulting GmbH",
"email": "office@webconsulting.at",
"homepage": "https://webconsulting.at"
}
],
"require": {
"php": "^8.1",
"typo3/cms-core": "^13.0 || ^14.0",2. Backend Module Registration
<?php
declare(strict_types=1);
use Webconsulting\A2uiIntegration\Controller\A2UIController;
return [
'web_a2ui' => [
'parent' => 'web',
'position' => ['after' => 'web_info'],
'access' => 'user',
'workspaces' => 'live',
'path' => '/module/web/a2ui',
'labels' => 'LLL:EXT:a2ui_integration/Resources/Private/Language/locallang_mod.xlf',
'extensionName' => 'A2uiIntegration',3. Core Domain Models
<?php
declare(strict_types=1);
namespace Webconsulting\A2uiIntegration\Domain\Model;
/**
* A2UI Component Model
* Represents a single UI component in the A2UI protocol
*/
class A2UIComponent
{
protected string $id;
protected string $type;
protected array $props;4. Service Layer
<?php
declare(strict_types=1);
namespace Webconsulting\A2uiIntegration\Service;
use Webconsulting\A2uiIntegration\Domain\Model\A2UIComponent;
use TYPO3\CMS\Core\SingletonInterface;
/**
* Agent Service
* Simulates an LLM agent that generates A2UI components
* In production, this would call an actual LLM API (OpenAI, Gemini, etc.)
*/
class AgentService implements SingletonInterface5. Controller
<?php
declare(strict_types=1);
namespace Webconsulting\A2uiIntegration\Controller;
use Psr\Http\Message\ResponseInterface;
use Webconsulting\A2uiIntegration\Service\AgentService;
use Webconsulting\A2uiIntegration\Service\RendererService;
use TYPO3\CMS\Backend\Template\ModuleTemplate;
use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
/**
* A2UI Backend Module Controller6. Fluid Templates
<div class="form-group" id="{id}">
<label for="{id}-input" class="form-label">
{props.label}
<f:if condition="{props.required}">
<span class="text-danger">*</span>
</f:if>
</label>
<input
type="text"
class="form-control"
id="{id}-input"
name="{id}"
placeholder="{props.placeholder}"
value="{props.value}"
maxlength="{props.maxlength}"7. JavaScript Renderer
/**
* A2UI Renderer for TYPO3 Backend
* Client-side component for handling A2UI interactions
*/
class A2UIRenderer {
constructor() {
this.components = new Map();
this.eventHandlers = new Map();
}
/**
* Render A2UI payload into target element
*/
async render(payload, targetElement) {
if (typeof payload === 'string') {Step-by-Step: Creating an Extension from Scratch
Follow this guide to implement the A2UI extension yourself. Each step builds upon the previous one.
Step 1: Create the Extension Skeleton
First, create the directory structure and the base files:
# Change to the TYPO3 project directory
cd /var/www/html/typo3
# Create the extension directory (TYPO3 13+ uses packages/)
mkdir -p packages/a2ui_integration/Classes/{Controller,Domain/Model,Domain/Repository,Service,ViewHelpers}
mkdir -p packages/a2ui_integration/Configuration/{Backend,TCA/Overrides}
mkdir -p packages/a2ui_integration/Resources/{Private/Templates/A2UI/Components,Public/Css,Public/JavaScript}
# Change to the extension directory
cd packages/a2ui_integrationTYPO3 13 supports both typo3conf/ext/ and packages/. TYPO3 14 exclusively recommends packages/ for local extensions. We are using the future-proof variant here.
Step 2: Base Configuration
Create the two essential configuration files:
<?php
/**
* Extension configuration for a2ui_integration
*/
$EM_CONF[$_EXTKEY] = [
'title' => 'A2UI Integration',
'description' => 'Agent-to-User Interface Protocol for TYPO3',
'category' => 'be',
'author' => 'Ihr Name',
'author_email' => 'email@example.com',
'state' => 'beta',
'version' => '1.0.0',
'constraints' => [
'depends' => [
'typo3' => '13.0.0-14.99.99',Step 3: Creating the Domain Model
The A2UIComponent model represents the JSON structure of the A2UI protocol:
<?php
declare(strict_types=1);
namespace Vendor\A2uiIntegration\Domain\Model;
/**
* Represents a single A2UI component
*
* Example JSON structure:
* {
* "id": "field-1",
* "type": "text-field",
* "props": {"label": "Name", "required": true}
* }Important Concepts:
- Immutability: All properties are
readonlyfor thread safety - Constructor Promotion: PHP 8.2+ feature for compact code
- Recursive Children: Supports nested components
Step 4: Component Registry (Security Layer)
The registry implements the whitelist principle – only registered components are allowed:
<?php
declare(strict_types=1);
namespace Vendor\A2uiIntegration\Domain\Repository;
use TYPO3\CMS\Core\SingletonInterface;
/**
* Security-critical: Whitelist of allowed UI components
*
* The LLM can only request components that are registered here.
* This prevents code injection and ensures UI consistency.
*/
class ComponentRegistry implements SingletonInterfaceNever accept dynamic template paths from LLM output! The registry ensures that only pre-defined templates can be used.
Step 5: Agent Service (LLM Simulation)
The AgentService simulates the LLM logic. In production, this is replaced by real API calls:
<?php
declare(strict_types=1);
namespace Vendor\A2uiIntegration\Service;
use Vendor\A2uiIntegration\Domain\Model\A2UIComponent;
/**
* Simulates an LLM agent that generates UI components
*
* In production, replace the match() logic with actual API calls:
* - OpenAI GPT-4
* - Google Gemini
* - Anthropic ClaudeStep 6: Renderer Service
The renderer converts A2UI components into TYPO3 Fluid HTML:
<?php
declare(strict_types=1);
namespace Vendor\A2uiIntegration\Service;
use Vendor\A2uiIntegration\Domain\Model\A2UIComponent;
use Vendor\A2uiIntegration\Domain\Repository\ComponentRegistry;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
/**
* Renders A2UI components to TYPO3 Backend HTML
*/
class RendererServiceStep 7: Backend Controller
The controller connects everything together and exposes the functionality as a backend module:
<?php
declare(strict_types=1);
namespace Vendor\A2uiIntegration\Controller;
use Psr\Http\Message\ResponseInterface;
use Vendor\A2uiIntegration\Service\AgentService;
use Vendor\A2uiIntegration\Service\RendererService;
use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
class A2UIController extends ActionController
{
public function __construct(Step 8: Creating Fluid Templates
Create the component templates:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true">
<div class="form-group mb-3">
<label for="{id}" class="form-label">
{props.label}
<f:if condition="{props.required}">
<span class="text-danger">*</span>
</f:if>
</label>
<input
type="text"
class="form-control"
id="{id}"Step 9: Register the backend module
<?php
use Vendor\A2uiIntegration\Controller\A2UIController;
return [
'web_a2ui' => [
'parent' => 'web',
'position' => ['after' => 'web_info'],
'access' => 'user',
'workspaces' => 'live',
'iconIdentifier' => 'module-web',
'path' => '/module/web/a2ui',
'labels' => 'LLL:EXT:a2ui_integration/Resources/Private/Language/locallang_mod.xlf',
'extensionName' => 'A2uiIntegration',
'controllerActions' => [Step 10: Activate & test the extension
# Update autoload
composer dump-autoload
# Activate extension
./vendor/bin/typo3 extension:activate a2ui_integration
# Flush cache
./vendor/bin/typo3 cache:flush
# Optional: Symlink for public assets
./vendor/bin/typo3 extension:setupAfter these 10 steps, you will have a working A2UI integration in TYPO3. The backend module can be accessed under Web > A2UI Agent Interface.
Extension Download
Would you like to use the extension directly without rebuilding every step manually? Download the complete, production-ready extension:
Complete A2UI integration for TYPO3 13/14. Includes AgentService, RendererService, ComponentRegistry, 7 UI components, backend module and JavaScript client.
Contents of the extension
- 5 PHP classes (Controller, Services, Models)
- 7 Fluid templates for UI components
- JavaScript client-side renderer
- Backend module with dashboard
- Complete README documentation
Compatibility
- TYPO3 13.0 - 14.x
- PHP 8.2+
- Composer support
- Apache 2.0 Licence (like A2UI itself)
Live Demo: Intent to UI
Here is an example of how a user intent is converted into a generated UI:
Flow: From user request to generated UI
Installation & Usage
Install extension
Activate extension
Open backend module
Try the demo
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
| /typo3/module/web/a2ui/dashboard | GET | Main dashboard with example intents |
| /typo3/module/web/a2ui/generate | GET | Generate UI: ?intent=create+page&format=json |
| /typo3/module/web/a2ui/demo | GET | Show all component examples |
Extension Options
Production Checklist
Security Hardening:
- Implement rate limiting for API calls
- Input sanitisation for all user intents
- Strictly maintain the component whitelist
- Securely store LLM API keys in the extension configuration
Performance:
- Caching for frequently generated UI patterns
- Lazy loading for JavaScript modules
- Optimise component rendering via AJAX
Testing:
- Unit tests for AgentService and RendererService
- Integration tests for controller actions
- Security tests for component validation
Conclusion: Strategic Importance for Modern Applications
Generative UI with A2UI marks a fundamental step towards truly intelligent, adaptive assistants. The strategic advantages can be summarised in four dimensions:
Increased Security
By avoiding the direct execution of LLM-generated code, a critical attack surface is eliminated. The declarative approach gives the host application full control over permitted components.
Seamless User Experience
Native UI components of the host application guarantee perfect design integration. No out-of-place iframes, but consistent brand experiences across all touchpoints.
Cross-Platform Interoperability
One JSON payload, native rendering everywhere. Agents generate interfaces for web, mobile, and desktop without platform-specific knowledge.
Accelerated Development
Agents dynamically create context-specific UIs. Reduced development effort for complex, stateful interfaces. Faster prototyping cycles.
The Paradigm Shift
GenUI represents the transition from designing interfaces for the many, to dynamically generating experiences for the individual. It is not just a new technology, but a decisive step towards personalised, context-aware digital assistants.
For businesses, this means:
- Higher conversion rates through optimised, task-specific UIs
- Reduced development costs through reusable, agent-driven components
- Better scalability with the growing complexity of use cases
Would you like to use A2UI in your project or evaluate generative UI patterns? We support you with strategic assessment, architecture design, and implementation. Contact us for a no-obligation consultation.