# What changed in pino

> 27 changes in pino 9 to 10 from its official release notes, upgrade guides and advisories: 2 breaking, 1 deprecations, 2 security, 6 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/pino/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## pino 10

### Breaking changes

- The censor function signature now uses safer types, which may require type adjustments. (10.1.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.0)

### Security

- Invalid NODE_OPTIONS preloads are sanitized for workers, preventing invalid preload configuration from affecting worker execution. (10.3.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.3.1)
- Transport loading is hardened against prototype pollution. (10.1.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.1)

### Deprecations

- Pino warns when formatters.level is incompatible with multi-target transports. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)

### New APIs and options

- The browser logger now provides bindings(). (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- The browser logger now supports redaction configuration. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- The browser logger now provides setBindings. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- Browser logging adds reportCaller to expose the user's callsite. (10.1.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.1)
- Pino now uses @pinojs/redact for redaction. (10.1.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.0)

### Performance

- The fast path uses JSON.stringify on Node.js 25 and newer. (10.1.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.1)

### Behavior and default changes

- The return type of multistream().clone() was improved. (10.3.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.3.0)
- Worker threads now have a name to support transport identification. (10.3.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.3.0)

### Fixes and other changes

- Child binding keys are escaped correctly. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- A named default export is now available. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- multistream clone/add no longer crashes, and missing end/remove methods are fixed. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- Logging objects with an own __proto__ key no longer crashes. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- Redaction shapes are built without Object.prototype. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- Per-target level filtering is now honored for a single-element targets array. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- multistream write now resolves string level labels correctly. (10.4.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.4.0)
- Prevents ERR_WORKER_INVALID_EXEC_ARGV when using monitoring tools. (10.2.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.2.1)
- Prevents a memory leak when using transport with --import preload. (10.2.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.2.0)
- Conditional type handling for generic log function arguments was corrected. (10.1.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.1)
- The %o placeholder now accepts strings, numbers, and null values. (10.1.1) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.1)
- isoTimeNano is now available in nested namespaces. (10.1.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v10.1.0)

## pino 9

### Breaking changes

- Reverts the setlevel option in the 9.x release line, so configurations relying on it should no longer use it. (9.14.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v9.14.0)

### New APIs and options

- Adds the LogFnFields type for developers using Pino's logging function types. (9.14.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v9.14.0)

### Behavior and default changes

- Updates the redaction implementation used by Pino, potentially changing redaction behavior for applications that configure it. (9.14.0) — [release notes](https://github.com/pinojs/pino/releases/tag/v9.14.0)
