Announcing our Series C led by Sequoia at a $1B valuation. Read more

Self-hosting CI
gets harder every month

More code is being written than ever. CI volume is outgrowing infrastructure that used to work.

CI jobs vs. developers
CI jobsActive developers
1x3x5x7x9xJan 2025Jul 2025Jan 2026Jul 2026SAME 315 ORGS SINCE JAN 2025
Teams that moved their self-hosted CI to Blacksmith
LangChain logoAmplitude logoDescript logoMegaport logo
/ Demand
■

CI demand comes in bursts

A busy hour can leave jobs waiting, while a quiet one leaves machines idle.

■ 01

Demand changes by the minute

A fleet sized for a typical hour can run out of machines when everyone pushes at once.
■ 02

Bursts fill the queue

When a burst uses your available machines, other jobs wait for the autoscaler.
■ 03

Idle machines cost money

You’re paying to keep machines ready, even when there are no jobs to run.
Concurrent vCPUs
05K10K15K20KMon 17Tue 18Wed 19Thu 20Fri 21Sat 22Sun 23

Why do jobs queue even with autoscaling?

DemandCapacityQueuedIdle
05K10K15K20K09:2009:4010:0010:2010:4011:0011:201. Jobs queue while machines boot09:40. Demand jumps 4,000 vCPUs in fiveminutes. The autoscaler requests moremachines, but none are online yet. 2,900vCPUs of work sit in the queue.2. Capacity catches up, late10:00. New machines come online about threeminutes after they’re needed. By then,demand has moved again.3. Capacity drops late, you pay for it10:35. Demand drops 12,000 vCPUs in fiveminutes. Capacity stays up for the 15-minute cooldown. That leaves 15,000vCPUs running with nothing to do.
/ What it costs
■
  1. You wait for machines

    Jobs queue while each new machine starts and registers, which can take minutes.

    LangChain logo

    “Our self-hosted runners were having autoscaling issues and they’d be in queue for 5, 10 minutes. People would report that.”

    LangChain, self-hosted runners on GCP
  2. You compete for capacity

    The instance type you request can be out of stock, or you hit your vCPU quota. Either way, jobs stay queued.

    Arian van Putten
    @ProgrammerDude
    View on X

    At the start of the year our self hosted CI runner cluster would get m8 instances with a 90 percent success rate. It has dropped to 15 percent

    Sep 5, 2026
  3. You pay to avoid waiting

    A warm pool skips the wait, but you keep paying for it when CI load drops.

    Megaport logo

    “I got sick of spending the time babysitting the warm pool and just took the scaling policies out, but it means you’re provisioning for the peaks.”

    Megaport, self-hosted runners on AWS
  4. You lose spot machines mid-job

    Spot instances are cheap until they’re reclaimed, and your job is cut off mid-run.

    Amplitude logo

    “I’m spending a whole quarter on it. If this ends up being cheaper than all of this, then I can spend my time on actually useful measures instead of tuning a GitHub runner thing.”

    Amplitude, ARC + Karpenter on Kubernetes

The biggest cost is your team’s time

You pay for machines and the time your team spends maintaining them.

CI infra backlog

GitHub

  1. Handling API rate limits
  2. Updating runner versions
  3. Handling webhook delivery

Capacity

  1. Tuning autoscaling policies
  2. Asking AWS for quota bumps
  3. Isolating noisy neighbors
  4. Spot interruptions killing jobs mid-run

Images and caches

  1. Upgrading toolchains
  2. Patching base image CVEs
  3. Maintaining OS images
  4. Managing Docker and runtime caches

Network

  1. Avoiding Docker Hub limits
  2. Maintaining egress allowlists

Observability

  1. Tracking queue times
  2. Attributing job costs
  3. Measuring CPU and memory
/ Customer data
■

How long do jobs wait for a machine?

Two customers moving off self-hosted ARC, anonymized.

Queue time

Time within which 95% of jobs started. Weekly range, Sep 7 to Oct 12. Self-hosted: 1m 8s to 1m 19s; Blacksmith: 10s to 29s.0s20s40s60s80sSep 7Sep 14Sep 21Sep 28Oct 5Oct 12

Jobs waiting over a minute

Weekly share of jobs waiting more than 60 seconds. Weekly range, Sep 7 to Oct 12. Self-hosted: 5.51% to 7.68%; Blacksmith: 0.27% to 2.37%.0%2%4%6%8%Sep 7Sep 14Sep 21Sep 28Oct 5Oct 12
Self-hosted ARC on AWSBlacksmith

Measured across 1.7M job runs, September 7 to October 18, 2026.

/ Why Blacksmith
■

Keep your workflows, let us manage everything else

Install the GitHub App and move the jobs you pick with a one-line change. Switching back is a simple revert.

- runs-on: [self-hosted, linux, x64]
+ runs-on: blacksmith-4vcpu-ubuntu-2404
World globe
What stays in GitHub

Workflows

Your workflow files stay in your repo. You choose which jobs move to Blacksmith.

Secrets

Secrets stay in GitHub and work with Blacksmith runners just as they do with your self-hosted runners.

Permissions

Who can run what, branch protection, and required reviews all stay in GitHub.

What moves to Blacksmith

Runners

High-performance, purpose-built compute with unlimited concurrency at no extra cost.

Caches

Dependencies, Docker layers, container images, and Git checkouts are cached with zero configuration.

Operations

We patch CVEs in base images, keep toolchain and dependency versions current, and pull unhealthy machines before your jobs land on them.

Observability

Every job’s logs, resource usage, and test failures in one place, with no agents to install.

Stop managing your own caching

Zero-config caching skips as much of every job as possible. What’s left runs on the fastest, purpose-built infrastructure.

Cache & reuse
  1. Checkout: 18s without cache, 3s with cache
  2. Initialize containers: 12s without cache, 9s with cache
  3. Install dependencies: 42s without cache, 7s with cache
  4. Compile and test: 48s without cache, 8s with cache
  5. Build and push: 54s without cache, 9s with cache

How did job runtimes change after moving to Blacksmith?

Job runtimes

Application builds

  • 2xlarge x86 → 32 vCPU x86
  • 30% less time

Package unit tests

  • 2xlarge x86 → 32 vCPU x86
  • 46% less time

Measured across 28.9K selected job runs, August 17 to September 28, 2026.

Blacksmith by the numbers

90M+
completed jobs a week on Blacksmith runners.
44K
concurrent vCPUs at one customer’s peak.
4
regions across the US and EU.
11 PB+
of Git, Docker, and dependency caches kept warm.
Unlimited
concurrency, at no extra cost.
Flat
per-minute pricing.
World globe