Introducing Frunk
Sep 18, 2025
Frunk shipped last week to make npm scripts feel modern again. It is a fast, lightweight runner that cracks open your package.json
scripts, runs what needs to run in parallel, and keeps the output readable even when everything fires at once.
frunk [lint,typecheck]->[test:*]
Why we built it
Our projects lean heavily on npm scripts for day-to-day workflows. Existing runners either forced everything into a linear queue or dumped a wall of logs once you turned on parallelism. Frunk keeps the convenience of script orchestration while understanding dependencies, deduping shared setup tasks, and finishing groups before cascading to the next sequence.
Highlights
- Parallel by default, with
->
chains for the few moments you need ordering - Pattern matching for script groups like
build:*
,*:dev
, and!test:e2e
- Dependency graph awareness so shared scripts only execute once per run
- Clean prefixes and aligned output that make long-running tasks easy to follow
Get started
Install it as a dev dependency and start replacing nested scripts with a single call:
pnpm add -D frunk
{
"scripts": {
"dev": "frunk [*:dev]",
"test": "frunk [lint,typecheck]->[test:*]"
}
}
We are already using Frunk in our own repos and would love feedback. Open an issue, send a PR, or just npm run dev
and watch it go.