# Introduction

> Open Components is the standard for perfect UI components, with a perfect user experience, developer experience and agentic experience.

Open Components is the UXFront component standard: guidelines for building UI components with a perfect user experience, developer experience and agentic experience, whether humans or AI agents write them.

Learn the guidelines once, then hold every component to the same high standards, whether you or your agents write it.

## The three layers

The standard has three layers, one for each audience a component serves. A component meets the standard when it meets all three.

### User experience

Components behave the way people expect them to, with any input, on any device and for every ability.

- **Accessible**: keyboard, pointer, touch and screen readers, following [WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/).
- **Predictable**: the same interaction works the same way in every component.
- **Every state**: hover, focus, active, disabled, loading and error, all designed.
- **Adaptive**: respects motion, contrast, colour scheme and text size preferences.

### Developer experience

One clear API, learned once and used everywhere. Knowing one component means knowing them all.

- **Consistent**: sizes, colours, states and events share their names everywhere.
- **Type-safe**: every prop, event and slot is typed and documented.
- **Composable**: small parts build larger ones, with no hidden coupling.
- **Controllable**: controlled or uncontrolled, with every state within reach.

### Agentic experience

Components that AI agents can read, reason about and build with, so their output meets the same bar as yours.

- **Semantic**: roles, names and states agents can read straight from the markup.
- **Described**: anatomy, props and states, published as machine-readable specs.
- **Deterministic**: the same input always renders the same structure.
- **Verifiable**: rules agents can check their work against before shipping.

## For agents

Every page of these docs is also published as markdown: prefix its path with `/raw` and add `.md`, as in [`/raw/docs.md`](/raw/docs.md). [`/llms.txt`](/llms.txt) lists every page, and [`/llms-full.txt`](/llms-full.txt) holds them all in one file.
