
Task Runner Census 2025
TL;DR - Key Take-aways
GitHub Actions dominates CI/CD, Make is omnipresent, and new package managers like uv and pnpm are popular in new repos.
How and why I counted
Every software project accretes snippets of code for developers to execute that are outside the primary codebase. These are named and saved in shell scripts, configs for build tools, package managers, CI runners, and occasionally just code blocks in the README. To find out what people are actually doing in 2025, I crawled the 100,000 most starred repos on GitHub and checked what config files they had. The primary motivation was figuring out what I should support in dela, my delegating task runner.
The Leaderboards
Most used task runners
Of the top 100,000 starred repos, 72,804 had detectable task runners. For repo counts, y axis is the total number of repos in which a task runner was detected. For star counts, y axis is the cumulative sum of stars in the detected repos. To be included in the chart, the task runner had to appear in at least 100 repos.
Most used since 2025-01-01
Below are charts only for the repositories created since 2025-01-01 that feature in the top 100k starred repositories. 1,127 repositories made this year have made it into the top 100k most starred repos overall. To be included in the chart, the task runner also had to appear in at least 10 of those repositories.
A taxonomy of task runners
There is a continuum of tooling that can execute code, but not all executions could be considered tasks. My criteria is that the tool is meant to work with the repository and has well-known patterns that could be detected from filenames. This means that things like Python scripts and shell scripts are out because their domain of utility can’t be localized to the repository. Any code that is meant to be run by the user rather than by the developer is also out, such as arg parsers for CLI tools. GitHub Actions, on the other hand, are included because they deal with the repository and are run on behalf of the developer even if they are not typically executed locally.
- Build Tool - Tools to manage caching of dependencies when compiling but allow arbitrary code execution.
make
is the prototypical example and is probably the inspiration for most tools in this and other categories. - Package Manager - Package managers like
npm
anduv
can have a list of tasks they execute, even though it is not their primary purpose. - Easy CLI - These are tools that make it easy to create code that is callable from the shell by developers, but not meant to be distributed. Examples include
rake
andinvoke
, which turn Ruby and Python methods into tasks invokable via the shell. - Task Runner - This is a category for pure task runners that aren’t coupled to another major feature;
just
andgo-task
are examples. - CI/CD Tool - Like build tools but running on somebody else’s infrastructure and also allow arbitrary code execution.
- Process Manager - Orchestrate concurrent tasks and supervise their execution. Useful for production servers like
systemd
, but also used in development likeforeman
.
Make & GitHub Actions - General Purpose Leaders
GitHub Actions
appears in 39.8% of the repositories, beating out the next best of 13.9% for Travis CI
and 2.1% for Circle CI
in the CI/CD category. That is an amazing victory for GitHub, because GitHub Actions
only launched in 2019 and was free for public repositories from the start. Travis CI
had a head start with being free for public repositories since 2011, but in 2020 switched to free for open source with manual review on a case-by-case basis only. Circle CI
has been free for open source projects since 2014.
At 49 years old, make
makes its presence seen in 19.0% of the repos. This is remarkable considering how much of present-day software is written in languages that don’t need a build step or have it provided by a special tool in their own ecosystem. I attribute part of its continued success to its ability to be used as a general-purpose task runner via the .PHONY
build targets. Trailing it are bazel
at 1.5% in the build tools category and just
at just 0.4% in the task runner category.
27.2% of the repos did not have a detected task runner at all. The most popular of these is build-your-own-x with 392,036 stars at the time of the scan.
JavaScript ecosystem - pnpm rising
With 28.5% of all repos, npm
is at the top of the pack in the JavaScript ecosystem and makes JS the most popular language ecosystem. In the jockeying for 2nd and 3rd place for JS package managers, pnpm
came out from behind to land in 2nd place for new 2025 repos and 3rd place overall. pnpm
is being used in 22.9% of all new JS repos made since 2025. This is a larger share than yarn
ever had.
repository counts | all time | since 2025 |
---|---|---|
npm | 28,537 | 381 |
yarn | 6,407 | 123 |
pnpm | 2,949 | 34 |
Below chart includes vite
and webpack
to give a better sense of the JavaScript ecosystem even though they doesn’t have task runner capabilities.
Python ecosystem - uv rising
Unlike with npm
, Python’s pip
never had task running capability and the rest of the ecosystem mostly ignored it. This changed in 2024 with the introduction of uv
, a package manager with built-in Python version management, virtual env management, and a task runner. In new 2025 repos, it features in 111 repos, behind pip
’s 359. The scripts for crawling GitHub and analyzing the data for this blog post were managed with uv
; it did the job superbly and I believe it makes the entire Python ecosystem much less frustrating to work with.
Below chart includes pip
to give a better sense of the Python ecosystem even though pip
doesn’t have task runner capabilities.
Appendix
All data was collected between June 28th 2025 and June 30th 2025. It took over 2 days due to throttling by the GitHub API.
Raw Data for repos for all time
repo_count | repo_star_sum | |
---|---|---|
markdown | 93,899 | 257,666,001 |
github-actions | 39,887 | 145,915,497 |
shell | 33,467 | 114,956,898 |
npm | 28,537 | 97,856,719 |
make | 19,032 | 62,019,140 |
travis | 13,854 | 36,280,958 |
pip | 13,631 | 45,815,994 |
gradle | 7,736 | 21,506,934 |
cmake | 6,771 | 21,378,866 |
docker-compose | 6,763 | 28,691,894 |
yarn | 6,407 | 22,940,015 |
maven | 3,653 | 10,743,067 |
pre-commit | 3,632 | 15,923,362 |
webpack | 3,623 | 15,298,638 |
vite | 3,285 | 16,087,352 |
composer | 3,135 | 8,926,252 |
pnpm | 2,949 | 15,273,677 |
rake | 2,347 | 5,621,344 |
rollup | 2,188 | 10,415,155 |
circleci | 2,099 | 8,289,536 |
tox | 1,869 | 5,856,762 |
systemd | 1,867 | 8,184,455 |
vscode | 1,866 | 7,513,544 |
cargo-build | 1,842 | 9,066,070 |
gulp | 1,693 | 5,928,974 |
swiftpm | 1,583 | 5,193,074 |
bazel | 1,490 | 7,193,741 |
grunt | 1,394 | 4,110,083 |
nuget | 1,189 | 3,300,761 |
poetry | 1,060 | 4,014,551 |
lerna | 928 | 4,864,685 |
procfile | 903 | 2,894,180 |
phing | 895 | 2,519,263 |
ant | 895 | 2,519,263 |
gitlab-ci | 829 | 2,075,141 |
azure-pipelines | 777 | 2,838,436 |
uv | 701 | 3,995,535 |
invoke | 661 | 3,022,648 |
turborepo | 608 | 3,682,210 |
meson | 589 | 2,169,901 |
jenkins | 563 | 1,719,842 |
sbt | 445 | 1,100,879 |
supervisord | 392 | 1,685,263 |
fastlane | 367 | 1,208,371 |
just | 355 | 1,364,840 |
buck2 | 349 | 1,202,698 |
mix | 339 | 839,784 |
nx | 311 | 2,014,084 |
leiningen | 297 | 782,857 |
cabal | 283 | 818,680 |
nodemon | 271 | 1,550,398 |
bun-scripts | 252 | 1,180,182 |
shell-alias | 237 | 623,672 |
conan | 226 | 947,116 |
scons | 223 | 692,693 |
task | 218 | 1,002,404 |
drone-ci | 207 | 770,556 |
platformio | 197 | 461,412 |
deno | 188 | 982,639 |
nox | 178 | 654,004 |
pm2 | 122 | 628,557 |
cargo-xtask | 98 | 506,220 |
mise | 94 | 329,008 |
buildkite | 91 | 278,072 |
cake | 87 | 306,508 |
foreman | 86 | 368,333 |
cargo-make | 85 | 559,584 |
pdm | 79 | 209,206 |
parcel | 65 | 364,426 |
ninja | 53 | 312,692 |
ivy | 51 | 203,225 |
mage | 41 | 361,134 |
bitbucket-pipelines | 32 | 109,011 |
earthly | 28 | 193,989 |
rush | 23 | 109,279 |
hatch | 19 | 56,163 |
robo | 15 | 51,481 |
monit | 14 | 111,144 |
doit | 10 | 32,850 |
jbang | 9 | 79,420 |
zed | 6 | 80,746 |
circus | 5 | 6,594 |
forever | 5 | 27,642 |
argc | 3 | 8,707 |
fleet | 0 | 0 |
nur | 0 | 0 |
go-xtask | 0 | 0 |
intellij | 0 | 0 |
Raw Data for repos created since 2025-01-01
repo_count | repo_star_sum | |
---|---|---|
markdown | 1,113 | 2,501,768 |
github-actions | 464 | 1,312,773 |
shell | 416 | 1,010,159 |
npm | 381 | 932,215 |
pip | 359 | 789,240 |
docker-compose | 172 | 441,879 |
make | 154 | 464,705 |
pnpm | 123 | 287,826 |
vite | 114 | 201,220 |
uv | 111 | 305,394 |
pre-commit | 83 | 217,553 |
cmake | 37 | 76,813 |
yarn | 34 | 72,531 |
turborepo | 33 | 76,920 |
cargo-build | 27 | 91,077 |
gradle | 26 | 54,924 |
poetry | 21 | 39,178 |
vscode | 16 | 73,837 |
maven | 16 | 37,993 |
travis | 15 | 42,690 |
supervisord | 15 | 39,830 |
swiftpm | 14 | 48,631 |
invoke | 12 | 17,009 |
webpack | 11 | 21,924 |
bun-scripts | 11 | 21,610 |
rollup | 11 | 16,502 |
composer | 10 | 11,287 |
rake | 9 | 18,844 |
gitlab-ci | 8 | 10,180 |
just | 7 | 37,098 |
deno | 6 | 5,764 |
nx | 6 | 7,261 |
nodemon | 5 | 13,205 |
tox | 5 | 17,944 |
mise | 4 | 6,653 |
shell-alias | 4 | 7,480 |
platformio | 4 | 7,322 |
bazel | 4 | 8,863 |
systemd | 3 | 18,269 |
azure-pipelines | 3 | 3,782 |
pdm | 3 | 9,154 |
nuget | 3 | 4,662 |
procfile | 3 | 5,431 |
nox | 2 | 18,424 |
lerna | 2 | 4,292 |
meson | 2 | 15,532 |
scons | 2 | 17,517 |
gulp | 2 | 2,686 |
foreman | 2 | 6,998 |
task | 2 | 2,447 |
jenkins | 1 | 1,761 |
buildkite | 1 | 6,269 |
circleci | 1 | 1,182 |
conan | 1 | 4,800 |
pm2 | 1 | 613 |
earthly | 1 | 4,369 |
ninja | 1 | 564 |
rush | 1 | 5,721 |
mix | 1 | 1,120 |
fastlane | 1 | 2,002 |
sbt | 1 | 4,203 |
robo | 0 | 0 |
ant | 0 | 0 |
phing | 0 | 0 |
forever | 0 | 0 |
bitbucket-pipelines | 0 | 0 |
buck2 | 0 | 0 |
cabal | 0 | 0 |
cake | 0 | 0 |
cargo-make | 0 | 0 |
cargo-xtask | 0 | 0 |
circus | 0 | 0 |
doit | 0 | 0 |
drone-ci | 0 | 0 |
fleet | 0 | 0 |
go-xtask | 0 | 0 |
parcel | 0 | 0 |
grunt | 0 | 0 |
hatch | 0 | 0 |
intellij | 0 | 0 |
ivy | 0 | 0 |
jbang | 0 | 0 |
leiningen | 0 | 0 |
mage | 0 | 0 |
argc | 0 | 0 |
monit | 0 | 0 |
nur | 0 | 0 |
zed | 0 | 0 |