apple/pkl · error · FormatException
object
Error message
object
What it means
DependencyMetadata.parseDependencies throws FormatException("object", deps.getClass()) when the top-level `dependencies` value inside a package's dependency metadata JSON is not a JSON object. The parser expects an object mapping package names to RemoteDependency objects; receiving an array, string, number, or null makes the metadata unusable. This indicates a malformed dependency-metadata file.
Source
Thrown at pkl-core/src/main/java/org/pkl/core/packages/DependencyMetadata.java:146
version,
packageZipUrl,
packageZipChecksums,
dependencies,
sourceCodeUrlScheme,
sourceCode,
documentation,
license,
licenseText,
authors,
issueTracker,
description,
annotations);
}
private static Map<String, RemoteDependency> parseDependencies(Object deps)
throws JsonParseException {
if (!(deps instanceof JsObject dependencies)) {
throw new FormatException("object", deps.getClass());
}
var ret = new HashMap<String, RemoteDependency>(dependencies.size());
for (var key : dependencies.keySet()) {
var remoteDependency =
dependencies.get(
key,
(dep) -> {
if (!(dep instanceof JsObject obj)) {
throw new FormatException("object", dep.getClass());
}
var checksums = obj.get("checksums", DependencyMetadata::parseChecksums);
var packageUri = obj.get("uri", PackageUtils::parsePackageUriWithoutChecksums);
return new RemoteDependency(packageUri, checksums);
});
ret.put(key, remoteDependency);
}
return ret;
}View on GitHub (pinned to f3efcbfc9b)
Solutions
- Make `dependencies` a JSON object keyed by package name, e.g. {"foo": {"uri": ..., "checksums": ...}}.
- Regenerate the package metadata with `pkl project package` rather than hand-crafting it.
- Check the schema version of the metadata and upgrade the tooling that produced it.
- Re-download/re-publish the package if the metadata came from a corrupted artifact.
Example fix
// before (metadata JSON)
{"dependencies": ["foo", "bar"]}
// after
{"dependencies": {"foo": {"uri": "package://example.com/foo@1.0.0", "checksums": {}}}} Defensive patterns
Strategy: validation
Validate before calling
// Pre-validate package metadata JSON shape
var root = new com.fasterxml.jackson.databind.ObjectMapper().readTree(metadataJson);
if (root.has("dependencies") && !root.get("dependencies").isObject())
throw new IllegalStateException("metadata 'dependencies' must be a JSON object"); Prevention
- Generate package metadata with `pkl project package`, never by hand.
- Validate metadata JSON against the expected schema before publishing.
- Keep metadata-producing tooling in sync with the Pkl version's schema.
- Round-trip test published artifacts by re-parsing their metadata.
When it happens
Trigger: Parsing package metadata (e.g. from a package tarball's .pkl/metadata or registry response) where the `dependencies` field is an array/string instead of an object — typically from a hand-written or tool-misgenerated metadata file.
Common situations: Publishing a package with metadata generated by a custom script writing `dependencies` as a list; manually editing metadata JSON and changing the shape; registry serving an unexpected schema version.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
AI-assisted analysis of apple/pkl@f3efcbfc9b (2026-09-08).
Data as JSON: /api/errors/d3ba5083f61fa319.
Report an issue: GitHub.