System Requirements and Dependencies
Understand the baseline and feature-specific tools checked by ansight doctor, and how to diagnose a development machine.
CLI v0.23.1
Ansight can run with a small baseline installation. Extra tools are needed only
for the features that use them. ansight doctor inspects the current machine
and reports that distinction directly:
The distributed CLI is self-contained. Running ansight does not require a
system .NET runtime, DOTNET_ROOT, or dotnet on PATH. The .NET SDK and
diagnostic tools are optional dependencies used only by .NET profiling workflows.
On Linux, self-contained still relies on the operating system’s normal native
runtime libraries, including glibc, ICU, OpenSSL, and zlib. Extremely minimal
container images may omit them.
CLI-first. The Ansight CLI is self-contained. Platform SDKs and feature tools extend it; they are not prerequisites for starting the host.
For a minimal Linux container, use Microsoft’s .NET runtime-dependencies image as the base; it contains native prerequisites but not the .NET runtime:
FROM mcr.microsoft.com/dotnet/runtime-deps:10.0
COPY ansight /usr/local/bin/ansight
RUN chmod +x /usr/local/bin/ansight && ansight --version
Add the Android SDK, ADB/emulator, Node.js, Appium, and the required Appium driver to that image only when the runner needs Android UI automation.
ansight doctor
ansight doctor --json
Use the text output for setup. Use --json in scripts or support bundles; its
versioned ansight.doctor/v1 result includes every check, whether it is
required, its status, message, and resolved path.
Baseline requirements
These checks must pass for Doctor to report a healthy host.
| Requirement | Why Ansight needs it | What Doctor checks |
|---|---|---|
| Writable data directory | Stores host state, sessions, captures, quality history, and local configuration. | The directory exists or can be created, and a write/delete probe succeeds. |
| Protected credential storage | Protects account credentials and test secrets. | An OS vault is active, or the encrypted file store has a valid externally protected key and safe permissions. |
The default credential provider is the macOS Keychain, Linux Secret Service,
or Windows DPAPI where available. A headless machine without an OS vault must
use the protected file store with a master key supplied through a configured
key file, a systemd credential, or ANSIGHT_SECRET_MASTER_KEY. Do not keep the
key beside the encrypted store or grant group/other access to it on Unix.
Feature-specific dependencies
Missing optional tools produce an amber result. Ansight still works, but the corresponding feature is unavailable or reduced. The order below reflects how much of the general mobile workflow each dependency unlocks. A tool for a platform you do not target is not important for that machine.
| Priority | Dependency | Needed for | Doctor check or setup |
|---|---|---|---|
| 1 | Android SDK and ADB | Android device discovery, app lifecycle, logs, screenshots, location, and input. | Default SDK roots are ~/Library/Android/sdk on macOS, ~/Android/Sdk on Linux, and %LOCALAPPDATA%\Android\Sdk on Windows; ADB is beneath platform-tools. Override with ANSIGHT_ADB_PATH or --adb-path. |
| 2 | Full Xcode installation | iOS Simulator discovery/lifecycle through xcrun simctl, and physical-device lifecycle through xcrun devicectl. | Default: /Applications/Xcode.app/Contents/Developer, with /usr/bin/xcrun. Override with ANSIGHT_XCODE_PATH or --xcode-path. |
| 3 | Android Emulator | Listing and starting Android virtual devices. | Default: <Android SDK>/emulator/emulator on macOS/Linux or emulator.exe on Windows. The SDK root follows ADB resolution. |
| 4 | Node.js | Trusted workspace tasks, triggers, and custom sanitizers written in JavaScript or TypeScript. | Default: an executable named node on PATH. Common paths are /opt/homebrew/bin/node, /usr/local/bin/node, /usr/bin/node, and %ProgramFiles%\nodejs\node.exe. Override the host with --node-path or ANSIGHT_NODE_PATH. |
| 5 | SkiaSharp native runtime | Screenshot evidence, image comparison, and screenshot-backed UI actions. | Default: bundled with the installed Ansight CLI version. On macOS, libSkiaSharp.dylib is beside ansight; Linux and Windows native assets are carried by the self-contained CLI bundle. |
| 6 | Tesseract OCR | Local screenshot text detection and PII redaction. | Default: tesseract or tesseract.exe on PATH; common paths are Homebrew’s bin, /usr/bin/tesseract, and C:\Program Files\Tesseract-OCR\tesseract.exe. Override with ANSIGHT_TESSERACT_PATH. |
| 7 | scrcpy and its matching server | Android video and display streaming. | Default executable: scrcpy on PATH or Homebrew’s bin. Default server: <prefix>/share/scrcpy/scrcpy-server; override it with SCRCPY_SERVER_PATH. |
| 8 | dotnet-trace | Capturing .NET diagnostic traces from supplied application artifacts. | Default global-tool path: ~/.dotnet/tools/dotnet-trace on macOS/Linux or %USERPROFILE%\.dotnet\tools\dotnet-trace.exe on Windows. It must be on PATH. |
| 9 | dotnet-dsrouter | Routing .NET diagnostics for supported device workflows. | Default global-tool path: ~/.dotnet/tools/dotnet-dsrouter on macOS/Linux or %USERPROFILE%\.dotnet\tools\dotnet-dsrouter.exe on Windows. It must be on PATH. |
| 10 | Appium CLI and XCUITest driver | UI input on physical iOS devices. | Default: appium on npm’s global executable path; the driver is managed beneath Appium’s home, normally ~/.appium. Both are inspected through the Appium CLI. |
| 11 | Running Appium server | The physical-iOS input session itself. | Default endpoint: http://127.0.0.1:4723/. Override with ANSIGHT_APPIUM_SERVER_URL. |
Install dependencies in priority order
Android SDK and ADB
The recommended installation is Android Studio.
During first-run setup, or later under Tools > SDK Manager > SDK Tools, install
Android SDK Platform-Tools. That package supplies adb. Note the Android
SDK location shown by SDK Manager.
For a command-line-only Android SDK that already has sdkmanager, install the
same component with:
sdkmanager "platform-tools"
Add the SDK’s platform-tools directory to PATH, set ANSIGHT_ADB_PATH to
the SDK or adb executable, or pass its location directly:
adb version
adb devices
ansight doctor --adb-path /absolute/path/to/android-sdk
Expected default SDK and ADB paths:
| Platform | SDK root | ADB executable |
|---|---|---|
| macOS | ~/Library/Android/sdk | ~/Library/Android/sdk/platform-tools/adb |
| Linux | ~/Android/Sdk | ~/Android/Sdk/platform-tools/adb |
| Windows | %LOCALAPPDATA%\Android\Sdk | %LOCALAPPDATA%\Android\Sdk\platform-tools\adb.exe |
Doctor checks an explicit --adb-path or ANSIGHT_ADB_PATH first, followed by
ANDROID_SDK_ROOT, ANDROID_HOME, PATH, and then these conventional roots.
An explicit value may point to the executable, platform-tools, or the SDK
root.
See Google’s SDK Manager guide
and sdkmanager reference for
headless installations.
Full Xcode installation
Install Xcode from the Mac App Store or the
Apple Developer downloads site,
then launch it once to finish component installation and accept its licence.
Ansight needs the full Xcode installation for Simulator and devicectl; the
standalone Command Line Tools package is not sufficient for those workflows.
Select the intended Xcode and finish its first-run setup:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
xcodebuild -version
xcrun simctl list devices
xcrun devicectl list devices
ansight doctor --xcode-path /Applications/Xcode.app
If Xcode lives elsewhere, pass its .app path with --xcode-path or set
ANSIGHT_XCODE_PATH. See Apple’s
command-line tools documentation.
The expected default application path is /Applications/Xcode.app, which
normalizes to /Applications/Xcode.app/Contents/Developer. Ansight invokes
/usr/bin/xcrun; Simulator tooling normally resolves to
/Applications/Xcode.app/Contents/Developer/usr/bin/simctl, while physical
device commands resolve through xcrun devicectl. Doctor also honors
DEVELOPER_DIR, the directory selected by /usr/bin/xcode-select -p,
/Applications/Xcode-beta.app, and other /Applications/Xcode*.app installs.
Android Emulator
In Android Studio, open SDK Manager > SDK Tools, install Android Emulator, then open Device Manager and create an Android Virtual Device with a system image suitable for the app. This is the simplest way to install all related pieces together.
With a configured command-line SDK, install the emulator package and confirm that at least one AVD exists:
sdkmanager "emulator"
emulator -version
emulator -list-avds
Creating an AVD also requires a system image. Follow Google’s virtual-device guide to choose and install one.
The expected executable is <Android SDK>/emulator/emulator on macOS and
Linux, or <Android SDK>\emulator\emulator.exe on Windows. With the conventional
SDK roots above, that is:
- macOS:
~/Library/Android/sdk/emulator/emulator - Linux:
~/Android/Sdk/emulator/emulator - Windows:
%LOCALAPPDATA%\Android\Sdk\emulator\emulator.exe
Ansight first derives the SDK root from the resolved
platform-tools/adb[.exe], then checks ANDROID_SDK_ROOT, ANDROID_HOME,
PATH, and the conventional platform roots.
Node.js
Install a supported LTS release from the
official Node.js download page. Use the
installer for the current OS, or an existing version manager that makes the
selected node executable visible to the host process.
node --version
npm --version
ansight doctor
Doctor checks PATH. When starting the host, --node-path /absolute/path/to/node
selects a specific runtime for trusted workspace modules.
There is no separate fixed Doctor path: Doctor expects an executable named
node on PATH. Common installation paths are /opt/homebrew/bin/node on
Apple Silicon Homebrew, /usr/local/bin/node on Intel Homebrew,
/usr/bin/node for Linux system packages, and
%ProgramFiles%\nodejs\node.exe on Windows. Version managers use their own
per-user path and must expose it to the shell or service that starts Ansight.
The host also accepts ANSIGHT_NODE_PATH or --node-path for an exact
executable.
SkiaSharp native runtime
The supported SkiaSharp native library is bundled with the platform-specific Ansight CLI distribution; there is no separate global package to install. A failure normally means the CLI archive is incomplete or its OS/CPU architecture does not match the machine.
Reinstall the correct Ansight CLI build, then verify it:
ansight doctor
There is no external SkiaSharp installation path to configure. Under the
standard macOS/Linux installer, the active CLI payload is
~/.local/share/ansight/cli/versions/<version>-<build>-<rid>/; macOS keeps
libSkiaSharp.dylib beside ansight in that directory. The Linux and Windows
self-contained executables carry their native asset in the CLI bundle and the
.NET runtime manages its extraction. On Windows, the versioned payload root is
%LOCALAPPDATA%\Ansight\cli-install\versions\<version>-<build>-<rid>\.
Do not install a random libSkiaSharp beside the executable. If a correctly
matched, freshly installed CLI still reports native.skia as unavailable,
include ansight doctor --json output in a support report.
Tesseract OCR
Install the executable for the current platform:
# macOS with Homebrew
brew install tesseract
# Debian or Ubuntu
sudo apt update
sudo apt install tesseract-ocr
# Windows with WinGet
winget install UB-Mannheim.TesseractOCR
Then restart the shell and verify:
tesseract --version
ansight doctor
If it is intentionally outside PATH, set ANSIGHT_TESSERACT_PATH to the
executable. See the Tesseract installation guide.
Doctor otherwise expects tesseract (tesseract.exe on Windows) on PATH.
Typical paths are /opt/homebrew/bin/tesseract on Apple Silicon Homebrew,
/usr/local/bin/tesseract on Intel Homebrew, /usr/bin/tesseract for Linux
packages, and C:\Program Files\Tesseract-OCR\tesseract.exe for the common
Windows installer. If the Windows installer does not add that directory to
PATH, point ANSIGHT_TESSERACT_PATH at the executable explicitly.
scrcpy and its matching server
Install scrcpy as one complete distribution so the client executable and
scrcpy-server remain the same version:
# macOS with Homebrew
brew install scrcpy
# Windows with WinGet
winget install --exact Genymobile.scrcpy
For Linux, use the current package or static archive described in the official scrcpy Linux guide. Avoid copying only the executable from another installation.
scrcpy --version
ansight doctor
Doctor finds the server beside standard package-manager installations. Set
SCRCPY_SERVER_PATH only when using a custom layout, and point it to the server
from the same release as the executable. The
official scrcpy repository is the
authoritative download source.
For the executable, Doctor checks PATH, then the common macOS Homebrew paths
/opt/homebrew/bin/scrcpy and /usr/local/bin/scrcpy. Linux packages normally
install /usr/bin/scrcpy; Windows package managers must expose scrcpy.exe on
PATH.
For the matching server, Ansight first checks SCRCPY_SERVER_PATH, then
<prefix>/share/scrcpy/scrcpy-server relative to the resolved executable. It
also checks these exact conventional paths:
/opt/homebrew/share/scrcpy/scrcpy-server/usr/local/share/scrcpy/scrcpy-server/usr/share/scrcpy/scrcpy-server
On Windows or a portable/custom archive, set SCRCPY_SERVER_PATH when the
package layout does not match the <prefix>/share/scrcpy convention.
.NET SDK
The self-contained Ansight CLI does not require a .NET SDK, does not invoke
dotnet, and does not require dotnet on PATH. Build your .app, .apk, or
.ipa outside Ansight. You may still use an SDK outside Ansight to produce the
artifact or to install the diagnostic tools below.
dotnet-trace
Install dotnet-trace using your preferred .NET tool installation environment:
dotnet tool install --global dotnet-trace
dotnet-trace --version
ansight doctor
If the command is not found after installation, restart the shell and make sure
the .NET global-tools directory is on PATH: $HOME/.dotnet/tools on macOS
and Linux, or %USERPROFILE%\.dotnet\tools on Windows. See Microsoft’s
dotnet-trace documentation.
The expected executable is $HOME/.dotnet/tools/dotnet-trace on macOS/Linux
or %USERPROFILE%\.dotnet\tools\dotnet-trace.exe on Windows. Doctor resolves
the command from PATH; there is no separate Ansight path override.
dotnet-dsrouter
Install dotnet-dsrouter when profiling sandboxed .NET mobile processes:
dotnet tool install --global dotnet-dsrouter
dotnet-dsrouter --version
ansight doctor
It uses the same global-tools PATH rules as dotnet-trace. See Microsoft’s
dotnet-dsrouter documentation.
The expected executable is $HOME/.dotnet/tools/dotnet-dsrouter on
macOS/Linux or %USERPROFILE%\.dotnet\tools\dotnet-dsrouter.exe on Windows.
Doctor resolves the command from PATH; there is no separate Ansight path
override.
Appium CLI and XCUITest driver
This dependency is only for physical-iOS input. Install Node.js first, then install Appium through npm and add the XCUITest driver:
npm install --global appium
appium driver install xcuitest
appium --version
appium driver list --installed
ansight doctor
Follow the Appium installation guide and XCUITest driver installation guide for WebDriverAgent signing, Developer Mode, and device trust.
Doctor expects appium (appium.cmd or appium.exe on Windows) on PATH.
Its exact path is npm-prefix dependent: common global locations are
/usr/local/bin/appium, a version-manager-specific bin/appium, and
%APPDATA%\npm\appium.cmd. Appium manages installed extensions beneath its own
home, normally ~/.appium; Ansight does not infer or open the driver directory.
Instead, it runs appium driver list --installed --json and requires an
installed xcuitest driver.
Running Appium server
Installing Appium does not start it. Open a persistent terminal and run:
appium
Leave that process running while using physical-iOS input. In another terminal, verify that Doctor can reach it:
ansight doctor
The default endpoint is http://127.0.0.1:4723/. If Appium listens elsewhere,
set ANSIGHT_APPIUM_SERVER_URL to its absolute HTTP or HTTPS URL before
starting Ansight or running Doctor.
This dependency has no filesystem path. The expected default network location
is http://127.0.0.1:4723/, and Doctor probes its /status endpoint. When the
server uses a base path, include it in ANSIGHT_APPIUM_SERVER_URL, for example
http://127.0.0.1:4723/wd/hub.
Read the traffic light
| Result | Meaning | Exit behavior |
|---|---|---|
| Green | Every required and optional check passed. | Success. |
| Amber | Baseline requirements passed, but one or more optional capabilities are unavailable. | Success. |
| Red | At least one required check failed. | Returns the capability-unavailable exit code. |
An amber result is normal when the machine does not target every platform. For example, a Linux automation host can be healthy without Apple device tooling, and an iOS-only developer does not need the Android SDK.
Diagnose a non-default host
Use the same paths and credential configuration that the real host will use:
ansight doctor \
--data-dir /path/to/ansight-data \
--secret-store-file /protected/secrets.json \
--secret-key-file /protected/ansight.key \
--adb-path /path/to/android-sdk \
--xcode-path /Applications/Xcode.app
The resolved paths appear in Doctor output. If a host is started by a service,
run Doctor in that service’s user and environment: interactive shells often
have a different PATH, credential vault, and systemd credential directory.
Security note for Node.js
Node.js repository modules run as the current OS user and are not an operating system sandbox. Only enable modules from repositories you trust. See Workspace Node.js Security for the process model, environment filtering, timeouts, output bounds, and trust gates.