denoland/deno · error
Missing 'version' field in '{}'. Add a version like: {
Error message
Missing 'version' field in '{}'. Add a version like:
{
"version": "1.0.0",
...
} What it means
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.
Source
Thrown at cli/tools/pack/mod.rs:72
bail!(
"Git repository has uncommitted changes. Use --allow-dirty to pack anyway.\n{}",
dirty
);
}
// Get package configs
let mut packages = cli_options.start_dir.jsr_packages_for_publish();
if packages.is_empty() {
match cli_options.start_dir.member_deno_json() {
Some(deno_json) => {
let Some(name) = deno_json.json.name.clone() else {
bail!(
"Missing 'name' field in '{}'. Add a package name like:\n {{\n \"name\": \"@scope/package-name\",\n ...\n }}",
deno_json.specifier
);
};
if deno_json.json.version.is_none() {
bail!(
"Missing 'version' field in '{}'. Add a version like:\n {{\n \"version\": \"1.0.0\",\n ...\n }}",
deno_json.specifier
);
}
if deno_json.json.exports.is_none() {
bail!(
"Missing 'exports' field in '{}'. Add an exports field like:\n {{\n \"exports\": \"./mod.ts\",\n ...\n }}",
deno_json.specifier
);
}
packages.push(JsrPackageConfig {
name,
member_dir: cli_options.start_dir.workspace.root_dir().clone(),
config_file: deno_json.clone(),
license: deno_json
.json
.licenseView on GitHub (pinned to 9ad36f7a2c)
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.
Example fix
// deno.json (before)
{
"name": "@scope/pkg"
}
// deno.json (after)
{
"name": "@scope/pkg",
"version": "1.0.0"
} Defensive patterns
Strategy: validation
Validate before calling
const cfg = JSON.parse(readFileSync("deno.json", "utf8"));
if (!cfg.version) {
console.error("deno.json is missing required field: version");
process.exit(1);
} Type guard
const hasVersion = (cfg: unknown): boolean => typeof cfg === "object" && cfg !== null && "version" in cfg && typeof (cfg as any).version === "string";
Prevention
- 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.
When it happens
Trigger: Running `deno pack` (without `--version`) in a directory whose deno.json has a `name` but no `version` field.
Common situations: Freshly created packages where only name/exports were filled in; teams that version via git tags and forget the deno.json mirror.
Related errors
- Invalid semver version '{}'. Please provide a valid semver v
- Missing 'name' field in '{}'. Add a package name like: {
- Missing 'exports' field in '{}'. Add an exports field like:
- No deno.json found in current directory
- unsupported 'exports' shape in deno.json: expected a string
AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20).
Data as JSON: /api/errors/6e61f9413504ab25.
Report an issue: GitHub.