Stable Addresses
Deterministic dot-separated identifiers for screens, states, actions, relations, and slices.
Definition & Purpose
Stable Addresses are the core mechanism that makes UXDL machine-verifiable. By giving every screen node, state variant, interactive trigger, transition outcome, and requirement slice a deterministic dot-separated address, teams ensure that PRDs, designs, code, and automated tests refer to the exact same product element.
Complete Address Hierarchy
UXDL 0.1 establishes a strict dot-separated address hierarchy:
# Screen Address:screen_id# State Address:screen_id.states.state_id# Action Address:screen_id.actions.action_id# Relation Address:screen_id.actions.action_id.relations.relation_id# Slice Address:slices.slice_idDomain Address Examples
Here is how a complete e-commerce billing flow translates into address notation:
- Screen: billing
- State: billing.states.past_due
- Action: billing.actions.retry_payment
- Relation: billing.actions.retry_payment.relations.success
- Slice: slices.payment_recovery
AI Agent & Tooling Usage
When coding agents (such as Claude, Cursor, Antigravity, or Gemini) analyze codebase changes or generate tests, they use stable addresses as exact reference targets. This eliminates guesswork and prevents agents from hallucinating non-existent screens or states.
Complete Mapping Example
Here is how YAML elements map directly to their stable address strings:
screens: billing: # Address: billing states: past_due: Payment past due # Address: billing.states.past_due actions: retry_payment: # Address: billing.actions.retry_payment relations: success: # Address: billing.actions.retry_payment.relations.success to: billing state: active