Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Official Expo team skills for building, deploying, and debugging Expo apps — fine-tuned for Claude Code.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/native-tabs.md
1# Native Tabs Migration (SDK 55)23In SDK 55, `Label`, `Icon`, `Badge`, and `VectorIcon` are now accessed as static properties on `NativeTabs.Trigger` rather than separate imports.45## Import Changes67```tsx8// SDK 53/549import {10NativeTabs,11Icon,12Label,13Badge,14VectorIcon,15} from "expo-router/unstable-native-tabs";1617// SDK 55+18import { NativeTabs } from "expo-router/unstable-native-tabs";19```2021## Component Changes2223| SDK 53/54 | SDK 55+ |24| ---------------- | ----------------------------------- |25| `<Icon />` | `<NativeTabs.Trigger.Icon />` |26| `<Label />` | `<NativeTabs.Trigger.Label />` |27| `<Badge />` | `<NativeTabs.Trigger.Badge />` |28| `<VectorIcon />` | `<NativeTabs.Trigger.VectorIcon />` |29| (n/a) | `<NativeTabs.BottomAccessory />` |3031## New in SDK 553233### BottomAccessory3435New component for Apple Music-style mini players on iOS +26 that float above the tab bar:3637```tsx38<NativeTabs>39<NativeTabs.BottomAccessory>40{/* Content above tabs */}41</NativeTabs.BottomAccessory>42<NativeTabs.Trigger name="(index)">43<NativeTabs.Trigger.Label>Home</NativeTabs.Trigger.Label>44</NativeTabs.Trigger>45</NativeTabs>46```4748On Android and web, this component will render as a no-op. Position a view absolutely above the tab bar instead.4950### Icon `md` Prop5152New `md` prop for Material icon glyphs on Android (alongside existing `drawable`):5354```tsx55<NativeTabs.Trigger.Icon sf="house" md="home" />56```5758## Full Migration Example5960### Before (SDK 53/54)6162```tsx63import {64NativeTabs,65Icon,66Label,67Badge,68} from "expo-router/unstable-native-tabs";6970export default function TabLayout() {71return (72<NativeTabs minimizeBehavior="onScrollDown">73<NativeTabs.Trigger name="(index)">74<Label>Home</Label>75<Icon sf="house.fill" />76<Badge>3</Badge>77</NativeTabs.Trigger>78<NativeTabs.Trigger name="(settings)">79<Label>Settings</Label>80<Icon sf="gear" />81</NativeTabs.Trigger>82<NativeTabs.Trigger name="(search)" role="search">83<Label>Search</Label>84</NativeTabs.Trigger>85</NativeTabs>86);87}88```8990### After (SDK 55+)9192```tsx93import { NativeTabs } from "expo-router/unstable-native-tabs";9495export default function TabLayout() {96return (97<NativeTabs minimizeBehavior="onScrollDown">98<NativeTabs.Trigger name="(index)">99<NativeTabs.Trigger.Label>Home</NativeTabs.Trigger.Label>100<NativeTabs.Trigger.Icon sf="house.fill" md="home" />101<NativeTabs.Trigger.Badge>3</NativeTabs.Trigger.Badge>102</NativeTabs.Trigger>103<NativeTabs.Trigger name="(settings)">104<NativeTabs.Trigger.Label>Settings</NativeTabs.Trigger.Label>105<NativeTabs.Trigger.Icon sf="gear" md="settings" />106</NativeTabs.Trigger>107<NativeTabs.Trigger name="(search)" role="search">108<NativeTabs.Trigger.Label>Search</NativeTabs.Trigger.Label>109</NativeTabs.Trigger>110</NativeTabs>111);112}113```114115## Migration Checklist1161171. Remove `Icon`, `Label`, `Badge`, `VectorIcon` from imports1182. Keep only `NativeTabs` import from `expo-router/unstable-native-tabs`1193. Replace `<Icon />` with `<NativeTabs.Trigger.Icon />`1204. Replace `<Label />` with `<NativeTabs.Trigger.Label />`1215. Replace `<Badge />` with `<NativeTabs.Trigger.Badge />`1226. Replace `<VectorIcon />` with `<NativeTabs.Trigger.VectorIcon />`123124- Read docs for more info https://docs.expo.dev/versions/v55.0.0/sdk/router-native-tabs/125