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
- Check the latest release assets at github.com/budibase/budibase-skeleton/releases and use an exactly matching type value
- Update the Budibase CLI to the latest version so it requests current asset names
- 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
- Use plugin type strings exactly as named in the latest skeleton release assets
- Keep the CLI updated so requested types match current asset naming
- If a release ships without assets, pin to a previous working release
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
- Please run in a plugin directory - must contain package.json
- Please run in a plugin directory - must contain schema.json
- package.json is missing one of 'name', 'version' or 'descrip
- Failed to retrieve skeleton metadata
- Github release not found
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/e92dce6eb7eadb4c.
Report an issue: GitHub.