NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1310 most downloaded on npm
super fast, all natural json logger
Last release 7 months ago
09 Feb 2026
Release timing varies
gaps range from 9 days to 5 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
11 years old
333 releases · first in 2016
docs(help): use formatters since useLevelLabels is deprecated by @arkerone in https://github.com/pinojs/pino/pull/1533
onChild callback with tests and documentation by @Diabl0269 in https://github.com/pinojs/pino/pull/1541Full Changelog: https://github.com/pinojs/pino/compare/v8.4.2...v8.5.0
One column per quarter.
build(deps-dev): bump pino-pretty from 8.1.0 to 9.0.0 by @dependabot in https://github.com/pinojs/pino/pull/1519
Full Changelog: https://github.com/pinojs/pino/compare/v8.4.1...v8.4.2
Add pino-transport-datadog to transports.md by @theogravity in https://github.com/pinojs/pino/pull/1512
Full Changelog: https://github.com/pinojs/pino/compare/v8.4.0...v8.4.1
build(deps): bump real-require from 0.1.0 to 0.2.0 by @dependabot in https://github.com/pinojs/pino/pull/1505
Full Changelog: https://github.com/pinojs/pino/compare/v8.3.1...v8.4.0
Do not assume process.stdout has a file descriptor by @mcollina in https://github.com/pinojs/pino/pull/1503
Full Changelog: https://github.com/pinojs/pino/compare/v8.3.0...v8.3.1
Use https url in package.json homepage field by @glensc in https://github.com/pinojs/pino/pull/1498
Full Changelog: https://github.com/pinojs/pino/compare/v8.2.0...v8.3.0
fix(#1347): added disabled to browser opts for logs by @dancastillo in https://github.com/pinojs/pino/pull/1480
level constructor option by @KoltesDigital in https://github.com/pinojs/pino/pull/1488Full Changelog: https://github.com/pinojs/pino/compare/v8.1.0...v8.2.0
build(deps): bump pnpm/action-setup from 2.2.1 to 2.2.2 by @dependabot in https://github.com/pinojs/pino/pull/1450
Full Changelog: https://github.com/pinojs/pino/compare/v8.0.0...v8.1.0
Remove deprecated API and options in v7 option. by @mcollina in https://github.com/pinojs/pino/pull/1249
Full Changelog: https://github.com/pinojs/pino/compare/v7.11.0...v8.0.0
replace extreme destination with async destination by @mksmtn in https://github.com/pinojs/pino/pull/1402
pino-loki transport by @Julien-R44 in https://github.com/pinojs/pino/pull/1414Full Changelog: https://github.com/pinojs/pino/compare/v7.10.0...v7.11.0
Fix hasOwnProperty usage by @joshkel in https://github.com/pinojs/pino/pull/1359
multistream() from transport by @savardc in https://github.com/pinojs/pino/pull/1398Full Changelog: https://github.com/pinojs/pino/compare/v7.9.2...v7.10.0
Bumped thread-stream to v0.14.0 by @mcollina in https://github.com/pinojs/pino/pull/1377
Full Changelog: https://github.com/pinojs/pino/compare/v7.9.1...v7.9.2
Fix pino.multristream test failure. by @mcollina in https://github.com/pinojs/pino/pull/1373
Full Changelog: https://github.com/pinojs/pino/compare/v7.9.0...v7.9.1
feat: add level number to mixin callback by @techmunk in https://github.com/pinojs/pino/pull/1364
Full Changelog: https://github.com/pinojs/pino/compare/v7.8.1...v7.9.0
Added documentation for MultiStreamRes, StreamEntry, DestinationStream and Level by @dbacarel in https://github.com/pinojs/pino/pull/1342
Full Changelog: https://github.com/pinojs/pino/compare/v7.8.0...v7.8.1
Add flush function to types by @kblcuk in https://github.com/pinojs/pino/pull/1329
flush function to types by @kblcuk in https://github.com/pinojs/pino/pull/1329mixinMergeStrategy (to v7) by @alexpts in https://github.com/pinojs/pino/pull/1336Full Changelog: https://github.com/pinojs/pino/compare/v7.7.0...v7.8.0
Add thread locking action by @jsumners in https://github.com/pinojs/pino/pull/1316
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.5...v7.7.0
build(deps-dev): update pino-pretty requirement from ^v7.4.0 to ^v7.5.0 by @dependabot in https://github.com/pinojs/pino/pull/1307
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.4...v7.6.5
Added SECURITY.md by @mcollina in https://github.com/pinojs/pino/pull/1299
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.3...v7.6.4
fix: passing stream to transport by @climba03003 in https://github.com/pinojs/pino/pull/1286
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.2...v7.6.3
Move from fastify-warning to process-warning by @mcollina in https://github.com/pinojs/pino/pull/1282
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.1...v7.6.2
fix(caller): use calling file name for libraries calling Pino by @FredericEspiau in https://github.com/pinojs/pino/pull/1276
Full Changelog: https://github.com/pinojs/pino/compare/v7.6.0...v7.6.1
fix: type regression on fastify by @climba03003 in https://github.com/pinojs/pino/pull/1246
Full Changelog: https://github.com/pinojs/pino/compare/v7.5.1...v7.6.0
Fix JSDOM TS issue. by @kibertoad in https://github.com/pinojs/pino/pull/1251
Full Changelog: https://github.com/pinojs/pino/compare/v7.5.0...v7.5.1
Clarify that the "Exit logger" does not apply on Node v14+ by @mcollina in https://github.com/pinojs/pino/pull/1240
Full Changelog: https://github.com/pinojs/pino/compare/v7.4.1...v7.5.0
test: make test timeouts configurable by @mhdawson in https://github.com/pinojs/pino/pull/1238
Full Changelog: https://github.com/pinojs/pino/compare/v7.4.0...v7.4.1
build(deps-dev): bump tsd from 0.18.0 to 0.19.0 by @dependabot in https://github.com/pinojs/pino/pull/1231
Full Changelog: https://github.com/pinojs/pino/compare/v7.3.0...v7.4.0
Clarify that watchFileCreated fails are timeouts by @voxpelli in https://github.com/pinojs/pino/pull/1219
watchFileCreated fails are timeouts by @voxpelli in https://github.com/pinojs/pino/pull/1219Full Changelog: https://github.com/pinojs/pino/compare/v7.2.0...v7.3.0
feat: Support bundlers. by @ShogunPanda in https://github.com/pinojs/pino/pull/1209
Full Changelog: https://github.com/pinojs/pino/compare/v7.1.0...v7.2.0
Improve docs and deprecation about prettyPrint by @mcollina in https://github.com/pinojs/pino/pull/1203
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.5...v7.1.0
Flush on exit by @mcollina in https://github.com/pinojs/pino/pull/1185
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.4...v7.0.5
docs: fix pino-abstract-transport and mention hwp by @simoneb in https://github.com/pinojs/pino/pull/1174
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.3...v7.0.4
build(deps): bump actions/checkout from 2.3.4 to 2.3.5 by @dependabot in https://github.com/pinojs/pino/pull/1170
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.2...v7.0.3
build(deps-dev): update pino-pretty requirement from ^v7.0.1 to ^v7.1.0 by @dependabot in https://github.com/pinojs/pino/pull/1155
pino.multistream by @clemyan in https://github.com/pinojs/pino/pull/1152Full Changelog: https://github.com/pinojs/pino/compare/v7.0.1...v7.0.2
Updated install instructions Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0...v7.0.1
Updated install instructions
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0...v7.0.1
The prettyPrint option has been deprecated in favor of the new transport system.
pino.transport()Create a a stream that routes logs to a worker thread that wraps around a Pino Transport.
const pino = require('pino')
const transport = pino.transport({
target: 'some-transport',
options: { some: 'options for', the: 'transport' }
})
pino(transport)
Multiple transports may also be defined, and specific levels can be logged to each transport:
const pino = require('pino')
const transports = pino.transport({
targets: [{
level: 'info',
target: 'pino-pretty'
}, {
level: 'trace',
target: 'pino/file',
options: { destination: '/path/to/store/logs' }
}]
})
pino(transports)
Transports may alternatively be arranged in a pipeline:
const logger = pino({
transport: {
pipeline: [{
target: './my-transform.js'
}, {
// Use target: 'pino/file' to write to stdout
// without any change.
target: 'pino-pretty'
}]
}
})
logger.info('hello world')
For more on transports, how they work, and how to create them see the Transports documentation.
The internal implementation is based on thread-stream ⇗.
We have embedded a part of pino-multi-stream into pino itself, so you would be able to write to multiple streams from the same pino instance:
var fs = require('fs')
var pino = require('pino')
var streams = [
{stream: fs.createWriteStream('/tmp/info.stream.out')},
{level: 'debug', stream: fs.createWriteStream('/tmp/debug.stream.out')},
{level: 'fatal', stream: fs.createWriteStream('/tmp/fatal.stream.out')}
]
var log = pino({
level: 'debug' // this MUST be set at the lowest level of all the destinations
}, pino.multistream(streams))
log.debug('this will be written to /tmp/debug.stream.out')
log.info('this will be written to /tmp/debug.stream.out and /tmp/info.stream.out')
log.fatal('this will be written to /tmp/debug.stream.out, /tmp/info.stream.out and /tmp/fatal.stream.out')
This differs from pino.transport() as all the streams will be executed within the main thread, i.e. the one that created the pino instance.
Types have been added to the the project, so you can now use pino with TypeScript without downloading any additional types: you should remove @types/pino from your project. The following typescript example would now work correctly:
import { pino } from "pino";
const log = pino();
log.info("hello world");
log.error("this is at error level");
log.info("the answer is %d", 42);
log.info({ obj: 42 }, "hello world");
log.info({ obj: 42, b: 2 }, "hello world");
log. info({ obj: { aa: "bbb" } }, "another");
sonic-boom, our fs.createWriteStream() replacement has become safer to use in v2.x.
A few selected changes:
sync: false destinations and transportsThanks to the addition of WeakRef and FinalizationRegistry to JavaScript (available in Node.js v14+) we can automatically flush asynchronous streams when the processes exits without leaking memory.
Check out https://github.com/mcollina/on-exit-leak-free.
prettyPrint optionThe prettyPrint option has been deprecated in favor of the new transport system.
Node.js v10 went out of LTS/Maintenance in April 2021. We are dropping support.
err serializer everywhereWe will start applying the err serializer also to Error objects passed in as first argument to log methods, e.g. log.info(new Error('kaboom')) will pass through the serializer.
Extreme mode has been deprecated in previous release cycle and it has now been removed.
options.level documentation of the child logger by @marcbachmann in https://github.com/pinojs/pino/pull/1125fix missing end quote in docs/transports.md by @xieyuheng in https://github.com/pinojs/pino/pull/1148
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.8...v7.0.0-rc.9
build(deps): bump actions/setup-node from 2.4.0 to 2.4.1 by @dependabot in https://github.com/pinojs/pino/pull/1141
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.7...v7.0.0-rc.8
Remove in-between Transform for file.js by @mcollina in https://github.com/pinojs/pino/pull/1140
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.6...v7.0.0-rc.7
Restore automerge by @kibertoad in https://github.com/pinojs/pino/pull/1135
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.5...v7.0.0-rc.6
Removed deprecated options in pino.child() by @mcollina in https://github.com/pinojs/pino/pull/1124
options.level documentation of the child logger by @marcbachmann in https://github.com/pinojs/pino/pull/1125file.js to package.jsonFull Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.4...v7.0.0-rc.5
Deprecate the prettyPrint option by @mcollina in https://github.com/pinojs/pino/pull/1122
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.3...v7.0.0-rc.4
build(deps): bump actions/setup-node from 2.2.0 to 2.3.0 by @dependabot in https://github.com/pinojs/pino/pull/1070
Full Changelog: https://github.com/pinojs/pino/compare/v7.0.0-rc.2...v7.0.0-rc.3
fix: transport async function example
📚 PR:
removed all outstanding deprecations
All v7.0.0 release notes are included.
pino.transport()Create a a stream that routes logs to a worker thread that wraps around a Pino Transport.
const pino = require('pino')
const transport = pino.transport({
target: 'some-transport',
options: { some: 'options for', the: 'transport' }
})
pino(transport)
Multiple transports may also be defined, and specific levels can be logged to each transport:
const pino = require('pino')
const transports = pino.transport({
targets: [{
level: 'info',
target: 'some-transport',
options: { some: 'options for', the: 'transport' }
}, {
level: 'trace',
target: '#pino/file',
options: { destination: '/path/to/store/logs' }
}]
})
pino(transports)
For more on transports, how they work, and how to create them see the Transports documentation.
Transportsthread-stream ⇗We have embedded a part of pino-multi-stream into pino itself, so you would be able to write to multiple streams from the same pino instance:
var fs = require('fs')
var pino = require('pino')
var streams = [
{stream: fs.createWriteStream('/tmp/info.stream.out')},
{level: 'debug', stream: fs.createWriteStream('/tmp/debug.stream.out')},
{level: 'fatal', stream: fs.createWriteStream('/tmp/fatal.stream.out')}
]
var log = pino({
level: 'debug' // this MUST be set at the lowest level of all the destinations
}, pino.multistream(streams))
log.debug('this will be written to /tmp/debug.stream.out')
log.info('this will be written to /tmp/debug.stream.out and /tmp/info.stream.out')
log.fatal('this will be written to /tmp/debug.stream.out, /tmp/info.stream.out and /tmp/fatal.stream.out')
This differs from pino.transport() as all the streams will be executed within the main thread, i.e. the one that created the pino instance.
Types have been added to the the project, so you can now use pino with TypeScript without downloading any additional types: you should remove @types/pino from your project. The following typescript example would now work correctly:
import { pino } from "pino";
const log = pino();
log.info("hello world");
log.error("this is at error level");
log.info("the answer is %d", 42);
log.info({ obj: 42 }, "hello world");
log.info({ obj: 42, b: 2 }, "hello world");
log. info({ obj: { aa: "bbb" } }, "another");
Node.js v10 went out of LTS/Maintenance in April 2021. We are dropping support.
err serializer everywhereWe will start applying the err serializer also to Error objects passed in as first argument to log methods, e.g. log.info(new Error('kaboom')) will pass through the serializer.
Add option mixinMergeStrategy by @alexpts in https://github.com/pinojs/pino/pull/1328
mixinMergeStrategy by @alexpts in https://github.com/pinojs/pino/pull/1328Full Changelog: https://github.com/pinojs/pino/compare/v6.13.4...v6.14.0
Move from fastify-warning to process-warning by @mcollina in https://github.com/pinojs/pino/pull/1283
Full Changelog: https://github.com/pinojs/pino/compare/v6.13.3...v6.13.4
* Disable 100% coverage check Full Changelog: https://github.com/pinojs/pino/compare/v6.13.2...v6.13.3
Full Changelog: https://github.com/pinojs/pino/compare/v6.13.2...v6.13.3
Support the newer pino-pretty as well as the older in v6.x by @mcollina in https://github.com/pinojs/pino/pull/1117
Full Changelog: https://github.com/pinojs/pino/compare/v6.13.1...v6.13.2
Reduce verbosity of deprecation warnings #1092
refactor: deprecate child bindings apply options
📚 PR:
docs/lts.md (#1069)[Docs] document that .child() call triggers level-change event.
📚 PR:
.child() call triggers level-change event. (#1014)quick-format-unescaped@^4.0.3 is fixed
📚 PR:
Nothing published for this version
Merge pull request #957 from mendeljacks/patch-1
📚 PR:
Update errors documentation #948 #949
var with let and const #947 #950Bump up pino-std-serializers dependency
📚 PR:
docs: upgrade all available http links to https
📚 PR:
address destructuring mergeObject in docs
📚 PR:
* integrate fast-redact v3 #917
Your coding agent can read these notes before it upgrades. Set up the MCP server →