Expo UI and Router for iOS
Get started

Expo UI

A set of components that allow you to build UIs directly with Jetpack Compose and SwiftUI from React.

@expo/ui is a set of native input components that allows you to build fully native interfaces with Jetpack Compose and SwiftUI. It aims to provide the commonly used features and components that a typical app will need.

Available platforms

Components are available for the following platforms:

  • Jetpack Compose: Build native Android interfaces with Jetpack Compose components
  • SwiftUI: Build native iOS interfaces with SwiftUI components
  • Universal: Cross-platform components that run on Android, iOS, and web from a single source

Drop-in replacements

See Drop-in replacements for API-compatible replacements for popular React Native community libraries.

Available components

SwiftUI

ComponentDescription
AccessoryWidgetBackgroundAdaptive background view that provides a standard appearance based on the widget's environment.
AlertAlert component for presenting native iOS alert dialogs.
BottomSheetBottomSheet component that presents content from the bottom of the screen.
ButtonButton component for displaying native buttons.
ColorPickerColorPicker component for selecting colors.
ConfirmationDialogConfirmationDialog component for presenting confirmation prompts.
ContextMenuContextMenu component for displaying context menus.
ControlGroupControlGroup component for grouping interactive controls.
DatePickerDatePicker component for selecting dates and times.
DisclosureGroupDisclosureGroup component for displaying expandable content.
DividerDivider component for creating visual separators.
FormForm component for collecting user input in a structured layout.
GaugeGauge component for displaying progress with visual indicators.
GroupGroup component for grouping views without affecting layout.
HostHost component that enables SwiftUI components in React Native.
HStackHStack component for horizontal layouts.
ImageImage component for displaying SF Symbols.
LabelLabel component for displaying text with an icon.
LazyHStackLazyHStack component for lazy horizontal layouts.
LazyVStackLazyVStack component for lazy vertical layouts.
LinkLink component for displaying clickable links.
ListList component for displaying scrollable lists of items.
MenuMenu component for displaying dropdown menus.
ModifiersView modifiers for customizing component appearance and behavior.
NamespaceA Namespace component that allows you create Namespaces in SwiftUI
OverlayOverlay component for layering content on top of another view.
PickerPicker component for selecting options from a list.
PopoverPopover component for displaying content in a floating overlay.
ProgressViewProgressView component for displaying progress indicators.
RNHostViewA component that enables React Native views inside SwiftUI.
ScrollViewScrollView component for scrollable content.
SectionSection component for grouping content within lists and forms.
SecureFieldSecureField component for password input.
SliderSlider component for selecting values from a range.
SpacerSpacer component for flexible spacing.
SwipeActionsSwipeActions component for adding leading and trailing swipe actions to row content.
TabViewTabView component for paged or tabbed content.
TextText component for displaying styled text with support for nested texts.
TextFieldTextField component for text input.
ToggleToggle component for displaying native toggles.
useNativeStateA React hook that creates observable state shared between JavaScript and native SwiftUI views.
VStackVStack component for vertical layouts.
ZStackZStack component for overlapping layouts.

Drop-in replacements

ComponentDescription
BottomSheetA bottom sheet compatible with @gorhom/bottom-sheet.
DateTimePickerA date and time picker compatible with @react-native-community/datetimepicker.
MaskedViewA masked view compatible with @react-native-masked-view/masked-view.
MenuA menu compatible with @react-native-menu/menu.
PagerViewA horizontally paged view compatible with react-native-pager-view.
PickerA picker compatible with @react-native-picker/picker.
SegmentedControlA segmented control compatible with @react-native-segmented-control/segmented-control.
SliderA slider compatible with @react-native-community/slider.

Universal

ComponentDescription
BottomSheetA modal sheet that slides up from the bottom of the screen.
ButtonA pressable button with multiple visual variants.
CheckboxA toggle control that represents a checked or unchecked state.
CollapsibleA labelled tappable header that toggles visibility of its content.
ColumnA vertical layout container for universal @expo/ui components.
FieldGroupA scrollable container of grouped settings-style rows.
HostA cross-platform Host component that wraps universal @expo/ui content.
IconA platform-native icon — SF Symbol on iOS, Material Symbol on Android.
ListA virtualized vertical container of rows, paired with a tappable ListItem primitive.
PickerA single-selection input with menu and wheel appearances.
RNHostViewA cross-platform component for hosting React Native views inside @expo/ui views.
RowA horizontal layout container for universal @expo/ui components.
ScrollViewA scrollable container that supports vertical or horizontal scrolling.
SliderA control for selecting a value from a continuous or stepped range.
SpacerA layout spacer that produces empty space between siblings.
SwitchA toggle control that switches between on and off states.
TextA component for displaying styled text content.
TextInputA text input backed by native SwiftUI and Jetpack Compose components, with a React Native-compatible API.

Sources

The original Expo docs for this page:

  • Expo UI (source-of-truth/versions/v57.0.0/sdk/ui.md)

On this page