---
title: Xcode 27 replaced Simulator.app. Expo CLI and expo-device-hub already know.
authors: Krystof Woldrich
published: October 20, 2026
categories: Development, Product
---

You update Xcode. You run `npx expo start`, press `i`, and nothing happens. `Simulator.app` is gone. You find the device UDID, boot it by hand with `simctl`, run the build straight at it, and lose fast refresh in the process. That was Xcode 27 week for a lot of people, and the r/expo thread titled "[Updated Xcode and iOS Simulator App can't be found](https://www.reddit.com/r/expo/comments/1wh1qwt/updated_xcode_and_ios_simulator_app_cant_be_found/)" says the rest.

Expo CLI now detects Xcode 27's Device Hub, boots simulators through it, and focuses the right device using its `devices://` deep link. Press `i` and it works the way it did with `Simulator.app`.

SDK 58 also introduces [`expo-device-hub`](https://github.com/expo/expo-device-hub), a dev tools plugin that turns your browser into a device dashboard. It works with SDK 57 and later. Install it, run `npx expo start`, and you get live streams of your iOS simulators and Android emulators, with tap, swipe, and type controls, boot and shutdown, CPU, memory, and network graphs while your app is running, and toggles for appearance, Liquid Glass, text size, and accessibility settings. It is MIT licensed, and it runs on your machine.

## What changed in Xcode 27?

Xcode 27 removed `Simulator.app` and replaced it with [Device Hub](https://developer.apple.com/documentation/xcode/device-hub), a new app for managing simulated and physical devices. Any tool that opened `Simulator.app` by name stopped working. Expo CLI was one of those tools.

The core fix landed in two parts. First, Expo CLI checks for both `Simulator.app` and Device Hub, and treats Device Hub as a valid target when `Simulator.app` is missing. Second, when the CLI boots a device and knows its UDID, it opens `devices://device/open?id=<udid>` so Device Hub brings that device to the front. Without a UDID, it falls back to `open -a DeviceHub`. The original Device Hub support could boot a device but had no way to focus it, and the deep link closed that gap.

SDK 58 adds one more fix. Xcode 27 lists simulators in `devicectl` output next to physical devices, so `expo run:ios` tried to install onto a simulator as if it were hardware and failed at the install step. Expo CLI now ignores the simulators that `devicectl` reports.

You do not configure any of this. Upgrade to SDK 58, and `expo start`, `expo run:ios`, and `expo start --ios` handle Xcode 27. Device Hub detection and focusing also shipped in Expo CLI for SDK 56 and SDK 57.

## What expo-device-hub adds

Device Hub solves the "where did my simulator go" problem. `expo-device-hub` is about what you do once it is booted.

It is an [Expo dev tools plugin](https://docs.expo.dev/debugging/devtools-plugins/). When it is installed, `npx expo start` prints a link:

```javascript
› Expo Device Hub: http://localhost:8081/_expo/plugins/expo-device-hub
```

Open that link and you get a dashboard in your browser with your local simulators and emulators. You can:

- Watch live video of each iOS simulator and Android emulator, and interact with them: tap, swipe, and type.
- Boot and shut down devices without leaving the browser.
- Read CPU, memory, and network graphs. They show up only while your app is running.
- Toggle appearance (light and dark), Liquid Glass, text size, and accessibility settings from a sidebar, instead of digging through Settings on the device.

The streaming layer builds on the open source `serve-sim` and `serve-emu` projects, which are now maintained in the same repo (`serve-sim` is published to npm as `@expo/serve-sim`). Both iOS and Android offer low latency, high bitrate H.264 streaming for local use and WebRTC for remote streaming. Depending on the platform and the available hardware, other options (MJPEG, VP8, VP9) are available for the best experience. A shared `@expo/hub-client` package wraps both platforms behind the same hooks so the UI does not care which platform it is looking at.

The same client powers in-browser device streaming on [expo.dev](https://expo.dev). If you want this experience without a local Xcode or Android Studio install, that is what [Expo Simulators](https://expo.dev/services/simulators), our cloud simulators service, is for. It is in beta for existing Expo customers and not generally available yet. `expo-device-hub` is the local half of that story, and it stays free and open source. It also powers the Device panel in T3 Code, which [documents expo-device-hub](https://github.com/pingdotgg/t3code/blob/main/docs/internals/devices.md) as the tool that streams its simulators and emulators.

## How to enable it

```bash
npx expo install expo-device-hub
npx expo start
```

Then open the `Expo Device Hub` link the CLI prints. You can also press `Shift + M` in the terminal to see all dev tools plugins for the project.

To use the dashboard without a running Expo project, start it as a standalone server with `npx expo-device-hub`.

The plugin is JavaScript only, so it works with development builds and Expo Go. If you add it to a shared repo, it can live in `devDependencies`.

## Limitations

- `expo-device-hub` is pre-1.0. Expect changes to the dashboard between releases.
- iOS simulator management uses `simctl`, so that part needs macOS with Xcode. Android emulator management works anywhere the Android SDK tools (`emulator`, `adb`) are installed, including Windows.
- Physical iOS device streaming is not in this release. It is on the roadmap for a later version, and it depends on iOS 27 capabilities.
- Expo CLI still checks for `Simulator.app` before Device Hub. On Xcode 26 nothing changes.
- There is no docs page for the plugin yet. The [GitHub README](https://github.com/expo/expo-device-hub) is the reference for now.

## Feedback

If Device Hub detection misses your setup, or the dashboard does something odd with a particular device, open an issue on [expo/expo-device-hub](https://github.com/expo/expo-device-hub/issues) or find us in the [Expo Discord](https://chat.expo.dev/).