Device Panes

Show iOS simulators, Android emulators and Android phones in a pane, run your app on them, and let agents use them.

A device pane shows an iOS simulator, an Android emulator or a connected Android phone, next to your service logs and agents. Xcode, Simulator.app and Android Studio do not have to be open, but their tools have to be installed: Xcode with its simulators for iOS, the Android SDK for Android. Several panes can each show a device. Physical iPhones are not supported.

Open a device pane

In an empty pane, choose Device. The list shows iOS simulators and then Android devices, with a green dot on the ones already running. Starting a service that runs an app on a device also opens its device pane (see Running your app).

Using the device

  • Click to tap and drag to move a finger. A two-finger trackpad scroll moves a finger, so lists scroll on the device.
  • iOS: a click just outside the edge of the screen starts a swipe in from that edge, for example up from the bottom to go home.
  • Android: a right click goes back, and ⌘V pastes the clipboard of your Mac on the device.
  • Keys go to the device while the pane has the keyboard. ⌘ shortcuts stay with Highwind.

Pane header

  • The device name, with a menu to change the device.
  • Start or stop the linked service, and the link menu to link a different one.
  • Hot reload and hot restart when the linked service is a running flutter run, and Reload when it runs Metro.
  • Rotate left, rotate right and Home. Android has Back, Home and Recents.
  • The settings menu: Appearance, Text Size, Location, Status Bar (Clean sets 9:41 with full signal and battery, for screenshots), and a submenu per installed app with Restart, Grant All Permissions, Reset Permissions and Uninstall. iOS adds Send Test Notification, and Android adds Clear Data.

Running your app

A device pane shows a device. The linked service runs the app, with its own run command. Highwind reads these commands, including through npm, yarn, pnpm and bun scripts in package.json:

  • Flutter: flutter run -d <device>
  • React Native: react-native run-ios --simulator <name> or --udid <udid>, and react-native run-android --device <serial>
  • Expo: expo run:ios and expo run:android with --device, and expo start --ios or --android
  • Capacitor: cap run ios or cap run android with --target <id>
  • Any other command with --device-id, --device, --udid, --simulator, --emulator, --target or --serial

A native Xcode or Gradle app runs with highwind-run. Highwind installs it to ~/.highwind/bin, and adding the project folder fills it in as the service command, so nothing is added to your repository.

highwind-run ios --udid <udid>
highwind-run android --device <AVD name or serial>

It finds the project, builds it, installs the app, starts it and shows its log. Stopping the service stops the app.

When the service starts, a device that is shut down is booted first, and the command waits for it. The device appears above the service pane in the same column, linked to the service. The first start of a service you just added makes a view named after it.

Choosing a device

A service's device is part of its run command. Pick one from the menu in the device pane, the phone button in the service pane header, or the Device field in Add Service and Edit Service. Highwind edits the command for you. A pick boots nothing by itself, and a running service restarts on the new device.

  • A device set inside a package.json script cannot be changed from a menu. Edit the script.
  • flutter run -d and React Native need a device that is running, so a stopped emulator is disabled in their list with "Boot it first".
  • To run on two devices at once, choose Run a Copy on Another Device in the device menu of a linked pane. It adds a second service and a new column with its device pane and service pane.

iPhone Duo

The foldable simulator gets a bar below the screen with Closed, Half Open and Open, and rotate buttons. A booted Duo uses about 11 GB of memory on Xcode 27.2.

Devices left running

A device Highwind started shuts down when nothing has used it for the time set in Settings → Unused Devices, which can be turned off. A device started by Xcode, Android Studio or a terminal outside Highwind is never shut down. If Highwind quits, the devices it started shut down 10 minutes later unless it has started again. The Process Manager (⇧⌘M) lists every running device, with Shut Down, and Keep Running for a device Highwind started.

Crashes

While a pane shows a running device, an app crash on it sends a notification.

Agents using the device

Agents connected through MCP can tap, swipe and type, take screenshots, read the accessibility tree, change device settings, manage apps, and read the device log and crash reports. See Device tools in MCP Integration. These tools work without the device being shown in a pane.