denoland/deno · error
Invalid semver version '{}'. Please provide a valid semver v
Error message
Invalid semver version '{}'. Please provide a valid semver version (e.g., 1.0.0) What it means
`deno pack --version <v>` (PackFlags::set_version) validates the override with `deno_semver::Version::parse_standard` before using it. Anything that is not standard semver — `1.x`, `v1.0.0`, `1.0`, `latest` — is rejected with this message.
Source
Thrown at cli/tools/pack/mod.rs:123
for package in packages {
// Validate package name format
if !package.name.starts_with('@') || !package.name.contains('/') {
bail!(
"Invalid package name '{}'. Package name must be in the format '@scope/name'",
package.name
);
}
log::info!(
"{} {}",
colors::green("Packing"),
colors::intense_blue(&package.name)
);
// Determine version
let version = if let Some(ref v) = pack_flags.set_version {
if deno_semver::Version::parse_standard(v).is_err() {
bail!(
"Invalid semver version '{}'. Please provide a valid semver version (e.g., 1.0.0)",
v
);
}
v.clone()
} else {
package
.config_file
.json
.version
.clone()
.with_context(|| {
format!(
"Missing version in package '{}'. Add a version field or use --set-version",
package.name
)
})?
};View on GitHub (pinned to 9ad36f7a2c)
Solutions
- Use full `MAJOR.MINOR.PATCH` without a `v` prefix: `deno pack --version 1.2.3`.
- Pre-release/build metadata is fine if formatted as standard semver: `1.2.3-beta.1`.
- If you wanted the version to come from the config, drop `--version` entirely.
Example fix
# before deno pack --version v1.2.3 # after deno pack --version 1.2.3
Defensive patterns
Strategy: validation
Validate before calling
// Validate before passing --version to deno pack
const SEMVER = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[\w.-]+)?(?:\+[\w.-]+)?$/;
const v = process.argv[2];
if (!SEMVER.test(v ?? "")) {
console.error(`"${v}" is not standard semver (use MAJOR.MINOR.PATCH, no 'v' prefix)`);
process.exit(1);
} Type guard
const isStandardSemver = (v: string): boolean => /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(v);
Prevention
- Strip the leading `v` from git tags before using them as versions.
- Always pass three version components (1.2.3, not 1.2).
- Dist-tags like `latest` are registry pointers, never versions.
When it happens
Trigger: Passing `--version` a non-semver string: `deno pack --version 1.0`, `--version v2.1.0`, `--version latest`.
Common situations: Copying a git tag like `v1.2.3` including the `v` prefix; two-component versions `1.2`; npm dist-tags such as `latest` where no leading `v`/short form is allowed by parse_standard.
Related errors
- Missing 'version' field in '{}'. Add a version like: {
- Invalid version passed ({}) Pass a semver, or a full 40 cha
- Invalid filter "{input}"
- Invalid type for fetch: must be a function
- Invalid type for onListen: must be a function
AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20).
Data as JSON: /api/errors/094efe10b07703a9.
Report an issue: GitHub.