Exportschema
Den här sidan är schemat för den fullständiga dataexporten: vad paketet innehåller och vilken form varje post har. Hur du startar en export, verifierar den och vilka gränser som gäller står på sidan om dataexport. Personuppgiftsbiträdesavtalet §9 hänvisar hit.
Paketets struktur
export-<your-org-slug>-<YYYY-MM-DDTHH-MM-SS-mmmZ>.tar.gz
├── VERIFY.md — step-by-step verification recipe
├── manifest.json — every file below, SHA-256 and size
├── manifest.json.intoto.jsonl — DSSE-signed in-toto Statement over manifest.json
├── audit.ndjson — your org's audit events, last 90 days
├── access-log.ndjson — your registry access log (package and container downloads, uploads and deletes; CI cache hits are in pulled-versions.ndjson)
├── bundles/
│ ├── <repo>.bundle — git bundle: full history, every ref
│ └── <repo>.empty — instead of a bundle, for a repository with no commits (zero bytes)
├── findings/ — scan findings, see "Scan findings, policy, attestations and SBOMs" below
├── policy/ — package policy, verdicts, exceptions and scanner settings
├── attestations/ — build provenance and release attestations, with their signatures
├── sboms/ — repository and container-image SBOMs, with an index
└── metadata/
├── packages.ndjson — package inventory, see "Packages" below
├── packages-files.ndjson — every file of every package version
├── packages-container-tags.ndjson — container image tag → manifest digest
├── components.ndjson — third-party component inventory, see "Component inventory" below
├── deployments.ndjson — deployments your CI/CD reported, see "Deployments" below
├── pulled-versions.ndjson — package versions pulled per day and consumer, see "Pulled versions" below
└── <repo>/
├── repo.ndjson — repository settings, description, topics
├── issues.ndjson — every issue, open and closed
├── pulls.ndjson — every pull request, open and closed
├── comments.ndjson — issue and pull-request comments
├── labels.ndjson
├── milestones.ndjson — open and closed
├── releases.ndjson — release metadata; see "Release assets" below
└── lfs-manifest.ndjson — LFS object inventory, see "LFS content" belowReponamn som innehåller tecken utanför a-z 0-9 . _ - visas med de tecknen ersatta av _.
Standarder som används:
- Repon: Gits eget format
git bundle.git clone <bundle>återskapar repot från början till slut, med historik, branches och taggar. Ett repo utan commits har inget att lägga i ett bundle och visas i stället som en tom fil<repo>.empty. - Issues, pull requests och de övriga filerna i
metadata/: NDJSON, ett JSON-objekt per rad, i samma form som Forgejos API returnerar för varje objekt. - Granskningslogg: NDJSON, en händelse per rad (
id,action,actor,fields_json,created_at). Samma form som fremforges interna granskningsström. - Registrets åtkomstlogg: NDJSON, äldst först, en händelse per rad i den form som
GET /orgs/{slug}/access-logreturnerar, med klienternas IP-adresser och inloggningar som de registrerades. Den täcker allt som fortfarande sparas inom lagringstiden för din granskningslogg. Se Åtkomstlogg för registry. - Integritet:
manifest.jsonlistar varje fil med dess SHA-256-hash och storlek. Manifestet är DSSE-signerat med fremforges Ed25519-byggnyckel, signaturen ligger imanifest.json.intoto.jsonloch verifieras mot den publika förtroenderoten påhttps://www.frem.sh/.well-known/slsa-trust-root.jsonmedopenssl,jq,python3ochcurl, utan några verktyg från fremforge. Hela receptet finns iVERIFY.mdi paketet och i §“Verifiera det signerade manifestet” på sidan om dataexport. Det är samma förtroenderot som publiceras för SLSA-byggattesteringar: en nyckel, två predikattyper, inget beroende av Sigstore.
Inga proprietära format. Varje artefakt i paketet kan läsas med vanliga verktyg med öppen källkod. Du behöver inget CLI från fremforge.
Paket
metadata/packages.ndjson är inventeringen av din organisations paketregister: en rad per paketversion, med dess type (container, npm, maven, pypi, generic, …), name och version, så som Forgejos paket-API listar dem.
metadata/packages-files.ndjson listar varje fil i var och en av de versionerna, en rad per fil:
| Fält | Betydelse |
|---|---|
owner, type, name, version | paketversionen som filen hör till |
file_id, file_name | filens identifierare och namn i registret |
size | storlek i byte |
sha256 | filens SHA-256; även sha512 där registret registrerar en sådan |
download_path | sökväg på frem.sh som laddar ned exakt den här filen med en API-token (Authorization: token …); registret kan svara med en omdirigering till objektlagringen. null för registertyper där filens URL inte kan härledas enbart från inventeringen (till exempel Maven); använd web_path för dem |
web_path | filens nedladdningslänk på paketsidan, för en inloggad webbläsare |
För container-images är en paketversion en tagg (eller, för ett manifest utan tagg, till exempel en plattform i en image för flera arkitekturer, själva digesten). metadata/packages-container-tags.ndjson mappar varje tagg till dess manifestdigest (owner, name, tag, manifest_digest), vilket är vad docker pull <image>@sha256:… och andra OCI-verktyg använder. Imagens lager och konfiguration finns i packages-files.ndjson som filer namngivna efter sin digest, med download_path som pekar på registrets endpoints /v2/…/blobs/… och /v2/…/manifests/….
Kontrollera en nedladdad fil mot inventeringen:
row=$(jq -c 'select(.name=="@acme/lib" and .version=="1.2.0")' metadata/packages-files.ndjson)
curl -sSL -H "Authorization: token $TOKEN" -o pkg.bin "https://frem.sh$(jq -r .download_path <<<"$row")"
echo "$(jq -r .sha256 <<<"$row") pkg.bin" | sha256sum -c -Inventeringen finns alltid i paketet. Själva paketfilerna kommer bara på begäran, som ett separat arkiv: se §“Paketinnehåll”.
Komponentinventering
metadata/components.ndjson är din organisations inventering av tredjepartskomponenter: en rad per komponent och plats där den används eller har använts, samma rader som GET /orgs/{slug}/components/usages svarar med. Användningar som har upphört sparas i 180 dagar och tas med, så att historiken följer med dig.
| Fält | Betydelse |
|---|---|
purl, ecosystem, name, version | komponenten, som en paket-URL och dess delar |
licence, licence_source | licensuttrycket och var det lästes ifrån |
subject_kind, subject_name, subject_ref | var den används: repot, paketet eller imagen, och ref eller digest |
image_tags | för en image, taggarna som pekar på den; annars tom |
source_repo | repot som byggde den, där det är känt |
is_direct | true för ett direkt beroende, false för ett transitivt, null där SBOM:en inte anger det |
environment, environment_source | miljöklassen (sandbox, development, test eller production) och hur den sattes |
is_current, first_seen_at, last_seen_at, removed_at | om användningen är aktuell, och när den först och senast sågs och togs bort |
Driftsättningar
metadata/deployments.ndjson innehåller varje driftsättning som din CI/CD har rapporterat med POST /orgs/{slug}/repos/{repo}/deployments, en rad per driftsättning, äldst först efter identifierare.
| Fält | Betydelse |
|---|---|
id | driftsättningens identifierare |
repository, environment, environment_class | repot (owner/name), miljönamnet du angav och dess klass (sandbox, development, test, staging eller production) |
ref, sha, task, description | ref och commit som driftsattes, uppgiften (deploy om du inte angav någon annan) och din beskrivning |
image_digests, packages | de image-digester och paket-URL:er som driftsättningen anger |
state | den senaste statusen: pending, queued, in_progress, success, failure, error eller inactive |
creator_kind, creator, run_id | vem som rapporterade den (job, robot, user eller token), dess namn och Actions-körningen för ett jobb |
created_at, updated_at | när den rapporterades och senast ändrades |
statuses | varje status, nyast först: state, description, log_url, environment_url, creator_kind, creator, created_at |
Hämtade versioner
metadata/pulled-versions.ndjson är hämtningsräkningen: en rad per UTC-dygn, paketversion och konsument, för de dygn som fortfarande sparas inom lagringstiden för din åtkomstlogg. Sedan 2026-10-13 är den den enda registreringen av de nedladdningar som ett CI-jobb gjorde via beroendeproxyn och som levererades från dess cache; de finns inte i access-log.ndjson. Det är de här raderna som GET /orgs/{slug}/components/pulled summerar; de advisories som den endpointen kopplar ihop dem med finns inte i filen.
| Fält | Betydelse |
|---|---|
day | UTC-dygnet, YYYY-MM-DD |
origin | registry för dina egna paket, proxy för beroendeproxyn |
ecosystem, name, version | pakettypen (npm, pypi, maven, nuget, go, container, …), namn och version |
consumer | vem som hämtade det: kind (job, robot, bot, user eller anonymous), name (jobbets repo, robotens namn eller inloggningen; null för anonyma), id, för en robot dess login och för ett jobb run_ids, de Actions-körningar som hämtade det det dygnet (nyast först, högst 100; tom före 2026-10-13) |
pulls | lyckade nedladdningar det dygnet |
first_seen_at, last_seen_at | den första och den sista av dem, i UTC med mikrosekunder |
Skanningsfynd, policy, attesteringar och SBOM:er
Varje export innehåller den säkerhetsdata som fremforge har om din organisation, som NDJSON (ett JSON-objekt per rad), täckt av det signerade manifestet precis som alla andra filer. Varje rad är hela posten som fremforge lagrar, utom det interna tenant-id:t och lagringssökvägar; avfärdade fynd tas med tillsammans med vem som avfärdade dem, varför och till när. Rader som gäller ett paket i registret har ett objekt package (type, owner, name, version, file, blob_sha256).
findings/
├── sast.ndjson — static analysis (rule, file, line, severity)
├── dependencies.ndjson — dependency vulnerabilities, with CVSS and EPSS where known
├── dependency-dismissals.ndjson — repository-wide dependency dismissals
├── licences.ndjson — licence findings, each with its licence policy decision
├── container-images.ndjson — container image vulnerabilities
├── container-image-dismissals.ndjson
├── secrets.ndjson — rule, file, line and fingerprint; the secret value is never stored
├── malware-uploads.ndjson — malware found in uploads
├── malware-dependencies.ndjson — known-malicious dependencies
├── malware-container-layers.ndjson — per image manifest, each layer's malware verdict
├── packages.ndjson — vulnerabilities found in your registry packages
├── package-licences.ndjson — declared and detected licences of your registry packages
└── sha-pinning.ndjson — workflow actions not pinned to a commit
policy/
├── package-policy.ndjson — your package policy (mode, thresholds, licence lists, minimum age)
├── package-policy-rules.ndjson — allow and deny rules
├── package-policy-approvers.ndjson
├── package-policy-verdicts.ndjson — the current verdict for each package file, with reasons
├── package-gate-decisions.ndjson — downloads blocked, or that would have been blocked in shadow mode
├── exceptions.ndjson — policy exceptions, who requested and who approved them
├── malware-overrides.ndjson
├── package-access-packages.ndjson — per-package access: each configured package (mode, inheritance)
├── package-access-grants.ndjson — per-package access grants (teams, Actions repositories)
├── package-protection-rules.ndjson — protected package names
├── scan-overrides.ndjson — per-repository scanner mode overrides
└── settings/ — each scanner's org settings (sast, dependencies, licences, container-images, secrets),
and licence-repo-overrides.ndjson: per-repository licence policy overrides
and package-access.ndjson: the per-package access default
and retention.ndjson: one line per evidence retention class, with what you set,
what applies, the default, the bounds and whether a legal hold is active
attestations/
├── build-provenance.ndjson — one line per build provenance attestation
├── build-provenance/<id>.intoto.jsonl — its DSSE envelope (the Ed25519 signature)
├── build-provenance/<id>.sigstore.json — its keyless Sigstore bundle, where one was made
├── releases.ndjson — release attestations: subjects, the frozen release manifest, status, and envelope_path
├── sbom-ingest.ndjson — attestations uploaded together with an SBOM
└── sbom-ingest/<sbom id>.intoto.jsonl
sboms/
├── index.ndjson — one line per SBOM, see below
├── repos/<id>.cdx.json — a repository SBOM, CycloneDX (<id>.spdx.json for SPDX)
└── images/<id>.cdx.json — a container image SBOM- Signaturerna följer med attesteringarna. Varje kuvert verifieras mot samma förtroenderot som paketet, med skriptet i §“Verifiera det signerade manifestet” riktat mot kuvertet i stället för mot
manifest.json.intoto.jsonl(hoppa över kontrollerna avmanifestSha256ochpredicateType, som bara gäller exportpaket). Sigstore-paketen är signerade mot fremforges egen Fulcio och tidsstämplingstjänst, inte mot den publika Sigstore; se SLSA-proveniens. - En saknad signatur visas, den döljs inte. En rad med
"envelope_status": "missing"är en attestering vars signaturobjekt inte längre fanns i lagringen när exporten kördes. Alla andra lagringsfel får exporten att misslyckas. - Container-lager. Ett lagers bedömning av skadlig kod hör till dess innehåll, så ett lager som delas med en annan image listas med sin bedömning under vart och ett av dina manifest som använder det. Images som hämtats via beroendeproxyn listas bara medan din organisation har ClamAV-skanning av hämtningar via proxyn påslagen; när den är avstängd (standard) skannas de inte med ClamAV och har inga bedömningar per lager.
- Release-attesteringar finns för repon med oföränderliga releaser. En release vars
statusinte ärsignedhar inget kuvert (envelope_pathärnull). - SBOM:er.
sboms/innehåller varje SBOM som fremforge lagrar för dina repon (byggen av releaser och av standardbranchen, oavsett om de laddats upp eller tagits fram av den centrala skanningen) och för dina container-images (registrets inventering per manifest), som själva dokumentet. Ett bygge av ett repo har oftast både ett CycloneDX- och ett SPDX-dokument; se SBOM:er. Varje rad isboms/index.ndjsonär den lagrade SBOM-posten (id,subject_kindrepoellerimage,format,repo_full_nameellerartifact_name,release_tag,image_tags,manifest_digest,created_at,sha256_digestoch resten av den lagrade posten, utan lagringssökvägar) plus tre fält om filen i det här paketet:document_path,document_sha256ochdocument_status, som äroknär dokumentet stämmer med den SHA-256 som registrerades när det lagrades,digest_mismatchnär det inte gör det (byten exporteras ändå, och båda digesterna finns på raden) ochmissingnär dokumentet inte längre fanns i lagringen. Alla andra lagringsfel får exporten att misslyckas. - SBOM:er för paket finns inte i
sboms/. SBOM:en för varje paketfil i registret följer med bredvid filen i arkivet med paketinnehåll, som du väljer till.