Install Success Index
95.3% of the 2,688 open-source projects we tried to install completed a documented clean install — 2,562 of them. The other 126 failed on a fresh machine that did exactly what the project’s own instructions said.
The headline numbers
Denominator: the 2,688 published repositories where an install was actually attempted. A further 305 are books, curated lists or Dockerfile-only projects with no manifest to install from, so they sit outside the rate rather than dragging it down. Across all 2,993 projects, 2,228 (74.4%) got all the way to a build and a test run.
Where the runs ended
| Outcome | Projects | Share | What it means |
|---|---|---|---|
| ran | 2,228 | 74.4% | Cloned and installed, then the build and the project’s own test suite were run. Either may still have failed; the repo page says which. |
| build failed | 334 | 11.2% | The install finished, the build script or compiler did not. |
| install failed | 126 | 4.2% | The project’s own install command exited non-zero in a clean container, or ran past the 15-minute limit. |
| not runnable | 298 | 10% | No supported manifest at the root or one level down — books, curated lists, Dockerfile-only projects. Nothing was installed, so these are outside the install rate. |
| clone failed | 6 | 0.2% | We never got the source: too large to clone, or the clone itself failed. |
| not recorded | 1 | 0% | Published before the harness recorded a status. |
13 of the failed installs hit the 15-minute limit rather than erroring outright; we report those as unfinished installs, not as broken projects.
By ecosystem
| Ecosystem | Attempted | Installed | Rate | Median install | Median deps |
|---|---|---|---|---|---|
| Node.js | 1,186 | 1,104 | 93.1% | 28s | 494 |
| Python | 786 | 776 | 98.7% | 27s | 50 |
| Go | 384 | 377 | 98.2% | 50s | 229 |
| Rust | 262 | 260 | 99.2% | 26s | 382 |
| C/C++ | 38 | 14 | 36.8% | 7s | not counted |
| JVM | 32 | 31 | 96.9% | 54s | not counted |
Medians, not means: a handful of ten-minute installs would otherwise decide the number for everyone. Install seconds are cold-start seconds — every container begins with an empty npm, uv, cargo and Go cache. Dependency counts are packages on disk after install, which is why C/C++ and JVM projects show none: their toolchains do not give us a figure we would trust. Rows with a small sample are still printed; the counts are there so you can judge them.
How we measured this
Each project is cloned at a named commit into a throwaway Debian Bookworm container: 3 CPUs, 8 GB of RAM, a non-root user, no credentials, no cache carried over from a previous run. We then run the project’s own install command — its package manager, its lockfile if it has one — and nothing else. No apt packages are added for a project that needs them, no README is followed by hand, no second attempt is made after a failure. The commit hash and the run date sit in every row of the dataset.
That is a harsher machine than a developer laptop, and we would rather say so than hide it. A project that assumes make, pkg-config, a GPU or a running database will fail here and work fine for you. The number this index reports is not “how many projects are broken”; it is how many install from their own documented instructions on a machine that has nothing else on it. The full procedure, including the time limits and what each outcome word means, is on how we test.
Runs in this snapshot: 22 Aug 2026 to 16 Oct 2026. Every project is re-run roughly every five weeks, so this page and both downloads change over time; cite the date you pulled them. Numbers here are computed from the database when the page loads, not typed in.
The ten slowest installs that still finished
| Project | Ecosystem | Install | Deps | Outcome |
|---|---|---|---|---|
| numpy/numpy | python | 14m 59s | 36 | ran |
| cypress-io/cypress | node | 14m 56s | 4,239 | ran |
| scikit-learn/scikit-learn | python | 14m 23s | 42 | ran |
| rrweb-io/rrweb | node | 14m 07s | 2,450 | ran |
| QwenLM/qwen-code | node | 13m 36s | 1 | ran |
| calcom/cal.diy | node | 12m 49s | 4,673 | build failed |
| pytorch/pytorch | python | 12m 27s | 62 | build failed |
| dataease/SQLBot | python | 11m 34s | 239 | ran |
| siderolabs/talos | go | 11m 13s | 1,610 | ran |
| firecrawl/pdf-inspector | python | 10m 24s | 36 | ran |
The ten heaviest dependency trees
| Project | Ecosystem | Packages on disk | Install | Outcome |
|---|---|---|---|---|
| stdlib-js/stdlib | node | 12,111 | 9m 56s | ran |
| streetwriters/notesnook | node | 9,107 | 1m 51s | build failed |
| novuhq/novu | node | 5,473 | 2m 57s | ran |
| backstage/backstage | node | 5,436 | 3m 54s | ran |
| twentyhq/twenty | node | 5,270 | 7m 25s | ran |
| CopilotKit/CopilotKit | node | 4,778 | 41s | ran |
| calcom/cal.com | node | 4,673 | 3m 51s | build failed |
| calcom/cal.diy | node | 4,673 | 12m 49s | build failed |
| nrwl/nx | node | 4,442 | 62s | build failed |
| cypress-io/cypress | node | 4,239 | 14m 56s | ran |
Every one of these arrives from a single install command. Whether that is a problem is a judgement; the count is not.
Take the data
One row per published project: slug, repository, ecosystem, outcome, install seconds, dependency count, the commit we tested and the date we tested it. Free to reuse with attribution (CC BY 4.0) — cite “MrKeyoor Install Success Index” and link to this page.
Our other index measures what an MCP server costs your context window before it does any work: the MCP Context Tax Index. Think a number here is wrong? Tell us which project and we will re-run it — contact, corrections policy.