apple/pkl · error · PackageLoadError
projectDependenciesLocalDependencyOutOfSync
projectDependenciesLocalDependencyOutOfSync
Error message
projectDependenciesLocalDependencyOutOfSync
What it means
Local package dependencies must always be exactly in sync: the version of the declared package must equal the version recorded in PklProject.deps.json. When a project declares a dependency on a local package whose version differs from the resolved local dependency's version, this PackageLoadError is thrown, telling you to re-run `pkl project resolve`.
Source
Thrown at pkl-core/src/main/java/org/pkl/core/module/ProjectDependenciesManager.java:120
// turn `package:` scheme into `projectpackage`: scheme
var uri = PackageUri.create("project" + localProjectDependencies.myPackageUri());
if (localPackageDependencies.containsKey(uri)) {
return;
}
var resolvedDeps = doBuildResolvedDependenciesForProject(localProjectDependencies, projectDeps);
localPackageDependencies.put(uri, resolvedDeps);
// TODO: check circular imports (should not be possible)
for (var declaredDeps : localProjectDependencies.localDependencies().values()) {
ensureLocalProjectDependencyInitialized(declaredDeps, projectDeps);
}
}
private void checkProjectDependencyOutOfDate(
URI projectFileUri, PackageUri declaredPackage, Dependency resolvedDependency) {
// local dependencies must match up exactly (they are expected to always stay in sync).
if (resolvedDependency instanceof LocalDependency localDependency
&& !declaredPackage.getVersion().equals(localDependency.getVersion())) {
throw new PackageLoadError(
"projectDependenciesLocalDependencyOutOfSync",
projectFileUri,
declaredPackage.getDisplayName(),
resolvedDependency.getPackageUri().getDisplayName());
}
if (resolvedDependency.getVersion().compareTo(declaredPackage.getVersion()) < 0) {
throw new PackageLoadError(
"projectDependenciesOutOfDateInProject",
projectFileUri,
declaredPackage.getDisplayName(),
resolvedDependency.getPackageUri().getDisplayName());
}
}
private Map<String, Dependency> doBuildResolvedDependenciesForProject(
DeclaredDependencies declaredDeps, ProjectDeps resolvedProjectDeps) {
var ret =
new HashMap<String, Dependency>(View on GitHub (pinned to f3efcbfc9b)
Solutions
- Run `pkl project resolve` in the project directory to regenerate PklProject.deps.json.
- Make the declared dependency version match the local package's current version (align the version fields).
- Commit PklProject.deps.json together with any local-package version bump so they stay in sync.
- If the version change was accidental, revert the local package's version back to the resolved value.
Example fix
# before: local package version bumped, deps file stale # PklProject: version 2.0.0, PklProject.deps.json: 1.5.0 # after $ pkl project resolve # regenerates PklProject.deps.json with version 2.0.0
Defensive patterns
Strategy: try-catch
Validate before calling
#!/bin/sh # before evaluating, verify local deps are in sync pkl project resolve --dry-run 2>/dev/null || pkl project resolve
Try / catch
try {
depsManager.resolvedDeps();
} catch (PackageLoadError e) {
if (e.getMessage().contains("local package whose version doesn't match")) {
throw new BuildException("Local dependency out of sync; run 'pkl project resolve'", e);
}
throw e;
} Prevention
- Always run `pkl project resolve` after bumping a local package's version.
- Commit PklProject.deps.json together with PklProject version changes in the same commit.
- Add a pre-commit/CI check that re-resolves and diffs PklProject.deps.json.
- Never hand-edit PklProject.deps.json for local dependencies.
When it happens
Trigger: checkProjectDependencyOutOfDate is called from doBuildResolvedDependenciesForProject when resolvedDependency is a LocalDependency and declaredPackage.getVersion() does not equal localDependency.getVersion() — i.e. the local package's PklProject version was edited without re-resolving dependencies.
Common situations: Bumping the version of a locally developed package and forgetting to run `pkl project resolve`; a teammate edited the local package version; generated PklProject.deps.json is stale relative to the workspace.
Related errors
- projectDependenciesOutOfDateInProject
- projectDependenciesOutOfDateInPackage
- cannotResolveInLocalDependencyNotGlobbable
- cannotResolveInLocalDependencyNotGlobbableNorLocal
- unresolvedProjectDependency
AI-assisted analysis of apple/pkl@f3efcbfc9b (2026-09-08).
Data as JSON: /api/errors/0a1ec33a76d73b1f.
Report an issue: GitHub.