Skip to content

docs: add A2UI basic catalog implementation guide for v0.9#823

Merged
jacobsimionato merged 6 commits intogoogle:mainfrom
jacobsimionato:basic-catalog-guide
Mar 25, 2026
Merged

docs: add A2UI basic catalog implementation guide for v0.9#823
jacobsimionato merged 6 commits intogoogle:mainfrom
jacobsimionato:basic-catalog-guide

Conversation

@jacobsimionato
Copy link
Copy Markdown
Collaborator

Description of Changes

  • Introduced a new comprehensive guide (basic_catalog_implementation_guide.md) detailing how to visually and functionally implement the A2UI v0.9 Basic Catalog components and functions across Web, Mobile, and Desktop platforms.
  • Specified rendering guidelines, property mapping, and behavior/state for all catalog components.
  • Outlined the logic and reactive execution constraints for all catalog functions, including specific architecture guidance for the complex formatString interpolation engine.
  • Established a "Leaf-Margin Strategy" to maintain consistent, predictable UI spacing without multiplication issues across nested layout containers.
  • Added rules for handling color, contrast, and nesting, such as relying on native framework context for text contrast in buttons, and using transparent boundaries for nested cards.
  • Updated the renderer_guide.md to link to this new document, specifically adding it to the required ingestion context and basic catalog implementation steps for AI Agents.

Rationale

Previously, the functional and visual expectations for implementing the Basic Catalog were vaguely scattered or entirely missing. Providing a detailed, framework-agnostic implementation guide ensures that developers and AI agents can build consistent, high-quality, cross-platform A2UI renderers. Specifically, codifying spacing rules and function reactivity reduces trial-and-error and ensures architectural alignment across different ecosystems.

Testing/Running Instructions

  1. Review the new specification/v0_9/docs/basic_catalog_implementation_guide.md document for clarity and correctness.
  2. Review the modifications in specification/v0_9/docs/renderer_guide.md to ensure the integration and links are correct.
  3. This is a documentation-only change, so no automated code tests are required.

### Text
Displays text content.

**Rendering Guidelines:** Text should be rendered using a Markdown parser when possible. If markdown rendering is unavailable or fails, gracefully fallback to rendering the raw text using the framework's default text primitive (e.g., `<span>` in HTML, `Text` in Compose/SwiftUI).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The spec says text supports simple markdown, so do we want to make room for renderers that don't?

Because raw Markdown will look really odd to someone who doesn't know what it is. I mean, it's readable (the whole point of the markdown standard), but it won't look how the author (human or LLM) intended.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. Let's make the wording a little stronger, and say that the renderer should parse markdown in the text element.

### Video
A video player.

**Rendering Guidelines:** Render using a native video player component with user controls enabled. Ensure the video container spans the full width of the parent's container for responsiveness.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to talk about scrubbing? Is it required/allowed to enable scrubbing?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's encourage scrubbing availability, though I think it's somewhat up to the implementer.

### AudioPlayer
An audio player.

**Rendering Guidelines:** Render using a native audio player component with user controls enabled. Like video, its container should span the full width of its parent.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as video re: scrubbing

A control for selecting a numeric value within a range.

**Rendering Guidelines:** Render using the platform's native slider or seek bar component. Optionally display the current numeric value next to the slider track.
**Behavior & State:** Set `min` and `max` limits. Perform two-way binding, updating the numeric `value` path as the user drags the slider.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might add something about the slider value: it's a number, which means it's not an integer. This is so that implementations work if the slider is 0->1 (a common case).

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great idea.

Comment on lines +156 to +157

Functions provide client-side logic for validation, interpolation, and operations. As defined in the Architecture Guide, the reactivity of function arguments is generally handled by the Core Data Layer (specifically the Binder/Context layer).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it makes sense to mention web_core here? I mean, I guess that's web-only, but for most web implementations they won't want to implement their own version of the function reactivity, etc.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah good idea. Let's note that core libraries for each language typically provide a complete implementation of all the functions in the basic catalog, seeing as they are not specific to UI framework.

@jacobsimionato jacobsimionato merged commit b857eb7 into google:main Mar 25, 2026
9 checks passed
@github-project-automation github-project-automation bot moved this from Todo to Done in A2UI Mar 25, 2026
peterblazejewicz pushed a commit to peterblazejewicz/A2UI that referenced this pull request Apr 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants