Skip to main content
Choose one option in a list of full-width rows. Add icons and descriptions, or use compact labels. For multiple choices, use FlexChecklist.

Basic radio list

The state is one option key, such as 'express', or null before selection. String and integer keys are supported; numeric identities travel as strings to preserve large IDs and leading zeros. Selecting another row replaces the previous choice; clicking the selected row keeps it selected.

Add supporting information

desc is an alias for description. Explicit values inside an option override values supplied by icons() and descriptions().
Neither icons nor descriptions are required. Labels and descriptions render as escaped text.

Compact label-only variant

label-only keeps the radio indicator and label and omits icons and descriptions, even if those are configured. The default variant is default. Other variant names are rejected.

Unavailable choices

Unavailable choices show a lock, cannot be selected and are excluded from accepted submissions. If a stored value is now disabled, resolve it or re-enable that option before saving. The interface skips disabled options when navigating with a keyboard.
Disabling the entire field follows Filament’s normal disabled-field behavior.

Sizes and accents

Choose sm, md (default) or lg, or the matching ControlSize enum. All variants support these sizes. The default accent uses the panel primary color. Standard names include primary, secondary, success, warning and danger. Pass null to omit the color class.

Dynamic options

Options, icons, descriptions, disabled keys, variant, size and color accept closures evaluated by Filament. Make the parent field live() when its updates should rebuild dependent options. Reset a dependent selection when the old key is no longer available. Unknown keys fail validation; they are not silently accepted. Standard Filament field hooks, including afterStateUpdated(), remain available.

Saving and validation

Use a string column for textual keys or an integer column/cast for numeric IDs. Save validated Filament form state. The field accepts only one enabled configured key. Arrays, objects, booleans, floats, unknown keys and disabled choices are rejected. Add required() when an empty selection is not permitted. Scope database-backed options to the current user’s permissions.

Keyboard, RTL and touch

  • Tab focuses the selected enabled radio, or the first enabled radio.
  • Up/Down select the previous/next enabled option and wrap at the ends.
  • Left/Right select according to the text direction, including RTL.
  • Home/End select the first/last enabled option.
  • Space or Enter selects the focused option once per press.
The entire row responds to click and touch. Long text wraps on small screens. Reduced-motion preferences suppress indicator motion. Repeated lists maintain independent selection and focus. The circular indicator is rendered in its saved state immediately. Reloading the page does not replay a selection animation; the spring plays when the selection changes after initialization. Direction is inherited from the surrounding page. To set RTL for one field:

Configuration reference

Rich options accept label, description (or desc), icon and disabled. In JSON field definitions, use flex_radiolist as the field type.
Last modified on October 16, 2026