Renders a description element for a form field, which will automatically receive an aria-describedby attribute pointing to this element.

Code examples

const form = useFormStore({
password: "",
<Form store={form}>
<FormLabel name={form.names.password}>Password</FormLabel>
<FormInput name={form.names.password} type="password" />
<FormDescription name={form.names.password}>
Password with at least 8 characters.

Required Props



Name of the field described by this element. This can either be a string or a reference to a field name from the names object in the store, for type safety.

Code examples

<FormDescription name="password">
Password with at least 8 characters.

Optional Props


((props: CollectionStoreItem) => CollectionStoreItem) | undefined

A memoized function that returns props to be passed with the item during its registration in the store.

Code examples

const getItem = useCallback((data) => ({, custom: true }), []);
<CollectionItem getItem={getItem} />


string | undefined

The unique ID of the item. This will be used to register the item in the store and for the element's id attribute. If not provided, a unique ID will be automatically generated.

Live examples


RenderProp<React.HTMLAttributes<any> & { ref?: React.Ref<any> | undefined; }> | React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined

Allows the component to be rendered as a different HTML element or React component. The value can be a React element or a function that takes in the original component props and gives back a React element with the props merged.

Check out the Composition guide for more details.


boolean | undefined = true

Whether the item should be registered as part of the collection.


FormStore<FormStoreValues> | undefined

Object returned by the useFormStore hook. If not provided, the closest Form or FormProvider components' context will be used.

Stay tuned

Join 1,000+ subscribers and receive monthly tips & updates on new Ariakit content.

No spam. Unsubscribe anytime. Read latest issue