// the find
creationix/step
An async control-flow library that makes stepping through logic easy.
Step is a serial/parallel async control-flow library for Node.js from 2011, predating Promises and async/await. It solved a real problem at the time by chaining callbacks via `this` as the next step's callback. In 2026, there is no reason to adopt this.
- The core idea is genuinely clever: using `this` as the continuation callback keeps step definitions clean and avoids deeply nested anonymous functions.
- Parallel execution and dynamic grouping are both handled, which was non-trivial to get right in raw callback code.
- The library is a single file (lib/step.js), so the entire implementation is auditable in minutes.
- Abandoned since 2017. Node.js has had native async/await since v7.6 (2017) — this library's entire reason for existing is gone.
- Using `this` as a magic callback means arrow functions break it silently, which was already a footgun when ES6 shipped.
- No TypeScript types, no maintained npm package, install instructions still reference copying files into `$HOME/.node_libraries` — a pattern Node dropped over a decade ago.
- Error handling relies on throwing inside step functions, which works inside the chain but offers no story for unhandled rejections or async errors that escape the step boundary.