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.

Banner

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.

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

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 Components
data-grid

Data Grid

Display and organize records in rows and columns.

tree-grid

Tree Grid

Explore records with parent-child relationships.

charts

Chart

Show patterns and comparisons in your data.

maps

Map

Present data in a map-based geographic view.

heat-map

HeatMap

Color-coded matrix to reveal data patterns.

Input Components
textbox

Text

Add a heading, label, or body text to a UI.

combo-box

ComboBox

Type to filter and select a single option.

dropdown-list

Dropdown

Let people choose from a list of options.

Scheduling Components
scheduler

Scheduler

Manage appointments across calendar views.

calendar

Calendar

Browse a calendar and quickly choose a date.

gantt-chart

GanttChart

Plan tasks, dependencies, and timelines.

Navigation Components
pager

Pager

Move between pages and set the page size.

menus

Menu

Help people move between your app sections.

breadcrumb

Breadcrumb

Show where a page sits in the navigation.

Layout Components
skeleton

Skeleton

Placeholder with shimmer while content loads.

tabs

Tabs

Switch between related views in one place.

cards

Cards

Group related information in a single container.

Document Solutions
pdf-viewer

PDF Viewer

View, annotate, and fill forms in PDF files. 

docx-editor

DOCX Editor

Create, edit, and format Word documents.

spreadsheet

Spreadsheet

Excel-like grid with formulas, sheets, and file support.

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" }
  ]
}

Built for dynamic agent-driven UI design

Use a controlled runtime layer instead of asking an agent to generate arbitrary application markup.

validated-definitions

Validated definitions

Validate incoming A2UI messages before rendering the interface.

data-bound-components

Data-bound UI

Connect structured agent data to interactive Syncfusion controls.

bidirectional-interaction

Bidirectional interaction

Route user actions back to the application or agent workflow.

reliable-rendering

Reliable rendering

Render supported components through a consistent, reliable runtime.

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.

1

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
2

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";
3

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 &&
;
}
4

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);
}
5

Run the application

Start the app and try a prompt such as “Show me last quarter's sales by region.”

1

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
2

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";
3

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,
    ],
};
4

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);
}
5

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);
    }
}
6

Run the application

Start the app and try a prompt such as “Show me last quarter's sales by region.”

1

Install the package

Add the Syncfusion A2UI NuGet package to your Blazor Web App.

dotnet add package Syncfusion.Blazor.A2UI
2

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
3

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();
4

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>
5

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");
    }
}
6

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)
);
7

Run the application

Start the app and try a prompt such as "Show me last quarter's sales by region."

1

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 
2

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(); 
3

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" />
4

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(); 
} 
5

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(); 
6

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.

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.

start-with-a-request

Describe

Type what you need or pick a starter template.

review-the-preview

Preview

See it rendered with Syncfusion components.

refine-the-design

Refine

Adjust layout, columns and data in the Workspace.

copy-the-definition

Copy

Take the A2UI definition into your application.

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.

Build agent-driven UI with Syncfusion A2UI Components

Add structured, interactive interfaces to your application using supported Syncfusion components and a controlled A2UI runtime.

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.