Most form libraries treat accessibility as an afterthought — a prop you pass to opt in. This library inverts that assumption: every component is inaccessible by default unless you deliberately provide the required accessible attributes, at which point the errors go away.
The Problem
A developer reaches for a form library to move fast. If the accessible path requires more configuration than the inaccessible path, most developers will take the shortcut. The library has to make the right thing the easy thing.
The Approach
Every input component requires a label prop. There is no way to render an <input> without one — the TypeScript types simply don't allow it. Hint text is automatically associated via aria-describedby. Error messages appear in a live region so screen readers announce them without a page reload.
<Field
label="Email address"
hint="We'll never share your email."
error={errors.email}
>
<Input type="email" {...register('email')} />
</Field>
The Field component handles all ID generation and ARIA wiring internally. The developer writes zero ARIA attributes.
The Result
Adoption within the team increased because the library was faster to use correctly than incorrectly. Accessibility audit findings related to forms dropped to zero across three products within a quarter.