Files
pnpm/pnpr/ui/README.md
Zoltan Kochan 7e4db25f84 feat(pnpr): serve the web UI at /-/ui/ (#16769)
pnpr now serves its web UI at /-/ui/ from the same origin, so the UI
needs no CORS setup and no server URL. The UI ships as the separate
`@pnpm/pnpr-ui` package, an optional peer dependency of `@pnpm/pnpr`.
pnpr finds it next to its own package (npm and pnpm both link a resolved
peer beside the package that declares it), or reads it from `ui.dir`,
and `ui.enabled: false` turns it off.

- Serving: files from the UI directory, `index.html` for every other
  path outside `assets/`, a 404 for a missing hashed asset. The page
  gets a relative `<base>` so deep routes and path prefixes work without
  an absolute Vite base. Responses carry a CSP that keeps scripts and
  requests on this origin.
- The UI source stays on bit.cloud. `pnpr/ui` is a workspace of its own
  that pins `@pnpm/pnpr.apps.pnpr-web` from bit.cloud's registry and
  builds it into `pnpr/npm/pnpr-ui/dist`.
- Release: a `build-pnpr-ui` job builds the bundle. The verify and
  publish jobs download it. The smoke test installs the UI beside the
  wrapper and checks that pnpr serves it. `@pnpm/pnpr-ui` releases in a
  fixed group with `@pnpm/pnpr`.
2026-10-09 00:56:04 +02:00

692 B

pnpr web UI build

Builds the pnpm.pnpr/apps/pnpr-web component from bit.cloud into ../npm/pnpr-ui/dist, the payload of @pnpm/pnpr-ui. The UI's source lives on bit.cloud, not here.

This directory is a pnpm workspace of its own, because its @pnpm/* packages come from bit.cloud's registry.

To ship a new UI version, update the @pnpm/pnpr.apps.pnpr-web pin in package.json, then run pnpm install here and commit the lockfile. The release workflow runs pnpm install --frozen-lockfile and pnpm build here.

To try a build locally:

pnpm install
pnpm build
pnpr --config pnpr.yaml   # with `ui: { dir: <repo>/pnpr/npm/pnpr-ui/dist }`