Ephemeral sandboxes. Millisecond cold starts. Yes, really.
If you've been living under a rock, GitHub quietly shipped a WASM backend for the Actions runner. Same workflow YAML, completely different execution model — your Astro build kicks off in milliseconds instead of waiting on a fresh Ubuntu VM.
The Setup
Drop runs-on: wasm into a job and the runner spins up a wasmtime sandbox instead of a container. It's preview-only right now, gated behind a repo flag, but it works on real workflows.
# .github/workflows/build.yml
name: build
on: push
jobs:
astro:
runs-on: wasm
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: 22
- run: npm ci
- run: npm run buildThe Money Pattern
The cold-start delta is the headline. A typical ubuntu-latest job spends 20-40 seconds provisioning before npm ci even starts. WASM jobs hit your first step in under 500ms. Across a hundred pushes a week to the velocity8.5 site on Netlify, the saved minutes add up fast.
# matrix that uses both backends side by side
strategy:
matrix:
runner: [ubuntu-latest, wasm]
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v5
- run: node -e "console.log(process.platform, process.arch)"The Catch
Not every action runs on WASM. Anything that shells out to native binaries, hits Docker, or wants raw POSIX syscalls is going to error. Setup-node and checkout work. Playwright does not. Most of your custom shell scripts will need rethinking before they run clean.
The Verdict
For lint, typecheck, and Astro builds — WASM runners are an immediate upgrade. Move the fast jobs over, leave the integration tests on ubuntu, and you'll feel the difference inside a week. Behold: CI that doesn't make you tab away to Twitter.