Skip to main content
Version: 11 & 12

pnpm init

Create a package.json file.

Options

--bare

Added in: v10.25.0

Creates a package.json with only the required fields.

--init-type <type>

  • Default: module
  • Type: commonjs, module

Set the module system for the package.

--init-package-manager

Pin the project to a pnpm version.

Since v11, the pin is written as a devEngines.packageManager entry, so the resolved version is captured in pnpm-lock.yaml. Since v11.23.0 it is also written to the legacy packageManager field, as an exact version rather than a ^ range, because Corepack reads only packageManager and accepts nothing but an exact version.

Since v11.25.0 and v12.0.0, the pin can be newer than the pnpm that ran the command, so a project scaffolded by an outdated pnpm no longer inherits that staleness through its own pin (#7490). pnpm looks up the version published under the latest tag on the package-manager registries, and pins it only when it is newer than the running version — the lookup raises the pin, it never lowers it.

Two things follow from that. latest is a tag rather than "the newest release", so the pin tracks whichever line the tag points at: while latest is on the pnpm 11 line, a pnpm 11.20 running pnpm init pins the newest pnpm 11, and a pnpm 12 pins itself, because no pnpm 11 version is newer than it. And when the lookup cannot answer — no network, an unreachable or slow registry, --offline, or a latest that minimumReleaseAge or trustPolicy rejects — the running version is pinned, as before. The lookup never fails or hangs the command.

Inside a workspace subpackage this flag has no effect — the pin is only added to the workspace root's package.json, and the subpackage follows it. Pass --no-init-package-manager to scaffold a manifest with no pin at all.

Configuration

These settings fill in fields of the scaffolded package.json. They may be set in pnpm-workspace.yaml, in the global configuration file, or through the environment as PNPM_CONFIG_INIT_VERSION and friends.

initVersion

  • Default: 1.0.0
  • Type: String

The version written into the new package.json.

initLicense

  • Default: ISC
  • Type: String

The license written into the new package.json.

initAuthorName, initAuthorEmail, initAuthorUrl

  • Type: String

Assembled into the author field, in npm's Name <email> (url) form. A field left unset is left out of the string; with none of the three set, no author field is written.

pnpm-workspace.yaml
initLicense: MIT
initAuthorName: Zoltan Kochan
initAuthorUrl: https://kochan.io
note

pnpm 11 reads these settings; the Rust CLI recognized but ignored them until v12.0.0.