Skip to content
Latchkey

How to Choose Between ARM and x86 CI Runners

Choose the runner architecture that matches where your code runs in production; ARM runners often cost less per minute and build ARM images natively without emulation.

If you deploy to ARM (Graviton, Ampere, Apple silicon), an ARM runner builds and tests natively instead of under slow QEMU emulation. If you ship x86, stay on x86. When you ship both, test both.

Selecting an ARM runner

.github/workflows/ci.yml
jobs:
  build-arm:
    runs-on: ubuntu-24.04-arm     # native ARM64 runner
    steps:
      - uses: actions/checkout@v4
      - run: uname -m              # aarch64
      - run: docker build -t myapp:arm64 .

Testing both architectures

.github/workflows/ci.yml
jobs:
  test:
    strategy:
      matrix:
        runner: [ubuntu-latest, ubuntu-24.04-arm]
    runs-on: ${{ matrix.runner }}
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

Tradeoffs

Native ARM builds avoid the large slowdown of cross-building ARM images on x86 via emulation. The catch is toolchain and dependency coverage: some prebuilt binaries and actions still assume x86, so verify your stack has ARM builds before switching.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →