Open-source project
actions/runner avatar
actions/runner

actions/runner: self-hosting the GitHub Actions job executor

The Runner for GitHub Actions :rocket:

6,296 stars1,441 forksC#MIT

At a glance

What is it?
actions/runner is the C# application that executes a job from a GitHub Actions workflow, both on GitHub's hosted machines and on your own hardware. It is MIT licensed, the repository is not archived, and the last push was on 2026-09-22, but GitHub states it is not taking contributions right now.
Who is it for?
Adopt actions/runner if you need jobs to execute on hardware or networks GitHub's hosted machines cannot reach, and you accept that the README says GitHub is not taking contributions to this repository at this time, while still providing security updates and fixes for major breaking changes. Do not adopt it expecting to patch the runner yourself: the same note directs questions to Community Discussions and high priority bugs to support.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What actions/runner actually executes

A GitHub Actions workflow file describes jobs, but something has to take a job and run it on a machine. That something is actions/runner. The README describes it plainly: "The runner is the application that runs a job from a GitHub Actions workflow." GitHub uses it inside the hosted virtual environments, and the same application is what you install when you self-host a runner in your own environment.

The audience is therefore narrower than the repository's name suggests. It is not a tool you add to an application's dependency list. It is infrastructure software for people who need job execution to happen somewhere GitHub does not provide: inside a private network, on a specific operating system version, next to a licensed toolchain, or on hardware with particular CPU or GPU characteristics. If your workflows already run acceptably on hosted runners, the runner binary gives you nothing extra to install.

The mechanism: a job listener on your machine

The application is written in C# and lives under src/ in the repository, with build and packaging scripts in scripts/ and platform prerequisites documented in docs/start/. A runner is registered against a repository or organisation, then stays resident and waits for work. When a workflow job is assigned to it, the runner downloads the job definition and the actions it references, executes the steps, and reports logs and results back.

That is the whole data flow, and it explains the operational consequences. Because the runner is a long-lived process on a machine you control, the machine's state is your problem: leftover files, cached credentials, installed SDKs and running containers persist between jobs unless your workflow cleans them. Because it downloads actions at job time, the machine needs outbound network access to GitHub and to wherever action sources live. Neither of those properties is a defect; they are what self-hosting means. The README does not document a sandbox boundary around job execution, so isolation has to come from the host, a container, or a separate machine.

Installing the runner and running a first job

The README does not put install commands inline. It routes readers to platform prerequisite documents and to the releases page: docs/start/envwin.md, docs/start/envosx.md and docs/start/envlinux.md for prerequisites, and https://github.com/actions/runner/releases for downloads. Follow those documents for your platform before doing anything else, since the prerequisites differ per operating system.

Once the archive is unpacked, the runner has to be registered against a repository or organisation. The README does not reproduce the registration steps itself; it points to GitHub's help pages for adding self-hosted runners and for using self-hosted runners in a workflow, which is where the exact configuration commands and the runs-on label syntax belong. Read those two pages before starting, because the runner repository does not restate them.

What the repository does give you is the layout to check once the archive is extracted: scripts/ holds the build and packaging scripts, and docs/start/ holds the per-platform prerequisite notes. Confirm your machine satisfies the relevant env document first. For a service that survives logout, the platform prerequisite documents are the place to look, not the README.

Contribution is closed, which changes what you can do with a bug

The most consequential fact in the README is not technical. It states that GitHub is "not taking contributions" to this repository at this time, that resources are being directed to other areas of Actions, and that questions and support requests go to the Community Discussions area. High priority bugs go to Community Discussions or to GitHub support, and security issues follow SECURITY.md.

The note does add a commitment: security updates will still be provided, and major breaking changes will be fixed. Read that as a maintenance floor rather than an open development process. If you find a defect that is not a security issue and not a major breaking change, the README offers no path to a fix beyond reporting it. That is a real constraint for teams that expected to carry local patches or upstream a change. The repository is not archived and the last push was on 2026-09-22, so the code is current, but currency is not the same as openness to your patch.

Where a self-hosted runner is the wrong answer

Untrusted code is the clearest failure case. A self-hosted runner executes workflow steps on a machine you own, and the README's description of the runner as the thing that runs a job carries no promise of isolation. If pull requests from outside contributors can trigger workflows on that runner, you have given those contributors a path onto your host. GitHub's own documentation, which the README links to, is the authority on this, and the runner repository does not contradict it.

Scale is the second case. Hosted runners are provisioned per job by GitHub. A self-hosted runner is a machine you keep running and patch yourself, and the README documents no autoscaling or ephemeral provisioning behaviour. Teams that self-host for cost reasons on bursty workloads often find they have traded a per-minute bill for idle capacity and an operating burden. Neither trade is wrong, but the runner repository does not make the decision for you.

The alternative: let GitHub run the job

The direct alternative is the hosted virtual environments the README names, which use this same runner application under GitHub's control. The difference is not the executor, it is who owns the machine. With hosted runners, GitHub provisions a fresh environment per job, so state does not carry across runs and you do not patch the operating system. With a self-hosted runner, you get control over the environment at the cost of owning its lifecycle.

A second alternative is a container-based CI system that runs on your own cluster. The README gives no comparison here, so the honest distinction is architectural: actions/runner is bound to the GitHub Actions job model and to workflows defined in GitHub, while a cluster-native CI system defines its own pipeline format and its own scheduling. If your pipelines already live in GitHub, moving them is a rewrite, not a configuration change.

Licence and upgrade cost

The repository carries the MIT licence, which is permissive and places few conditions on reuse or redistribution; the LICENSE file at the repository root is the text that governs, and this is not legal advice. Note that the licence covers the runner code, not the GitHub service it talks to, and not the actions your workflows download.

Upgrades are tag-driven. Releases are published as versioned tags, with v2.337.0, v2.336.0 and v2.335.1 among the recent ones, and releaseNote.md and releaseVersion sit at the repository root. Because the install path is a release archive rather than a package manager, upgrading means fetching the new archive and replacing the runner, and the README does not document rollback. Plan for that: keep the previous version's directory until the new one has run a job successfully, and read releaseNote.md before replacing anything.

Editorial conclusion

Adopt actions/runner if you need jobs to execute on hardware or networks GitHub's hosted machines cannot reach, and you accept that the README says GitHub is not taking contributions to this repository at this time, while still providing security updates and fixes for major breaking changes. Do not adopt it expecting to patch the runner yourself: the same note directs questions to Community Discussions and high priority bugs to support. Before rolling it out, read docs/start/envlinux.md, envwin.md or envosx.md for the prerequisites of your platform, and check releaseVersion against the newest tag under releases, since the README points readers there for downloads rather than to a package repository.

Frequently asked questions

What is the actions/runner used for?

It is the application that runs a job from a GitHub Actions workflow. GitHub uses it in its hosted virtual environments, and you can self-host it in your own environment.

Where do I download actions/runner for Linux, macOS or Windows?

The README points to the releases page at https://github.com/actions/runner/releases for all three platforms, and to docs/start/envlinux.md, docs/start/envosx.md and docs/start/envwin.md for the prerequisites of each.

Is GitHub still accepting contributions to actions/runner?

No. The README states that GitHub is not taking contributions to this repository at this time and directs questions and support requests to the Community Discussions area, while still providing security updates and fixing major breaking changes.

Official sources

  1. actions/runner on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/actions-runner.svg)](https://hysenlabs.com/projects/actions-runner)