StellaOps BOM Index (bom-index@1)
The BOM index is a deterministic, offline-friendly sidecar that accelerates queries for layer-to-component membership and entrypoint usage. It is emitted alongside CycloneDX SBOMs and consumed by Scheduler/Notify services.
File Layout
Binary little-endian encoding, organised as the following sections:
-
Header
magic(byte[7]): ASCII"BOMIDX1"identifier.version(uint16): current value1.flags(uint16): bit0set when entrypoint usage bitmaps are present.imageDigestLength(uint16) + UTF-8 digest string (e.g.sha256:...).generatedAt(int64): microseconds since Unix epoch.layerCount(uint32),componentCount(uint32),entrypointCount(uint32).
-
Layer Table
- For each layer:
length(uint16) + UTF-8 layer digest (canonical order, base image → top layer).
- For each layer:
-
Component Table
- For each component:
length(uint16) + UTF-8 identity (CycloneDX purl when available, otherwise canonical key).
- For each component:
-
Component ↦ Layer Bitmaps
- For each component (matching table order):
bitmapLength(uint32).- Roaring bitmap payload (
Collections.Special.RoaringBitmap.Serialize) encoding layer indexes that introduce or retain the component.
- For each component (matching table order):
-
Entrypoint Table (optional; present when
flags & 0x1 == 1)- For each unique entrypoint/launcher string:
length(uint16) + UTF-8 value (sorted ordinally).
- For each unique entrypoint/launcher string:
-
Component ↦ Entrypoint Bitmaps (optional)
- For each component: roaring bitmap whose set bits reference entrypoint indexes used by EntryTrace. Empty bitmap (
length == 0) indicates the component is not part of any resolved entrypoint closure.
- For each component: roaring bitmap whose set bits reference entrypoint indexes used by EntryTrace. Empty bitmap (
Determinism Guarantees
- Layer, component, and entrypoint tables are strictly ordered (base → top layer, lexicographically for components and entrypoints).
- Roaring bitmaps are optimised prior to serialisation and always produced from sorted indexes.
- Header timestamp is normalised to microsecond precision using UTC.
Sample
sample-index.bin is generated from the integration fixture used in unit tests. It contains:
- 2 layers:
sha256:layer1,sha256:layer2. - 3 components:
pkg:npm/a,pkg:npm/b,pkg:npm/c. - Entrypoint bitmaps for
/app/start.shand/app/init.sh.
The sample can be decoded with the BomIndexBuilder unit tests or any RoaringBitmap implementation compatible with Collections.Special.RoaringBitmap.