runner

Universal project task runner. Auto-detects toolchain, provides unified CLI.

v0.7.0 · github.com/kjanat/runner · MIT


The npm package is a façade — installs only the prebuilt binary for your platform via optionalDependencies. No postinstall, no network at install time.


runner
runner 0.7.0
  Package Managers    bun, pnpm
  Task Runners        turbo, just
  Node                22 (.nvmrc), current v22.11.0 (ok)
  Monorepo            yes

  package.json    build               compile the thing
  package.json    test                run tests
  package.json    dev                 start dev server
  justfile        ci, fmt, release
  justfile (aliases) b  build, t  test

run test
› bun test 

Drop one line in your shell rc. Now <TAB> hits the binary and asks this project what tasks it knows about — grouped by source, with descriptions. Same line registers both runner and run.

cd ~/some-project
runner <TAB>
-- package.json --
build      compile the thing
test       run tests
dev        start dev server
-- justfile --
ci         lint + tests
fmt        format
release    cut a release
-- justfile (aliases) --
b          → build
t          → test
-- Commands --
list       list tasks
info       show detected project
clean      clean build artefacts 

Path-typed flags like --dir <TAB> delegate to the shell's own file completer.

~/, globs, and cdpath all work.


Package managers · 12

  • npm
  • yarn
  • pnpm
  • bun
  • cargo
  • deno
  • uv
  • poetry
  • pipenv
  • go
  • bundler
  • composer

Task runners · 6

  • turbo
  • nx
  • make
  • just
  • go-task
  • mise

Task sources · 6

  • package.json
  • turbo.json
  • Makefile
  • justfile
  • Taskfile
  • deno.json

nx and mise are detection-only for now.


  1. Auto-detection picks the right tool from your lockfiles. No flags, no config.
  2. One CLI across npm, yarn, pnpm, bun, cargo, deno, uv, poetry, pipenv, go, bundler, composer.
  3. Aggregates tasks from package.json, turbo.json, Makefile, justfile, Taskfile, deno.json — qualified syntax (run package.json:test) when names collide.
  4. Monorepo-aware: turbo, nx, pnpm, npm/yarn workspaces, Cargo workspaces.
  5. No task by that name? Falls through to the package manager's exec primitive — npx, bunx, pnpm exec, uv run, etc.