{"record":{"id":"6e61f9413504ab25","repo":"denoland/deno","slug":"missing-version-field-in-add-a-version-lik","errorCode":null,"errorMessage":"Missing 'version' field in '{}'. Add a version like:\n  {\n    \"version\": \"1.0.0\",\n    ...\n  }","messagePattern":"Missing 'version' field in '(.+?)'\\. Add a version like:\n  (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/pack/mod.rs","lineNumber":72,"sourceCode":"    bail!(\n      \"Git repository has uncommitted changes. Use --allow-dirty to pack anyway.\\n{}\",\n      dirty\n    );\n  }\n\n  // Get package configs\n  let mut packages = cli_options.start_dir.jsr_packages_for_publish();\n  if packages.is_empty() {\n    match cli_options.start_dir.member_deno_json() {\n      Some(deno_json) => {\n        let Some(name) = deno_json.json.name.clone() else {\n          bail!(\n            \"Missing 'name' field in '{}'. Add a package name like:\\n  {{\\n    \\\"name\\\": \\\"@scope/package-name\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        };\n        if deno_json.json.version.is_none() {\n          bail!(\n            \"Missing 'version' field in '{}'. Add a version like:\\n  {{\\n    \\\"version\\\": \\\"1.0.0\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        }\n        if deno_json.json.exports.is_none() {\n          bail!(\n            \"Missing 'exports' field in '{}'. Add an exports field like:\\n  {{\\n    \\\"exports\\\": \\\"./mod.ts\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        }\n\n        packages.push(JsrPackageConfig {\n          name,\n          member_dir: cli_options.start_dir.workspace.root_dir().clone(),\n          config_file: deno_json.clone(),\n          license: deno_json\n            .json\n            .license","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/cli/tools/pack/mod.rs#L54-L90","documentation":"When `deno pack` packs the current directory's deno.json and no `--version` override is supplied, the config must carry a `version` so the tarball gets an explicit semver. This check fires before any version parsing or graph work, right after the name check.","triggerScenarios":"Running `deno pack` (without `--version`) in a directory whose deno.json has a `name` but no `version` field.","commonSituations":"Freshly created packages where only name/exports were filled in; teams that version via git tags and forget the deno.json mirror.","solutions":["Add `\"version\": \"1.0.0\"` (valid semver) to deno.json.","Or pass the version on the command line: `deno pack --version 1.0.0`.","Automate keeping deno.json version in sync with release tooling so it never regresses."],"exampleFix":"// deno.json (before)\n{\n  \"name\": \"@scope/pkg\"\n}\n// deno.json (after)\n{\n  \"name\": \"@scope/pkg\",\n  \"version\": \"1.0.0\"\n}","handlingStrategy":"validation","validationCode":"const cfg = JSON.parse(readFileSync(\"deno.json\", \"utf8\"));\nif (!cfg.version) {\n  console.error(\"deno.json is missing required field: version\");\n  process.exit(1);\n}","typeGuard":"const hasVersion = (cfg: unknown): boolean =>\n  typeof cfg === \"object\" && cfg !== null && \"version\" in cfg && typeof (cfg as any).version === \"string\";","tryCatchPattern":null,"preventionTips":["Set version when creating the package, not at release time.","Pass `--version x.y.z` for one-off packs instead of editing the file by hand.","Automate version bumps with release tooling that writes deno.json."],"tags":["pack","deno-json","version","semver"],"backgroundTag":"package-manifest-field-missing","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T04:17:50.494Z"}