Rackvio publishes a Software Bill of Materials (SBOM) in CycloneDX JSON format for both the backend (Python) and frontend (Node.js) components. The SBOM provides a complete inventory of all third-party dependencies, enabling:
| Field | Value |
|---|---|
| Standard | CycloneDX v1.5 |
| Format | JSON |
| Files | sbom-backend.json, sbom-frontend.json |
The generation tools are not included in the Rackvio runtime containers. Install them in your local environment or CI pipeline.
The backend SBOM covers all Python packages in the application:
# Two venvs on purpose: the tool must NOT live in the environment it describes,
# or cyclonedx-bom and its ~25 dependencies are reported as Rackvio dependencies.
# 1. The environment to describe — production deps only.
python -m venv /tmp/bom-target
/tmp/bom-target/bin/pip install ./backend
# 2. The tool, isolated.
python -m venv /tmp/bom-tool
/tmp/bom-tool/bin/pip install cyclonedx-bom
# 3. Point the tool at the target interpreter.
/tmp/bom-tool/bin/cyclonedx-py environment \
--of JSON --sv 1.5 --pyproject backend/pyproject.toml \
--output-reproducible --validate \
-o sbom-backend.json \
/tmp/bom-target/bin/pythonRackvio backend uses pyproject.toml (PEP 621, built with Hatchling) — there is no requirements.txt and it is not a Poetry project. The cyclonedx-py environment form is the reliable path: it captures the exact resolved versions from the installed interpreter (run it inside the backend container).
The frontend SBOM covers all npm packages:
# Generate SBOM using the CycloneDX npm plugin (npx, no global install needed)
cd frontend
npx @cyclonedx/cyclonedx-npm --spec-version 1.5 --output-format JSON \
--omit dev --output-file ../sbom-frontend.json package.json
cd ..#!/usr/bin/env bash
# generate-sbom.sh -- Generate CycloneDX SBOMs for Rackvio
set -euo pipefail
echo "Generating backend SBOM (Python)..."
python -m venv /tmp/bom-target && /tmp/bom-target/bin/pip install --quiet ./backend
python -m venv /tmp/bom-tool && /tmp/bom-tool/bin/pip install --quiet cyclonedx-bom
/tmp/bom-tool/bin/cyclonedx-py environment \
--of JSON --sv 1.5 --pyproject backend/pyproject.toml \
--output-reproducible --validate \
-o sbom-backend.json /tmp/bom-target/bin/python
echo " -> sbom-backend.json"
echo "Generating frontend SBOM (Node.js)..."
cd frontend
npx --yes @cyclonedx/cyclonedx-npm --spec-version 1.5 --output-format JSON \
--omit dev --output-file ../sbom-frontend.json package.json
cd ..
echo " -> sbom-frontend.json"
echo "SBOM generation complete."sbom-backend.json)| Category | Examples |
|---|---|
| Web framework | fastapi, uvicorn, starlette |
| Database | sqlalchemy, asyncpg, alembic |
| Auth | PyJWT, Authlib, passlib, bcrypt |
| Validation | pydantic, pydantic-settings |
| Task queue | arq, redis |
| AI / imaging | anthropic, pillow |
| Utilities | python-multipart, python-dotenv, httpx |
Verified against
backend/pyproject.tomland the generated SBOM on 2026-07-29. An earlier version of this table listed python-jose and aioredis — neither is a dependency of this project.
sbom-frontend.json)| Category | Examples |
|---|---|
| Framework | next, react, react-dom |
| UI components | 13 × @radix-ui/react-*, lucide-react, cmdk, sonner |
| Virtualization | @tanstack/react-virtual |
| Auth | next-auth (Auth.js) |
| 3D / diagrams | @react-three/fiber, @react-three/drei, @xyflow/react, dxf-parser |
| Observability | @sentry/nextjs |
| Utilities | clsx, class-variance-authority, next-themes |
For each tagged release, the release workflow:
Download them from the Assets section of any release .
SBOMs are not embedded in the Docker image labels as OCI annotations — an earlier version of this page said they were. Use the Release assets.
Note. Automated SBOM publication begins with releases tagged on or after 2026-07-29. Earlier releases have no SBOM asset — generate one locally with the commands above if you need it for an older version.
# Scan the backend SBOM for known vulnerabilities
trivy sbom sbom-backend.json
# Scan the frontend SBOM
trivy sbom sbom-frontend.jsongrype sbom:sbom-backend.json
grype sbom:sbom-frontend.jsonosv-scanner --sbom=sbom-backend.json
osv-scanner --sbom=sbom-frontend.jsonThe SBOM should be regenerated whenever dependencies change:
pip install or updating pyproject.toml (backend)npm install or updating package.json (frontend)CI automation ensures the SBOM in release artifacts always matches the shipped code.