DevFlow

Installation

Install DevFlow CLI with npx create-devflow (no global install needed), or add it globally with npm/pnpm/yarn/bun. Works with any Node.js >= 18 project.

Requirements

  • Node.js >= 18.0.0 — 18, 20 and 22 are supported and tested
  • A JavaScript or TypeScript project with a package.json (DevFlow reads it to detect the package manager and the stack)
  • macOS, Linux, or Windows through WSL2
  • A Git repository, if you want the Husky hooks to be active

DevFlow has no native binary dependencies, so there is nothing to compile and no platform-specific download.

No installation required — run it directly:

npx create-devflow

This always fetches the latest published version.

Global Installation

npm install -g create-devflow

Then use it anywhere:

devflow
# or
create-devflow

Project-Local Installation

If you want to pin the version in your project:

npm install -D create-devflow

Add a script to package.json:

{
  "scripts": {
    "devflow": "devflow"
  }
}

This is the right choice in a repository that generates its own workflow, because the version is pinned in the lock file and every machine runs the same one.

Verify Installation

devflow --version
devflow --help

--version prints the published version of the package you are running — it reads it from the installed package.json, so it always matches what npm gave you.

Package Managers

DevFlow works with all major package managers. The package manager is detected from the lock file, and every generated file — the CI workflow, the Dockerfile, the install commands — is written for the detected manager.

Package managerRun DevFlow withLock file used in the generated files
npmnpx create-devflowpackage-lock.json
pnpmpnpm dlx create-devflowpnpm-lock.yaml
yarnyarn dlx create-devflowyarn.lock
bunbunx create-devflowbun.lock

Override the detection when you need to:

devflow --pm pnpm

Package managers in the generated configuration

Package managerInstall command in CIScript prefixNotes
npmnpm cinpm runUses the frozen lock file, so the CI build fails if the lock file is out of date.
pnpmpnpm install --frozen-lockfilepnpm runCorepack is enabled first, so the pnpm version comes from the packageManager field.
yarnyarn install --frozen-lockfileyarn runCorepack is enabled first.
bunbun install --frozen-lockfilebun runBun is installed by oven-sh/setup-bun; there is no node_modules cache to restore.

The run prefix is always explicit, because bun build is Bun's bundler rather than the build script in your package.json.

Next steps

On this page