GitHub Actions vs CircleCI
GitHub Actions is CI built into GitHub, with jobs of up to 6 hours on runners in Azure and an open-source runner you can host for free. CircleCI is a separate CI platform that works with your Git host, with jobs of 1 to 5 hours by plan, newer M4 Pro Macs, more GPU types and a self-hosted Server edition.
The companies and products
GitHub Actions
GitHub Actions is GitHub's CI/CD service: workflows in your repository run as jobs on runners that GitHub hosts or that you host yourself.
GitHub Actions is a CI service, not a sandbox API. Each job on a GitHub-hosted runner gets a new VM, Linux and Windows on Azure and macOS on GitHub's own Mac fleet, with passwordless sudo, and the VM is gone when the job ends. It is built for building, testing and deploying the code in a repository, and GitHub's own Copilot cloud agent and the Claude and Codex agents on GitHub also run on Actions runners.
- Job length
- Each job can run for up to 6 hours
- Self-hosted runners
- Open-source runner under MIT; usage on self-hosted runners is free
CircleCI
CircleCI is a CI and CD platform that runs your pipeline jobs on machines it hosts, or on runners you host.
You describe jobs in a config file, and each job runs on a fresh Docker container or a machine VM (Linux, Arm, Windows, macOS on Apple M4 Pro, or GPU on Scale), then the machine is discarded. Files move between jobs only through caches, workspaces and artifacts. It is a CI service, not an agent sandbox, so this page compares where they overlap: a machine where a job or an agent does its work. CircleCI also has Chunk, a toolkit that starts its own agent tasks in CircleCI Cloud from a prompt.
Which use cases each one fits
For each use case, Battleships prices every sandbox provider on the same workload and sorts them from the cheapest monthly bill up. “100th cheapest of 377” means 99 of the other 376 providers run that workload, with every feature it needs, for less. “With limits” means the provider runs it but misses something, so it is listed after every full match. Open a use case for its whole ranking and what each provider misses.
| Use case and its workload | GitHub Actions: price rank | CircleCI: price rank | boat: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month A coding agent that builds a whole app needs one machine for hours with its files in place, and both throw the machine away after each job, at 6 hours on GitHub Actions and 3 hours on CircleCI Performance. | 298th of 367, with limits $5,853 a month | 333rd of 367, with limits $8,692 a month | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB An assistant that lives on its machine all month fits neither CI service, while boat has no session cap on paid plans and keeps the disk. | 333rd of 366, with limits $10,692 a month | 340th of 366, with limits $13,137 a month | 5th cheapest of 366 $657 a month |
| Code interpreter bursts 100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month | 294th of 345, with limits $721 a month | 285th of 345, with limits $572 a month | 186th of 345, with limits $2,000 a month |
| Sandboxes for your users 300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month Neither takes inbound traffic for your users, and GitHub's terms rule out offering Actions as a service; boat gives each sandbox HTTPS on up to 50 ports and raw TCP. | 308th of 361, with limits $2,892 a month | 316th of 361, with limits $3,702 a month | Cheapest of 361 $209 a month |
| RL rollouts 1,000 at once · 2 vCPU / 4 GB · 1,000,000 sessions of 3 min a month | 304th of 360, with limits $14,721 a month | 310th of 360, with limits $17,882 a month | 34th of 360, with limits $2,000 a month |
| Agent evals 250 at once · 4 vCPU / 8 GB · 15,000 sessions of 20 min a month | 303rd of 364, with limits $1,962 a month | 318th of 364, with limits $2,877 a month | 10th cheapest of 364 $200 a month |
| CI runners 40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month This is what both are built for; in our CI runners scenario GitHub Actions comes to $1,012 a month and CircleCI to $4,302, while boat runs the same jobs on full VMs for $86 but has no pipeline service. | 100th cheapest of 377 $1,012 a month | 136th cheapest of 377 $4,302 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB A dev box has to stay up and keep what you installed; both CI services start each job from a fresh image, and only CircleCI offers SSH, through a job rerun. | 279th of 368, with limits $159 a month | 197th of 368, with limits $508 a month | 18th cheapest of 368 $26 a month |
| Computer-use agents 50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month Both run headless jobs with no desktop to drive, while boat streams a 60fps Linux desktop with Chromium and computer use. | 292nd of 369, with limits $1,768 a month | 320th of 369, with limits $2,589 a month | 6th cheapest of 369 $200 a month |
| Browser-use agents 50 at once · 2 vCPU / 4 GB · 30,000 sessions of 10 min a month | 135th of 367, with limits $942 a month | 116th of 367, with limits $1,293 a month | 7th cheapest of 367 $200 a month |
| Scraping & bots (startup scale) 50 at once · 1 vCPU / 2 GB · 100,000 sessions of 3 min a month | 134th of 346, with limits $1,184 a month | 70th cheapest of 346 $860 a month | 6th cheapest of 346 $90 a month |
| Mass scraping & bots (undetectable) 1,000 at once · 1 vCPU / 2 GB · 3,000,000 sessions of 2 min a month | 301st of 338, with limits $28,971 a month | 274th of 338, with limits $17,532 a month | 71st of 338, with limits $1,800 a month |
| Parallel red teaming 200 at once · 2 vCPU / 4 GB · 5,000 sessions of 30 min a month | 70th of 360, with limits $467 a month | 80th of 360, with limits $852 a month | 2nd cheapest of 360 $200 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month Both have GPU runners for CI, a T4 on GitHub Team and Enterprise and T4, A10G and V100 classes on CircleCI Scale, but neither is priced in this scenario, and boat has no GPUs. | Can't run it | Can't run it | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month Both host macOS: GitHub Actions on M1, M2 Pro and Intel runners, CircleCI on Apple M4 Pro with Xcode; boat runs Linux only. | 25th of 36, with limits $1,178 a month | 34th of 36, with limits $2,262 a month | Can't run it |
Key features
| Feature | GitHub Actions | CircleCI | boat |
|---|---|---|---|
| Kind of product | CI service built into GitHub; workflows live in the repository | Separate CI platform; pipelines run from a config file in your repository | Sandbox API: create, stop, fork and reach machines from your code |
| Isolation | New VM per job on Azure (Linux, Windows) or GitHub's Mac cloud, with passwordless sudo | Containers on the Docker executor; a fresh VM per job on machine, Windows and macOS executors | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemd |
| How long one job or machine runs | Up to 6 hours per job on every plan | 1 hour on Free, 3 on Performance, 5 on Scale | No session cap on paid plans; you set the time to live |
| Files after a run | Fresh VM each job; carry files with cache, artifacts or custom images | Machine is discarded; carry paths with caches, workspaces and artifacts | Whole disk saved every minute and on stop; a stopped sandbox costs nothing |
| Fork | No; custom images are a template for new larger runners | No fork of a job; Chunk sidecar snapshots replace the source sidecar | Fork a running sandbox with its disk |
| Docker and nested virtualization | Docker and KVM on Linux runners, after adding the runner user to the KVM group | Docker and sudo on machine executors; nested virtualization on the Android machine image | Docker, root, systemd and /dev/kvm on every machine |
| Getting into the machine | No inbound connections and no first-party SSH | Rerun a job with SSH, for the user who started it; no exposed ports | SSH, HTTPS URLs for up to 50 ports, raw TCP, dedicated IPv4 or IPv6 |
| Desktop and computer use | Headless runners; browsers preinstalled for tests | Headless jobs; browsers in images for tests | Linux desktop streamed at 60fps, Chromium, computer use API |
| Coding agents | Copilot cloud agent, plus Claude and Codex in public preview, working on issues and pull requests on Actions runners | Chunk starts CircleCI's own agent tasks from a prompt; other agents you install in a job yourself | Claude Code, Codex and five more preinstalled, driven from outside with a prompt, steer and events API |
| Keeping API keys out of the machine | Secrets enter the job as inputs or environment variables | Contexts inject secrets as environment variables; OIDC for cloud logins | Credentials proxy for model providers and any HTTPS API; switch a credential to another account when credits run out |
| Operating systems | Linux x64 and arm64, Windows x64 and arm64, macOS on M1, M2 Pro and Intel | Linux on x86 and Arm, Windows, macOS on Apple M4 Pro with Xcode | Linux x64 only |
| GPUs | NVIDIA T4 larger runners on Team and Enterprise Cloud | P4, T4, A10G and V100 classes on the Scale plan | None |
| Self-hosting | Open-source runner under MIT on your own machines, free to use | Self-hosted runners, and CircleCI Server on your own Kubernetes on AWS or GCP | No |
| Regions | Azure; larger runners can join your Azure network in regions across the US, EU and APAC | US only: AWS us-east-1 and us-east-2, GCP us-east1 and us-central1 | EU only (Germany, Finland, France), with EU data residency |
Every feature Battleships tracks (43)
| Feature | GitHub Actions | CircleCI | boat |
|---|---|---|---|
| Full VM (own kernel) | Yes | Yes | Yes |
| Docker inside | Yes | Yes | Yes |
| Nested virtualization | Yes | Yes | Yes |
| Root | Yes | Not published | Yes |
| Systemd | No | No | Yes |
| Desktop GUI | No | No | Yes |
| Browser | Yes | Yes | Yes |
| Computer-use API | No | No | Yes |
| SSH | No | Yes | Yes |
| Persistent disk | No | No | Yes |
| Pause/resume | No | No | Yes |
| Automatic snapshots | No | No | Yes |
| Fork/clone | No | No | Yes |
| Live fork (no pause) | No | No | Yes |
| Memory fork | No | No | No |
| Custom image (Docker or snapshot) | Yes | Yes | Yes |
| ≥24 h sessions | No | No | Yes |
| Idle auto-stop | Yes | Yes | No |
| Wake on request | No | No | No |
| HTTPS preview URLs | No | No | Yes |
| Raw TCP inbound | No | No | Yes |
| Public IPv4 | No | No | No |
| Egress allowlist | Yes | No | No |
| Secret proxy | No | No | Yes |
| Secret proxy for any API | No | No | Yes |
| Preinstalled agents | Yes | No | Yes |
| Agent harness API | Yes | Yes | Yes |
| MCP server | Yes | Yes | No |
| GPU | Yes | Yes | No |
| Windows | Yes | Yes | No |
| Arm64 | Yes | Yes | No |
| Self-hosting | Yes | Yes | No |
| BYOC | No | No | No |
| Open source | Yes | No | No |
| Scoped API keys | Not published | Not published | Yes |
| Spend limits | Yes | Not published | Yes |
| Usage per sandbox (API) | Yes | Yes | Yes |
| Audit logs | Yes | Yes | No |
| SSO | Yes | Yes | No |
| SOC 2 | Yes | Yes | No |
| HIPAA | No | No | No |
| EU data residency | Yes | No | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
There is no comparable CPU measurement for GitHub Actions runners or CircleCI executors: neither was part of the StarSling hpc-sandbox-benchmarks run. On that Node.js build-and-test benchmark at 4 vCPU / 8 GB, boat did 26.69 runs per second on dedicated AMD Ryzen 9 9950X hosts.
Node.js build-and-test loop at 4 vCPU / 8 GB, higher is better. Measured with the open hpc-sandbox-benchmarks suite. GitHub Actions and CircleCI have no published run in this suite yet, so there is no like-for-like number to compare.
Pricing in five scenarios
Each bill is priced from the providers' public price lists by the open Battleships engine, with the cheapest plan that runs the scenario.
| Scenario | GitHub Actions, a month | CircleCI, a month | boat, a month |
|---|---|---|---|
| One coding agent, workdays 4 vCPU / 8 GB, 50 GB disk, 8 hours a day, 22 days a month, files kept between days | $80 · Team · with limits | $96 · Performance · with limits | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $354 · Team · with limits | $508 · Performance · with limits | $26 · $20/mo |
| 50 agents in parallel 50 machines of 4 vCPU / 8 GB at once, 8-hour sessions, 1,100 sessions a month, Docker inside | $3,814 · Team · with limits | $5,714 · Performance · with limits | $317 · $20/mo × 3 seats |
| Sandboxes for your users 2 vCPU / 4 GB, 30,000 sessions of 10 minutes a month, up to 300 at once | $1,092 · Enterprise Cloud · with limits | $1,617 · Performance · with limits | $200 · $100/mo × 2 seats |
| 1,000 short jobs at once 2 vCPU / 4 GB, 1,000 at once, 3 minutes each, 200,000 jobs a month | $2,721 · Enterprise Cloud · with limits | $3,562 · Performance · with limits | $2,000 · $2000/mo · with limits |
GitHub Actions: GitHub bills per minute per job, rounding each job up to the next whole minute, from $0.006 a minute for 2-core Linux. Plans include monthly minutes for standard runners only, such as 2,000 on Free, and larger and GPU runners are always billed.
CircleCI: CircleCI bills in credits per minute for the machine class a job uses. Free includes 30,000 credits a month, Performance starts at $15 a month, and more credits cost $15 per 25,000; Scale is custom and billed annually.
CircleCI: Plans start at $20 a month, and the whole fee is usage credit spent per second while a sandbox runs. A stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
For agent work the job limit bites first: 6 hours on GitHub Actions and 3 hours on CircleCI Performance, after which the machine and everything on it is gone, so none of the agent scenarios fit either one as priced. For many jobs at once, GitHub stops at 500 concurrent jobs on Enterprise Cloud and CircleCI at 80 on Performance, so 1,000 short jobs wait in a queue on both. boat's limits are a sandbox count per plan and starts per minute, and its $2,000 plan queues starts above 90 a minute.
| Scenario | GitHub Actions | CircleCI | boat |
|---|---|---|---|
| One coding agent, workdays |
|
| None that bite |
| One agent that never stops |
|
| None that bite |
| 50 agents in parallel |
|
| None that bite |
| Sandboxes for your users |
|
| None that bite |
| 1,000 short jobs at once |
|
|
|
Which one should you use?
Use GitHub Actions when
your code lives on GitHub and you want CI with no extra service, jobs up to 6 hours, free self-hosted runners, or Copilot, Claude and Codex working on your issues and pull requests.
- Already inside GitHub. If your code is on GitHub, workflows run from pushes and pull requests with no second service, account or webhook to set up.
- A free runner you host. Teams with their own machines can run the open-source runner on them, and GitHub charges nothing for those minutes.
- Longer jobs and more regions. Jobs can run up to 6 hours on any plan, and larger runners can join your Azure network in the US, EU or APAC.
Use CircleCI when
you want a CI platform apart from your Git host, Apple M4 Pro Macs for iOS builds, more GPU types, SSH into a failed job, or the whole service on your own Kubernetes.
- Newer Macs for Apple builds. Teams building iOS or Mac apps get Apple M4 Pro machines with many Xcode versions, even one job at a time on Free.
- More GPU choices. Teams whose tests need a GPU can pick T4, A10G or V100 classes on the Scale plan.
- SSH into a failed job, or host the whole platform. You can rerun a job with SSH to debug it, and CircleCI Server runs the whole service on your own Kubernetes.
Where boat fits
Both are CI services, and for building and testing code you should pick one of them. If what you are really running is AI agents that work for hours, keep their files, run servers people visit or click through a browser, both CI services make you squeeze that into short jobs on throwaway machines. boat gives each agent a full Linux VM that stays.
A machine that outlives the job
An agent on GitHub Actions stops at 6 hours, and on CircleCI Performance at 3. Both throw the machine away, so the next job reinstalls tools and reclones the repo, or you pay to save and restore caches each time.
Reachable from outside, with a desktop
Neither takes inbound traffic: GitHub runners have no ports or SSH, and CircleCI only lets the job's author SSH into a rerun. A preview server or a webhook needs a third-party tunnel, and there is no screen for computer use.
Agents driven from outside, keys kept out
GitHub's agents work through issues and pull requests, and CircleCI's Chunk runs only its own tasks. Both put secrets in the job as environment variables, where an agent hit by a prompt injection can read them.
Use boat when what you run is AI agents on Linux: one full VM that keeps its disk and runs past any job limit, with Docker and /dev/kvm, a 60fps desktop, URLs you can reach and real API keys kept out of the machine. Compare it one to one: boat vs GitHub Actions and boat vs CircleCI.
Questions people ask
Is GitHub Actions cheaper than CircleCI?
In our CI runners scenario, yes: GitHub Actions comes to $1,012 a month against $4,302 on CircleCI. For one coding agent on workdays it is $80 against $96, though neither fits that job, because both cap how long a job runs. boat runs the CI scenario for $86 a month.
Which is faster, GitHub Actions or CircleCI?
We have no comparable CPU measurement for either: neither was part of the hpc-sandbox-benchmarks run. boat did 26.69 runs per second on that test at 4 vCPU / 8 GB.
How long can a job run on each?
Up to 6 hours on GitHub Actions on every plan. On CircleCI it is 1 hour on Free, 3 on Performance and 5 on Scale. A boat sandbox has no session cap on paid plans.
Can GitHub Actions and CircleCI run Docker?
Yes. Both run Docker on their Linux VMs, and both support KVM for Android emulators: GitHub after you add the runner user to the KVM group, CircleCI on its Android machine image. boat has Docker, systemd and /dev/kvm on every machine.
Can I run AI coding agents on GitHub Actions or CircleCI?
GitHub runs Copilot, and Claude and Codex in preview, on Actions runners for work on issues and pull requests. CircleCI has Chunk for its own agent tasks, and on either you can install an agent as a job step. The run ends with the job, and the agent can read the secrets passed in.
Is boat SOC 2 compliant?
SOC 2 is in progress. We're open about where we stand: live status at status.ascii.dev and our data retention policy at docs.boat.dev/data-retention.
Try boat
Install the CLI, then run boat new.
7-day free trial
More comparisons
- boat vs GitHub Actions
- boat vs CircleCI
- GitHub Actions vs Blacksmith
- GitHub Actions vs Depot
- GitHub Actions vs WarpBuild
- GitHub Actions vs Buildkite
- GitHub Actions vs GitLab.com hosted runners
- GitHub Actions vs Bitrise
- GitHub Actions vs Codemagic
- GitHub Actions vs RunsOn
- GitHub Actions vs Ubicloud
- CircleCI vs Blacksmith