A Visual Studio Code extension (and compatible editors such as Cursor) that lists iOS simulators and Android emulators and runs your React Native project on the device you choose.
Requirements
A React Native project opened as a workspace folder (File → Open Folder).
macOS with Xcode and xcrun simctl for iOS.
Android SDK with emulator and adb on your PATH (or ANDROID_HOME / ANDROID_SDK_ROOT set).
Installation
Open the Extensions view (Ctrl+Shift+X / Cmd+Shift+X).
Search for RN Easy Emulator and install.
To install from a .vsix manually: Extensions → ⋯ → Install from VSIX….
Open your React Native app’s root folder in VS Code.
In the Activity Bar (icons on the left), click RN Emulator (phone icon).
In the Simulators view you’ll see iOS and Android with available devices.
For each simulator/emulator:
Play — runs the project on that device (or boots then runs if it is off). If you do not set a custom command, the extension detects Expo vs bare from package.json. Android always targets the chosen emulator with ANDROID_SERIAL=<adb serial> (no --device emulator-5554), then expo run:android or react-native run-android.
Restart (while the device is running) — stops the current build task for that device and starts a fresh run.
Power — boots or shuts down the iOS simulator or Android AVD.
The Refresh button in the view title bar reloads the list.
If nothing is selected and you run Run project on this emulator from the Command Palette, the extension asks you to pick an item in the tree.
Settings
In Settings, search for RN Easy Emulator or edit settings.json:
Key
Description
rnEasyEmulator.iosRunCommand
Optional override. When unset: Expo → npx expo run:ios --device {{udid}}; bare → npx react-native run-ios --udid {{udid}}.
rnEasyEmulator.androidRunCommand
Optional override. When unset: Expo and bare both use ANDROID_SERIAL={{deviceId}} + expo run:android or react-native run-android (no --device with the adb serial).
rnEasyEmulator.androidSdkHome
Android SDK root. When empty, ANDROID_HOME / ANDROID_SDK_ROOT is used.
rnEasyEmulator.shellPath
Shell for commands (e.g. /bin/zsh). When empty, the system default applies.