Skip to main content
[RISK INDEX]

Open source supply chain risk index

Composite risk ranking of 200 open source projects by ecosystem importance, supply chain risk, downstream reach, and structural context. 585,601 projects scored.

Three findings from the data

npm's most-depended-on packages average a security posture of 4.3/10. A cryptography library with 173,000 dependents scores 1.6/10. And 38 of the top 200 have never been assessed for security.

What to do with this

Check your lockfiles against this index. Audit your CI actions (15 CI/CD tools appear in the top 200). Flag dependencies with no security assessment. Review your cryptography dependencies -- 10 crypto libraries average 4.4/10.

585,601
Projects scored for ecosystem importance
162
With security assessments in top 200
38
Not yet assessed in top 200
14
Security checks per assessed project

[MARCH 2026]

A composite ranking of the 200 highest-risk open source projects, scored by ecosystem importance, security posture, downstream reach, and structural context. This is a screening tool, not a threat prediction model.

Contact tobias@xor.tech for the full dataset.

Read this before the rankings

  • C/C++ projects have no tracked dependents. The Linux kernel has a reach score of 0 despite running on billions of devices. Reach data comes from package registries and platform APIs.
  • Structural context uses curated project lists. A new CI action or scanner not on the list gets structural=0. The lists require manual updates.
  • Unassessed projects receive a default supply chain risk of 8/10. Some may have good practices that have not been measured. 38 of the top 200 are unassessed.
  • Platform download counts may overcount CI-driven installs. A project with high PyPI monthly downloads may be inflated by automated pip install in every CI build.
  • The security posture aggregate includes 5 checks not shown in the per-column breakdowns. Reproduced scores may differ from the displayed aggregate by up to 0.5 points.
  • This index measures structural risk from public metadata. It identifies which projects deserve closer inspection. It cannot predict the next compromise.

Three findings

Finding 01

The npm ecosystem's most-depended-on packages have weak security practices

Babel compiles every modern JavaScript application and has 12.7 million downstream dependents. Next.js has 9.7 million. React has 3.3 million. esbuild has 1.3 million. All four are in the top 25 of this index.

Among the 20 projects with the most dependents, the 19 that have been assessed average a security posture of 4.3/10. safe-buffer (2.1M dependents) scores 2.5. inherits (2.3M dependents) scores 3.6. xtuc/webassemblyjs (1.6M dependents) scores 1.7.

These are not obscure packages. They are the transitive foundation of most JavaScript applications. Your lockfile almost certainly includes several of them.

Your JavaScript applications inherit these dependencies transitively. Run npm ls --all against this index and check what you are shipping.

Finding 02

A cryptography library with 173,000 dependents scores 1.6/10 on security

indutny/elliptic handles ECDSA for 173,000+ downstream npm packages. It ranks #1 in this index with a composite score of 7.52.

Its security posture is 1.6/10. Code review: 1/10. Branch protection: 0. SAST: 0. Fuzzing: 0. Security policy: 0. Not maintained in the last 90 days.

It is not alone. The index contains 10 cryptography libraries. Their average security posture is 4.4/10 across the 9 that have been assessed. tweetnacl-js (386K dependents) scores 2.5. crypto-js (53K dependents) scores 2.2. crypto-browserify (83K dependents) has never been assessed.

These are maintained by individuals and small teams, often without funding. Low scores reflect a lack of tooling adoption and organizational support, not a lack of care. The structural risk is real regardless of the reason.

If elliptic were compromised, signature verification across 173,000+ npm packages would break. Check whether your applications depend on it and what alternatives exist.

Finding 03

38 of the top 200 have never been assessed for security

These projects receive a default supply chain risk of 8/10 because no security data exists for them. That is a penalty, not a measurement. The real problem is that nobody has looked.

Among the unassessed: crypto-browserify (83K dependents, rank #9), setuptools-scm (rank #15), jest (696K dependents, rank #31), smithy-typescript (1.7M dependents, rank #34), codeql-action (rank #51), runner-images (rank #61). Some may have strong practices. We do not know.

The assessed projects in the top 200 average a security posture of 3.7/10. The top 25 assessed projects average 4.6/10. Even measured projects score below the midpoint.

You cannot defend what you have not measured. If your supply chain policy requires a security assessment, check whether your dependencies have one.

Methodology

composite = 0.30 x importance + 0.25 x supply_chain_risk + 0.25 x reach + 0.20 x structural

30%

Importance

Ecosystem importance: downstream dependencies, contributors, commit frequency, org diversity. Normalized 0-10.

25%

Supply chain risk

Inverted security posture (10 minus score). Unassessed projects get 8, not 10. Based on 14 security checks.

25%

Reach

log10(dependent_count) x 1.43. Babel (12.7M deps) = 10. A library with 100 deps = 2.9. Falls back to PyPI downloads, Docker Hub pulls, or GitHub workflow references when registries have no data.

20%

Structural context

Project type by verified lists: CI action (10), package manager (9), security scanner (9), build tool (8), cryptography (8), infrastructure (8), ML/AI framework (7), database (6), framework (6), general (0).

Weights sum to 1.0. Composite scores range from 0 to 10. Observed range in the top 200: 5.46 to 7.52.

Full data: Google Sheet (200 rows, all checks).

Top 25

#RepositoryCompositeImportanceSC riskReachStructuralPosture
1indutny/elliptic7.526.58.47.581.6
2dchest/tweetnacl-js7.306.17.58.082.5
3postcss/postcss7.287.35.48.684.6
4evanw/esbuild7.286.95.78.884.3
5parcel-bundler/parcel7.266.87.27.382.8
6rollup/rollup7.157.55.18.284.9
7pypa/setuptools7.147.15.36.7104.7
8babel/babel7.137.82.810.087.2
9browserify/crypto-browserify7.125.98.07.08N/A
10vercel/next.js7.097.94.110.065.9
11swc-project/swc7.087.24.88.485.2
12brix/crypto-js7.015.97.86.882.2
13vuejs/vue6.897.17.07.363.0
14webpack/webpack6.867.54.77.385.3
15pypa/setuptools-scm6.815.78.04.510N/A
16aws/aws-sdk-js-crypto-helpers6.745.94.88.685.2
17facebook/react6.727.73.69.366.4
18neo4j/neo4j6.686.97.26.562.8
19vuejs/core6.677.34.48.765.6
20pypa/wheel6.596.24.76.3105.3
21prowler-cloud/prowler6.575.58.04.59N/A
22yarnpkg/yarn6.566.35.85.794.2
23changesets/changesets6.556.53.86.6106.2
24npm/cli6.537.23.27.196.8
25pypa/pip6.516.54.85.4105.2

Color: red = composite above 7.0, orange = 6.0-7.0. N/A = no security assessment on record. Full 200-row dataset in the Google Sheet.

Recent supply chain targets in this index

Three projects involved in recent supply chain incidents appear in the top 55. All three now have security assessments on record.

#RepositoryCompositeReach sourcePosture
35aquasecurity/trivy6.174.5M Docker pulls/mo6.4
36ultralytics/yolov56.168.2M PyPI downloads/mo4.8
52tj-actions/changed-files5.84266K workflow refs/mo6.1

What to do with this

Check your lockfiles

Extract GitHub URLs from package-lock.json, go.sum, Cargo.lock, or pom.xml and cross-reference them against this index. Most organizations have no idea which of these 200 projects are in their dependency tree.

Audit your CI actions

List every action in your .github/workflows/ files. 15 CI/CD-related tools appear in the top 200, including setuptools (#7), pip (#25), and codeql-action (#51). Pin versions by commit SHA, not tag.

Flag unassessed dependencies

If a dependency has never been assessed, that is a finding. 38 of the top 200 have no assessment. If your policy requires a minimum security posture, verify the data exists before assuming compliance.

Review your cryptography dependencies

10 cryptography libraries appear in the top 200. Their average security posture is 4.4/10. elliptic (1.6/10, 173K dependents), crypto-js (2.2/10, 53K dependents), and tweetnacl-js (2.5/10, 386K dependents) are the three weakest. Check whether your signature verification or encryption code depends on them.

Contact tobias@xor.tech for integration with your dependency scanning pipeline.

[RELATED]

More context

Data generated 2026-03-23. Ecosystem importance: biweekly (585K projects). Security posture: weekly (~1.3M checks). Reach: biweekly (registry + platform API data).

FAQ

What is the OSS supply chain risk index?

A composite ranking of the 200 highest-risk open source projects, scored across four dimensions: ecosystem importance (30%), supply chain risk (25%), downstream reach (25%), and structural context (20%). Data covers 585,601 projects.

How is the composite score calculated?

composite = 0.30 x importance + 0.25 x supply_chain_risk + 0.25 x reach + 0.20 x structural. Scores range from 0 to 10. The observed range in the top 200 is 5.46 to 7.52.

Why does indutny/elliptic rank number 1?

elliptic handles ECDSA for 173,000+ npm packages with a security posture of 1.6/10. Code review: 1/10. Branch protection: 0. SAST: 0. Fuzzing: 0. It scores 7.52 composite.

What are the limitations of this index?

C/C++ projects have no tracked dependents (reach=0). Structural context uses curated project lists. 38 of the top 200 are unassessed and receive a default risk of 8/10. The index measures structural risk from public metadata, not threat predictions.

[RELATED TOPICS]

See which agents produce fixes that work

128 CVEs. 15 agents. 1,920 evaluations. Agents learn from every run.