avvio is a Node module for asynchronous bootstrapping, designed to load plugins or components in the right order with error handling. It supports a reentrant, graph-based load flow where plugins can be loaded within other plugins, and the application can start after the loading queue finishes. It is useful for structuring startup logic in applications that need ordered, dependent initialization.
Project status
- Actively maintained: Recent activity is very current (last upstream push on 2026-08-11, and an update released 2026-07-15), indicating ongoing development.
- Update cadence: There were frequent updates in 2026 (v9.2.0 on 2026-02-13, then v9.3.0 on 2026-07-15), with a longer gap before the 2026 burst (v9.1.0 on 2024-10-15).
AI summary generated
Recent updates
v9.3.0
v9.3.0 primarily upgrades development dependencies (TypeScript, borp, c8, neostandard, @types/node) and includes a refactor to standardize entry points. It also includes a fix intended to prevent stack overflows in ready callbacks. The release notes do not spell out the implications of the entry point changes for deep imports or TypeScript import style.
v9.2.0
v9.2.0 is primarily a tooling and test modernization release, with multiple dependency bumps (notably TypeScript and @types/node) and widespread migration from tap to node:test/borp. It also adds support for Symbol.asyncDispose to improve developer experience in short lived processes.
Featuresv9.1.0
v9.1.0 adds support for synchronous plugins that do not declare a callback (done) parameter. The implementation changes how Plugin.prototype.exec decides when to call done for plugins based on the function arity, and the README was updated to document the new signature expectations.
Featuresv9.0.0
v9.0.0 focuses on typing fixes (notably expose close/onClose and expose timeout), an improved error message (original function name for AVV_ERR_READY_TIMEOUT), and CI/test updates. However, the code diff also reveals removal of the `avvio.express` helper export, and a major dependency bump to `@fastify/error` that is not mentioned in the release notes.
Breakingv8.4.0
v8.4.0 primarily corrects TypeScript typings for the `expose` option (adding `close` and `onClose`) and for the `timeout` option. It also improves the timeout error behavior by reporting the original plugin function name in `AVV_ERR_READY_TIMEOUT` instead of the internal wrapped function name.
v8.3.2
v8.3.2 mainly updates CI and addresses an issue with plugin timeout counting when plugins are nested. The code change adjusts how the effective timeout is computed for plugins during loading, and a new test was added to lock in the expected behavior.
v8.3.1
v8.3.1 makes small maintenance changes and a targeted fix around plugin execution when nested plugins do not call next. It also introduces timing-related logic to adjust timeouts for certain nested execution flows and adds a regression test.
v8.3.0
v8.3.0 is a substantial internal refactor of avvio, splitting core logic into new modules (plugin, thenify, time-tree, promise helpers) and replacing some older implementations with built-in Node utilities and shared error handling. Release notes mainly describe chores and internal extracts, plus a TypeScript typing fix for `use()` options as a function.
Featuresv8.2.1
v8.2.1 is a maintenance release focused on CI, dev tooling, and a couple of runtime fixes around bootstrapping error handling. Code changes primarily refactor internal callback helpers, adjust prototype checking to use Object.prototype.isPrototypeOf, and fix an error queue edge case when timeout is 0.
v8.2.0
v8.2.0 primarily updates CI configuration and development tooling (tap, standard, Node types) and refactors internal timing/debug infrastructure. It also changes boot behavior so that when the ready callback is provided, the start is scheduled via a microtask. Additionally, queue-microtask is removed from dependencies in favor of a different microtask approach.