expo-ui

par expo

Framework (OSS). Construisez une interface native avec le package @expo/ui : du vrai SwiftUI sur iOS et Jetpack Compose sur Android rendus depuis React dans une application Expo ou React Native. Couvre les composants universels multiplateformes (Host, Column, Row, Button, Text, List, et plus importés depuis @expo/ui), les remplacements directs pour les bibliothèques populaires de la communauté React Native (BottomSheet, DateTimePicker, Slider, Menu, etc.), et les composants spécifiques à la plateforme SwiftUI (@expo/ui/swift-ui, iOS uniquement) et Jetpack Compose...

npx skills add https://github.com/expo/skills --skill expo-ui

Expo UI (@expo/ui)

@expo/ui renders real native UI from React: SwiftUI on iOS, Jetpack Compose on Android. Start with its universal components (one tree for iOS, Android, and web) and drop to platform-specific SwiftUI/Jetpack Compose only when the universal layer falls short. It also ships drop-in replacements for migrating off RN community UI libraries.

These instructions track the latest Expo SDK. The universal layer requires SDK 56+. Drop-in replacements and the platform-specific layers also exist on SDK 55. For component details on a specific SDK, refer to the Expo UI docs for that version.

Installation

npx expo install @expo/ui

On SDK 56, @expo/ui works in Expo Go, so npx expo start runs it directly — no custom build required. On older SDKs, build a dev client first (npx expo run:ios / npx expo run:android).

Every @expo/ui tree — universal or platform-specific — must be wrapped in Host.

Choosing an approach (read this first)

Work down this list and stop at the first layer that meets the need:

  1. Universal components — start here. Import from the @expo/ui root. One component tree runs unmodified on iOS, Android, and web from a single source (Compose on Android, SwiftUI on iOS, react-native-web/react-dom on web). No platform file splits. → ./references/universal.md

  2. Platform-specific (SwiftUI / Jetpack Compose). Import from @expo/ui/swift-ui or @expo/ui/jetpack-compose. Use only when the universal layer is missing a component or modifier you need, or when you need platform-specific behavior or optimization. Downside: you write two trees and split them into .ios.tsx / .android.tsx files (or branch on Platform.OS) — more code to maintain.

    @expo/ui/swift-ui is iOS-only. @expo/ui/jetpack-compose is Android-only. Importing either in a file that runs on the other platform will crash at runtime with "Unable to get view config" errors. Isolate platform-specific trees in .ios.tsx / .android.tsx files placed in components/ (never inside app/ — Expo Router does not support platform extensions for route files), or guard with Platform.OS in a regular route file. Host must always be imported from @expo/ui (the universal package root), not from the platform-specific sub-packages. → ./references/swift-ui.md and ./references/jetpack-compose.md

Already using an RN community UI library? @expo/ui also ships drop-in replacements — API-compatible swaps for popular libraries (@gorhom/bottom-sheet, @react-native-community/datetimepicker, and more), imported from @expo/ui/community/<name>. This is a migration side-path for replacing an existing dependency, not a step in the universal-vs-platform decision above. → ./references/drop-in-replacements.md

References

Consult these resources as needed:

references/
  universal.md             Universal @expo/ui components and when to use them (SDK 56+)
  drop-in-replacements.md  API-compatible replacements for RN community UI libraries
  swift-ui.md              Platform-specific iOS UI: @expo/ui/swift-ui components, modifiers, RNHostView, useNativeState
  jetpack-compose.md       Platform-specific Android UI: @expo/ui/jetpack-compose components, modifiers, LazyColumn caveat, icons, useNativeState

Submitting Feedback

If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:

npx --yes submit-expo-feedback@latest --category skills --subject "expo-ui" "<actionable feedback>"

Only submit when you have something specific and actionable to report. Include as much relevant context as possible.

Plus de skills de expo

expo-upgrade
expo
Framework (OSS). Directives pour la mise à jour des versions du SDK Expo et la résolution des problèmes de dépendances.
apidevelopmentofficial
expo-data-fetching
expo
Framework (OSS). Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).
official
android-e2e-testing
expo
Testez les fonctionnalités d'Expo Router sur des émulateurs Android à l'aide d'ADB. À utiliser après avoir implémenté des fonctionnalités Android natives ou lors de la vérification du comportement de l'interface utilisateur sur Android.
official
expo-dev-client
expo
Construisez des clients de développement Expo personnalisés pour tester du code natif sur des appareils physiques via EAS Build ou localement. Nécessaire uniquement lors de l'utilisation de modules natifs personnalisés, de cibles Apple (widgets, app clips) ou de code natif tiers non présent dans Expo Go ; essayez d'abord Expo Go avec npx expo start. Prend en charge les builds cloud avec soumission automatique à TestFlight ou les builds locales sur votre machine, produisant des fichiers .ipa (iOS) ou .apk/.aab (Android). Nécessite une configuration eas.json avec un profil de développement qui définit...
official
expo-tailwind-setup
expo
Style universel Tailwind CSS v4 pour les applications Expo sur iOS, Android et Web. Intègre Tailwind CSS v4 avec react-native-css et NativeWind v5 via le transformateur Metro, éliminant le besoin de configuration Babel. Fournit une bibliothèque de composants réutilisables enveloppés en CSS (View, Text, ScrollView, Pressable, TextInput, Image, Link) qui appliquent les styles className aux éléments natifs. Prend en charge le style spécifique à la plateforme via les requêtes média CSS, les variables de thème personnalisées via les blocs @theme, et la sémantique Apple...
official
android-jetpack-compose
expo
À utiliser lors de la création d'interfaces utilisateur Android avec Jetpack Compose, de la gestion d'état avec remember/mutableStateOf, ou de l'implémentation de motifs d'interface déclaratifs.
official
swiftui-expert-skill
expo
Écrire, réviser ou améliorer du code SwiftUI en suivant les meilleures pratiques pour la gestion d'état, la composition de vues, les performances, les API spécifiques à macOS et iOS 26+ Liquid…
official
eas-update-insights
expo
Vérifier l’état des mises à jour EAS publiées : taux de crash, nombres d’installations/lancements, utilisateurs uniques, taille des charges utiles, et la répartition entre utilisateurs embarqués et OTA par…
official