Skip to content

dungngminh/simutil

Repository files navigation

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 is written with Nocterm, 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}.

# ~/.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.

Installation

Binary Install

curl -fsSL https://raw.githubusercontent.com/dungngminh/simutil/main/install.sh | bash

Binary Install (Windows PowerShell)

powershell -ExecutionPolicy Bypass -Command "iwr -useb https://raw.githubusercontent.com/dungngminh/simutil/main/install.ps1 | iex"

Using Homebrew (macOS/Linux)

brew tap dungngminh/simutil
brew install simutil

From pub.dev

dart pub global activate simutil

From source

git clone https://github.com/dungngminh/simutil.git
cd simutil
dart pub get
dart pub global activate --source path .

Then run:

simutil

Supported platforms

  • macOS
  • Linux
  • Windows

Contributing

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

About

Cross platform utility TUI app for launching iOS simulators / Android emulators, discover physical devices, ADB tools and more

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors