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

  1. Make `dependencies` a JSON object keyed by package name, e.g. {"foo": {"uri": ..., "checksums": ...}}.
  2. Regenerate the package metadata with `pkl project package` rather than hand-crafting it.
  3. Check the schema version of the metadata and upgrade the tooling that produced it.
  4. 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

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.