SimUtil

SimUtil

A terminal UI for launching Android Emulators / iOS Simulators
Launch, connect, manage your devices and more — all from the terminal

SimUtil - Terminal UI for iOS Simulators and Android Emulators | Product Hunt

GitHub Repo stars Build GitHub release

Browse your available emulators and simulators side-by-side, launch with custom options and connect to physical devices wirelessly. SimUtil runs on macOS, Linux, and Windows. **iOS Simulator support requires macOS** (Xcode / `simctl`); on Linux and Windows the TUI focuses on Android emulators and devices. Simutil is written with [Nocterm](https://nocterm.dev/), a terminal UI framework for Dart with similar syntax to Flutter.

Simutil Showcase

Simutil Showcase Image

## Features - **One-Key Launch** — Start any device with `Enter`, no need to open Android Studio or Xcode - **Android Launch Options** — Provide launch option for Android Emulators: Normal, Cold Boot, No Audio, or Cold Boot + No Audio,... - **Shutdown device** — Shutdown simulators/emulators. - **Logcat** — View logcat output of Android emulators / devices, support filtering. - **ADB Tools Built-in** — Connect to physical Android devices wirelessly: - Connect via IP address - Pair with 6-digit code (Android 11+) - QR code pairing (Android 11+) - **Custom Plugins** — Add your own external tools (scrcpy, Maestro, etc.) via a YAML file, no code changes needed. Press `p` to pick a plugin and a command to run on the selected device. - **Edit Config** — Press `e` to open `~/.simutil/settings.yaml` in your default editor (macOS, Linux, Windows). ## Custom Plugins SimUtil can run external shell-command tools (scrcpy, Maestro, custom scripts, …) defined in the `plugins:` section of `~/.simutil/settings.yaml` — no code changes needed. A default file (with `theme`, `last_selected_device_id`, and `scrcpy`) is created automatically on first launch. Each plugin groups one or more **commands**. In the app, press `p` on a selected device to choose a plugin, then a command. Press `e` to edit the config file. A command can also define a single-key `shortcut` to run it directly. Commands are filtered to the selected device, and `args` support template variables like `{device.id}` and `{device.name}`. ```yaml # ~/.simutil/settings.yaml theme: dark last_selected_device_id: ~ plugins: - id: scrcpy label: scrcpy description: Screen mirroring and control for Android availability: command: scrcpy args: [--version] commands: - id: mirror label: Screen Mirror command: scrcpy args: [-s, "{device.id}"] platforms: [android] # android | ios; empty = any requires_running: true # only show when the device is running mode: detached # detached (default) | inherit shortcut: s # optional single key to run directly ``` See the full reference — all fields, template variables, run modes, availability probes, shortcuts, examples, and troubleshooting — in **[docs/plugins.md](docs/plugins.md)**. ## Installation ### Binary Install ```bash curl -fsSL https://raw.githubusercontent.com/dungngminh/simutil/main/install.sh | bash ``` ### Binary Install (Windows PowerShell) ```powershell powershell -ExecutionPolicy Bypass -Command "iwr -useb https://raw.githubusercontent.com/dungngminh/simutil/main/install.ps1 | iex" ``` ### Using Homebrew (macOS/Linux) ```bash brew tap dungngminh/simutil brew install simutil ``` ### From pub.dev ```bash dart pub global activate simutil ``` ### From source ```bash git clone https://github.com/dungngminh/simutil.git cd simutil dart pub get dart pub global activate --source path . ``` Then run: ```bash simutil ``` ## Supported platforms SimUtil itself runs on macOS, Linux, and Windows. Feature support depends on the host OS: | Host OS | Android emulators & devices | iOS simulators & devices | | ------- | --------------------------- | ------------------------ | | macOS | Yes | Yes (requires Xcode) | | Linux | Yes | No | | Windows | Yes | No | iOS support depends on Apple’s tools (`xcrun simctl` for simulators, `xcrun devicectl` for physical devices), which are only available on macOS. On Linux and Windows, the iOS panels indicate they are not supported; Android launch, ADB tools, Logcat, and plugins still work. ## Contributing ```bash git clone https://github.com/dungngminh/simutil.git cd simutil dart pub get dart run bin/simutil.dart # Run locally dart --enable-vm-service bin/simutil.dart # Run with hot reload ``` 1. Fork this repository 2. Create a branch and make your changes 3. Open a Pull Request ## License MIT — see [LICENSE](LICENSE)