Install Success Index
95.7% of the 1,336 open-source projects we tried to install completed a documented clean install — 1,278 of them. The other 58 failed on a fresh machine that did exactly what the project’s own instructions said.
The headline numbers
Denominator: the 1,336 published repositories where an install was actually attempted. A further 113 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 1,449 projects, 1,104 (76.2%) got all the way to a build and a test run.
Where the runs ended
| Outcome | Projects | Share | What it means |
|---|---|---|---|
| ran | 1,104 | 76.2% | 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 | 174 | 12% | The install finished, the build script or compiler did not. |
| install failed | 58 | 4% | The project’s own install command exited non-zero in a clean container, or ran past the 15-minute limit. |
| not runnable | 109 | 7.5% | 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 | 3 | 0.2% | We never got the source: too large to clone, or the clone itself failed. |
| not recorded | 1 | 0.1% | Published before the harness recorded a status. |
5 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 | 613 | 574 | 93.6% | 40s | 683 |
| Python | 341 | 336 | 98.5% | 39s | 58 |
| Go | 225 | 222 | 98.7% | 61s | 231 |
| Rust | 131 | 130 | 99.2% | 37s | 430 |
| C/C++ | 16 | 6 | 37.5% | 12s | not counted |
| JVM | 10 | 10 | 100% | 52s | 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 01 Sept 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 |
|---|---|---|---|---|
| calcom/cal.diy | node | 12m 49s | 4,673 | build failed |
| elastic/kibana | node | 12m 41s | 3,945 | build failed |
| waditu/czsc | python | 12m 33s | 57 | ran |
| siderolabs/talos | go | 11m 13s | 1,610 | ran |
| scikit-learn/scikit-learn | python | 11m 08s | 41 | ran |
| pytorch/pytorch | python | 10m 45s | 62 | build failed |
| n8n-io/n8n | node | 10m 33s | 3,504 | ran |
| dbgate/dbgate | node | 10m 11s | 1,583 | ran |
| infiniflow/ragflow | python | 9m 50s | 517 | ran |
| cypress-io/cypress | node | 8m 45s | 4,291 | ran |
The ten heaviest dependency trees
| Project | Ecosystem | Packages on disk | Install | Outcome |
|---|---|---|---|---|
| stdlib-js/stdlib | node | 12,036 | 8m 29s | ran |
| backstage/backstage | node | 5,518 | 3m 03s | ran |
| twentyhq/twenty | node | 5,270 | 7m 25s | ran |
| novuhq/novu | node | 5,192 | 2m 33s | ran |
| calcom/cal.com | node | 4,673 | 3m 51s | build failed |
| calcom/cal.diy | node | 4,673 | 12m 49s | build failed |
| CopilotKit/CopilotKit | node | 4,602 | 4m 35s | build failed |
| nrwl/nx | node | 4,313 | 89s | build failed |
| cypress-io/cypress | node | 4,291 | 8m 45s | ran |
| TryGhost/Ghost | node | 4,162 | 2m 11s | 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.