Skip to content

Installed Software

RunnerHub build machines come pre-installed with all essential development tools for iOS, macOS, watchOS, tvOS, and Android development. No additional setup is needed—start building immediately.

Each machine runs one of four golden images keyed by Xcode version. See Golden Images for exact tool versions per image.

SoftwareVersionPurpose
Xcode16.3, 16.4, 26.4, or 26.5-betaComplete IDE and compiler suite (select via environment.xcode)
Command Line ToolsMatches XcodeCompilers, headers, utilities
SwiftMatches XcodeSwift compiler and runtime
Clang/LLVMMatches XcodeC/C++ compiler
LanguageVersionNotes
Node.js22 (Xcode 16.x) or 24 (Xcode 26.x)Activated per-job via environment.node and nodenv when requested
npmLatest for Node versionNode package manager
YarnLatestJavaScript package manager (globally installed)
Python 3Latest system versionPython runtime (via brew)
Ruby3.3.6 (Xcode 16.x) or 3.4.7/4.0.2 (Xcode 26.x)Managed by rbenv; .ruby-version files auto-switch Ruby
ToolVersionPlatform
CocoaPodsLatestiOS, macOS, watchOS, tvOS (installed as gem)
Swift Package ManagerBuilt-inSwift packages
BundlerLatestRuby gems
GradleLatestAndroid build (installed via brew)
ToolPurposeInstalled
FastlaneiOS/macOS automation gemYes
xcprettyxcodebuild output formatterYes
xcodegenXcode project generatorYes
xcbeautifyxcodebuild formatterYes
SwiftLintSwift lintingYes
SwiftFormatSwift code formatterYes
SwiftGenSwift code generationYes
MintSwift package manager CLIYes
CarthageDependency managerYes

All images include the following Homebrew formulae:

PackagePurpose
swiftlintSwift linting
swiftformatSwift code formatting
swiftgenSwift code generation
xcbeautifyxcodebuild output formatting
xcodegenXcode project generation
mintSwift package manager
carthageDependency manager
cmakeBuild system
wgetDownload files
imagemagickImage manipulation
jqJSON query and transform
yqYAML query and transform
ghGitHub CLI
rbenvRuby version manager
ruby-buildRuby compiler (used by rbenv)
gradleGradle build system
ktlintKotlin linting
python3Python runtime

All images include:

  • android-commandlinetools — Android SDK command-line tools
  • google-cloud-cli — Google Cloud SDK
ToolPurpose
xcodebuildBuild iOS/macOS apps
xcrunXcode command-line utility
simctlSimulator control
codesignCode signing
notarytoolmacOS app notarization
xcresulttoolXcode result analysis
dwarfdumpDebug symbol inspection
dsymutilDebug symbol utility
lipoUniversal binary tool
install_name_toolBinary linking tool
otoolObject file tool
nmSymbol listing

All images include multiple JDK versions:

  • JDK 17 — Default
  • JDK 21 — Available
  • JDK 11 — Available
  • JDK 26 — Available on Xcode 26.x images only

Set JAVA_HOME defaults to JDK 17. Switch versions by modifying JAVA_HOME in your pipeline or using jenv if needed.

Full Android SDK is pre-installed at ~/Library/Android/sdk. Includes:

  • Platforms: android-28 through android-36 (android-37 preview on 26.5-beta)
  • Build-tools: 28.0.3, 29.0.2, 30.0.3, 33.0.2, 33.0.3, 34.0.0, 35.0.0, 35.0.1, 36.0.0 (37.0.0 on 26.5-beta)
  • NDK: Multiple versions including 25.1.8937393, 27.3.13750724, 28.2.13676358, 29.0.13113456 (exact versions vary per image; see Golden Images)
  • CMake: 3.18.1, 3.22.1
  • Command-line tools: Latest via android-commandlinetools cask

ANDROID_HOME is pre-set to ~/Library/Android/sdk.

Flutter SDK is not pre-installed. Instead, projects use FVM (Flutter Version Manager) at build time. This follows the Codemagic model and avoids volatile version dependencies.

Set environment.flutter in your YAML to specify the Flutter version:

jobs:
build:
environment:
flutter: "3.19.0" # FVM will install this version
steps:
- name: Get packages
run: fvm flutter pub get
- name: Build iOS
run: fvm flutter build ios

Important: The Flutter SDK is installed by FVM at ~/.fvm/, but ~/.fvm/default/bin is not on PATH. Always invoke Flutter as fvm flutter …, not bare flutter ….

Note: FVM is pre-installed on all images. See the Flutter documentation for detailed setup.

ToolPurpose
GitVersion control
curlDownload files
wgetDownload files (alternative)
jqJSON query and transform
zip / unzipArchive compression
gzip / gunzipGzip compression
tarArchive tool
sed, awk, grepText processing
defaultsmacOS defaults database
plutilProperty list utility
PlistBuddyPlist editing
securityKeychain and certificate management
killallProcess termination
lsofList open files
psProcess status
dateTimestamp utility
md5File checksums

Access any pre-installed tool directly in your build steps:

steps:
- name: Install pods
run: pod install
- name: Build with fastlane
run: fastlane build
- name: Run tests
run: xcodebuild test -scheme MyApp
- name: Process JSON
run: curl https://api.example.com/status | jq '.status'

Tools are ready to use—no brew install, npm install -g, or setup needed for pre-installed packages.

Install Node.js packages globally or locally:

steps:
- name: Install global CLI
run: npm install -g @my-org/my-cli
- name: Use it
run: my-cli build

Install Python packages:

steps:
- name: Install Python package
run: pip3 install requests
- name: Use it
run: python3 my_script.py

Install Ruby gems:

steps:
- name: Install gem
run: gem install some-gem
- name: Use it
run: some-gem command

Homebrew is fully functional during job execution. Install additional tools as needed:

steps:
- name: Install tool
run: brew install my-tool
- name: Use it
run: my-tool --version

For tools not available through Homebrew, npm, pip, or gem, download and compile them:

steps:
- name: Download and build tool
run: |
curl -o /tmp/tool https://example.com/tool.tar.gz
cd /tmp && tar xzf tool.tar.gz
cd tool && ./configure && make
./tool --version

To use a specific Node.js version, set environment.node in your pipeline YAML:

jobs:
build:
environment:
node: "20.10.0" # nodenv will activate this version
steps:
- name: Verify Node version
run: |
node --version
npm --version

When environment.node is set, the agent activates that version via nodenv before running job steps. Node versions are available per image—see Golden Images.

Ruby versions are managed by rbenv. If your project has a .ruby-version file at the root, it will be automatically applied when the agent clones the repository:

steps:
- name: Check Ruby version
run: ruby --version

The agent sources .zshenv on every SSH session, which runs eval "$(rbenv init - zsh)", ensuring the correct Ruby version is always active.

steps:
- name: Verify tool
run: |
which fastlane
fastlane --version
which xcodebuild
xcodebuild -version
steps:
- name: System info
run: |
system_profiler SPSoftwareDataType
brew list
gem list
pip3 list
java -version
ToolPurpose
xctestBuilt-in unit test framework
instrumentsPerformance profiling
xctestrunTest execution

The following tools are not installed on RunnerHub build machines:

  • Flutter SDK — Use FVM instead (see Flutter Development section above)
  • pnpm — Use npm or yarn instead
  • nvm — Use environment.node + nodenv instead
  • Tuist — Use xcodegen instead
  • xcov — Use built-in Xcode code coverage tools
  • Apple’s swift-format (hyphenated) — Use swiftformat (Homebrew package) instead
  • aws CLI — Use AWS SDK in your code instead
  • Azure CLI — Use Azure SDK in your code instead
  • Docker — Not available on cloud machines
  • Linux tools — macOS only

For needs not met by pre-installed software:

  1. npm/pip/gem: Use these package managers to install additional tools
  2. brew install: Works during job execution; changes don’t persist across jobs
  3. Self-hosted agents: Use VM mode for full OS customization

Q: What Xcode version is running? A: Depends on environment.xcode in your YAML. Cloud machines offer Xcode 16.3, 16.4, 26.4, and 26.5-beta. See Golden Images.

Q: Can I use a different Node.js version? A: Yes. Set environment.node in your pipeline YAML (e.g., environment.node: "22.11.0"). The agent activates it via nodenv before running steps.

Q: How do I switch Ruby versions? A: Add a .ruby-version file to your repository root (e.g., 3.3.6). The agent auto-activates it via rbenv on each job.

Q: Is Homebrew functional? A: Yes. brew install works during job execution. Changes don’t persist across jobs—run brew install in each step if needed.

Q: Can I install Docker? A: Not on cloud machines. Consider self-hosted agents if you need virtualization.

Q: Can I compile and use my own tool? A: Yes, download the source and compile it in your pipeline.

Q: What about Rust, Go, or other languages? A: Many languages can be installed via Homebrew or their own installers. Use in your pipeline as needed.