Back to all blogs

Benchmark: Next.js builds 2-142x faster on Avrea than GitHub Actions

On GitHub Actions, a no-cache Next.js build takes 3 minutes 23 seconds. On Avrea, the same build, same 2 vCPU spec: 1 minute 23 seconds without cache, 1.4 seconds with a warm Turborepo cache.

Leo Lännenmäki
10 May 2026
Benchmark: Next.js builds 2-142x faster on Avrea than GitHub Actions

Why Next.js

Next.js is a very popular JS framework, and its monorepo uses Turborepo as the build system. That makes it a useful proxy benchmark for any JavaScript monorepo.

Turporepo's caching is straightforward: hash the task's inputs, look up the output, and if the output is there, skip the work.

How we ran the test

We ran Next.js's standard Turborepo build on both sides. Node LTS, 2 vCPU runners, pinned Next.js commit.

GitHub Actions Avrea
Runner label ubuntu-24.04 avrea-ubuntu-latest-2-vcpu
vCPU 2 2
RAM 7.8Gi 7.8Gi

For the cached run, Turborepo's remote cache pointed at Avrea's Turborepo remote cache endpoint. On the no-cache run, Turborepo ran with caching disabled entirely. GitHub Actions has no equivalent cache service. That being said, you could hook up 3rd party one, like Vercel Remote Cache.

Three runs per configuration. The Avrea cached builds were very consistent. No-cache runs had a few seconds of jitter.

Results

GitHub ActionsAvreaSpeedup
No cache3m 23s1m 23s2.4x
With cachen/a1.4s142x

Why it's faster

The hardware (the 2.4x)

A no-cache Next.js build is bundling-heavy: swc, esbuild, Next's compiler, and a fair amount of disk churn for intermediate artifacts. Avrea's single-core CPU advantage and NVMe disk carry most of the 2.4x.

The cache (the 142x)

Avrea's cache backing is co-located. Next.js build with all tasks cached takes 1.4 seconds because that's roughly how long it takes to read the task outputs back and verify them. Most of those 1.4 seconds is pnpm resolving the workspace plus Node booting. The bundler does close to nothing.

Other benchmarks in this series

What Avrea is

Avrea swaps in for GitHub Actions runners with one line of YAML. Change runs-on: ubuntu-latest to runs-on: avrea-ubuntu-latest.

You get per-step CPU and memory, a searchable log history, and SSH access to running jobs. On Turborepo specifically, the SSH access saves you time when a task hangs deep in the build graph. Inspecting in place is faster than killing the run and starting cold.

Every job runs in an isolated ephemeral VM. ISO 27001:2022 certified.

See pricing or start free on Avrea →