Budibase/budibase · error

package.json is missing one of 'name', 'version' or 'descrip

Error message

package.json is missing one of 'name', 'version' or 'description'.

What it means

verify parses package.json and requires the name, version and description fields to be present and non-empty before validating schema.json. These are the metadata used to register and display the plugin, so verify refuses incomplete manifests.

Source

Thrown at packages/cli/src/plugins/index.ts:137

    type,
    name,
    description,
    version,
  })
}

async function verify() {
  // will throw errors if not acceptable
  checkInPlugin()
  console.log(info("Verifying plugin..."))
  const schema = fs.readFileSync("schema.json", "utf8")
  const pkg = fs.readFileSync("package.json", "utf8")
  let name, version
  try {
    const schemaJson = JSON.parse(schema)
    const pkgJson = JSON.parse(pkg)
    if (!pkgJson.name || !pkgJson.version || !pkgJson.description) {
      throw new Error(
        "package.json is missing one of 'name', 'version' or 'description'."
      )
    }
    name = pkgJson.name
    version = pkgJson.version
    plugins.validate(schemaJson)
    return { name, version }
  } catch (err: any) {
    if (err && err.message && err.message.includes("not valid JSON")) {
      console.log(error(`schema.json is not valid JSON: ${err.message}`))
    } else {
      console.log(error(`Invalid schema/package.json: ${err.message}`))
    }
  }
}

async function build() {
  const verified = await verify()

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Open package.json and add non-empty name, version and description fields, then re-run verify
  2. Run `npm pkg get name version description` to see which field is missing or empty
  3. Re-scaffold from the plugin template if the manifest is severely incomplete

Example fix

// before
{
  "name": "my-plugin"
}
// after
{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "My Budibase plugin"
}
Defensive patterns

Strategy: validation

Validate before calling

const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"))
const missing = ["name", "version", "description"].filter(k => !pkg[k])
if (missing.length) throw new Error(`package.json missing: ${missing.join(", ")}`)

Type guard

const hasRequiredPkgFields = (p: any): p is { name: string; version: string; description: string } =>
  Boolean(p && p.name && p.version && p.description)

Try / catch

try {
  await verifyPlugin()
} catch (err) {
  if ((err as Error).message.includes("missing one of 'name', 'version'")) {
    // fix package.json fields then retry
  } else throw err
}

Prevention

When it happens

Trigger: Running `budibase-plugins verify` (via verified) where the parsed package.json is missing or has an empty/falsy name, version, or description field.

Common situations: Hand-authored package.json with description omitted; version left as empty string; a minimal package.json from `npm init -y` where description was never added; fields accidentally removed during edits.

Related errors


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