Manzanita vs GitHub-hosted macOS runners
Both run your existing GitHub Actions workflow. The differences are the machine, how Xcode is pinned, how you wait, and how you pay. Everything below is stated so you can check it against actions/runner-images, GitHub's billing page, and our docs.
| Area | GitHub-hosted macos-latest | Manzanita manzanita-standard |
|---|---|---|
| Hardware | Shared Apple Silicon VM (3–4 vCPU on the standard SKU; larger SKUs via -xlarge labels) | Dedicated M4 Pro profile: 6 vCPU · 22 GB (Standard) or 12 vCPU · 44 GB (XL) |
| Xcode | One major Xcode per macOS image; patch versions replace the previous one; -latest migrates to a new macOS over 1–2 months | Digest-pinned image: Xcode 26.6 (17F113) on macOS Tahoe 26.6.2. Xcode 16.4 stays on its own label. Image IDs never change under you; see the changelog |
| Isolation | Fresh VM per job | Fresh VM per job, destroyed after the job. Repository-scoped JIT credentials |
| Time to runner | Depends on shared pool demand | VM start after a runner is assigned: 5 s median, 9 s p95 across our fleet for the 30 days ending September 5, 2026. Excludes waiting behind your own concurrency and GitHub's job matching (definition) |
| Concurrency | Per-account limits; jobs above the limit queue | One job per purchased runner; jobs above that stay queued on GitHub with normal logs |
| Pricing | Per minute. GitHub lists the standard macOS runner at $0.062 per minute at the time of writing; larger SKUs cost more | $149 per month per Standard runner, $299 per XL. No per-minute billing |
| Job limit | 6 hours | 2 hours per job during the pilot |
| Code signing | Supported | Not supported in the pilot. Keep release and notarization jobs on a protected runner |
| Workflow changes | — | One line: the runs-on label |
When the flat rate wins
Per-minute pricing is cheap when a repository builds a few times a day and expensive when it builds constantly. A single Standard runner at $149 equals roughly 2,400 minutes of GitHub's standard macOS SKU at $0.062. A team running two hours of macOS CI per working day crosses that in about three weeks; a merge queue or a coding agent that opens many PRs crosses it in days. Above that line the flat rate is the cheaper option, and the bill stops moving.
When GitHub-hosted is the better choice
- You need code signing, notarization, or App Store upload in CI today.
- You need iOS runtimes or Xcode versions outside our published table.
- Your macOS jobs are rare enough that a month of minutes costs less than $149.
- You need a contractual SLA. The Manzanita pilot publishes targets, not an SLA.
Migrating one workflow
jobs:
test:
runs-on: ${{ vars.MACOS_RUNNER || 'macos-latest' }}
steps:
- uses: actions/checkout@v5
- run: xcodebuild -version
- run: swift test
Set a repository variable MACOS_RUNNER=manzanita-standard to route the next run to Manzanita, and clear it to route back to GitHub, without a commit. Details in the docs.
runs-on to manzanita-standard and keep everything else. Start free · Read the docs