Release performance monitoring
Catch performance regressions in every deploy.
CodeGecko compares each release with the one before, using real visitors’ Core Web Vitals — and shows you what got faster, what got slower, and the exact page to fix.

FCP and TTFB unchanged.
Sample project · typical visit · not customer results
Setup
One script tag.
One step in CI.
Add the collector to your site and pages group themselves: /products/blue-shoe-42 becomes /products/:slug. After each deploy, CI sends the commit, and it becomes the next release: v1.0.0, v1.0.1, and so on. Roll back, and the old version goes live again.
Send your recent git history with it, and any release that regresses lists the commits that shipped in it.
<script async src="https://codegecko.vercel.app/collector.js" data-project="…" data-key="cg_pub_…"></script>
curl -X POST https://codegecko.vercel.app/api/releases \ -H "Authorization: Bearer $CODEGECKO_SECRET" \ -F projectId=… -F commit=$GIT_SHA → { "version": "v1.0.7" }
Works from any CI. Add data-commit to the tag to match every visit to its exact build.
Beyond the vitals
When a page gets slower, see where the time went — and what shipped.
Sample project · /products/:slug · mobile · v1.0.7 vs v1.0.6
- 01
Which page?
The one slow page, found.
Every comparison breaks down by page and device, so an overall “fine” can’t hide a regression — and pages grouped wrongly can be merged.
/collections/:slug2.58s → 2.17s−16.0%/products/:slug2.71s → 3.39s+25.0%/2.37s → 2.39sUnchanged - 02
Where did the time go?
Load steps
DNS, connect, server, download and DOM ready — so a slower load has an address.
DNS 20Connect 60Server 380Download 70DOM ready 410DOM ready 410ms · up 120ms this release
Long animation frames
Main-thread blocking per visit, with the script that blocked longest.
340ms Needs improvement
longest: gallery.[hash].js
Chrome and Edge
- 03
What got heavier?
Page weight
Compressed JS, CSS, image and font bytes each page actually loaded.
JS
412 kB +114 kBCSS
48 kBImages
1.2 MBFonts
96 kBThird-party cost
Bytes and blocking from other domains. Only domains are sent, never URLs.
- analytics.example.net140ms blocking
- chat-widget.example.io96 kB
- fonts.example.com58 kB
- 04
What shipped?
What shipped
When a release regresses, its report lists the commits that went out with it, with a link to compare them on GitHub.
3 commits since v1.0.6 · newest first
- a41c9e2Add product image gallery
- 7d03b18Lazy-load reviews
- c2f8a01Bump analytics SDK
What shipped, not a diagnosis · Compare on GitHub
JavaScript errors
Share of visits with an error, plus the top messages — emails, IDs and tokens stripped.
1.8% from 3.1%
TypeError: cart is undefined
Privacy by default. No query strings, no fragments, no personal segments. The browser key only sends data, only from your site, and secrets are stored as hashes.
Three questions. Every metric. Every release.
01Is there enough data?
At least 30 real visits of the metric on both releases, for the page and device you’re viewing.
Otherwise: Gathering data02Is the change real?
The 75th percentile has to move by more than max(5%, a per-metric floor).
Otherwise: Unchanged03Which way did it move?
Lower is better. No AI guesses, no causal claims.
Improved or Regressed
| Metric | typical visit, before → after | 01 · visits | 02 · change vs threshold | 03 · direction | Verdict |
|---|---|---|---|---|---|
| LCP | 2.58s → 2.71s | 214 / 196 | +130ms vs 129ms | Regressed | |
| INP | 198ms → 161ms | 182 / 167 | −37ms vs 20ms | Improved | |
| CLS | 0.051 → 0.036 | 214 / 196 | −0.015 vs 0.010 | Improved | |
| FCP | 1.69s → 1.71s | 214 / 196 | +20ms vs 100ms below | Unchanged | |
| TTFB | 652ms → 606ms | 214 / 196 | −46ms vs 50ms below | Unchanged |
Each release is compared with the one before it. Health badges use Google’s Core Web Vitals ranges and show where a metric stands; the verdict shows how it moved. Load steps and third-party cost explain changes but don’t decide verdicts.
The full methodologyOne script tag with your project ID and public key, plus one step in CI after each deploy that sends the git commit. The dashboard gives you both, ready to copy.
As people visit. Your first release is the starting point; the comparison starts with the next one, once both have 30 visits per metric for the page and device you’re viewing.
You’ll still collect data, but verdicts take longer. Until there’s enough, results show Gathering data rather than a guess. If the next release replaces one before it gets enough, that comparison ends Inconclusive.
Every full page load is measured, on any framework. Route changes inside a single-page app (soft navigations) aren’t tracked yet.
Not on its own. When a release regresses, its report lists the commits that shipped in it, with a GitHub compare link, next to what changed: pages, load steps, blocking scripts, bytes and third parties. It doesn’t say which commit caused it. Code-diff analysis is on the roadmap.
Lighthouse is a lab test: one simulated load on one machine. CodeGecko uses your real visitors, compares each release with the one before it, and breaks the result down by page and device.
It’s about 7 kB gzipped and loads async. It sends data in batches when the page is hidden, never retries, and stops for the session after any rejection. On busy sites, data-sample="0.25" measures a quarter of page loads.
No cookies. Query strings and fragments are never sent; IDs, emails and tokens in URLs and error messages are replaced; third parties are reported by domain only.
Every browser that reports these metrics. Long animation frames come from Chrome and Edge only.
Free while in early access.
Launch pricing when paid plans open. Every feature on every plan; plans differ only in projects, traffic and history.
Starter
$19 /month
- 1 project
- 30 days of history
- All features
Pro
$49 /month
- 5 projects
- 90 days of history
- All features
Scale
$99 /month
- 15 projects
- 180 days of history
- All features
USD, billed monthly once paid plans open. Higher plans also include more traffic — details on the pricing page.

Ready when you are
Stop guessing what your deploy did.
One script tag and one CI step. Your next two releases are your first comparison.
Free while in early access.
