Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslnode 18–223 runs
build_error
glibcnode 18–223 runs
build_error
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
default
✓ import esbuildPluginPino from 'esbuild-plugin-pino'
✗ const esbuildPluginPino = require('esbuild-plugin-pino').default
Plugin provides both ESM default export and CJS module.exports. The require pattern shown is also correct but avoids potential .default issue in mixed environments.
esbuildPluginPino (named)
✓ import { esbuildPluginPino } from 'esbuild-plugin-pino'
✗ import pinoPlugin from 'esbuild-plugin-pino'
Named export available since v2.3.3. Using a different name like pinoPlugin still works but may cause confusion.
type PluginOptions
✓ import type { PluginOptions } from 'esbuild-plugin-pino'
✗ import { PluginOptions } from 'esbuild-plugin-pino'
PluginOptions is a TypeScript type; use type-only import to avoid runtime inclusion.
require (CommonJS)
✓ const esbuildPluginPino = require('esbuild-plugin-pino')
✗ const pino = require('esbuild-plugin-pino')
CommonJS require works as plugin exports a single function. Avoid naming it 'pino' to prevent confusion with the pino logger.
Shows basic usage: import plugin, pass it to esbuild build with transports option, and use pino logger with that transport at runtime.
// esbuild build script with pino plugin
import { build } from 'esbuild';
import esbuildPluginPino from 'esbuild-plugin-pino';
await build({
entryPoints: ['src/index.ts'],
outdir: 'dist',
bundle: true,
plugins: [esbuildPluginPino({ transports: ['pino-pretty'] })],
});
// Then in your application:
import pino from 'pino';
const logger = pino({
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
});
logger.info('Hello from bundled app!');
Errors
Common errors & fixes
Error: Cannot find module 'pino-worker.js'
The plugin-generated worker file is missing in the deployment directory.
fixCopy the entire outdir (including all generated files) to production. Ensure the path matches esbuild's outdir.
Error: The plugin "esbuild-plugin-pino" requires esbuild version >=0.25.0 <=0.25.8 but you have version 0.24.0
Installed esbuild version is outside the plugin's peer dependency range.
fixRun npm install esbuild@0.25.0 (or compatible) and ensure esbuild-plugin-pino version matches.
Error [ERR_REQUIRE_ESM]: require() of ES Module esbuild-plugin-pino not supported
Using CommonJS require() on an ESM-only version of the plugin (pre-2.3.3).
fixUse dynamic import() or switch to ESM. Or update to esbuild-plugin-pino >=2.3.3 which supports both.
TypeError: esbuildPluginPino is not a function
Default import used incorrectly; the plugin may be imported as named export in older versions.
fixUse import esbuildPluginPino from 'esbuild-plugin-pino' (default) or const { esbuildPluginPino } = require('esbuild-plugin-pino'). Audit
Dependencies
esbuildrequiredpeer dependency; the plugin must be used with esbuild >=0.25.0 <=0.25.8
pinorequiredpeer dependency; the plugin bundles pino transports and requires pino runtime
pino-prettyoptionalpeer dependency; required for pino-pretty transport support
thread-streamoptionalpeer dependency; used internally for worker threads