Architectural layering and API naming
Stay organized with collections
Save and categorize content based on your preferences.
The Jetpack Compose A2UI renderer defines a layered architecture that lets you
choose the right layer to build on. In addition to semantic layering, a clear
naming scheme communicates API intent and controls visibility to avoid
polluting your classpath with unnecessary internal types.
APIs are organized into two primary categories based on use case and visibility:
- APIs for app and component developers: Public APIs intended for direct
use have clean, concise names with the
A2ui prefix (or design-system and
testing prefixes such as MaterialA2ui and A2uiTest).
Examples include A2uiCatalog, A2uiComponent, and A2uiException.
- APIs for UI framework integrators: APIs used by libraries bridging the
core data layer and UI frameworks have descriptive names prefixed with
A2uiCore. These APIs aren't intended for direct application reference and
remain hidden from standard application code.
Examples include A2uiCoreCatalog, A2uiCoreDataModel, and
A2uiCoreSurfaceModel.
Because the core data layer contains types from both categories, it's
distributed across two separate artifacts: androidx.a2ui:a2ui-model (for app
developers) and androidx.a2ui:a2ui-engine (for framework integrators). This
structure allows framework libraries to depend on a2ui-engine as an
implementation dependency, preventing A2uiCore types from polluting public app
classpaths.
Category 1: App developer APIs
The following tables list public APIs intended for application and component
developers.
androidx.a2ui:a2ui-model
| Type |
Description |
A2uiSurfaceModel |
Read-only interface representing a UI surface |
A2uiMessageProcessor |
Entry-point type for processing incoming messages |
A2uiMessageParser |
Parser interface for protocol messages |
A2uiServerToClientMessage |
Incoming message payload |
A2uiSchema |
Types used to define component property schemas |
A2uiException |
Exceptions thrown and handled across layers |
A2uiUserAction |
Action payload created as a result of user interactions |
A2uiClientToServerMessage |
Base type for all outbound message payloads |
A2uiActionInterceptor |
Data-layer-level user action interceptor |
A2uiFunctionDefinition |
Definition of a local client function |
A2uiDataPath |
JSON pointer path representation |
androidx.a2ui.compose:compose-runtime
| Type |
Description |
a2uiRuntimeMessageProcessor |
Extension constructor for the message processor |
A2uiMessageParser |
Extension constructor for the message parser |
A2uiComponentState |
Interface representing reactive component state |
A2uiComponentModel |
Data model for a successfully resolved component |
A2uiComponentProperties |
Stable property container optimizing recompositions |
A2uiProperty |
Strongly typed component property definition |
A2uiComponentScope |
Receiver scope for evaluating bindings and child components |
A2uiComponentReference |
Pointer for resolving nested child components |
androidx.a2ui.compose:compose-ui
| Type |
Description |
A2uiCatalog |
Interface and extension constructor for defining catalogs |
A2uiComponent |
Interface for defining Compose component implementations |
A2uiComponent (composable) |
Composable function that emits UI for a component |
androidx.compose.material3:material3-a2ui
| Type |
Description |
A2uiSurface |
Composable entry point that renders a surface |
materialA2uiBasicCatalogV1 |
Factory function for creating an instance of the Basic Catalog that uses Material 3 components |
MaterialA2uiBasicCatalogV1Defaults |
Default Material 3 implementations of the Basic Catalog |
androidx.a2ui.compose:compose-ui-testing
| Type |
Description |
A2uiTestController |
Test controller for orchestrating test execution |
A2uiComponentStub |
Stubbed or overridden component implementation |
A2uiTestSurface |
Composable function that renders a test surface |
Category 2: Framework integrator APIs
The following table lists APIs intended for framework integrators.
androidx.a2ui:a2ui-engine
| Type |
Description |
A2uiCoreCatalog |
Contains a set of A2uiCoreComponentDefinition objects |
A2uiCoreCatalogSerializer |
Serializer for A2UI catalogs |
A2uiCoreComponentDefinition |
Contains metadata defining a component |
A2uiCoreSurfaceModel |
Implements A2uiSurfaceModel, exposes registries |
A2uiCoreSurfaceGroupModel |
Implements A2uiSurfaceGroupModel |
A2uiCoreMessageProcessor |
Implements A2uiMessageProcessor |
A2uiCoreDataModel |
Reactive data model holder |
A2uiCoreComponentRegistry |
Component registry |
A2uiCoreValueResolver |
Data accessor for use in the dynamic evaluator |
A2uiCoreSchemaValidator |
Component schema validator |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2026-09-23 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-09-23 UTC."],[],[]]