Safeguard
Developer Tools•

What do purl qualifiers like vers, checksum and repository_url mean?

Purl qualifiers add detail such as checksums, download URLs and version ranges. Learn which common keys exist and how to keep them minimal.

Safeguard Security Team
4 min read

Qualifiers are key and value pairs after the question mark in a purl. Common keys are checksum, download_url, file_name, repository_url, vcs_url and vers. The project's guidance says to keep them few and limited to what is needed to identify the package accurately, so purls stay compact and readable.

What qualifiers are for

A purl has a type, optional namespace, name and optional version. Some packages cannot be identified by those alone. A Debian package needs its architecture. A container image needs its registry. Qualifiers carry that extra detail, and each type defines which keys it uses.

The purl specification also warns against the temptation to cram package attributes into them. The guidance says qualifiers should be a minimal set required for accurate identification.

The common keys

KeyWhat it holdsNotes from the guidance
checksumOne or more checksums, comma separatedEach item is lowercase algorithm, colon, lowercase hex value
download_urlA direct package download URLFor when you need the exact artifact location
file_nameThe file name of a package archiveFor file level identification, the subpath component is preferred
repository_urlThe repository where the package livesUse when the type has no default repository or has several common ones
vcs_urlA version control locationFollows pip style syntax or the SPDX package download location
versA version range instead of a single versionMutually exclusive with the version component

Checksum example

The guidance shows the shape with shortened values.

checksum=sha1:ad9503c3e994a4f,sha256:41bf9088b3a1e6c1ef1d

Use a checksum when you must prove that two systems mean the same bytes, not merely the same version number.

The vers qualifier for ranges

A single purl normally points at one version. For vulnerability reporting and dependency analysis you often need a range. The vers qualifier handles this and cannot be combined with a version in the same purl. Its value follows the separate version range specification.

The guidance gives this example for Django.

pkg:pypi/django?vers=vers:pypi%2F%3E%3D1.11.0%7C%21%3D1.11.1%7C%3C2.0.0

Decoded, the range reads as 1.11.0 or later, not 1.11.1, and below 2.0.0. The symbols are percent encoded inside the purl, which is why the string looks unreadable. Always decode before you interpret it.

How to use qualifiers in your own tool

  1. Read keys case insensitively by lowercasing, as the parsing rules do.
  2. Ignore keys you do not understand instead of failing, but keep them when you re-emit the purl.
  3. Compare purls after normalization, not as raw strings, since order of qualifiers and encoding can differ.
  4. Do not match vulnerabilities on repository_url or download_url. They describe where a package came from, not which package it is.
  5. When you build a purl, add a qualifier only if the type definition asks for it or ambiguity would result.

Try it yourself

Click through it at your own pace, or open it full screen. Follow how a component identity leads to a list of affected and fixed versions.

Where this fits

Qualifiers are the part of a purl most likely to differ between two tools describing the same component. See matching VEX statements to SBOM components with purl. Safeguard offers SBOM and dependency scanning, and the free scan lets you inspect real component identifiers.

Quick check

Can I use both version and vers in one purl?

No. The guidance says the vers qualifier is mutually exclusive with the version component.

Should I add many qualifiers to be safe?

No. The guidance says to keep them limited to what accurate identification needs.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.