Versions
Definition
A Version represents a point-in-time snapshot of a Product's software composition within a specific Environment. Each Version is created when an SBOM is uploaded or ingested.
A Version may have multiple SBOMs associated with it (e.g., when an SBOM is re-uploaded to correct errors or add details), but only one SBOM is considered active at any time.
Relationship to Product and Environment
Product
βββ Environment
βββ Version (Sbom)
βββ project_version: "v1.2.0"
βββ spec: "CycloneDX" or "SPDX"
βββ lifecycle: processing β active β archivedA Version is uniquely identified by the combination of Product + Environment + Version string. The same version string (e.g., v1.2.0) can exist in multiple Environments but represents independent snapshots.
Supported SBOM Formats
CycloneDX
1.2, 1.3, 1.4, 1.5, 1.6, 1.7
JSON, XML
SPDX
2.2, 2.3
JSON
Upload Workflow
When an SBOM is uploaded, the platform executes a processing pipeline:
Each stage has a tracked status: NOT_STARTED, IN_PROGRESS, COMPLETED.
Via UI
Navigate to the Product detail page.
Click Upload SBOM.
Select the target Environment from the dropdown.
Drag and drop the SBOM file or click to browse.
Click Upload.
Via CLI
The CLI automatically retries on transient failures with exponential backoff (1s, 2s, 4s between attempts). It does not retry on authentication errors (401) or client errors (4xx), except rate limiting (429).
Via API
Via CI/CD
GitHub Actions:
GitLab CI:
When running in a supported CI environment (GitHub Actions, GitLab CI, Bitbucket Pipelines, Azure DevOps), pylynk automatically captures CI metadata β commit SHA, PR details, build URL β and attaches it to the Version.
Checking Processing Status
After upload, monitor the processing pipeline:
The status command tracks five processing stages: checksStatus, policyStatus, labelingStatus, automationStatus, vulnScanStatus.
Downloading SBOMs
The platform can return enhanced SBOMs β the original SBOM enriched with vulnerability data, support status, and compliance annotations.
Version Metadata
Each Version may include:
Version string
The product version identifier (e.g., v1.2.0, build-456)
Spec
SBOM format (CycloneDX or SPDX)
Lifecycle
Current state (processing, active, archived)
TLP Classification
Traffic Light Protocol classification for sharing restrictions
Creation date
When the SBOM was created
Release date
When the software was released
End-of-support date
When support ends for this version
End-of-life date
When the version reaches end of life
CI metadata
Build URL, commit SHA, PR details (captured automatically in CI)
Version Comparison (Drift Analysis)
The MCP server supports comparing two Versions to identify drift:
This is useful for tracking component changes across releases and identifying newly introduced risks.
Best Practices
Use meaningful version strings. Align with your release versioning scheme (semver, build numbers, commit SHAs) so that Versions are traceable to specific builds.
Upload SBOMs in CI/CD, not manually. Automated uploads ensure every build is tracked and reduce the risk of missed or inconsistent data.
Enable "Retain Vulnerability Status with Version" in Environment settings to preserve VEX triage work when re-uploading SBOMs.
Enable "Copy VEX Across Versions on Import" if your workflow involves frequent SBOM updates, so triage decisions carry forward to new Versions.
Set a data retention policy. Use at least 90 days for audit trail purposes. Use "Forever" for Products with regulatory requirements.
Download enhanced SBOMs for distribution. The enhanced SBOM includes vulnerability and support data not present in the original upload.
Common Misconfigurations
Same SBOM uploaded repeatedly with no version change
Duplicate Versions clutter the list
Use unique version strings for each build
VEX status lost on re-upload
Triage work disappears after SBOM update
Enable "Retain Vulnerability Status with Version" in Environment settings
Processing stuck in IN_PROGRESS
Status never completes
Check for malformed SBOM; verify the SBOM format is supported
No CI metadata attached
Build traceability missing
Ensure pylynk runs in a supported CI environment or set PYLYNK_INCLUDE_CI_METADATA=true
Version uploaded to wrong Environment
Data appears in unexpected location
Verify --env flag in CLI or Environment Rules configuration
Last updated