Skip to content

Introduction

Actioneer is a small, focused action orchestration library for Node.js and browser environments. It provides a fluent builder for composing activities and a concurrent runner with lifecycle hooks and control-flow semantics (while / until / if / break / continue / split).

It was extracted from a larger codebase to expose a compact API for building pipelines of work that can run concurrently, with hook support and nested pipelines.

When a task grows past “call a few functions in a row,” you usually end up hand-rolling the same machinery: a shared state object threaded through each step, a loop here, a conditional there, some logging around the edges, and a way to run the whole thing across a batch of inputs without melting your event loop.

Actioneer packages that machinery into a small, declarative API:

  • Describe steps, not plumbing. Each step is an activity added with .do(name, operation). Operations receive a shared context object they read from and write to, and return it to pass it to the next step.
  • Control flow is first-class. Loops, conditionals, early exits, and parallel sections are activity modes — not ad-hoc for loops scattered through your code. See Activity Modes.
  • Concurrency is built in. Run one context with run() or fan out across many with pipe() and a concurrency limit.
  • Observability is opt-in. Attach lifecycle hooks to any activity for logging, metrics, setup, and cleanup.

Actioneer is for developers who want to incorporate a pipeline runner into their own projects — batch processors, build steps, data transforms, task queues, scrapers, or any workflow that benefits from composable steps and controlled concurrency.

It is deliberately small and has a single runtime dependency (@gesslar/toolkit). There is no build step, no framework lock-in, and it ships TypeScript declarations for editor support.

Actioneer exports a handful of classes:

ClassRole
ActionBuilderFluent builder for composing activities into a pipeline
ActionRunnerExecutes a pipeline once (run) or concurrently (pipe)
Activity / ACTIVITYActivity definitions and the mode flags (WHILE, UNTIL, IF, BREAK, CONTINUE, SPLIT)
ActionHooksLifecycle hook management (file-based loading in Node.js)
ActionWrapperInternal activity container and iterator
PiperBase concurrent processing with worker pools

Actioneer is environment-aware and automatically detects whether it is running in a browser or Node.js. The browser variant works everywhere — Node.js, browsers, Tauri, Electron, and Deno. The Node.js variant adds file-based hook loading via withHooksFile().

Ready to build something? Head to Installation.