- SYNCFUSION A2UI COMPONENTS
Turn AI responses into interactive interfaces
Build AI-ready, adaptive applications with Syncfusion’s reusable A2UI components that can be dynamically discovered, configured, and assembled.
- What are Syncfusion A2UI Components
Agent-defined interfaces rendered with trusted UI components
A2UI (Agent-to-User Interface) lets an AI agent respond with a structured UI definition rather than plain text. Syncfusion’s A2UI components render these definitions as interactive Syncfusion UI, so the forms, grids, and dashboards already in use become reusable building blocks that agents can discover, configure, and assemble. Built on Syncfusion’s mature UI platform, A2UI components provide a trusted, enterprise-grade foundation for creating adaptive application experiences.
- How A2UI Components work
From an agent response to interactive application UI
The runtime turns structured A2UI messages into validated, data-bound Syncfusion components and routes user interaction back into the application workflow.
User request
Intent or action
AI agent
Creates A2UI messages
A2UI runtime
Validate & process
Component surface
Map data & controls
Interactive UI
Render in the app
- COMPONENT GALLERY
Use familiar enterprise UI as agent-driven building blocks
Give agents access to supported Syncfusion controls across the interface patterns your applications already need.
-
Data & Visualization
-
Input Components
-
Scheduling Components
-
Navigation Components
-
Layout Components
-
Viewer/Editor Components
Data & Visualization Components
Data Grid
Display and organize records in rows and columns.
Tree Grid
Explore records with parent-child relationships.
Chart
Show patterns and comparisons in your data.
Map
Present data in a map-based geographic view.
HeatMap
Color-coded matrix to reveal data patterns.
Input Components
Text
Add a heading, label, or body text to a UI.
ComboBox
Type to filter and select a single option.
Dropdown
Let people choose from a list of options.
Scheduling Components
Scheduler
Manage appointments across calendar views.
Calendar
Browse a calendar and quickly choose a date.
GanttChart
Plan tasks, dependencies, and timelines.
Navigation Components
Pager
Move between pages and set the page size.
Menu
Help people move between your app sections.
Breadcrumb
Show where a page sits in the navigation.
Layout Components
Skeleton
Placeholder with shimmer while content loads.
Tabs
Switch between related views in one place.
Cards
Group related information in a single container.
Document Solutions
PDF Viewer
View, annotate, and fill forms in PDF files.
DOCX Editor
Create, edit, and format Word documents.
Spreadsheet
- From definition to interface
See an A2UI definition become real application UI
An agent can describe a Syncfusion component using structured A2UI data. The runtime validates the definition, maps it to the corresponding component, and renders it inside the application.
{
"id": "orders-grid",
"component": "SyncfusionDataGrid",
"dataSource": { "path": "/orders" },
"allowPaging": true,
"allowSorting": true,
"columns": [
{ "field": "id", "headerText": "Order ID" },
{ "field": "customer", "headerText": "Customer" },
{ "field": "amount", "headerText": "Amount" }
]
}
{
"id": "orders-grid",
"component": "SyncfusionDataGrid",
"dataSource": { "path": "/orders" },
"allowPaging": true,
"allowSorting": true,
"columns": [
{ "field": "id", "headerText": "Order ID" },
{ "field": "customer", "headerText": "Customer" },
{ "field": "amount", "headerText": "Amount" }
]
}
{
"id": "orders-grid",
"component": "SyncfusionDataGrid",
"dataSource": { "path": "/orders" },
"allowPaging": true,
"allowSorting": true,
"columns": [
{ "field": "id", "headerText": "Order ID" },
{ "field": "customer", "headerText": "Customer" },
{ "field": "amount", "headerText": "Amount" }
]
}
- Runtime capabilities
Built for dynamic agent-driven UI design
Use a controlled runtime layer instead of asking an agent to generate arbitrary application markup.
Validated definitions
Validate incoming A2UI messages before rendering the interface.
Data-bound UI
Connect structured agent data to interactive Syncfusion controls.
Bidirectional interaction
Route user actions back to the application or agent workflow.
Reliable rendering
Render supported components through a consistent, reliable runtime.
- Get started
Add Syncfusion A2UI to your application
Install the runtime, configure the component catalog and renderer, then connect your agent or backend to the application workflow.
Install the package
Install the A2UI package and a Syncfusion theme in your React application.
npm install @syncfusion/ej2-react-a2ui @syncfusion/ej2-tailwind3-theme
Add the required styles
Import the theme styles for the components your A2UI definition uses
(for example, DataGrid) in
src/styles.css.
@import "@syncfusion/ej2-tailwind3-theme/styles/grid/index.css";
Render an A2UI definition
In src/app/app.config.ts,
Create a MessageProcessor with the Syncfusion catalog, pass it your A2UI messages, and render the surface with SyncfusionA2UIProvider.
import { useState, useEffect, useRef } from 'react';
import { syncfusionCatalog, SyncfusionA2UIProvider } from '@syncfusion/ej2-react-a2ui';
import { MessageProcessor } from '@a2ui/web_core/v0_9';
function App() {
const [surface, setSurface] = useState(null);
const processor =
useRef(new MessageProcessor(syncfusionCatalog())).current;
useEffect(() > {
const sub = processor.onSurfaceCreated(setSurface);
processor.processMessages(GRID_MESSAGES);
return () => sub.unsubscribe();
}, [processor]);
return surface &&
;
}
Connect an agent
Send the user's prompt to your A2UI agent and pass the A2UI messages it returns to the processor. The interface is generated and updated automatically.
const res = await fetch(AGENT_URL, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: `req-${Date.now()}`,
method: 'message/send',
params: {
message: {
kind: 'message',
messageId: `msg-${Date.now()}`,
role: 'user',
parts: [{ text: prompt }]
}
}
}),
});
const envelope = await res.json();
const messages =
envelope?.result?.artifacts?.[0]?.parts?.[0]?.data?.a2uiEnvelope;
if (messages) {
processor.processMessages(messages);
}
Run the application
Start the app and try a prompt such as “Show me last quarter's sales by region.”
Install the package
Install the A2UI package and a Syncfusion theme in your Angular application.
npm install @syncfusion/ej2-angular-a2ui @syncfusion/ej2-tailwind3-theme
Add the required styles
Import the theme styles for the components your A2UI definition uses
(for example, DataGrid) in
src/styles.css.
@import "@syncfusion/ej2-tailwind3-theme/styles/grid/index.css";
Register the Syncfusion catalog
In src/app/app.config.ts,
provide the A2UI renderer with the Syncfusion catalog and an action handler.
import { A2UI_RENDERER_CONFIG, A2uiRendererService } from '@a2ui/angular/v0_9';
import { syncfusionCatalog } from '@syncfusion/ej2-angular-a2ui';
export const appConfig: ApplicationConfig = {
providers: [
{
provide: A2UI_RENDERER_CONFIG,
useValue: {
catalogs: [syncfusionCatalog],
actionHandler: (action: unknown) =>
console.log('surface action:', action),
},
},
A2uiRendererService,
],
};
Render an A2UI definition
Add SyncfusionA2UIProvider to your component and pass your A2UI messages
to the
syncfusion-a2ui-provider
element.
import { Component, signal } from '@angular/core';
import { SyncfusionA2UIProvider } from '@syncfusion/ej2-angular-a2ui';
@Component({
standalone: true,
selector: 'app-root',
imports: [SyncfusionA2UIProvider],
template: `
@if (messages(); as msgs) {
<syncfusion-a2ui-provider
[messages]="msgs"
[dataContextPath]="'/'" />
}
`,
})
export class AppComponent {
// your A2UI v0.9 definition
protected readonly messages =
signal<unknown[] | null>(GRID_MESSAGES);
}
Connect an agent
Send the user's prompt to your A2UI agent and pass the returned messages to A2uiRendererService. The interface is generated and updated automatically.
private readonly renderer = inject(A2uiRendererService);
protected async sendQuery(): Promise<void> {
const response = await postAgentEnvelope({
jsonrpc: '2.0',
id: `req-${Date.now()}`,
method: 'message/send',
params: {
message: {
kind: 'message',
messageId: `msg-${Date.now()}`,
role: 'user',
parts: [{ text: this.query() }]
}
},
});
const messages = extractA2uiEnvelope(response);
if (messages) {
this.renderer.processMessages(messages as never);
}
}
Run the application
Start the app and try a prompt such as “Show me last quarter's sales by region.”
Install the package
Add the Syncfusion A2UI NuGet package to your Blazor Web App.
dotnet add package Syncfusion.Blazor.A2UI
Add the namespaces
Add the A2UI namespaces to
_Imports.razor.
@using Syncfusion.Blazor
@using Syncfusion.A2UI.Core.Processing
@using Syncfusion.A2UI.Core.Serialization
@using Syncfusion.A2UI.Core.State
@using Syncfusion.Blazor.A2UI.NodeView
@using Syncfusion.Blazor.A2UI.SyncfusionComponents
Register the services
Register Syncfusion Blazor and the A2UI services with the Syncfusion
components in
Program.cs.
using Syncfusion.Blazor;
using Syncfusion.Blazor.A2UI.SyncfusionComponents;
builder.Services.AddSyncfusionBlazor();
builder.Services.AddHttpClient();
builder.Services.AddA2UIWithSyncfusionComponents();
Add the theme and script
Reference a Syncfusion theme in the head and the Syncfusion script
in the body of
App.razor.
<head>
<link href="_content/Syncfusion.Blazor.Themes/fluent2.css" rel="stylesheet" />
</head>
<body>
<script src="_content/Syncfusion.Blazor.Core/scripts/syncfusion-blazor.min.js"
type="text/javascript"></script>
</body>
Render an A2UI definition
In Home.razor,
parse your A2UI messages, pass them to MessageProcessor,
and render the surface with SyncfusionA2UIProvider.
@page "/"
@rendermode InteractiveServer
@using System.Text.Json
@inject MessageProcessor Processor
<SyncfusionA2UIProvider Surface="@surface" />
@code {
private SurfaceModel? surface;
protected override void OnInitialized()
{
// Json holds your A2UI v0.9 definition
var messages =
A2uiJson.ParseMessages(JsonDocument.Parse(Json).RootElement);
Processor.ProcessMessages(messages);
surface = Processor.Model.GetSurface("orders");
}
}
Connect an agent
Post the user's prompt to your A2UI agent with HttpClient and pass the returned messages to MessageProcessor. The interface is generated and updated automatically.
var response = await Http.PostAsJsonAsync(AgentUrl, new
{
jsonrpc = "2.0",
id = $"req-{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}",
method = "message/send",
@params = new
{
message = new
{
kind = "message",
messageId = $"msg-{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}",
role = "user",
parts = new[] { new { text = _query } }
}
}
});
using var doc =
JsonDocument.Parse(await response.Content.ReadAsStringAsync());
var envelope = doc.RootElement
.GetProperty("result")
.GetProperty("artifacts")[0]
.GetProperty("parts")[0]
.GetProperty("data")
.GetProperty("a2uiEnvelope");
Processor.ProcessMessages(
A2uiJson.ParseMessages(envelope)
);
Run the application
Start the app and try a prompt such as "Show me last quarter's sales by region."
Install the package
Add the Syncfusion A2UI NuGet package to your .NET MAUI app. It brings in the Syncfusion .NET MAUI controls it needs automatically.
dotnet add package Syncfusion.Maui.A2UI
Register the services
In MauiProgram.cs, register Syncfusion core and the A2UI renderer along with the Syncfusion component catalog.
using Syncfusion.Maui.A2UI.SyncfusionComponents;
using Syncfusion.Maui.Core.Hosting;
builder.ConfigureSyncfusionCore();
builder.UseA2UIWithSyncfusionComponents();
Add the A2UI surface
Add the namespace and place an A2uiSurface in your page. This is where the agent's UI appears.
xmlns:a2ui="clr-namespace:Syncfusion.Maui.A2UI.Hosting;assembly=Syncfusion.Maui.A2UI"
<a2ui:A2uiSurface x:Name="OrdersSurface" />
Render an A2UI definition
Inject SurfaceHost, process the A2UI messages, and rebuild the surface.
public MainPage(SurfaceHost host)
{
InitializeComponent();
_host = host;
}
protected override void OnAppearing()
{
base.OnAppearing();
// Json holds the A2UI v0.9 messages (see the full sample in the MAUI guide)
var messages = A2uiJson.ParseMessages(JsonDocument.Parse(Json).RootElement);
_host.Processor.ProcessMessages(messages);
OrdersSurface.Host = _host;
OrdersSurface.Surface = _host.Processor.Model.GetSurface("orders");
OrdersSurface.Rebuild();
}
Connect an agent
Instead of the embedded JSON, send the user's prompt to your A2UI v0.9 agent and pass the returned messages to the processor.
var response = await _http.PostAsJsonAsync("/api/agent", new { prompt });
var json = await response.Content.ReadAsStringAsync();
var messages = A2uiJson.ParseMessages(JsonDocument.Parse(json).RootElement);
_host.Processor.ProcessMessages(messages);
OrdersSurface.Rebuild();
Run the application
Run the app and try a prompt like "Show last quarter's sales by region."
Support for more platforms is coming soon.
- AI-POWERED UI BUILDER
Build dynamic UI by using A2UI Composer
Describe the interface you need, preview it live with Syncfusion components, and copy a ready-to-use A2UI definition. Hand-written JSON is no longer needed.
Describe
Type what you need or pick a starter template.
Preview
See it rendered with Syncfusion components.
Refine
Adjust layout, columns and data in the Workspace.
Copy
Take the A2UI definition into your application.
- Prefer to design first?
Use A2UI Composer to shape the interface
Start from a prompt or template, preview the surface, refine the A2UI JSON, and then use the resulting definition in your application.
Why choose Syncfusion’s A2UI components?
Modern applications contain valuable UI assets such as forms, grids, dashboards, workflows, and business screens. Syncfusion’s A2UI components help organizations transform these assets into reusable building blocks that can be used repeatedly — without rewriting applications or replacing existing user experiences.
Accelerate application modernization
Modernize one screen at a time without replacing the underlying application.
Increase reusability
Forms, grids, and dashboards already owned become building blocks instead of being rebuilt.
Improve consistency
Every composed screen inherits the same design language, behavior, and accessibility standards.
Reduce complexity
AI assembles trusted components, so the resulting interface stays predictable and easy to review.
Support enterprise governance
Maintain visibility and control across applications and teams.
Accelerate AI adoption
New UIs are composed from components rather than hand-written screens.
- Prefer to design first?
Build agent-driven UI with Syncfusion A2UI Components
Add structured, interactive interfaces to your application using supported Syncfusion components and a controlled A2UI runtime.
- Start building
Build agent-driven UI designs with Syncfusion A2UI Components
Add structured, interactive interfaces to your application using supported Syncfusion components and a controlled A2UI runtime.