A Gitea runner polls your Gitea instance, runs Gitea Actions jobs in a container or on the host, and streams the logs back. Until May 2026 the project was called act_runner; release 1.0.0 renamed it to Gitea Runner, with the binary gitea-runner and the image gitea/runner. Self-hosted Gitea ships no hosted runners, so the size of your runner machine sets the speed of your CI. That matters little for a web app and a lot for a C++ or Rust build.
Status: Gitea Actions is on the cirunner.dev roadmap. Our early access starts with GitHub Actions and GitLab CI. This page describes how Gitea support will work.
Where a single Gitea Actions runner stops keeping up
Most Gitea setups start with one runner on a spare VM with capacity: 2. It works until the codebase grows:
- Two parallel jobs share the cores your compiler wants, and the third job waits in the queue.
- arm64 builds need a second machine with its own labels and its own upkeep.
- GPU tests need hardware you cannot justify keeping online all day.
- A persistent runner keeps images, volumes and workspace leftovers, and a full disk stops CI for everyone.
What self-hosting a Gitea runner takes today
The Gitea Actions runner guide covers each step. The outline:
- Get a registration token at instance, organization or repository scope. It stays valid until you reset it.
- Install
gitea-runner, rungitea-runner register, and write aconfig.yamlwith capacity, labels and container options. - Choose between a mounted host Docker socket, the dind image or (from runner 4.1.0) the Kubernetes backend.
- For one job per machine, register with
--ephemeral(Gitea 1.24 and later). Open-source Gitea has no autoscaler, so you write the loop that boots and deletes those machines.
Then you patch the host, prune images, follow runner releases and rename scripts when the project renames itself.
How a custom Gitea runner from cirunner.dev will work
- You create a registration token in Gitea at the scope you want and paste it into the cirunner.dev dashboard.
- You choose a machine in the configurator: more cores and memory than a typical runner VM, x86 or ARM, and a GPU if your tests need one.
- When a job waits, we boot a fresh VM, register an ephemeral runner with the labels you picked, and run the job. Gitea revokes the runner's credentials once it assigns the job.
- Your workflow targets it with
runs-onand a label of your choice. We destroy the VM after the job.
A build cache persists between jobs, so fresh VMs do not mean cold builds. You pay per compute minute.
Gitea runner options compared
| One runner on a spare VM | Your own autoscaled fleet | cirunner.dev (planned) | |
|---|---|---|---|
| Machine size | Fixed | Your choice per pool | Bigger machines, x86 or ARM, optional GPU |
| Isolation | Shared host between jobs | Ephemeral, if you build it | Fresh VM per job |
| Queueing | Limited by capacity | Follows your scaler | Follows your queue |
| Upkeep | Patching, pruning, upgrades | All of that plus the scaler | None on your side |
| Cost model | VM around the clock | Cloud bill plus engineering time | Per compute minute |
Who it is for
Good fit:
- Teams on self-hosted Gitea with builds that scale with cores: C, C++, Rust, Android, game engines, CUDA.
- Projects that need arm64 or GPU jobs and do not want a second runner host to maintain.
- Small teams where the person maintaining the runner also has a product to ship.
Not a fit:
- Pipelines that finish in a couple of minutes on a small VM.
- Jobs that must reach private hosts you cannot open to an outside runner.
FAQ
What is the latest Gitea act_runner version?
act_runner no longer exists under that name. Gitea renamed it to Gitea Runner in release 1.0.0 (May 2026), and the 4.x line was current when we last checked. Versions move fast, so check the Gitea Runner releases page for the newest one. Our setup guide lists what changed between major releases.
Is act_runner the same as gitea-runner?
Yes. Replace act_runner with gitea-runner in scripts and gitea/act_runner with gitea/runner in image references. Registration tokens and labels work the same way.
Can I get a managed Gitea Actions runner today?
Not from cirunner.dev yet. Gitea Actions is on the roadmap; vote for it on the early-access form. Until then the setup guide shows how to run ephemeral runners yourself.
Can a custom Gitea runner serve several repositories?
Yes. Register it with an organization or instance token instead of a repository token. Keep the scope as narrow as your setup allows.
Does the Forgejo runner work with Gitea?
No. Forgejo and Gitea each have their own runner. See the Forgejo runner page if you run Forgejo.
Vote for managed Gitea runners
Gitea Actions is on our roadmap. Vote for it on the early-access form and tell us what your builds need.
Vote for Gitea Actions runners