act: Run GitHub Actions Locally with Docker, and What It Costs You
Run your GitHub Actions locally 🚀
At a glance
- What is it?
- act is a Go-based CLI that executes GitHub Actions workflows on your machine via Docker. It gives fast feedback on workflow edits and can replace a Makefile, but it depends on Docker and may not match GitHub's hosted runners exactly.
- Who is it for?
- Adopt act if you spend significant time iterating on .github/workflows or want a Makefile replacement that reuses your existing CI definitions. Skip it if you cannot run Docker on your machine or if your workflows depend on GitHub-hosted runner specifics that act does not emulate.
- 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 9 days ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- nektos/act72,683 ★ · +1,454
| Repository | 2026-07-28 | 2026-11-13 |
|---|---|---|
| nektos/act | 71.2k | 72.7k |
1,454 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The Problem: Slow CI Feedback Loops and Makefile Duplication
Developers who edit GitHub Actions workflows know the pain: every change to a YAML file requires a commit and a push, then waiting for the runner to spin up. act solves that by running the same workflows on your local machine. The README states two reasons to use it: fast feedback and using it as a local task runner. For the second reason, the author says they love make but hate repeating themselves. With act, you can replace a Makefile with your existing GitHub Actions definitions. This targets developers who already use GitHub Actions and want to shorten the edit-test cycle or unify their task running under one configuration.
How act Executes Workflows: Docker Under the Hood
The mechanism is straightforward. When you run act, it reads the workflow files from .github/workflows/ and determines which actions need to run. It uses the Docker API to pull or build the images defined in the workflow. Then it computes the execution path based on dependencies between jobs. After that, it runs containers for each action using those images. The README claims that environment variables and filesystem are configured to match what GitHub provides. That is a strong claim, and the reality is that matching GitHub's hosted runner environment exactly is hard. But the architecture is clear: act is a Docker orchestration layer on top of your workflow definitions.
Getting Started: Build from Source or Use the User Guide
The README gives manual build instructions. You need the Go version listed in go.mod (the README says currently 1.26.0). Clone the repo with git clone [email protected]:nektos/act.git. Run unit tests with make test. Build and install with make install. There is also a user guide at nektosact.com, which is the primary documentation. The README does not mention package managers or prebuilt binaries, so the only concrete installation path in the README is from source. If you are not comfortable building Go projects, you should check the user guide for other options. The VS Code extension, GitHub Local Actions, is mentioned as a way to run act from the editor, but the README does not give installation details for that either.
Where act Falls Short: Docker Dependency and Environment Gaps
The most obvious limitation is that act requires Docker. If you are on a machine without Docker, or in a restricted environment where Docker is not allowed, act is useless. The README assumes Docker is available. Another limitation is that act approximates GitHub's environment, not replicates it. The README says environment variables and filesystem are configured to match, but that is a best-effort. GitHub-hosted runners have specific software, caches, and system configurations. A workflow that relies on a tool preinstalled on the hosted runner may fail locally if that tool is missing from your Docker image. For complex workflows, the local behavior may diverge.
Alternatives: What Else Can You Do?
The direct alternative is to use GitHub-hosted runners and rely on the commit-push-wait cycle, which act aims to eliminate. Another alternative is to use a CI platform that runs locally, like Jenkins or GitLab CI with a local runner. Those tools have different models: they are not tied to GitHub Actions syntax. If you want to keep your CI configuration in GitHub Actions, act is built specifically for that. If you want a general task runner, you could use make, which act explicitly positions as a replacement. The difference is that act reuses the same YAML workflow files you already have for CI, while make requires a separate Makefile. That is a trade-off: act saves you from duplicating logic at the cost of a Docker dependency and potential environment mismatches.
Maintenance and License: MIT and Active Releases
act is licensed under MIT, which is permissive and allows commercial use without restriction, though you should read the license text for details. The repository is not archived, and the last push was on 2026-11-01, and the latest release is v0.2.95 (2026-11-03), following v0.2.94 and v0.2.93 on 2026-10-31. That suggests active maintenance. The project is written in Go, so building from source requires the Go version in go.mod (currently 1.26.0 per the README). Upgrading act is not covered in the README, but with frequent releases you will likely want to track new versions to get bug fixes and workflow feature support. The README only gives source build instructions, so you may need to rebuild periodically.
Editorial conclusion
Adopt act if you spend significant time iterating on .github/workflows or want a Makefile replacement that reuses your existing CI definitions. Skip it if you cannot run Docker on your machine or if your workflows depend on GitHub-hosted runner specifics that act does not emulate. Before relying on it, verify that your actions' container images are compatible with your local Docker setup, and test a representative workflow to see if environment variables and filesystem behavior match your expectations. act is a practical tool, but it is not a perfect GitHub runner clone.
Frequently asked questions
what is nektos act
act runs your GitHub Actions locally. It reads the workflows in .github/workflows/, uses the Docker API to pull or build the images those workflows reference, resolves the execution order from the dependencies they declare, and then runs a container per action with environment variables and a filesystem configured to match what GitHub provides.
how to install nektos act
The project's from-source path asks for Go tools, a clone of the repository, `make test` to run the unit tests, and `make install` to build and install.
how to use nektos act
You run act inside a repository that has workflow files under .github/workflows/. It determines which actions need to run, prepares their images through the Docker API, works out the execution path from the declared dependencies, and starts a container for each action. The project points at cplee/github-actions-demo as a sample and at nektosact.com for the user guide.
nektos act vscode
There is no editor integration in this repository. The project overview points to a third-party Visual Studio Code extension, GitHub Local Actions, which wraps act so you can run and test workflows without leaving the editor.
nektos act alternative
The project overview links to a community collection of runners at jonico/awesome-runners. The difference in act's own approach is scope: it reproduces GitHub's environment variables and filesystem inside Docker containers rather than reproducing a full hosted runner.
Official sources
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.
[](https://hysenlabs.com/projects/nektos-act)Star history chart for your README
[](https://hysenlabs.com/projects/nektos-act)Was this useful?