What Is the Drift Score?
The Upgrade Drift Score is a deterministic, versioned metric (0–100) that represents how far behind your codebase is relative to the current stable ecosystem baseline.
Higher score = healthier upgrade posture.
Risk Levels
| Score | Risk Level | What It Means |
|---|---|---|
| 70–100 | Low | You're in good shape |
| 40–69 | Moderate | Some attention needed |
| 0–39 | High | Significant upgrade debt |
Score Components
The overall score is a weighted combination of four components:
Runtime (Weight: High)
Measures Node.js or .NET runtime major version lag. Running a current LTS version scores highest. Running an older but still supported version scores moderately. Running an end-of-life runtime scores very low.
Frameworks (Weight: High)
Measures major version distance for core frameworks — React, Next.js, NestJS, ASP.NET Core, Angular, Vue, etc. Frameworks are weighted heavily because major version upgrades often require significant code changes.
Dependencies (Weight: Medium)
Measures the age distribution across all dependencies. The scan classifies each dependency as:
- Current — on the latest major version
- One major behind — one major version lag
- Two-plus majors behind — two or more major versions behind
The stacked distribution determines the score contribution.
EOL Risk (Weight: High)
Measures proximity to end-of-life for runtimes and frameworks. As an EOL date approaches, the score drops sharply. After EOL, this component contributes very low scores.
Deterministic and Versioned
The score algorithm is versioned (schemaVersion: "1.0"), meaning the same inputs always produce the same score. This makes the score suitable for CI quality gates — you won't get different scores on different runs without actual dependency changes.
Improving Your Score
The fastest ways to improve your drift score:
- Upgrade your runtime — moving from Node 18 to Node 22, or .NET 6 to .NET 8, has the biggest impact
- Upgrade core frameworks — React 17 → 19, Next 13 → 15, Angular 15 → 18, etc.
- Batch-upgrade stale dependencies — focus on the "two-plus majors behind" bucket first
- Set a drift budget — use
--drift-budgetin CI to prevent backsliding
Tracking Over Time
Use baselines to track your score over time:
# Set a baseline
vibgrate baseline .
# Later, compare
vibgrate scan . --baseline .vibgrate/baseline.json
The dashboard provides historical trend charts if you push results with vibgrate push.