Manzanita
Manzanita Docs · v0.2

Apple Silicon runners, without a second CI platform.

Manzanita supplies ephemeral macOS machines to GitHub Actions. GitHub remains the control plane for workflow syntax, secrets, logs, artifacts, approvals, and job queues.

Quickstart

  1. Install the Manzanita GitHub App on only the repositories that need macOS CI.
  2. Start the trial. The 14-day clock begins with the first runner job, not registration.
  3. Change one line in your workflow:
jobs:
test:
runs-on: manzanita-standard
steps:
- uses: actions/checkout@v4
- run: swift test

No proprietary workflow file is required. Existing GitHub Actions, environments, caches, artifacts, and repository secrets continue to work.

Runner labels

LabelProfileConcurrency
manzanita-standardM4 Pro · 6–7 vCPU · 22 GBOne job per slot
manzanita-xlM4 Pro · 12–14 vCPU · 44 GBOne job per slot

Jobs above purchased concurrency remain queued in GitHub. A slot is reserved concurrency, not a shared vCPU pool.

Images and toolchains

The pilot image is pinned to macOS Sequoia with Xcode 16.4 and Swift 6.1.2. Images are built ahead of time and canary-tested before production nodes pull them. Future Xcode versions will use explicit labels rather than silently moving a pinned image.

Job lifecycle

  1. The GitHub App receives workflow_job.queued.
  2. The scheduler selects an entitled slot and issues a short-lived JIT runner token.
  3. The node clones a prewarmed Tart golden image using APFS copy-on-write.
  4. The VM connects directly to GitHub, runs exactly one job, and uploads logs and artifacts there.
  5. The VM and token are destroyed. A clean replacement is prepared.

Caching

Use actions/cache immediately. Per-organization SPM, DerivedData, and CocoaPods cache volumes are planned for the production fleet. Cache volumes never cross organizations or repositories and are not part of the ephemeral workspace.

Security model

Manzanita is dedicated-host CI infrastructure, not confidential computing. Sensitive secrets remain governed by GitHub Actions permissions and your workflow design.

Billing and fair use

PlanPriceRules
Founding$99/month/slotFirst 10 organizations; maximum two founding slots
Standard$149/month/slotThird and later slots; ordinary M4 Pro profile
XL$249/month/slotFull-host profile

Plans include unlimited CI minutes. To protect responsive queues, usage above 15,000 minutes per slot in 30 days starts a human capacity review. It does not create a per-minute overage charge. During contention, lower-utilization organizations receive scheduling priority while running jobs are never preempted. Founding onboarding is curated; unusually large historical Actions usage is routed to Standard, XL, or a multi-slot capacity plan.

The free trial is one Standard slot for 14 days or 300 build minutes, whichever happens first. Stripe owns cards, invoices, cancellation, and the Customer Portal.

Troubleshooting

Job stays queued

Confirm the GitHub App is installed for that repository, the label is spelled exactly, and your organization has an active trial or subscription. Jobs also queue normally when all purchased slots are busy.

Toolchain mismatch

Print xcodebuild -version and swift --version in the job. Pinning is deliberate; contact support before assuming xcode-select points at another beta.

Need help

Include the GitHub job URL, repository name, and approximate queue time. Do not send repository secrets.

Node heartbeat API

Fleet nodes report health over an authenticated outbound request. This endpoint is for enrolled operators, not customer workflows.

POST /api/node/heartbeat
Authorization: Bearer $MANZANITA_NODE_KEY
Content-Type: application/json

{"id":"mini-m2pro-01","status":"online","slots":[{"index":0,"state":"ready"}]}

© 2026 Manzanita · 80 Willow Road, Menlo Park, CA 94025.