BoundaryML/baml · error
unsupported manifest schema {schema}
Error message
unsupported manifest schema {schema} What it means
validate_schema also rejects schema values that differ from MANIFEST_SCHEMA in the other direction: any schema less than the current one (after ruling out newer schemas) bails with "unsupported manifest schema {schema}". The wrapper only understands exactly one schema version; older manifest formats are intentionally not supported.
Source
Thrown at baml_language/crates/baml_release/src/manifest.rs:134
validate_schema(self.schema)?;
validate_artifacts(&self.version, &self.artifacts)
}
pub fn artifact_for_target(&self, target: &str) -> anyhow::Result<&Artifact> {
self.artifacts.get(target).ok_or_else(|| {
anyhow::anyhow!("target {target} not built for wrapper {}", self.version)
})
}
}
fn validate_schema(schema: u32) -> anyhow::Result<()> {
if schema > MANIFEST_SCHEMA {
anyhow::bail!(
"manifest schema {schema} is newer than this wrapper; run `baml self-update`"
);
}
if schema != MANIFEST_SCHEMA {
anyhow::bail!("unsupported manifest schema {schema}");
}
Ok(())
}
fn validate_artifacts(version: &str, artifacts: &BTreeMap<String, Artifact>) -> anyhow::Result<()> {
let expected: std::collections::BTreeSet<_> =
SUPPORTED_RELEASE_TARGETS.iter().copied().collect();
let actual: std::collections::BTreeSet<_> = artifacts.keys().map(String::as_str).collect();
if actual != expected {
anyhow::bail!("manifest for {version} has target set {actual:?}; expected {expected:?}");
}
for (target, artifact) in artifacts {
validate_artifact(target, artifact)?;
}
Ok(())
}
fn validate_artifact(name: &str, artifact: &Artifact) -> anyhow::Result<()> {View on GitHub (pinned to bd85ce9dee)
Solutions
- Re-fetch the manifest from the current release so its schema matches MANIFEST_SCHEMA.
- Delete stale cached manifests and re-run the install/update command.
- Stop hand-editing the `schema` field; let the tool regenerate manifests.
- If you must support old formats, upgrade the wrapper rather than downgrading schema expectations.
Example fix
// before let m = parse(cached_manifest_from_v0_90)?; // schema 1 // after let fresh = download_manifest(current_version)?; let m = parse(fresh)?;
Defensive patterns
Strategy: try-catch
Validate before calling
if manifest.schema < KNOWN_MAX_SCHEMA && manifest.schema != CURRENT_SCHEMA {
eprintln!("stale manifest schema {}; re-fetch current manifest", manifest.schema);
} Try / catch
match parse_manifest(json) {
Err(e) if e.to_string().contains("unsupported manifest schema") => { re_fetch_current_manifest()?; parse_manifest(&fresh_json) }
r => r,
} Prevention
- Always parse freshly fetched manifests, not cached/archived copies.
- Never hand-edit the schema field of manifests.
- Purge stale manifest caches when upgrading tooling.
When it happens
Trigger: Parsing a manifest whose `schema` field is a valid u32 but lower than MANIFEST_SCHEMA, passed through validate() -> validate_schema(); e.g. a cached or archived manifest from an old release.
Common situations: Air-gapped environments replaying cached manifests from old releases; restoring an old wrapper data directory; manifests copied from an old project's vendored files; tampered or hand-edited schema fields.
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
- manifest schema {schema} is newer than this wrapper; run `ba
- invalid SHA-256 checksum `{hash}`
- manifest for {version} has target set {actual:?}; expected {
- sdk {language} has an empty registry, package, or version
- Cannot generate HIR/bytecode due to validation errors
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/5834de0747b4bbf2.
Report an issue: GitHub.