Requirements
Commands use stim. If it is not installed globally, replace stim with
npx stim.
All projects
- Node 22.12.0 or later. Node 20 is no longer supported.
- A project with
expoorreact-nativeinpackage.json. - Git for
stim worktreecommands. - macOS, Linux or Windows. What each host can run is listed below.
Projects that pin an older Node
stim and stim-server start through #!/usr/bin/env node, so the working
directory can choose the Node that runs them. asdf, mise and Volta's node
shim follow the project's .nvmrc, .node-version, .tool-versions or
package.json; nvm and fnm do when a shell hook switches versions on cd. A
Stim installed with Volta keeps the Node it was installed with. When that Node
is older than 22.12.0, Stim refuses before it does anything and prints
STIM_NODE_UNSUPPORTED with the Node version and path it found.
Run Stim with a supported Node for that command:
ASDF_NODEJS_VERSION=<version> stim <command>
mise exec node@<version> -- stim <command>
volta run --node <version> stim <command>
fnm exec --using=<version> stim <command>
nvm exec --silent <version> stim <command>
<version> is 22.12.0 or later. asdf, mise, fnm and nvm keep global packages
per Node version, so when Stim was installed with npm under one of them, use
the version it was installed with. asdf names that version when it prints
No version is set for command stim instead of running Stim. When that
version is older than 22.12.0, first install Stim with npm under a supported
version. The tools Stim starts inherit the override.
iOS
- Local builds and simulators need macOS with Xcode. Local simulator runs also need an installed iOS Simulator runtime.
- A compatible Ruby and CocoaPods setup when the project uses pods. Install
Bundler when the project pins CocoaPods in
Gemfile.lock. - From Linux or Windows, iOS runs through an EAS build and an EAS Simulator
session:
stim ios --remote eas --eas-profile <profile>. See From Windows or Linux.
Android
- macOS, Linux or Windows with the Android SDK. Stim reads its location from
ANDROID_HOME, thenANDROID_SDK_ROOT, then Android Studio's default:~/Library/Android/sdkon macOS,~/Android/Sdkon Linux or%LOCALAPPDATA%\Android\Sdkon Windows. It passes that path to Gradle asANDROID_HOMEwhen neither variable is set. With no SDK there and noandroid/local.properties,stim doctor --platform androidreports it andstim androidrefuses withSTIM_BUILD_FAILEDbefore Gradle runs. - For an emulator, an installed Android system image matching the host:
arm64-v8aon ARM64 orx86_64on x64. - A working Java and Gradle setup for the project.
- On Windows, a project root short enough for the NDK's object paths: its
ninja cannot open a path of 260 characters or more, and a React Native
codegen object path only fits when CMake can shorten it. A project with
react-native-gesture-handler 3 fits a root of at most 24 characters for an
x86_64 emulator build and 21 for arm64-v8a, such as
C:\src\trailhead; other projects fit about twice that.stim doctor --platform androidreports a root that leaves no room andstim androidrefuses it withSTIM_PATH_TOO_LONGbefore it prepares the emulator, even when a cached build would have installed. Move or clone the project under a short real path such asC:\src\<name>. Asubstdrive does not work: Node and Expo autolinking resolve it back to the long path. The check assumes the default native staging path and may also refuse a shorter custombuildStagingDirectory.
Windows
The Android loop runs on Windows: owned emulators, builds, install, launch,
logs, worktrees and caches. iOS can run through --remote eas; there
is no local Xcode path. Requirements on top of the Android list:
- Windows 10 or 11 with PowerShell 7 or cmd.exe to run Stim. Windows PowerShell
(
powershell.exe) must also be onPATHfor background processes and emulator cleanup. Stim resolves.cmdand.battools itself. - Git for Windows. Stim passes
core.longpathsto the git commands that need it; your global configuration is not changed. - Emulator acceleration: WHPX (Windows Hypervisor Platform) or the Android
Emulator hypervisor driver.
emulator -accel-checkreports which is active. - JDK 17 on
JAVA_HOMEorPATH. - A short project path, as described in the Android path requirement above.
On Windows, stim doctor --platform android checks path room, and stim doctor --platform ios points at --remote eas for iOS.
Install the host tools and JavaScript dependencies before building. Stim runs
pod install when an iOS project's installed Pods are missing or stale. When
the project pins CocoaPods and Bundler is available, it installs missing bundled
gems and runs bundle exec pod install. Run stim doctor to check the setup.
Web
stim web needs Google Chrome or Chromium. On macOS Stim looks in
/Applications and ~/Applications; elsewhere it looks for google-chrome,
google-chrome-stable, chromium or chromium-browser on PATH, and on
Windows in Program Files. Stim never installs a browser. Expo web also needs
react-dom, react-native-web and @expo/metro-runtime.
Optional remote devices
- The
proxybackend needs an Agent Device daemon URL and token. - The
easbackend needs EAS CLI 21.6.0 or later (22.2.0 or later forstim ios --device-type), an authenticated Expo account, and a configured EAS project. EAS simulator use can be billable.
EAS development builds
--eas-profile needs EAS CLI 18.9.0 or later, an authenticated Expo account, and a linked Expo
project with an internal development profile. It downloads an existing build
and skips local native compilation, so CocoaPods and Gradle compilation setup
are not needed for this path. Keep the host tools needed to run the selected
device: Xcode and an installed runtime for a local iOS simulator, or the Android
SDK and system image for an emulator. See EAS development builds
for setup and connected-device requirements.