Budibase/budibase · error

No skeleton found in latest release.

Error message

No skeleton found in latest release.

What it means

After successfully fetching the latest budibase-skeleton release metadata, getSkeletonUrl scans the release assets for one whose filename contains the requested plugin type. If no asset name matches, it concludes the latest release has no matching skeleton and throws.

Source

Thrown at packages/cli/src/plugins/skeleton.ts:25

const download = require("download")
const tar = require("tar")

const HBS_FILES = ["package.json.hbs", "schema.json.hbs", "README.md.hbs"]

async function getSkeletonUrl(type: string) {
  const resp = await fetch(
    "https://api.github.com/repos/budibase/budibase-skeleton/releases/latest"
  )
  if (resp.status >= 300) {
    throw new Error("Failed to retrieve skeleton metadata")
  }
  const json = (await resp.json()) as { assets: any[] }
  for (let asset of json["assets"]) {
    if (asset.name && asset.name.includes(type)) {
      return asset["browser_download_url"]
    }
  }
  throw new Error("No skeleton found in latest release.")
}

export async function getSkeleton(type: string, name: string) {
  const url = await getSkeletonUrl(type)
  const tarballFile = join(os.tmpdir(), "skeleton.tar.gz")

  // download the full skeleton tarball
  fs.writeFileSync(tarballFile, await download(url))
  fs.mkdirSync(name)
  // extract it and get what we need
  await tar.extract({
    file: tarballFile,
    C: name,
  })
  // clear up
  fs.rmSync(tarballFile)
}

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Check the latest release assets at github.com/budibase/budibase-skeleton/releases and use an exactly matching type value
  2. Update the Budibase CLI to the latest version so it requests current asset names
  3. If the release genuinely has no assets, wait for/pin to a previous release or raise an issue on the skeleton repo

Example fix

// before (unsupported type)
budibase-plugins init widget my-plugin
// Error: No skeleton found in the latest release.
// after: use a type shipped by the latest release, e.g.
budibase-plugins init component my-plugin
Defensive patterns

Strategy: validation

Validate before calling

const release = await fetch("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest").then(r => r.json())
const match = (release.assets ?? []).find((a: { name: string }) => a.name.includes(pluginType))
if (!match) throw new Error(`No skeleton asset for type "${pluginType}"; available: ${(release.assets ?? []).map((a: any) => a.name).join(", ")}`)

Try / catch

try {
  await getSkeleton(type, name)
} catch (err) {
  if ((err as Error).message === "No skeleton found in the latest release.") {
    // fall back to a known-good type or surface available asset names
  } else throw err
}

Prevention

When it happens

Trigger: The plugin init/skeleton command requests a type string that no asset filename in the latest release contains — e.g. a new/unsupported plugin type or a renamed asset convention (type embedded in asset name like 'datasource-...' or 'component-...').

Common situations: Requesting a plugin type the skeleton repo no longer ships; skeleton repo released without assets; case/spelling mismatch between requested type and asset filename; using an outdated CLI that expects old asset names.

Related errors


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