# Expo UI

> @expo/ui SwiftUI and Compose primitives

**Subcategory:** Expo  
**License:** MIT  
**Source:** https://github.com/expo/skills/blob/main/plugins/expo/skills/expo-ui/SKILL.md

---

## When it is useful

Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

## The Catch

@expo/ui SwiftUI/Compose controls; not FlashList; not expo-native-ui styling.
