a2ui-adk connects the A2UI agent SDK to the
Agent Development Kit (ADK). It
provides the a2ui.adk package.
# ADK tools only
pip install a2ui-adk
# With the ADK-to-A2A converters and A2A subagent orchestration
pip install "a2ui-adk[a2a]"The a2a extra installs a2ui-a2a and
google-adk[a2a].
Available with the base install:
SendA2uiToClientToolsetis an ADK toolset that lets an agent send A2UI to the client through a tool call. It takes whether A2UI is enabled and the request'sA2uiRequestProcessor, or callbacks (A2uiEnabledProvider,A2uiProcessorProvider) that return them per context. The processor holds everything else: the catalogs, the example turns, the inference format, and theRendererStatebound to it for Canvas UIs. The toolset adds the processor's prompt to the model's instructions, compiles each tool call with the processor's parser, and validates the resulting A2UI JSON messages before they are sent.A2uiInstructionis an ADK instruction provider for an agent that writes A2UI in its text response. Pass it asLlmAgent.instructionwith the agent's own instruction and the same processor or callbacks as the toolset. It appends the processor's prompt to the agent's instruction. ADK reads{name}session state templates out of a string instruction, and the A2UI prompt holds braces that are not state keys (${expression}in the basic catalog, data bindings in the examples), so a string instruction fails withKeyError: "Context variable not found: 'expression'.". As a provider,A2uiInstructionis used as it is, while the agent's own instruction keeps its{name}templates.A2uiProcessorStorekeeps each session'sA2uiRequestProcessorin memory, since ADK's session services save state as JSON and can't hold one. Itsis_enabledandgetmethods are the callbacks for the toolset,A2uiInstructionandA2uiEventConverter.
Available with the a2a extra:
A2uiPartConverterandA2uiEventConverter(also ina2ui.adk.a2a) convert ADK events and GenAI parts into A2A parts with A2UI data, using the request'sA2uiRequestProcessor.A2uiEventConvertergets the processor from itsa2ui_processorargument, such asA2uiProcessorStore.get. Pass it to ADK'sA2aAgentExecutor.A2uiSubagentMapandSurfaceIdAlreadyExistsError(also ina2ui.adk.orchestration) track which subagent owns each surface in an orchestrator that talks to its subagents over A2A.
Without the extra, import a2ui.adk still works. Reading one of these names
raises an ImportError that explains how to install the extra.
from a2ui.adk import A2uiEventConverter, A2uiInstruction, SendA2uiToClientToolsetFrom the repository root:
uv run pytest python/a2ui_adk/testsThe conformance cases are in
conformance/extensions/adk.
From the python/a2ui_adk directory:
uv build