---
modificationDate: May 06, 2026
title: DevMenu
description: A library that provides a developer menu for debug builds.
sourceCodeUrl: 'https://github.com/expo/expo/tree/sdk-56/packages/expo-dev-menu'
packageName: 'expo-dev-menu'
platforms: ['android', 'ios', 'tvos']
---

<AgentInstructions>

## Submitting Feedback

If this page contains errors, outdated information, or gaps that blocked you from completing a task, report it so the docs can be improved:

curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/versions/v56.0.0/sdk/dev-menu/","feedback":"🤖 Agent feedback: <specific, actionable description>"}'

Only submit when you have something specific and actionable to report.

</AgentInstructions>

# Expo DevMenu

A library that provides a developer menu for debug builds.
Android, iOS, tvOS

> For the complete documentation index, see [llms.txt](/llms.txt). Use this file to discover all available pages.

The `expo-dev-menu` can be used as a **standalone library** in any Expo project. It is especially useful in [brownfield apps](/versions/latest/sdk/brownfield) that don't need the full [`expo-dev-client`](/versions/latest/sdk/dev-client) launcher interface.

`expo-dev-menu` provides a developer menu UI for React Native apps that includes:

-   A powerful and extensible menu UI accessible via shake gesture or three-finger long press
-   Quick access to common development actions
-   Support for custom menu items to extend functionality

## Installation

```sh
npx expo install expo-dev-menu
```

If you are installing this in an [existing React Native app](/bare/overview), make sure to [install `expo`](/bare/installing-expo-modules) in your project.

## Usage

Once installed, the developer menu is available in your debug builds. You can open it by:

-   **Shake gesture**: Shake your device
-   **Three-finger long press**: Long press with three fingers on the screen
-   **Programmatically**: Call `DevMenu.openMenu()` from your code

## Extending the dev menu

The dev menu can be extended to include extra buttons by using the `registerDevMenuItems` API:

```tsx
import { registerDevMenuItems } from 'expo-dev-menu';

const devMenuItems = [
  {
    name: 'My Custom Button',
    callback: () => console.log('Hello world!'),
  },
];

registerDevMenuItems(devMenuItems);
```

This will create a new section in the dev menu that includes the buttons you have registered:

> **Note:** Subsequent calls of `registerDevMenuItems` will override all previous entries.

## Using with expo-dev-client

If you are using [development builds](/develop/development-builds/introduction), install `expo-dev-client` instead. It includes `expo-dev-menu` along with additional development tools:

-   A configurable launcher UI for switching between development servers
-   Improved debugging tools
-   Support for loading updates from [EAS Update](/eas-update/introduction)

```sh
npx expo install expo-dev-client
```

For more information, check the [`expo-dev-client` reference](/versions/latest/sdk/dev-client).

## API

```js
import * as DevMenu from 'expo-dev-menu';
```

## Methods

### `DevMenu.closeMenu()`

Supported platforms: Android, iOS, tvOS.

A method that closes development client menu when called.

Returns: `void`

### `DevMenu.hideMenu()`

Supported platforms: Android, iOS, tvOS.

A method that hides development client menu when called.

Returns: `void`

### `DevMenu.openMenu()`

Supported platforms: Android, iOS, tvOS.

A method that opens development client menu when called.

Returns: `void`

### `DevMenu.registerDevMenuItems(items)`

Supported platforms: Android, iOS, tvOS.

| Parameter | Type |
| --- | --- |
| `items` | [ExpoDevMenuItem[]](#expodevmenuitem) |

  

A method that allows to specify custom entries in the development client menu.

Returns: `Promise<void>`

## Types

### `ExpoDevMenuItem`

Supported platforms: Android, iOS, tvOS.

An object representing the custom development client menu entry.

| Property | Type | Description |
| --- | --- | --- |
| callback | `() => void` | Callback to fire, when user selects an item. |
| name | `string` | Name of the entry, will be used as label. |
| shouldCollapse(optional) | `boolean` | A boolean specifying if the menu should close after the user interaction. Default: `false` |
