Reference for @expo/ui SwiftUI components on iOS covering Host boundaries, modifiers, iOS 26 Liquid Glass, HIG rules, and ObservableState patterns. Use when building iOS-targeted Expo UI code that bridges to SwiftUI.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pproenca-dot-skills-1:expo-uiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Library reference for `@expo/ui/swift-ui` and `@expo/ui/swift-ui/modifiers` — the iOS surface of Expo's native UI bridge. Contains 53 rules across 8 categories, prioritised by cascade impact for agents building Expo apps that render to native SwiftUI views on iOS 26 and earlier.
Library reference for @expo/ui/swift-ui and @expo/ui/swift-ui/modifiers — the iOS surface of Expo's native UI bridge. Contains 53 rules across 8 categories, prioritised by cascade impact for agents building Expo apps that render to native SwiftUI views on iOS 26 and earlier.
Reference these guidelines when:
@expo/ui/swift-ui — pick the right container (Form vs List vs ScrollView), wrap in Host correctly, apply modifiers@expo/ui/swift-ui or @expo/ui/swift-ui/modifiersuseNativeState and worklet writes@expo/ui/jetpack-compose surface has its own conventions@expo/ui exposes a small set; this skill scopes to the platform-specific iOS surfaceexpo-router and expo-router/unstable-native-tabs; this skill covers UI composition only| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Setup & Host Boundaries | CRITICAL | host- |
| 2 | iOS 26 HIG Composition Rules | CRITICAL | hig- |
| 3 | Modifiers System | CRITICAL | mod- |
| 4 | Layout Components | HIGH | layout- |
| 5 | Input & Controls | HIGH | input- |
| 6 | Navigation & Overlays | HIGH | nav- |
| 7 | Display & Feedback | MEDIUM-HIGH | display- |
| 8 | State & Cross-Cutting Patterns | MEDIUM | state- |
host-wrap-all-swiftui-roots — Wrap every SwiftUI subtree in a Hosthost-match-contents — Size Host to its SwiftUI content with matchContentshost-viewport-size-for-form — Use useViewportSizeMeasurement for Form and Listhost-color-scheme-explicit — Pass explicit colorScheme when overriding the systemhost-ignore-safe-area — Use ignoreSafeArea only for full-bleed surfaceshig-glass-effect-container — Group glass siblings inside GlassEffectContainerhig-no-glass-on-glass — Avoid nesting glassEffect on glass surfaceshig-no-stacked-modals — Resolve a sheet before presenting anotherhig-popover-iphone-fallback — Don't use Popover on iPhone — use BottomSheethig-sheet-detents-partial — Include a partial detent for Liquid Glass appearancehig-confirmation-dialog-destructive — ConfirmationDialog + destructive rolehig-tint-only-for-brand — Reserve tint for brand surfaces, not destructivemod-prop-not-style — Modifiers go through the modifiers prop, not RN stylemod-composition-order — Modifier order is meaningful — each wraps the previousmod-import-from-modifiers-subpath — Import from @expo/ui/swift-ui/modifiersmod-frame-vs-fixedsize — frame proposes a size, fixedSize opts out of flexmod-padding-vs-frame — padding for inner space, frame for outer boundsmod-presentation-on-sheet-content — Presentation modifiers attach to sheet contentmod-disabled-prop — Use disabled modifier, don't conditionally rendermod-animation-wraps-trigger — withAnimation wraps state-driven prop changeslayout-hstack-vs-vstack — Pick stack direction by content flowlayout-lazy-stack-for-long-lists — LazyVStack inside ScrollView for long listslayout-form-for-settings — Form adopts iOS grouped chrome automaticallylayout-section-with-header-footer — Use Section header/footer slotslayout-scrollview-axes — Set axes explicitly for horizontal/2D scrolllayout-grid-vs-stack — Grid for column-aligned contentinput-button-role-for-destructive — Set role='destructive' for delete buttonsinput-button-systemimage — Use systemImage SF Symbol for button iconsinput-textfield-observable-state — useNativeState for TextField, not React stateinput-securefield-for-passwords — SecureField for passwords, not TextFieldinput-toggle-on-async — SyncToggle for instant flicks, Toggle for asyncinput-picker-style-via-modifier — pickerStyle modifier picks appearanceinput-date-picker-range — Constrain selectable dates with rangeinput-stepper-bounded — Provide min and max on Steppernav-alert-for-critical-only — Alert for blocking notifications onlynav-context-menu-vs-swipe — ContextMenu or SwipeActions per row, not bothnav-bottom-sheet-via-group — Wrap BottomSheet content in Groupnav-share-link-system — ShareLink for the system share sheetnav-tabview-style-modifier — tabViewStyle modifier picks appearancenav-disclosure-group-collapsible — DisclosureGroup for collapsible sectionsnav-link-not-button-for-urls — Link for URLs, Button for in-app actionsnav-menu-primary-action — onPrimaryAction disambiguates tap from long-pressdisplay-text-markdown — Enable markdownEnabled for inline rich textdisplay-image-system-name — Prefer systemName SF Symbols over uiImagedisplay-chart-data-points — ChartDataPoint arrays drive native axesdisplay-gauge-current-value-label — Provide currentValueLabel for accessibilitydisplay-progress-indeterminate — Undefined value → spinner, 0 → frozen bardisplay-label-icon-vs-title — systemImage for SF Symbols, icon slot for customstate-use-native-state-for-fields — useNativeState for every bridged inputstate-worklet-writes — Update ObservableState from workletsstate-controlled-via-selection-prop — selection or defaultSelection, not bothstate-platform-check-pre-26 — Guard iOS 26-only features with version checkstate-textfield-ref-imperative — TextFieldRef for focus and selectionRead individual reference files for detailed explanations and code examples:
references/{prefix}-{slug}.mdEach rule file contains:
See gotchas.md — append entries as failure points surface during real use.
@expo/ui/jetpack-composeexpo-router directlyreact-hook-form skillnpx claudepluginhub pproenca/dot-skillsGuides building iOS apps in Expo/React Native that conform to Apple Human Interface Guidelines, covering navigation, controls, styling, and interactions for native feel.
Provides iOS-native SwiftUI views like List, Section, Toggle, and Picker in Expo React Native apps for authentic iOS UI, with RNHostView for embedding React Native content.
Uses `@expo/ui/swift-ui` to integrate SwiftUI Views and modifiers into Expo apps (SDK 55). Wraps trees in `Host` and embeds React Native components with `RNHostView`.