Most A2UI types are plain primitives, but MeghaOS also ships smart components: widgets that manage their own behavior, fetch their own data, or persist their own state. The LLM assembles rich interfaces from these instead of writing code. They’re organized into tiers by how much backend they need.

Tier 1: Pure client

Run entirely in the shell. No backend, no network. The LLM should prefer these over JIT code for time/game/utility queries.

Time

live_timer, countdown, live_clock, pomodoro, metronome

Games & random

dice_roller, coin_flip, tic_tac_toe, snake_game, quiz

Health & productivity

habit_tracker, breathing, tip_calculator, bmi_calculator, password_generator

Creative

color_picker, drawing_canvas, flashcards, poll, markdown_editor, pixel_art, whiteboard

Tier 2: Hybrid (client renders, backend fetches)

Make a single HTTP call to the agent for live data, then render it client-side. Use these for real-world info queries. Each maps to a backend endpoint under /api/widget/*.

Tier 3: Persistent (stateful)

Read and write to the backend store automatically. Data persists across sessions via /api/store/{key}. todo_list · notes · journal · budget_tracker · reading_list · kanban_board · code_snippets · bookmarks · contacts
Use Tier 3 components whenever the user wants to track, manage, or save personal data across sessions.

Tier 4+: Platform-level & experimental

Reactive data, multi-widget coordination, and LLM-in-the-loop widgets.

Educational visualizations

For “how does X work” queries, the LLM emits animated diagrams:
  • animated_svg: animated SVG with CSS-like animation classes (animate-rise, animate-pulse, etc)
  • diagram: labelled educational diagram
  • node_graph: force-directed graph
  • calendar_view: full calendar grid

Registering a new widget

A widget becomes available to the LLM once it’s:
  1. Implemented in.
  2. Registered in.
  3. Documented in the A2UI schema so the model knows when and how to use it.
The roadmap for new tiers and components lives in SMART_COMPONENTS_ROADMAP.md at the repo root.