## Summary The v11 CLI and the Rust engine, matching #14113 (merged) plus its follow-up #14116. Two places told users to update pnpm with Corepack: - The **update notification** printed `corepack use pnpm@<version>` when pnpm ran under Corepack. It now prints pnpm's [standalone install script](https://pnpm.io/installation) — `curl -fsSL https://get.pnpm.io/install.sh | sh -`, or the `Invoke-WebRequest` form on Windows. - **`pnpm self-update`** refused under Corepack with *"You should update pnpm with corepack"*. It now says it cannot update itself under Corepack, and names the standalone install script as the hint. The notification also stopped naming `pnpm add -g pnpm`, which `add` refuses outright (`ERR_PNPM_GLOBAL_PNPM_INSTALL` in the TypeScript CLI, `GlobalError::GlobalPnpmInstall` in the Rust one). `pnpm self-update` is named only where it can replace the executable in use — an install another package manager owns is resolved from that manager's bin directory, so a self-update would land beside it and report success while the old pnpm keeps announcing the update: | `PNPM_HOME` set | under Corepack | suggestion | | --- | --- | --- | | yes | no | `pnpm self-update` | | yes | yes | standalone install script | | no | either | standalone install script | The command has one definition per stack — `standaloneInstallCommand` in `@pnpm/cli.meta`, `standalone_install_command` in `pnpm-config` (beside `PNPM_VERSION`) — shared by the notification and the self-update refusal so the two cannot drift.
@pnpm/cli.default-reporter
The default reporter of pnpm
Installation
pnpm add @pnpm/cli.default-reporter
Usage
import { streamParser } from '@pnpm/logger'
import { initDefaultReporter } from '@pnpm/cli.default-reporter'
const stopReporting = initDefaultReporter({
context: {
argv: [],
},
streamParser,
})
try {
// calling some pnpm APIs
} finally {
stopReporting()
}
pnpm-render bin
Installing this package exposes a pnpm-render bin that reads pnpm-shaped NDJSON from stdin and renders it through the default reporter. This lets external tools that emit pnpm:* log records reuse pnpm's renderer.
For example, pacquet emits the same wire format under --reporter=ndjson (to stderr), so its output can be piped through pnpm-render:
pacquet install --reporter=ndjson 2>&1 >/dev/null | pnpm-render
The redirect (2>&1 >/dev/null) is needed because pacquet writes the NDJSON stream to stderr.
An optional first positional argument sets the command name (defaults to install); pass it to match the verb the producer is running so command-specific renderers behave correctly:
pacquet add lodash --reporter=ndjson 2>&1 >/dev/null | pnpm-render add
Style Guide
- Never use blue or grey as font color as they are hard to read in many consoles.
- Use dim instead of grey
- Use cyan bright instead of blue
- Don't hide the CLI cursor. (It is easier to never hide but it is really needed only when scripts are running.)
- Don't use green and yellow to distinct something.