Activities / CycloneDX

ACTIVITIES.md in a CycloneDX bill of materials

CycloneDX attaches a model card to a machine-learning component to say what the model is. An activity declaration is the same idea for what a component does: which legal activities its code performs or enables. This page sets out how the record in an ACTIVITIES.md travels in any CycloneDX document a product already builds, through the lexlint property namespace.

These names are LexLint's proposal. The lexlint namespace is not yet registered in the CycloneDX property taxonomy, and this page is the documentation the taxonomy asks a namespace to publish.

The property names

Every name is in the lexlint namespace, follows the taxonomy's grammar (segments of letters, digits, hyphens and underscores, separated by colons), and takes a string value. An <id> is an activity id from the registry, written as it is there.

NameOnValue
lexlint:registrymetadataThe registry the ids come from, as its versioned address: https://lexlint.io/activities/v1.
lexlint:declaredmetadataThe day the declaration was last reviewed: a four-digit year, the month and the day, joined by hyphens.
lexlint:declared_bymetadataWho reviewed it, when the file names them.
lexlint:activity:<id>a componentperforms or enables: the file's mentioned.
lexlint:activity:<id>:enableda componentby_default, requires_configuration, requires_dependency or requires_environment.
lexlint:not:<id>a componentThe reason the maintainers rule the activity out.
lexlint:requireda servicetrue when the component cannot do its documented job without this counterparty, false for a default the deployer can change.

Where each part of the file goes

In ACTIVITIES.mdIn CycloneDX 1.6 and 1.7Note
a component (purl, shape)components[] with purl, bom-ref and typeAn exact fit.
an activitytwo properties on the componentThe formal form is a claim in declarations.claims[] whose target is the component's bom-ref, with the note as its reasoning.
whereevidence.occurrences[] with location and symboladditionalContext names the activity property the occurrence carries.
nota lexlint:not:<id> propertyOr a claim that the component does not perform it.
talks_toservices[] with endpoints and x-trust-boundary, and a dependencies edge from the componentlexlint:required on the service.
aggregatecompositions[] with aggregate and assemblies naming the componentThe same three values.
since, untilnot carriedA bill of materials describes one version, so an activity's presence in that version's document is the statement.

An example

The library in the registry's example, as CycloneDX 1.6.

{ "bomFormat": "CycloneDX", "specVersion": "1.6", "metadata": { "properties": [ {"name": "lexlint:registry", "value": "https://lexlint.io/activities/v1"}, {"name": "lexlint:declared", "value": "2026-10-16"} ] }, "components": [{ "type": "library", "bom-ref": "pennant-outreach", "name": "@pennant/outreach", "version": "1.4.0", "purl": "pkg:npm/%40pennant/outreach@1.4.0", "properties": [ {"name": "lexlint:activity:automated_outreach", "value": "performs"}, {"name": "lexlint:activity:automated_outreach:enabled", "value": "by_default"}, {"name": "lexlint:not:tracks_devices", "value": "Sets no cookie and sends no telemetry."} ], "evidence": {"occurrences": [ {"location": "src/send.ts", "symbol": "send", "additionalContext": "lexlint:activity:automated_outreach"} ]} }], "services": [{ "bom-ref": "sms-gateway", "name": "Example SMS gateway", "endpoints": ["https://api.sms-gateway.example"], "x-trust-boundary": true, "properties": [{"name": "lexlint:required", "value": "true"}] }], "dependencies": [ {"ref": "pennant-outreach", "dependsOn": ["sms-gateway"]} ], "compositions": [ {"aggregate": "complete", "assemblies": ["pennant-outreach"]} ] }

Proposed for CycloneDX 2.0: an activity card

Properties carry the record today without any change to the standard. The shape LexLint proposes for the next major version is an activityCard on a component, the model card's sibling, holding activities[] (each with its id, registry, mentioned, enabled, since and until), notPerformed[] and counterparties[]. What a product does with a component's activities, and whether each one applies to it, is a separate document shaped like a vulnerability exploitability statement, and is not part of this record.

© 2026 UnGovr, publishing as LexLint. This page is licensed under Creative Commons Attribution 4.0, with credit to LexLint (UnGovr).