macOS runners on your own Mac

Codemany turns the Apple silicon Mac you own into a GitHub macOS runner. Each job gets a fresh runner and uses the Xcode and tools already on your Mac.

What you get

Some people still call them OS X runners. Either way, the idea is simple. Your Mac runs your GitHub Actions jobs, not GitHub's.

  • A fresh runner per job. Each one is used once, then wiped.
  • A flat price. $20 a month for 2 machines, however long jobs take.
  • No setup scripts. The background service keeps taking jobs, even with the app closed.

Your Xcode, your tools

Jobs use what is on your Mac: Xcode, Homebrew packages, simulators and Docker. Nothing is preinstalled. Codemany checks your tools every 30 minutes.

Need a tool? Codemany can install Homebrew packages such as CocoaPods, fastlane and SwiftLint. It installs them as your user, never as root.

Downloads from actions/setup-* steps stay in a shared tool cache. So your Mac pipeline doesn't fetch the same Node or Python each time.

Xcode labels such as xcode-26.0

On a Mac with Xcode, runners carry xcode and a version label, such as xcode-26.0. The version follows the Xcode picked with xcode-select.

jobs:
  build:
    runs-on: [self-hosted, codemany, xcode-26.0]
    steps:
      - uses: actions/checkout@v4
      - run: xcodebuild build -scheme App -destination 'generic/platform=iOS Simulator'

Use plain xcode when any Xcode will do. Pin a version when the build needs it. Then jobs wait rather than use the wrong one. More in iOS and Xcode builds.

Keeps your Mac awake for jobs

A Mac that sleeps mid-job makes the job fail. Codemany keeps the Mac awake while jobs run, until 2 minutes after the last one. You can change that to "while runners are online", or never.

Some sleep it can't stop. A laptop on battery with the lid closed will sleep. So can a Mac in Low Power Mode. Codemany warns you, and after a sleep it tells you which jobs were lost.

How jobs run on a Mac

A job runs as your user. It can read and change your files, like a command you type. A Mac runner is not a sandbox. So only run workflows you trust, on private repos. Public repos stay off unless you turn them on. Read Security and privacy.

GitHub's hosted Macs come in set runner sizes. Here, the size is your Mac. Each job needs about 4 GB of memory. An 8 GB Mac runs 1 job at a time. A 16 GB Mac runs 3. If hosted Mac jobs feel slow, see why GitHub Actions on macOS is slow.

Requirements

  • A Mac with Apple silicon, on macOS 14 or later. Intel Macs are not supported.
  • A GitHub account that can add runners: a repo admin or an organization owner.
  • Then one line in your workflow: runs-on: [self-hosted, codemany].

Every step is in the Mac runner guide. Prices are on the pricing page.

Questions

Which Macs work?

Apple silicon Macs on macOS 14 or later. Intel Macs are not supported.

Do jobs run in a sandbox on a Mac?

No. They run as your user, so only run workflows you trust.

Do I have to keep the app open?

No. The background service keeps taking jobs.

Read next: the Mac runner guide, iOS and Xcode builds, slow macOS jobs, Security and privacy and pricing.

Codemany is $20 a month for 2 machines. Try it free for 14 days, with no card.

Start a 14-day trial