Skip to main content

OpenCRA

CI PyPI Python License GitHub Action

CRA Article 14 reporting starts 11 September 2026. Know if you have a CISA KEV hit in one command.

OpenCRA is the open-source CLI and GitHub Action for Software Bills of Materials and actively-exploited vulnerability candidates.

A scanner hit is a candidate, never legal awareness. Article 14 clocks start only after a human assessment. OpenCRA does not file with ENISA, does not claim CE marking, and is not a notified body.

opencra scan . demo

uvx opencra scan .

EU Cyber Resilience Act (CRA) Compliance in 60 Seconds

  1. Generate an SBOM — Syft inventories your directory or image (or pass an existing CycloneDX file).
  2. Map every PURL to OSV + CISA KEV — OpenCRA tells you which findings are on the Known Exploited Vulnerabilities catalog. Those are the ones that may start a 24-hour CRA clock after you become aware.
  3. Fail CI or export evidence — drop the Action into GitHub, or write CycloneDX / SPDX / a community PDF.
- uses: crwncode/opencra@v1
  with:
    fail-on-cve: true

Local scans are free. No account required. --sync-cloud is optional and only POSTs when you set both OPENCRA_API_URL and OPENCRA_API_KEY — there is no default commercial host.

Install

Syft is auto-installed to ~/.opencra/bin on first online directory scan, or brew install syft. CycloneDX JSON files do not need Syft.

# uv — no install
uvx opencra scan .

# pip / pipx
pipx install opencra
# or: pip install opencra

# Homebrew — Syft first, then the CLI
brew install syft pipx
pipx install opencra
opencra doctor
opencra kev refresh
opencra scan . --fail-on kev

GitHub Action

Published from this repo (crwncode/opencra@v1). Search OpenCRA on the GitHub Marketplace.

name: CRA
on: [push, pull_request]
jobs:
  opencra:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: crwncode/opencra@v1
        with:
          fail-on-cve: true
Input Default Meaning
fail-on-cve false Fail the job on a CISA KEV hit
fail-on kev none | kev | critical | high
target . Directory, image, or CycloneDX JSON
sync-cloud false POST to OPENCRA_API_URL when OPENCRA_API_KEY is set

See packages/action/README.md for every input.

Why not just Syft or Grype?

Tool What it does
Syft Generates an SBOM
Grype / osv-scanner Finds known CVEs
OpenCRA Tells you which findings are CISA KEV hits — the ones that may start a 24-hour CRA clock after you become aware

CLI

# Syft is auto-installed to ~/.opencra/bin on first online directory scan, or:
brew install syft          # macOS
# Linux: https://github.com/anchore/syft#installation

pipx install opencra
# or run without installing:
uvx opencra doctor
uvx opencra scan .

Quickstart

opencra doctor
opencra kev refresh
opencra scan . --fail-on kev
opencra scan . --format cyclonedx --output sbom.cdx.json
opencra scan . --export-pdf cra-report.pdf
opencra scan . --sync-cloud          # optional ingest (needs OPENCRA_API_URL + OPENCRA_API_KEY)
opencra report --last
# Demo a KEV candidate (exit 1). Not legal awareness; do not auto-file.
opencra scan examples/sample-kev.cdx.json --fail-on kev

After a table scan:

[+] Scan complete: 0 critical vulnerabilities found.

--quiet and machine formats (json, cyclonedx, spdx) keep stdout clean. Full flag list: docs/cli.md.

Legal disclaimer

OpenCRA prepares evidence and highlights Known Exploited Vulnerabilities. It does not:

  • start the Article 14 legal clock automatically
  • file notifications on the ENISA Single Reporting Platform
  • certify CRA compliance or CE marking

The 24-hour early warning and 72-hour notification run from awareness. The 14-day final report for actively exploited vulnerabilities runs from when a corrective measure is available, not from detection. Severe incidents have a one-month final report after the 72-hour notification.

Optional cloud ingest

--sync-cloud POSTs the normalized scan JSON to $OPENCRA_API_URL/v1/ingest when OPENCRA_API_KEY is also set. Neither variable has a default. A host-only value such as http://127.0.0.1:8000 still receives /v1/ingest appended. Without both, the local scan is unchanged.

To run the optional local API from this repo, see docs/saas.md.

License

Apache License 2.0. Copyright 2026 crwncode.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opencra-0.1.6.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opencra-0.1.6-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file opencra-0.1.6.tar.gz.

File metadata

  • Download URL: opencra-0.1.6.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for opencra-0.1.6.tar.gz
Algorithm Hash digest
SHA256 62fa961661892016b89dc36d7f944187f688bf8716cda383c219b3a3881c99bc
MD5 53c4095bb2450d0ec7486366d1472497
BLAKE2b-256 a7aa718d7eb7a6f1f9882091ee11ef233dc8355a3893ddda1228ea8a41a93cf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencra-0.1.6.tar.gz:

Publisher: publish.yml on crwncode/opencra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opencra-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: opencra-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for opencra-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d95ac881d8da91229fd849c691bac562f2ab13b6b956c549c627bd9170eb2189
MD5 2dc4ef188f4b8b9565a9717927318783
BLAKE2b-256 1b86cd7ec0ec15fa2e0e8cc9315dd621c16890335dd616c049bfe48c9022270c

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencra-0.1.6-py3-none-any.whl:

Publisher: publish.yml on crwncode/opencra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 files

0.1.5

2 files

0.1.4

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page