Repository evidence benchmark · 2026 edition
The state of CRA-relevant evidence in public software repositories.
How much of the evidence a manufacturer may need is already observable in a software repository?
This research does not determine whether the CRA applies to any project and does not assess legal compliance. It measures only CRA-relevant evidence observable in public repository material.
Evidence signals, with their limits attached.
We inspected frozen default-branch commits from 300 popular, active GitHub repositories: 50 each in .NET, JavaScript/TypeScript, Python, Java/JVM, Go and Rust. This is a balanced, popularity-biased sample, not an estimate for all software or regulated manufacturers.
Dependency manifest detected
299 / 300 observed · 0 unknown
SECURITY.md detected
146 / 300 observed · 0 unknown
Support / EOL text signal
92 / 300 observed · 52 unknown
A repository SBOM is not necessarily a shipped SBOM. A support / EOL text signal is not a validated support policy. Release assets, external sites and inherited organization policies were outside this scan.
All percentages use the full sample as denominator, including unknowns. “Not detected” means no rule matched within the defined scan, not that evidence does not exist. Text signals have not been manually validated; neither precision nor recall is estimated.
Read the SBOM result as a repository-only observation
The collector detected qualifying committed SBOM JSON in 0 repositories, with 7 repositories unknown for that metric. This does not estimate how many projects ship an SBOM: release assets and package registries were not inspected. CycloneDX XML, SPDX tag-value and unnamed JSON files were also outside the detector.
Compare observations, not compliance.
Each cell shows observed repositories out of 50, followed by unknowns (U). The strata use GitHub primary language: C# for .NET, Java/Kotlin for JVM. Language is an imperfect ecosystem proxy. Differences can reflect project mix, repository layout or detector coverage.
| Evidence signal | .NET | JavaScript/TypeScript | Python | Java/JVM | Go | Rust |
|---|---|---|---|---|---|---|
| Dependency manifest detected | 50/500 U | 50/500 U | 49/500 U | 50/500 U | 50/500 U | 50/500 U |
| Lockfile detected | 13/500 U | 48/500 U | 25/500 U | 16/502 U | 22/500 U | 47/500 U |
| Repository SBOM document detected | 0/501 U | 0/500 U | 0/502 U | 0/502 U | 0/501 U | 0/501 U |
| CycloneDX JSON detected | 0/501 U | 0/500 U | 0/502 U | 0/502 U | 0/501 U | 0/501 U |
| SPDX JSON detected | 0/501 U | 0/500 U | 0/502 U | 0/502 U | 0/501 U | 0/501 U |
| SECURITY.md detected | 13/500 U | 31/500 U | 32/500 U | 14/500 U | 31/500 U | 25/500 U |
| Reporting-contact text signal | 8/502 U | 16/5013 U | 16/5012 U | 11/505 U | 16/5011 U | 10/5019 U |
| Disclosure-process text signal | 5/503 U | 6/5019 U | 13/5011 U | 4/509 U | 12/5010 U | 9/5018 U |
| Security-update text signal | 2/506 U | 6/5018 U | 7/5016 U | 2/5011 U | 7/5014 U | 6/5022 U |
| Support / EOL text signal | 14/500 U | 16/5010 U | 17/5012 U | 7/508 U | 25/507 U | 13/5015 U |
| Release-process text signal | 5/504 U | 12/5015 U | 12/5010 U | 5/509 U | 14/507 U | 19/5015 U |
| CI / build configuration detected | 42/500 U | 50/500 U | 48/500 U | 46/500 U | 50/500 U | 50/500 U |
| Architecture / design document detected | 2/501 U | 14/500 U | 14/500 U | 5/502 U | 7/501 U | 13/500 U |
| Security-testing tool or text signal | 13/503 U | 15/5015 U | 18/507 U | 7/507 U | 24/505 U | 24/509 U |
| Published release reference observable | 50/500 U | 50/500 U | 50/500 U | 50/500 U | 50/500 U | 50/500 U |
What we measured. What remains unanswered.
1. Freeze the sample
Public, non-fork, non-archived repositories with at least 500 stars, a push in the preceding year and a stable GitHub release. Start with the top 100 by stars per language, apply a fixed hash ordering and screen names/descriptions for non-software material. Take 50 eligible repositories per ecosystem.
2. Pin the observations
Read paths at fixed Git tree hashes. Inspect up to 30 selected documents and 20 named SBOM JSON candidates per repository, at most 256 KB each. Exclude test, fixture, example and vendored directories. Keep file links, hashes and line numbers, without redistributing source content.
3. Keep uncertainty visible
Truncated trees, failed reads and collection caps leave nonpositive observations unknown. Filename detections and narrow English text rules measure signals. They do not verify policy quality, successful CI runs, dependency completeness or actual security practices.
4. Publish the limitations
Popular repositories are not representative of all software. Public evidence omits private work and external documentation. Default-branch files are not release-bound evidence. A release reference is guaranteed by selection. No readiness ranking or causal ecosystem comparison follows from these results.
This study is published by ConformOps, which sells CRA evidence-management software. It is automated publisher research, not an independent assessment. We did not establish a manually labelled validation set, so policy-related figures must be quoted as text signals.
Read the complete methodology and metric definitions
Why this question is different
The OpenSSF / Linux Foundation 2026 CRA Awareness and Readiness Report studies awareness and readiness. ENISA’s 2026 SBOM adoption study examines organizational adoption. This benchmark asks what is visible in repository material, a different unit of analysis.
Regulation (EU) 2024/2847 motivates the evidence categories, particularly vulnerability handling and technical documentation. Free and open-source software has specific treatment under the CRA. Repository visibility alone cannot establish economic activity, scope, legal role or compliance.
The 300-repository sample.
The downloads retain selection metadata and commit hashes. Expand an ecosystem to inspect its repositories at the exact commits used in this edition.
.NET50 repositories
- aspnetboilerplate/aspnetboilerplate
2323c13a15 - Cysharp/UniTask
ceac8d6946 - mRemoteNG/mRemoteNG
aa6d6884da - JamesNK/Newtonsoft.Json
09bb545d72 - d2phap/ImageGlass
a8754cbade - Tyrrrz/YoutubeDownloader
ff954187af - ardalis/CleanArchitecture
fbdc095187 - chocolatey/choco
ede55876ce - bchavez/Bogus
6ece18c5c2 - JosefNemec/Playnite
98c09dd6a1 - studyzy/imewlconverter
16744a12ed - files-community/Files
78964ba418 - wmjordan/PDFPatcher
49a04400fb - MahApps/MahApps.Metro
69f1c39731 - Tyrrrz/DiscordChatExporter
3a8ef99769 - memstechtips/Winhance
f23d554eb2 - tui-cs/Terminal.Gui
145585dd58 - Jackett/Jackett
4ffc7bd36a - dotnet/BenchmarkDotNet
7a821666f2 - huiyadanli/RevokeMsgPatcher
8360fe2af7 - babalae/better-genshin-impact
b3e46b3004 - 2dust/v2rayN
3d50d9f82c - SubtitleEdit/subtitleedit
7bf8f7d16d - CoplayDev/unity-mcp
2fcc179578 - dotnet/runtime
fb98b574c9 - PowerShell/PowerShell
b664c2e026 - File-New-Project/EarTrumpet
f6d864ce89 - jellyfin/jellyfin
882faf2b2d - MathewSachin/Captura
3fdf41529b - cefsharp/CefSharp
6011f2c79e - Tichau/FileConverter
6c157a411f - QuestPDF/QuestPDF
1b68e8f07f - lostindark/DriverStoreExplorer
0518f78f15 - netchx/netch
9d99eb1c5a - ppy/osu
6895dcb006 - microsoft/garnet
c84bd7ca3a - dotnet/roslyn
ca7d6c1a04 - microsoft/semantic-kernel
872d29ea75 - StockSharp/StockSharp
4fd3058055 - runcat-dev/RunCat365
03b6e2b288 - seerge/g-helper
a4441b5d59 - dotnet/orleans
c7e30326b8 - App-vNext/Polly
482bdf824f - k1tbyte/Wand-Enhancer
0898d6ecd6 - dotnet/eShop
b4a4087200 - icsharpcode/ILSpy
951ca987dd - LuckyPennySoftware/MediatR
916ef1b3d6 - winsw/winsw
1d0ee4a91b - Sonarr/Sonarr
5352e16d95 - QL-Win/QuickLook
60eea46ae2
JavaScript/TypeScript50 repositories
- upstash/context7
80e681a507 - tldraw/tldraw
d98ea50911 - siyuan-note/siyuan
8641553a1f - affaan-m/ECC
cf065358fb - impress/impress.js
b44b9694b4 - Leaflet/Leaflet
d62d241812 - openai/codex-plugin-cc
db52e28f4d - Dogfalo/materialize
824e78248b - clash-verge-rev/clash-verge-rev
f8b69b5d62 - Egonex-AI/Understand-Anything
07edf82a04 - immich-app/immich
58fb1ed4a9 - apache/echarts
018ed39989 - heygen-com/hyperframes
dc9fb67320 - marktext/marktext
33777a7abc - naptha/tesseract.js
a1ca80d9e3 - videojs/video.js
c3a7e0e6d2 - react-hook-form/react-hook-form
b564062c93 - nocodb/nocodb
e6b66e9b16 - Fission-AI/OpenSpec
e062b9572b - DefinitelyTyped/DefinitelyTyped
af92471c4a - TanStack/query
e57f8163b1 - pbakaus/impeccable
2bc2879276 - ChromeDevTools/chrome-devtools-mcp
a918b7b408 - code-yeongyu/oh-my-openagent
a470d3d9dd - agalwood/Motrix
6f9d085851 - hoppscotch/hoppscotch
ac145e7f75 - facebook/docusaurus
1434f56a07 - moeru-ai/airi
9a4e1da5a1 - toeverything/AFFiNE
b4331cbe1e - thedotmack/claude-mem
fd0ecf0233 - paperclipai/paperclip
d8b9580531 - sahat/hackathon-starter
7a6eb54777 - supabase/supabase
c2ebfebb39 - KeygraphHQ/shannon
4b8131fdd5 - anomalyco/opencode
ecbc6ccac8 - sveltejs/svelte
5895c637b0 - career-ops-hq/career-ops
8a20e491fd - gatsbyjs/gatsby
e85d62f177 - puppeteer/puppeteer
f0dc34c9af - docsifyjs/docsify
879f02e25e - bigskysoftware/htmx
142b857779 - typicode/husky
3f0023dc10 - fastapi/full-stack-fastapi-template
cb740b656d - prettier/prettier
7fe4924c8a - payloadcms/payload
0a3dabf0db - lovell/sharp
19490e88f7 - lutzroeder/netron
2e6a858320 - serverless/serverless
fa183f55c5 - CherryHQ/cherry-studio
e131f495a9 - carbon-app/carbon
1334429ae6
Python50 repositories
- langflow-ai/langflow
e3abffc1b8 - browser-use/browser-use
2b1f9d3779 - soimort/you-get
049548f3f3 - ZhuLinsen/daily_stock_analysis
089d9d26d6 - pathwaycom/pathway
2e517d846b - scikit-learn/scikit-learn
cfb2977609 - open-webui/open-webui
0a7c15832f - Graphify-Labs/graphify
67f99bd005 - MemPalace/mempalace
d9f059076c - Comfy-Org/ComfyUI
9ac7352f70 - fastapi/fastapi
50113da16f - ansible/ansible
3827d66bfb - mem0ai/mem0
dae67f74f5 - Significant-Gravitas/AutoGPT
98381ab27f - opendatalab/MinerU
4fe4bde114 - unclecode/crawl4ai
862f6bccb9 - apache/superset
574d121cd8 - hacksider/Deep-Live-Cam
19f4270e30 - OpenBB-finance/OpenBB
3e071fcc2c - NousResearch/hermes-agent
6178e9f4ee - PaddlePaddle/PaddleOCR
2661c7c0ef - virattt/ai-hedge-fund
fc1bf250ea - sherlock-project/sherlock
9100f9d40a - keras-team/keras
0e3f1a57a0 - pallets/flask
d318b68347 - zylon-ai/private-gpt
0658140076 - TauricResearch/TradingAgents
9dee508c44 - Textualize/rich
9d8f9a372c - pytorch/pytorch
938afb1366 - tensorflow/models
d598fb8b23 - xtekky/gpt4free
3b62a0a3a3 - microsoft/autogen
027ecf0a37 - RVC-Boss/GPT-SoVITS
48b1a0169a - ytdl-org/youtube-dl
956b8c5855 - AUTOMATIC1111/stable-diffusion-webui
82a973c043 - scrapy/scrapy
544f4d2d52 - vllm-project/vllm
537af2c3a4 - unslothai/unsloth
502c4d2377 - binary-husky/gpt_academic
d6bde0fa54 - headroomlabs-ai/headroom
e67b3c8a29 - jingyaogong/minimind
6fc918beb6 - microsoft/markitdown
b6e8bbdce6 - huggingface/transformers
8eaf75f84e - hiyouga/LlamaFactory
dced5f8804 - github/spec-kit
4a7341a93d - D4Vinci/Scrapling
28c3296714 - ultralytics/yolov5
35b48237ae - harry0703/MoneyPrinterTurbo
5ceffd02a2 - ageitgey/face_recognition
9f3061aaee - usestrix/strix
52b1923347
Java/JVM50 repositories
- iamgio/quarkdown
3097d3140f - lysine-dev/retrofit
e27d855b7b - shadowsocks/shadowsocks-android
ae28fd9193 - ReVanced/revanced-manager
2a88257b71 - ReactiveX/RxAndroid
20139bfd6f - Anuken/Mindustry
37c1b6ac1e - jeecgboot/JeecgBoot
7436405444 - CymChad/BaseRecyclerViewAdapterHelper
9948068cd9 - alibaba/druid
fa8dc99126 - google/gson
b3f4ca2008 - aistra0528/Hail
bcb003810e - Tencent/tinker
1b7ea02c23 - infinilabs/analysis-ik
6d2d70fd1a - yairm210/Unciv
edcd78c5f7 - skylot/jadx
8f7ea4e2c4 - javalin/javalin
219f8c14dd - SeleniumHQ/selenium
1303bd5282 - Mygod/VPNHotspot
6e3d4a4f9d - airbnb/lottie-android
05ea92e903 - bumptech/glide
83f3b67128 - quarkusio/quarkus
504a086e0f - google-ai-edge/gallery
33721326a9 - JunkFood02/Seal
63bd8a4d31 - google/guava
5fb424c43a - CeuiLiSA/Pixiv-Shaft
e6b3ff01b1 - librepods-org/librepods
53679cc902 - jenkinsci/jenkins
98047df8a5 - alibaba/DataX
80ec23d5c5 - JetBrains/kotlin
c5a406a065 - Grasscutters/Grasscutter
f373827a83 - bitwarden/android
b99ad92c8b - shiaho777/web-to-app
fc455d769d - termux/termux-app
3b66f87996 - zhanghai/MaterialFiles
fc12500384 - Droid-ify/client
7131fe3e9a - ktlint/ktlint
4c933394a3 - macrozheng/mall
0504e86b1f - topjohnwu/Magisk
37063225d4 - SukiSU-Ultra/SukiSU-Ultra
9fbe8fe8ca - bazelbuild/bazel
6a4878da6a - XayahSuSuSu/Android-DataBackup
5b2128882e - 2dust/v2rayNG
2020807c25 - ben-manes/caffeine
a81e8e59f3 - conductor-oss/conductor
09786aaf21 - maxrave-dev/SimpMusic
bb5c750025 - z-huang/InnerTune
bfba5ecb16 - facebook/litho
55e28e5893 - alibaba/nacos
102d9a6f83 - uber/RIBs
e3aff84f66 - baomidou/mybatis-plus
bf67d90747
Go50 repositories
- harness/harness
aba5bf25b8 - sipeed/picoclaw
bbf6893ca7 - go-gitea/gitea
cc6fc41723 - binwiederhier/ntfy
10cb6506f8 - opentofu/opentofu
80be292a94 - spf13/viper
528f7416c4 - esengine/DeepSeek-Reasonix
401fca4057 - pocketbase/pocketbase
5684ee24f1 - nektos/act
4f41128141 - tailscale/tailscale
5201273aec - beego/beego
939cfde380 - caddyserver/caddy
e05f57dc7a - trufflesecurity/trufflehog
166bf18f3a - k3s-io/k3s
a305766d0b - glanceapp/glance
372466c6d7 - AlistGo/alist
e1c022a9d9 - abiosoft/colima
c3a5f9184d - moby/moby
275015b0e7 - github/github-mcp-server
8b3538ff8a - netbirdio/netbird
15c0a2903d - netdata/netdata
0f699939dd - ethereum/go-ethereum
5818afe9bb - spf13/cobra
adbc881390 - syncthing/syncthing
ed8d87f251 - cloudreve/cloudreve
1c3fe4da3c - juanfont/headscale
5f955cb4b4 - gogs/gogs
aec2b842cd - danielmiessler/Fabric
b682dad740 - charmbracelet/crush
7f9a8e4ca8 - goharbor/harbor
3195f04fc5 - charmbracelet/bubbletea
73b6d91ac1 - router-for-me/CLIProxyAPI
ba7e55836d - grafana/k6
687de4dc78 - microsoft/TypeScript
1f70213d49 - SagerNet/sing-box
60b504a1c7 - gastownhall/beads
c0d8da42de - labstack/echo
90702e71a7 - 1Panel-dev/1Panel
bad022f524 - aquasecurity/trivy
6d90892649 - go-gorm/gorm
1d6ce99528 - v2ray/v2ray-core
d80440f3d5 - helm/helm
fa11636b01 - docker/compose
75331cd042 - evanw/esbuild
f6058f8364 - prometheus/prometheus
7f48230f67 - fatedier/frp
832df8dff6 - charmbracelet/glow
7b2431d4a8 - jesseduffield/lazygit
c07f4d381b - wailsapp/wails
397947b81f - hashicorp/consul
be5795ee6b
Rust50 repositories
- rwf2/Rocket
3a54d079ae - sxyazi/yazi
5f901b886b - emilk/egui
57160f5e9e - biomejs/biome
e7b3b95484 - GyulyVGC/sniffnet
ec3fba2e64 - cloudflare/pingora
09696b51bc - ruvnet/RuView
d613a576ea - qdrant/qdrant
6ab21cac18 - ankitects/anki
5edc31694f - yewstack/yew
bfa6c19af9 - cjpais/Handy
bc7facea3a - bevyengine/bevy
f65077ce99 - actix/actix-web
c215607f4b - zellij-org/zellij
af38660c58 - iced-rs/iced
2cd9197a71 - surrealdb/surrealdb
18971ffba7 - BurntSushi/ripgrep
3fce3b5bb0 - Hmbown/Codewhale
aedb88b950 - astral-sh/ruff
f6cdb46fd7 - ajeetdsouza/zoxide
4165849095 - nautechsystems/nautilus_trader
1602043deb - swc-project/swc
a5bd5924c1 - rustdesk/rustdesk
e8eead5715 - wezterm/wezterm
d2f3f05b38 - pola-rs/polars
f611a6d606 - astral-sh/uv
dbbc4c9a1e - dandavison/delta
9d730c043d - tree-sitter/tree-sitter
badf2882c6 - Zackriya-Solutions/meetily
0281737d87 - FuelLabs/fuel-core
add100d30d - oven-sh/bun
3f2610e24a - farion1231/cc-switch
f3b18df120 - vercel-labs/agent-browser
219c47a9da - typst/typst
26e924d311 - meilisearch/meilisearch
a088ecc354 - FuelLabs/fuels-rs
d9a250a518 - starship/starship
864500b269 - tw93/Pake
24c7c67a64 - sharkdp/bat
7323a7514f - vercel/turborepo
63797e490d - zed-industries/zed
6f73c7d0a4 - openinterpreter/openinterpreter
f6722c8008 - Schniz/fnm
86adc9676c - pnpm/pnpm
8760cfa9f3 - zeroclaw-labs/zeroclaw
a6937dfe75 - openai/codex
b4373e53ab - firecracker-microvm/firecracker
7699746649 - TabbyML/tabby
21b29048d7 - lbjlaq/Antigravity-Manager
efc3827b3f - alacritty/alacritty
d692748d3f
Check it. Reproduce it. Cite it.
Download the frozen sample and every observation. The script uses read-only GitHub access and never executes repository code. Reproduction depends on the pinned upstream material remaining publicly available.
repositories.csvEvery observationStates, pinned evidence links, hashes and line numbersobservations.csvMethodologySelection, metric definitions, limitations and reproductionmethodology.mdVersioned evidence mapDetection rules, collection limits and collector digestevidence-map-version.jsonCandidate frameSelection order, exclusions and quota dispositionscandidates.csvCollection coverageTruncated trees, document limits and failed readscoverage.csvFrozen inputsExact tree hashes, search queries and release metadatasample.jsonSample digestsFreeze timestamp and SHA-256 bindingssample-freeze.jsonAggregate resultsCounts by ecosystem and observation digestresults.jsonReproduction scriptDependency-free Node.js collector; read-only GitHub accesscollector.mjsSuggested citation
ConformOps (2026). The State of CRA-Relevant Evidence in Public Software Repositories - 2026. repository-evidence@2. Collected 2026-09-07. https://conformops.eu/research/cra-repository-evidence-benchmark-2026
Sample SHA-256: ea12c7013f554d88b166d14c4646acd7e79fe425aad56dd0e56d6208888b5542
Dataset and methodology: Creative Commons Attribution 4.0. Upstream source files retain their own licenses. To request a correction, open an issue naming the repository, metric and pinned evidence link. Corrections require an explicit version change.