Bottom Tabs

Native Expo Router tabs for switching between the main sections of your app.

Installation

Replace the <NativeTabs.Trigger/> entries with triggers that match your project's tab routes.


@/app/(tabs)/_layout.tsx
import { Stack } from 'expo-router';
import { NativeTabs } from 'expo-router/unstable-native-tabs';

import { useColorScheme } from '@/lib/useColorScheme';

export default function TabLayout() {
  const { colors } = useColorScheme();

  return (
    <>
      <Stack.Screen options={{ title: 'Tabs' }} />
      <NativeTabs
        tintColor={colors.primary}
        iconColor={{ default: colors.grey2, selected: colors.primary }}
        labelStyle={{
          default: { color: colors.grey2 },
          selected: { color: colors.primary },
        }}
        badgeBackgroundColor={colors.destructive}
        badgeTextColor={colors.primaryForeground}
        disableTransparentOnScrollEdge
        minimizeBehavior="onScrollDown">
        <NativeTabs.Trigger name="index">
          <NativeTabs.Trigger.Icon sf="newspaper" md="newspaper" />
          <NativeTabs.Trigger.Label>News</NativeTabs.Trigger.Label>
          <NativeTabs.Trigger.Badge>3</NativeTabs.Trigger.Badge>
        </NativeTabs.Trigger>
        <NativeTabs.Trigger name="for-you">
          <NativeTabs.Trigger.Icon
            sf={{ default: 'star', selected: 'star.fill' }}
            md={{ default: 'star_border', selected: 'star' }}
          />
          <NativeTabs.Trigger.Label>For You</NativeTabs.Trigger.Label>
        </NativeTabs.Trigger>
      </NativeTabs>
    </>
  );
}

Props

NativeTabs

This component uses Expo Router's NativeTabs. The table below highlights the props used by this template.

NativeTabs

PropTypeDefaultDescription
tintColorColorValueSets the selected tab tint color.
iconColorColorValue | { default?: ColorValue; selected?: ColorValue }Sets the default and selected icon colors.
labelStyleNativeTabsLabelStyle | { default?: NativeTabsLabelStyle; selected?: NativeTabsLabelStyle }Sets the default and selected label text styles.
badgeBackgroundColorColorValueSets the default badge background color.
disableTransparentOnScrollEdgebooleanfalseKeeps the iOS tab bar opaque when content is scrolled to an edge.
minimizeBehavior'automatic' | 'never' | 'onScrollDown' | 'onScrollUp''automatic'Controls iOS 26 tab bar minimization behavior.

NativeTabs.Trigger

Each trigger can contain NativeTabs.Trigger.Icon, NativeTabs.Trigger.Label, and NativeTabs.Trigger.Badge.

PropTypeDefaultDescription
namestringThe route segment this tab opens. It must match the file or group route name.
roleNativeTabsTabBarItemRoleApplies a platform semantic role such as search, favorites, bookmarks, or more.
hiddenbooleanfalseHides the tab from the bar. Hidden tabs cannot be navigated to.
disablePopToTopbooleanfalsePrevents iOS from popping the tab stack to its root when reselecting the active tab.
disableScrollToTopbooleanfalsePrevents iOS from scrolling the active tab to the top when reselected.