{"record":{"id":"52f0c91c9fca8ad1","repo":"Budibase/budibase","slug":"unsupported-project-package-format-version-mani","errorCode":null,"errorMessage":"Unsupported Project package format version '${manifest.formatVersion}'.","messagePattern":"Unsupported Project package format version '(.+?)'\\.","errorType":"validation","errorClass":"HTTPError","httpStatus":400,"severity":"error","filePath":"packages/server/src/sdk/workspace/projects/backups/imports.ts","lineNumber":653,"sourceCode":"    case ResourceType.SCREEN:\n      return generateScreenID()\n    default:\n      throw new HTTPError(\n        `Project import does not support resource type '${resourceType}'.`,\n        400\n      )\n  }\n}\n\nconst validateManifest = (manifest: ProjectPackageManifest) => {\n  if (!isRecord(manifest)) {\n    throw new HTTPError(\"Project package manifest is invalid.\", 400)\n  }\n  if (manifest.artifactType !== \"project\") {\n    throw new HTTPError(\"Supplied file is not a Project package.\", 400)\n  }\n  if (manifest.formatVersion !== PROJECT_EXPORT_FORMAT_VERSION) {\n    throw new HTTPError(\n      `Unsupported Project package format version '${manifest.formatVersion}'.`,\n      400\n    )\n  }\n  if (\n    !isRecord(manifest.sourceWorkspace) ||\n    typeof manifest.sourceWorkspace.id !== \"string\" ||\n    !isRecord(manifest.resourcesByType) ||\n    !Array.isArray(manifest.unsupportedContent)\n  ) {\n    throw new HTTPError(\"Project package manifest is invalid.\", 400)\n  }\n  for (const count of Object.values(manifest.resourcesByType)) {\n    if (!Number.isInteger(count) || Number(count) < 0) {\n      throw new HTTPError(\"Project package manifest is invalid.\", 400)\n    }\n  }\n  for (const unsupported of manifest.unsupportedContent) {","sourceCodeStart":635,"sourceCodeEnd":671,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/server/src/sdk/workspace/projects/backups/imports.ts#L635-L671","documentation":"Project packages are versioned by manifest.formatVersion, which must exactly equal the server's PROJECT_EXPORT_FORMAT_VERSION constant. This 400 error is thrown when the version differs, protecting the importer from format changes it cannot safely parse. Both older and newer package formats are rejected.","triggerScenarios":"Importing a package exported by a newer Budibase version with a bumped formatVersion; importing a very old export whose formatVersion predates the current constant; a package whose formatVersion field is missing or mis-typed.","commonSituations":"Server rollback then import of recent exports; packages generated by third-party tools guessing the version; partially deployed clusters where server versions differ.","solutions":["Upgrade the server to match the formatVersion used by the exporting version.","Re-export the project from a workspace running a compatible version.","Check the exported formatVersion against the server's PROJECT_EXPORT_FORMAT_VERSION constant.","If hand-authoring packages, set formatVersion to the exact constant value the server expects."],"exampleFix":"// before\n{ \"artifactType\": \"project\", \"formatVersion\": 99 }\n// after (matching PROJECT_EXPORT_FORMAT_VERSION)\n{ \"artifactType\": \"project\", \"formatVersion\": 1 }","handlingStrategy":"validation","validationCode":"if (manifest.formatVersion !== PROJECT_EXPORT_FORMAT_VERSION)\n  throw new Error(`Package formatVersion ${manifest.formatVersion} != supported ${PROJECT_EXPORT_FORMAT_VERSION}`)","typeGuard":null,"tryCatchPattern":"try {\n  await importProjectPackage(file)\n} catch (err) {\n  if (err instanceof HTTPError && err.status === 400 && err.message.includes(\"format version\")) {\n    // upgrade server or re-export from a compatible version\n  }\n  throw err\n}","preventionTips":["Track PROJECT_EXPORT_FORMAT_VERSION changes between releases","Re-export packages after server upgrades","Pin import/export tooling to matching versions"],"tags":["import","format-version","version-mismatch","project-package"],"backgroundTag":"export-version-incompatibility","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}