Budibase/budibase · error

Latest release is not marked as Svelte 5 compatible

Error message

Latest release is not marked as Svelte 5 compatible

What it means

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.

Source

Thrown at packages/server/src/sdk/plugins/update.ts:309

      continue
    }

    let directory: string | undefined
    let cleanupDirectory: string | undefined
    try {
      const release = await fetchLatestRelease(plugin.origin.repo, token)

      if (!release || !shouldUpgrade(plugin.version, release.version)) {
        continue
      }

      const download = await githubUpload(plugin.origin.url, plugin.name, token)
      directory = download.directory
      cleanupDirectory = download.cleanupDirectory

      const svelteMajor = extractSvelteMajor(download.metadata)
      if (typeof svelteMajor !== "number" || svelteMajor < 5) {
        throw new Error("Latest release is not marked as Svelte 5 compatible")
      }

      const originUpdate = {
        ...plugin.origin,
        etag: release.etag ?? plugin.origin.etag,
        latestKnownVersion: release.version,
        lastCheckedAt: new Date().toISOString(),
      }

      const stored = await pro.plugins.storePlugin(
        download.metadata,
        directory,
        PluginSource.GITHUB,
        originUpdate
      )

      clientAppSocket?.emit("plugin-update", {
        name: stored.name,

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Wait for/ask the maintainer to publish a release built with Svelte 5 and svelteMajor >= 5 metadata.
  2. Pin the plugin to its current (last-known-good) version so auto-update stops pulling the incompatible release.
  3. Skip/disable auto-update for this plugin origin until a compatible release exists.
  4. If you own the plugin repo, fix the build config to emit svelteMajor: 5 and cut a new release.

Example fix

// before (schema.json in new release)
{ "metadata": { "name": "x" } }
// after
{ "metadata": { "name": "x", "svelteMajor": 5 } }
Defensive patterns

Strategy: try-catch

Validate before calling

const svelteMajor = extractSvelteMajor(download.metadata)
if (typeof svelteMajor !== "number" || svelteMajor < 5) skipUpdate(plugin)

Type guard

const isSvelte5Compat = (m: unknown): m is { svelteMajor: number } => typeof m === "object" && m !== null && typeof (m as any).svelteMajor === "number" && (m as any).svelteMajor >= 5

Try / catch

try {
  await applyPluginUpdates(plugin)
} catch (e) {
  if (e.message.includes("Svelte 5")) {
    // keep current version; record incompatibility and skip auto-update
  } else {
    throw e
  }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/d96c933318b48dcf. Report an issue: GitHub.