Changelog
All notable changes to this project will be documented in this file.
unreleased
9.4.0 – 2025-12-02
Added
New entry points for
/Contriband known submodules (via #1343)
Seepackage.json::exportsfor details.
Changes
Deprecated
Refactor
The following symbols were moved. (#1344 via #1343)
The symbols are still import-able through their old location.OLD -> NEW
Builders.FromNodePackageJson->Contrib.FromNodePackageJson.BuildersFactories.FromNodePackageJson->Contrib.FromNodePackageJson.FactoriesFactories.LicenseFactory->Contrib.License.Factories.LicenseFactoryFactories.PackageUrlFactory->Contrib.PackageUrl.Factories.PackageUrlFactoryTypes.assertNodePackageJson->Contrib.FromNodePackageJson.Types.assertNodePackageJsonTypes.isNodePackageJson->Contrib.FromNodePackageJson.Types.isNodePackageJsonTypes.NodePackageJson->Contrib.FromNodePackageJson.Types.NodePackageJsonUtils.BomUtility->Contrib.Bom.UtilsUtils.LicenseUtility->Contrib.License.UtilsUtils.NpmjsUtility->Contrib.FromNodePackageJson.Utils
Style
Applied latest code style (via #1341)
Build
Use webpack
v5.103.0now, wasv5.102.1(via #1340)
9.2.0 – 2025-10-22
9.1.0 – 2025-10-20
9.0.0 – 2025-09-15
8.6.0 – 2025-09-09
Changed
Pulled SPDX license IDs v1.0-3.27.0 (via #1293)
8.5.1 – 2025-09-03
8.5.0 – 2025-07-14
Added
Public export
types.NodePackageJson, which is the input type for various factories and builders (via #1263)
8.4.0 – 2025-06-16
8.3.0 – 2025-06-05
Added
Pulled SPDX license IDs v1.0-3.26.0 (via #1248)
8.2.0 – 2025-06-05
8.1.0 – 2025-06-04
Support for Node.js v24.
8.0.0 – 2025-03-17
7.1.0 – 2025-01-09
Added
Changed
Style
Apply latest code style guide (via #1201)
Misc
7.0.0 – 2024-11-26
BREAKING changes
Added
Changed
Style
Dependencies
Build
Use TypeScript
v5.7.2now, wasv5.6.3(via #1182)
6.13.1 – 2024-12-22
Dependencies
Support
libxmljs2@^0.35(via #1196)
6.13.0 – 2024-11-18
6.12.0 – 2024-11-12
Added
Build
Use webpack
v5.96.1now, wasv.95.0(via #1159)
6.11.1 – 2024-10-24
6.11.0 – 2024-07-15
6.10.1 – 2024-07-03
6.10.0 – 2024-06-06
Changed
Existing
Serialize.XmlSerializer.serialize()for Node.js may throwSerialize.MissingOptionalDependencyError(via #1084)
This is considered a non-breaking change, as the docs always told that anyErrormay be thrown.Improved the verbose error messages when a functionality failed due to absence of optional/pluggable dependency.
Added
New class
Serialize.MissingOptionalDependencyError(via #1084)
Misc
6.9.5 – 2024-05-23
Maintenance release.
6.9.0 – 2024-05-23
Changed
Updated SPDX license list to
v3.24.0(via #1077)
6.8.2 – 2024-05-21
Fixed
Added
Factories.PackageUrlFactory‘s generic type’s default back in (via #1076)
6.8.1 – 2024-05-21
6.8.0 – 2024-05-14
6.7.2 – 2024-05-07
6.7.1 – 2024-05-07
Reverted v6.7.0, back to v6.6.1
Reason: https://github.com/CycloneDX/cyclonedx-javascript-library/security/advisories/GHSA-38gf-rh2w-gmj7
6.7.0 – 2024-05-07
!! THIS VERSION GOT YANKED !!
Reason: https://github.com/CycloneDX/cyclonedx-javascript-library/security/advisories/GHSA-38gf-rh2w-gmj7
6.6.1 – 2024-05-06
6.6.0 – 2024-04-26
Changed
Added
6.5.1 – 2024-04-16
Dependencies
Bumped the range of optional requirement
ajv-formatsto^3.0.1, was^2.1.1(via #1037)
This should fix JSON-validation for time/date.
6.5.0 – 2024-04-11
Added support for *CycloneDX* Specification-1.6.
Changed
Added
Existing
Enumsgot new members and values for CycloneDX Specification-1.6 (#1039 via #1041)Enums.ComponentType.CryptographicAssetEnums.ExternalReferenceType.SourceDistributionEnums.ExternalReferenceType.ElectronicSignatureEnums.ExternalReferenceType.DigitalSignatureEnums.ExternalReferenceType.RFC9116
Namespace
Specwas enhanced for CycloneDX Specification-1.6 (#1039 via #1041)New const
Spec.Spec1dot6New enum member
Spec.Version.v1dot6
Build
Use TypeScript
v5.4.5now, wasv5.4.3(via #1040)
6.4.2 – 2024-03-21
6.4.1 – 2024-03-18
Documentation
Rendered (API) docs are hosted on readthedocs (#1027 via #1028)
Build
Use TypeScript
v5.4.2now, wasv5.3.3(via #1021)
6.4.0 – 2024-02-26
6.3.2 – 2024-02-25
6.3.1 – 2023-12-11
Maintenance release
6.3.0 – 2023-12-11
Dependencies
Widened optional dependency
libxmljs2@^0.31||^0.32||^0.33, was@^0.31||^0.32(via #1001)
6.2.0 – 2023-12-11
6.1.3 – 2023-12-09
6.1.2 – 2023-12-02
Maintenance release.
6.1.1 – 2023-12-01
Maintenance release.
6.1.0 – 2023-11-05
6.0.0 – 2023-08-26
BREAKING
Build
Use TypeScript
v5.2.2now, wasv5.1.6(via #966)
5.0.0 – 2023-08-16
BREAKING
Interface
Spec.Protocolnow defines new mandatory methods (via #946)
This is only a breaking change if you custom-implemented this TypeScript interface downstream; internal usage is non-breaking.
Added
Build
Use webpack
v5.88.2now, wasv5.88.1(via #933)
4.0.0 – 2023-07-05
BREAKING
Usage of this library in web browsers might no longer work out of the box (via #880)
It might require a bundler/packer for web; see theexamples/web/.
This is only a breaking change if you used this library in a web browser.
Fixed
Examples
Build
3.0.0 – 2023-06-28
Added support for *CycloneDX* Specification-1.5.
Added functionality regarding *CycloneDX* BOM-Link.
BREAKING
Interface
Spec.Protocolnow defines new mandatory methods (via #843)
This is only a breaking change if you custom-implemented this TypeScript interface downstream; internal usage is non-breaking.
Changed
Added
API changes v3 - the details
BREAKING
Interface
Spec.Protocolnow defines a new mandatory methodsupportsVulnerabilityRatingMethod()(via #843)
This is only a breaking change if you custom-implemented this TypeScript interface downstream; internal usage is non-breaking.
Changed
Namespace
ModelsNamespace
Serialize.{JSON,XML}.NormalizeNamespace
Validation
Added
Namespace
EnumsEnum
ComponentTypegot new members (#505 via #843)
New:Data,DeviceDriver,MachineLearningModel,PlatformEnum
ExternalReferenceTypegot new members (#505 via #843)
New:AdversaryModel,Attestation,CertificationReport,CodifiedInfrastructure,ComponentAnalysisReport,Configuration,DistributionIntake,DynamicAnalysisReport,Evidence,ExploitabilityStatement,Formulation,Log,MaturityReport,ModelCard,POAM,PentestReport,QualityMetrics,RiskAssessment,RuntimeAnalysisReport,SecurityContact,StaticAnalysisReport,ThreatModel,VulnerabilityAssertionEnum
Vulnerability.RatingMethodgot new members (#505 via #843)
New:CVSSv4,SSVC
Namespace
ModelsNamespace
SpecEnum
Versiongot new memberv1dot5to reflect CycloneDX Specification-1.5 (#505 via #843)Constant
SpecVersionDictgot new entry to reflect CycloneDX Specification-1.5 (#505 via #843)New constant
Spec1dot5to reflect CycloneDX Specification-1.5 (#505 via #843)Constants
Spec1dot{2,3,4}got a new methodsupportsVulnerabilityRatingMethod()(via #843)Interface
Protocolhas a new methodsupportsVulnerabilityRatingMethod()(via #843)
Misc
Build
2.1.0 – 2023-06-10
Changed
Classes
Serialize.Xml.Normalize.Vulnerability*Normalizerare now public available (via #816)
Previously, only instances were available viaSerialize.Xml.Normalize.Factory.makeForVulnerability*().
Build
2.0.0 – 2023-05-17
Improved license detection.
Finished Vulnerability capabilities.
Added ComponentEvidence capabilities.
BREAKING
Method
Factories.LicenseFactory.makeFromString()was changed in its behavior (#271, #530 via #547)
It will try to createModels.SpdxLicenseif value is eligible, else try to createModels.LicenseExpressionif value is eligible, else fall back toModels.NamedLicense.Revisited sort and compare:
Methods
Models.*.compare()may return different numbers than before.Methods
Models.*.sorted()may return different orders than before.
Changed
Added
Misc
Internal rework, modernization, refactoring
API changes v2 - the details
BREAKING
Class
Factories.LicenseFactorywas modifiedClass
Models.LicenseExpressionwas modifiedRemoved static function
isEligibleExpression()(via #547)
UseSpdx.isValidSpdxLicenseExpression()instead.Constructor no longer throws, when value is not eligible (#530 via #547)
You may useFactories.LicenseFactory.makeExpression()to mimic the previous behavior.Property
expressionsetter no longer throws, when value is not eligible (#530 via #547)
You may useFactories.LicenseFactory.makeExpression()to mimic the previous behavior.
Class
Models.SpdxLicensewas modifiedConstructor no longer throws, when value is not eligible (#530 via #547)
You may useFactories.LicenseFactory.makeSpdxLicense()to mimic the previous behavior.Property
idsetter no longer throws, when value is not eligible (#530 via #547)
You may useFactories.LicenseFactory.makeSpdxLicense()to mimic the previous behavior.
Interface
Spec.Protocolnow defines a new mandatory propertysupportsComponentEvidence:boolean(via #753)Interface
Spec.Protocolnow defines a new mandatory propertysupportsVulnerabilities:boolean(via #722)Removed deprecated symbols (#747 via #752)
Namespaces
{Builders,Factories}.FromPackageJsonwere removed.
You may use{Builders,Factories}.FromNodePackageJsoninstead.Class
Models.HashRepositorywas removed.
You may useModels.HashDictionaryinstead.Methods
Serialize.{Json,Xml}.Normalize.*.normalizeRepository()were removed.
You may useSerialize.{Json,Xml}.Normalize.*.normalizeIterable()insteadType alias
Types.UrnUuidwas removed.
You may usestringinstead.Type predicate
Types.isUrnUuid()was removed.
Changed
Class
Models.Attachmentwas modifiedClass
Models.Componentwas modifiedClass
Models.Vulnerability.Creditswas modifiedProperty
organizationsis no longer optional (via #722)
This collection(Set) will always exist, but might be empty.
This is considered a non-breaking change, as the class was in beta state.Property
individualsis no longer optional (via #722)
This collection(Set) will always exist, but might be empty.
This is considered a non-breaking change, as the class was in beta state.
Added
Namespace
Modelswas enhancedClass
Componentwas enhancedNamespace
Vulnerabilitywas enhancedClass
Advisorywas enhancedNew method
compare()(via #722)
Class
AdvisoryRepositorywas enhancedClass
Affectwas enhancedNew method
compare()(via #722)
Class
AffectRepositorywas enhancedClass
AffectedSingleVersionwas enhancedNew method
compare()(via #722)
Class
AffectedVersionRangewas enhancedNew method
compare()(via #722)
Class
AffectedVersionRepositorywas enhancedClass
Ratingwas enhancedNew method
compare()(via #722)
Class
RatingRepositorywas enhancedclass
Referencewas enhancedNew method
compare()(via #722)
Class
ReferenceRepositorywas enhancedclass
Sourcewas enhancedNew method
compare()(via #722)
class
Vulnerabilitywas enhancedNew method
compare()(via #722)
Class
VulnerabilityRepositorywas enhanced
Namespaces
Serialize.{Json,Xml}.Normalizewere enhancedNamespace
SpecNamespace
Spdxwas enhanced
Misc
Added dependency
spdx-expression-parse@^3.0.1(via #547)
1.14.0 – 2023-04-25
Added
Formal validators for JSON string and XML string (#620 via #652, #691)
Currently available only for Node.js. Requires optional dependencies.Related new validator classes:
Validation.JsonValidatorValidation.JsonStrictValidatorValidation.XmlValidator
Related new error classes:
Validation.NotImplementedErrorValidation.MissingOptionalDependencyError
Build
1.13.3 - 2023-04-05
Fixed
Docs
Fixed link to CycloneDX-specification in README (via #617)
1.13.2 - 2023-03-29
1.13.1 - 2023-03-28
1.13.0 - 2023-03-28
Fixed
Changed
Property
Models.Bom.serialNumberis of typestring, was type-aliasedTypes.UrnUuid = string(#588 via #597)
Also, the setter no longer throws exceptions, since no string format is illegal.
This is considered a non-breaking behavior change, because the corresponding normalizers assure valid data results.
Added
Published generator for BOM’s SerialNumber:
Utils.BomUtility.randomSerialNumber()(#588 via #597)
The code was donated from cyclonedx-node-npm.
Deprecation
1.12.2 - 2023-03-28
1.12.1 - 2023-03-13
Maintenance release.
1.12.0 - 2023-03-02
Docs
Made it clear, that
{Builders,Factories}.{FromNodePackageJson,FromPackageJson}.*functionality is to be run on already normalized structures (#517 via #518)
Normalization should be done downstream, for example via ``normalize-package-data` <https://www.npmjs.com/package/normalize-package-data>`_.
1.11.0 - 2023-02-02
Added
New vulnerability-related enums were added in a new namespace
Enums.Vulnerability(#164 via #419)
Release stage is “beta”. These namespace and enums have been released to third-party developers experimentally for the purpose of collecting feedback. These enums should not be used in production, because their contracts may change without notice.AffectStatusAnalysisJustificationAnalysisResponseAnalysisStateRatingMethodSeverity
New vulnerability-related models were added in a new namespace
Models.Vulnerability(#164 via #419)
Release stage is “beta”. These namespace and models have been released to third-party developers experimentally for the purpose of collecting feedback. These models should not be used in production, because their contracts may change without notice.
Attention: The models are not yet supported by shipped serializers nor shipped normalizers.Advisory,AdvisoryRepositoryAffect,AffectRepository,AffectedSingleVersion,AffectedVersionRange,AffectedVersionRepositoryAnalysisCreditsRating,RatingRepositoryReference,ReferenceRepositorySourceVulnerability,VulnerabilityRepository
New class
Models.OrganizationalEntityRepositoryto represent a collection ofModels.OrganizationalEntity(via #419)
Additionally,Models.OrganizationalEntity.compare()was implemented.New types and related functionality Common Weaknesses Enumerations (CWE) were added (via #419)
Release stage is “beta”. These types, functions and classes have been released to third-party developers experimentally for the purpose of collecting feedback. These types, functions and classes should not be used in production, because their contracts may change without notice.type
Types.CWEruntime validation
Types.isCWE()class
Types.CweRepository
Docs
Build
Use TypeScript
v4.9.5now, wasv4.9.4(via #463)
Misc
1.10.0 - 2023-01-28
Added
Fixed
XML serializer now properly throws
UnsupportedFormatErrorif it is unsupported by the supplied Spec (via #438)
Misc
Added tests for internal helpers (via #431)
Added more internal sortable data types (via #165)
Fixed type hints in internals (via #432)
Fixed type refs and links in doc-strings (via #437)
Slightly improved performance of compare methods when reproducible results were needed (via #433)
Use
eslint-config-standard-with-typescript@33.0.0now, was23.0.0(via #382, #423, #445)
1.9.2 - 2022-12-16
Maintenance release.
Docs
Fix CI/CT shield (badges/shields#8671 via #371)
1.9.1 - 2022-12-10
Maintenance release.
Build
Use TypeScript
v4.9.4now, wasv4.9.3(via #360)
1.9.0 - 2022-11-19
1.8.0 - 2022-10-31
1.7.0 - 2022-10-25
1.6.0 - 2022-09-31
Changed
Removed synthetic default imports im TypeScript sources (via #243)
The resulting JavaScript did not change in functionality.
Downstream users of the TypeScript sources/definitions might consider this a feature, as they are no longer required to compile withallowSyntheticDefaultImportsenabled.
Added
Documentation and example regarding dependency tree modelling were added in multiple places (via #250)
Build
1.5.1 - 2022-09-17
Deprecated
The normalizer methods
normalizeRepositorywill be known asnormalizeIterable(via #230)
1.5.0 - 2022-09-17
Deprecated
The class
HashRepositorywill be known asHashDictionary(via #229)
1.4.2 - 2022-09-10
Maintenance release.
Build
Use TypeScript
v4.8.3now, wasv4.8.2(via #212)
1.4.1 - 2022-09-09
Maintenance release.
1.4.0 - 2022-09-07
1.3.4 - 2022-08-16
Fixed
Factories.PackageUrlFactoryomits empty-string URLs for PackageUrl’s qualifiersdownload_url&vcs_url(via #180)
1.3.3 - 2022-08-16
1.3.2 - 2022-08-15
1.3.1 - 2022-08-04
Fixed
JSON- and XML-Normalizer no longer render
Models.Component.propertieswith *CycloneDX* Specification-1.2 (#152 via #153)XML-Normalizer now has the correct order/position of rendered
Models.Component.properties(via #153)
1.3.0 - 2022-08-03
Changed
Use version 9b04a94 of CycloneDX specification for XML and JSON schema validation (via #150)
Use SPDX license enumeration from version 9b04a94 of CycloneDX specification. (via #150)
Added
Build
Use webpack
v5.74.0.now, wasv5.73.0(via #141)
1.2.0 - 2022-08-01
Added
New getters/properties that represent the corresponding parameters of class constructor (via #145)
Builders.FromPackageJson.ComponentBuilder.extRefFactory,
Builders.FromPackageJson.ComponentBuilder.licenseFactoryBuilders.FromPackageJson.ToolBuilder.extRefFactoryFactories.PackageUrlFactory.typeSerialize.BomRefDiscriminator.prefixSerialize.JsonSerializer.normalizerFactorySerialize.XmlBaseSerializer.normalizerFactory,
Serialize.XmlSerializer.normalizerFactory
Factory for
PackageURLfromModels.Componentcan handle additional data sources, now (via #146)Models.Component.hashesmap ->PackageURL.qualifiers.checksumlistModels.Component.externalReferences[distribution].url->PackageURL.qualifiers.download_urlMethod
Factories.PackageUrlFactory.makeFromComponent()got a new optional parametersort, to indicate whether to go the extra mile and bring hashes and qualifiers in alphabetical order.
This feature switch is related to reproducible builds.
Deprecated
The sub-namespace
FromPackageJsonwill be known asFromNodePackageJson(via #148)Factories.FromPackageJson->Factories.FromNodePackageJsonBuilders.FromPackageJson->Builders.FromNodePackageJson
1.1.0 - 2022-07-29
Added
Support for nested/bundled (sub-)components via
Models.Component.componentswas added, including serialization/normalization of models and impact on dependency graphs rendering (#132 via #136)*CycloneDX* Specification-1.4 made element
Models.Component.versionoptional. Therefore, serialization/normalization with this specification version will no longer render this element if its value is empty (via #137, #138)
1.0.3 - 2022-07-28
Fixed
Types.isCPE()for CPE2.3 allows escaped(\) chars&"><, as expected (via #134)
1.0.2 - 2022-07-26
Maintenance release.
1.0.1 - 2022-07-23
Maintenance release.
1.0.0 - 2022-06-20
Initial release.
Responsibilities
Provide a general purpose JavaScript-implementation of *CycloneDX* for Node.js and WebBrowsers.
Provide typing for said implementation, so developers and dev-tools can rely on it.
Provide data models to work with CycloneDX.
Provide a JSON- and an XML-normalizer, that…
supports all shipped data models.
respects any injected *CycloneDX* Specification and generates valid output according to it.
can be configured to generate reproducible/deterministic output.
can prepare data structures for JSON- and XML-serialization.
Serialization:
Provide a universal JSON-serializer for all target environments.
Provide an XML-serializer for all target environments.
Support the downstream implementation of custom XML-serializers tailored to specific environments
by providing an abstract base class that takes care of normalization and BomRef-discrimination.
This is done, because there is no universal XML support in JavaScript.
Capabilities & Features
Enums for the following use cases:
AttachmentEncodingComponentScopeComponentTypeExternalReferenceTypeHashAlgorithm
Data models for the following use cases:
AttachmentBomBomRef,BomRefRepositoryComponent,ComponentRepositoryExternalReference,ExternalReferenceRepositoryHashContent,Hash,HashRepositoryLicenseExpression,NamedLicense,SpdxLicense,LicenseRepositoryMetadataOrganizationalContact,OrganizationalContactRepositoryOrganizationalEntitySWIDTool,ToolRepository
Factories for the following use cases:
Create data models from any license descriptor string
Specific to Node.js: create data models from PackageJson-like data structures
Builders for the following use cases:
Specific to Node.js: create deep data models from PackageJson-like data structures
Implementation of the *CycloneDX* Specification for the following versions:
1.41.31.2
Normalizers that convert data models to JSON structures
Normalizers that convert data models to XML structures
Universal serializer that converts
Bomdata models to JSON stringSerializer that converts
Bomdata models to XML string:Specific to WebBrowsers: implementation utilizes browser-specific document generators and printers.
Specific to Node.js: implementation plugs/requires/utilizes one of the following optional libraries