Files
pnpm/pnpr/docs/installation.md
Zoltan Kochan bbae0b99fe fix(pnpr): bind authorization to immutable account and team IDs (#17824)
Use immutable account IDs for authorization and credential ownership.
Keep usernames as mutable login/display attributes, and retain deleted
accounts under generated names while allowing their original names to
be registered with fresh IDs.

Apply the same separation to teams and SCIM resources. Bind OIDC subjects
and group grants to explicit account/team IDs. Keep SCIM names as a
projection of the authoritative account store, and preserve account IDs
across password changes and htpasswd credential imports.

Store account IDs in package ownership, tombstones, staged uploads,
publication idempotency, and persistent principals. Keep registry package
and version keys as natural namespace identities.

Replace the experimental native auth format and SQL schema directly,
without migrations or compatibility aliases. Update configuration,
management APIs, bootstrap output, documentation, and registry fixtures.
Preserve joined token-owner lookups and use bulk account projections.
2026-11-07 10:54:10 +01:00

1.9 KiB

id, title
id title
installation Installation

pnpr is distributed on npm as @pnpm/pnpr. The npm wrapper requires Node.js 18 or newer. Install it globally:

pnpm add -g @pnpm/pnpr@next

Until the first stable release, every pnpr version is a prerelease published under the next dist-tag, so install @pnpm/pnpr@next.

The wrapper package resolves to the native binary published under @pnpm/pnpr.<platform>-<arch> (e.g. @pnpm/pnpr.linux-x64). Prebuilt binaries are available for:

  • linux-x64, linux-arm64
  • linux-x64-musl, linux-arm64-musl
  • darwin-x64, darwin-arm64
  • win32-x64, win32-arm64

Only the binary matching your platform is downloaded.

Container image

pnpr is also published as the ghcr.io/pnpm/pnpr container image:

docker run -p 127.0.0.1:7677:7677 -v pnpr-storage:/pnpr/storage ghcr.io/pnpm/pnpr:<version>
  • The entrypoint is pnpr. Arguments after the image name replace the default command, serve --listen 0.0.0.0:7677 --storage /pnpr/storage --cache /pnpr/cache.

  • /pnpr/storage and /pnpr/cache are volumes. Only /pnpr/storage holds data that must survive.

  • The default command passes --storage /pnpr/storage, so the bundled config keeps users.json and tokens.db in that volume. Pass the same flag when you replace the command, for example to create an account:

    docker run --rm -it -v pnpr-storage:/pnpr/storage ghcr.io/pnpm/pnpr:<version> add-user alice --storage /pnpr/storage
    
  • The server runs as the non-root pnpr user.

  • The example publishes the port on loopback only. pnpr serves plain HTTP, so put a TLS-terminating proxy in front before clients on other machines log in.

Verify the installation

pnpr --version

Next steps

Continue to the Quick start to run the server and point a client at it.