One line in your workflowruns-on: ciproxy

Pay less for CI. Keep your jobs fast.

ciproxy runs your GitHub Actions jobs on your own machines first, and starts runners in your Boat account only when they are full.

Free for one machine and 2,000 starts a month.

mokly-aiJobsLive

Your machines18 of 18 slots busy

  • hetzner-ax42-1
  • hetzner-ax42-2
  • hetzner-ax42-3
Boat46 running

12 jobs wait for a slot. Each starts on Boat after 30 seconds.

Boat this month$61.20 of $200

Running64

  • build (linux-x64)mokly v0.19.0hetzner-ax42-13m 02s
  • build (linux-arm64)mokly v0.19.0hetzner-ax42-23m 01s
  • e2e (chromium) 1/4mokly #1544Boat1m 12s
  • e2e (chromium) 2/4mokly #1544Boat1m 12s
  • test (rust)mokly #1544hetzner-ax42-32m 40s
  • clippymokly #1544Boat58s
  • unit (node 24)mokly-cloud #319Boat44s
Illustration of the Jobs page at a release peak.

How it works

Set up once. Change one line.

ciproxy registers every runner for you. Your workflows keep their YAML, apart from one line.

01

Install the GitHub App

Pick your organization and its repositories on GitHub. ciproxy asks to manage runners and to read your workflow runs.

ciproxy asks GitHub for

  • Self-hosted runners · read and write
  • Metadata · read
  • Actions · read
02

Add your machines

Run one command on each Linux machine. The agent connects out to ciproxy and keeps warm runners ready.

On each machine
curl -fsSL https://get.ciproxy.dev \  | sudo sh -s -- install \    --token …
03

Change runs-on

Point a workflow at ciproxy. Its jobs start on your machines, and on Boat when they are full.

.github/workflows/ci.yml
  jobs:    test:-     runs-on: ubuntu-latest+     runs-on: ciproxy

Features

Your machines first. The cloud when they are full.

ciproxy decides where each runner starts, so your hardware stays busy and no job waits for long.

Own machines first

Jobs with runs-on: ciproxy start at once on warm runners on your machines, each in a fresh VM.

Overflow on demand

When every slot is busy, ciproxy starts runners in your Boat account, billed by the second, up to the limit you set.

Transparent cache

actions/cache reads and writes on the local disk of the machine. Your workflows stay as they are.

Savings report

See what your jobs cost each day, next to the same jobs on GitHub-hosted runners and Blacksmith.

Secure by default

A fresh VM for every job, an agent that only connects out, and a GitHub App with three permissions.

Open-source agent

Read and audit the code that runs on your machines. The agent is open source under Apache-2.0.

Cost

The same jobs for up to 80% less

Your own machine against the same job minutes on Blacksmith and on GitHub-hosted runners.

$838.80a month less than Blacksmith

With ciproxy$198
Blacksmith$1,036.80
GitHub-hosted$1,555.20
Hetzner AX42
$119.00
ciproxy Team with 30,000 extra starts
$79.00
Total with ciproxy
$198.00

One new Hetzner AX42 at its list price runs jobs in every minute of a 30-day month, at 5 minutes a job. See the calculation

Pricing

Start free. Upgrade when your CI grows.

Plans count the jobs that ciproxy starts. Every limit is soft, so your jobs keep running past it.

Free

$0a month

2,000 starts a month
1 own machine

Team

$49a month

25,000 starts a month
3 own machines

Business

$299a month

150,000 starts a month
10 own machines

Security

Your code stays in your accounts

Jobs run on your machines and in your Boat account. Code and secrets go from GitHub straight to the runner; ciproxy decides only where the runner starts.

  • A fresh VM for every job

    Each job starts in a new VM, so it never reads the files or secrets of another job.

  • An agent that connects out

    Your machines open no inbound ports. The agent connects out to ciproxy.

  • Three GitHub permissions

    The GitHub App manages self-hosted runners, lists your repositories, and reads the branch and the event of each run.

  • Trusted cache writes

    Only jobs on the default branch write to shared caches, so a pull request cannot poison them.

Run your next job on your own machine

Free for one machine and 2,000 starts a month.