{"record":{"id":"d96c933318b48dcf","repo":"Budibase/budibase","slug":"latest-release-is-not-marked-as-svelte-5-compatibl","errorCode":null,"errorMessage":"Latest release is not marked as Svelte 5 compatible","messagePattern":"Latest release is not marked as Svelte 5 compatible","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/server/src/sdk/plugins/update.ts","lineNumber":309,"sourceCode":"      continue\n    }\n\n    let directory: string | undefined\n    let cleanupDirectory: string | undefined\n    try {\n      const release = await fetchLatestRelease(plugin.origin.repo, token)\n\n      if (!release || !shouldUpgrade(plugin.version, release.version)) {\n        continue\n      }\n\n      const download = await githubUpload(plugin.origin.url, plugin.name, token)\n      directory = download.directory\n      cleanupDirectory = download.cleanupDirectory\n\n      const svelteMajor = extractSvelteMajor(download.metadata)\n      if (typeof svelteMajor !== \"number\" || svelteMajor < 5) {\n        throw new Error(\"Latest release is not marked as Svelte 5 compatible\")\n      }\n\n      const originUpdate = {\n        ...plugin.origin,\n        etag: release.etag ?? plugin.origin.etag,\n        latestKnownVersion: release.version,\n        lastCheckedAt: new Date().toISOString(),\n      }\n\n      const stored = await pro.plugins.storePlugin(\n        download.metadata,\n        directory,\n        PluginSource.GITHUB,\n        originUpdate\n      )\n\n      clientAppSocket?.emit(\"plugin-update\", {\n        name: stored.name,","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/server/src/sdk/plugins/update.ts#L291-L327","documentation":"applyPluginUpdates downloads a plugin's latest release and extracts the Svelte major version from the downloaded metadata. Plugins must declare Svelte 5+ compatibility on this branch; if extractSvelteMajor returns a non-number or a value below 5, the update is rejected with this error.","triggerScenarios":"Automatic plugin update (checking plugin origins for newer releases) where the newly downloaded latest release's metadata lacks a svelteMajor field or declares svelteMajor < 5.","commonSituations":"A plugin maintainer published a new release built with the old Svelte 4 toolchain; the plugin's schema.json omitted svelteMajor; a repo regressed to an older build config between releases.","solutions":["Wait for/ask the maintainer to publish a release built with Svelte 5 and svelteMajor >= 5 metadata.","Pin the plugin to its current (last-known-good) version so auto-update stops pulling the incompatible release.","Skip/disable auto-update for this plugin origin until a compatible release exists.","If you own the plugin repo, fix the build config to emit svelteMajor: 5 and cut a new release."],"exampleFix":"// before (schema.json in new release)\n{ \"metadata\": { \"name\": \"x\" } }\n// after\n{ \"metadata\": { \"name\": \"x\", \"svelteMajor\": 5 } }","handlingStrategy":"try-catch","validationCode":"const svelteMajor = extractSvelteMajor(download.metadata)\nif (typeof svelteMajor !== \"number\" || svelteMajor < 5) skipUpdate(plugin)","typeGuard":"const isSvelte5Compat = (m: unknown): m is { svelteMajor: number } => typeof m === \"object\" && m !== null && typeof (m as any).svelteMajor === \"number\" && (m as any).svelteMajor >= 5","tryCatchPattern":"try {\n  await applyPluginUpdates(plugin)\n} catch (e) {\n  if (e.message.includes(\"Svelte 5\")) {\n    // keep current version; record incompatibility and skip auto-update\n  } else {\n    throw e\n  }\n}","preventionTips":["Pin plugin origins to known-compatible versions","Only publish plugin releases built with Svelte 5 tooling","Verify svelteMajor metadata in the packaged artifact before tagging","Treat this error as 'stay on current version', not a hard failure"],"tags":["plugins","update","svelte"],"backgroundTag":"plugin-svelte-version-incompatible","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}