Drawer

Edit page

Learn how to use the Drawer layout in Expo Router.


For the complete documentation index, see llms.txt. Use this file to discover all available pages.

A navigation drawer is a common pattern in mobile apps, it allows users to swipe open a menu from a side of their screen to expose navigation options. This menu is also typically toggleable through a button in the app's header.

Installation

In SDK 56 and later, the drawer navigator is bundled in expo-router and uses react-native-drawer-layout under the hood.

On Android and iOS, the drawer requires react-native-reanimated and react-native-worklets to drive its animations. On web, animation is handled by CSS.

To use the drawer navigator, install these dependencies if you do not have them already:

Terminal
npx expo install react-native-reanimated react-native-worklets react-native-gesture-handler

To use drawer navigator, install these dependencies if you do not have them already:

Terminal
npx expo install @react-navigation/drawer react-native-reanimated react-native-worklets react-native-gesture-handler

To use drawer navigator, install these dependencies if you do not have them already:

Terminal
npx expo install @react-navigation/drawer react-native-reanimated react-native-gesture-handler

Usage

Now you can use the Drawer layout to create a drawer navigator.

src/app/_layout.tsx
import { Drawer } from 'expo-router/drawer'; export default function Layout() { return <Drawer />; }

To edit the drawer navigation menu labels, titles and screen options specific screens are required as follows:

src/app/_layout.tsx
import { Drawer } from 'expo-router/drawer'; export default function Layout() { return ( <Drawer> <Drawer.Screen name="index" // This is the name of the page and must match the url from root options={{ drawerLabel: 'Home', title: 'overview', }} /> <Drawer.Screen name="user/[id]" // This is the name of the page and must match the url from root options={{ drawerLabel: 'User', title: 'overview', }} /> </Drawer> ); }