pnpm/pnpm · error · PnpmError

VERSIONING_DUPLICATE_RELEASE

VERSIONING_DUPLICATE_RELEASE

Error message

Two projects both release ${identity}: ./${other} and ./${release.dir}. A package name and version identify one published artifact, so same-named projects must release on different version lines (e.g. different lanes or majors).

What it means

Error "Two projects both release ${identity}: ./${other} and ./${release.dir}. A package name and version identify one published artifact, so same-named projects must release on different version lines (e.g. different lanes or majors)." thrown in pnpm/pnpm.

Source

Thrown at pnpm11/releasing/versioning/src/assembleReleasePlan.ts:362

  }

  return { releases }
}

/**
 * A published `package@version` identifies exactly one artifact, so two
 * projects that share a name cannot both release the same version — the
 * registry would reject the second publish, and the name-keyed ledger entry
 * would collide. Caught here, before any manifest is written, naming both
 * directories.
 */
function assertNoDuplicateReleaseIdentity (releases: PlannedRelease[]): void {
  const byIdentity = new Map<string, string>()
  for (const release of releases) {
    const identity = `${release.name}@${release.newVersion}`
    const other = byIdentity.get(identity)
    if (other != null) {
      throw new PnpmError(
        'VERSIONING_DUPLICATE_RELEASE',
        `Two projects both release ${identity}: ./${other} and ./${release.dir}. ` +
        'A package name and version identify one published artifact, so same-named projects must release on different version lines (e.g. different lanes or majors).'
      )
    }
    byIdentity.set(identity, release.dir)
  }
}

function collectParticipants (
  projects: WorkspaceProject[],
  refs: ProjectRefIndex,
  opts: AssembleReleasePlanOptions
): Map<string, Participant> {
  const ignoredDirs = new Set<string>()
  for (const ref of opts.versioning?.ignore ?? []) {
    for (const dir of resolveConfigRef(refs, ref, 'versioning.ignore')) {
      ignoredDirs.add(dir)

View on GitHub (pinned to 6261b7f388)

When it happens

Trigger: Thrown at pnpm11/releasing/versioning/src/assembleReleasePlan.ts:362 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of pnpm/pnpm@6261b7f388 (2026-08-17). Data as JSON: /api/errors/7257bccbac6ee57b. Report an issue: GitHub.