# Full results on TanStack Start

Only c15t, CookieYes, Cookie Control, iubenda, Didomi, Enzuzo, OneTrust, Osano, Usercentrics and Ketch ran on TanStack Start. [See every CMP on Next.js](https://cookiebench.com/results.md).

Every metric CookieBench measures for ten consent managers in a TanStack Start app. Desktop profile: 1365 × 768 · No CPU slowdown · 12.5 MB/s, no added latency. Columns follow the [leaderboard](https://cookiebench.com/tanstack-start.md) order: banner time, fastest first. A value without a "vs no CMP" change had no measurable change from the same page without a consent manager.

- [c15t](https://cookiebench.com/benchmarks/c15t/tanstack-start.md)
- [CookieYes](https://cookiebench.com/benchmarks/cookieyes/tanstack-start.md)
- [Cookie Control](https://cookiebench.com/benchmarks/cookie-control/tanstack-start.md)
- [iubenda](https://cookiebench.com/benchmarks/iubenda/tanstack-start.md)
- [Didomi](https://cookiebench.com/benchmarks/didomi/tanstack-start.md)
- [Enzuzo](https://cookiebench.com/benchmarks/enzuzo/tanstack-start.md)
- [OneTrust](https://cookiebench.com/benchmarks/onetrust/tanstack-start.md)
- [Osano](https://cookiebench.com/benchmarks/osano/tanstack-start.md)
- [Usercentrics](https://cookiebench.com/benchmarks/usercentrics/tanstack-start.md)
- [Ketch](https://cookiebench.com/benchmarks/ketch/tanstack-start.md)

## Core Web Vitals

LCP, CLS and TBT come from the page load. INP comes from the Accept click. Google rates LCP good up to 2.5 s and poor above 4 s. It rates INP good up to 200 ms and poor above 500 ms. It rates CLS good up to 0.1 and poor above 0.25. It does not rate TBT.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| LCP: Largest Contentful Paint | 144 ms (Good), +24 ms vs no CMP | 124 ms (Good) | 116 ms (Good) | 116 ms (Good) | 108 ms (Good) | 116 ms (Good), +4 ms vs no CMP | 116 ms (Good) | 116 ms (Good) | 112 ms (Good) | 112 ms (Good) |
| INP: Interaction to Next Paint, for the Accept click | 16 ms (Good) | 16 ms (Good) | 24 ms (Good) | 32 ms (Good) | 16 ms (Good) | 24 ms (Good) | 16 ms (Good) | 40 ms (Good) | 16 ms (Good) | 32 ms (Good) |
| CLS: Cumulative Layout Shift | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) | 0.00 (Good) |
| TBT: Total Blocking Time during load | 0 ms | 0 ms | 10 ms, +10 ms vs no CMP | 0 ms | 51 ms, +51 ms vs no CMP | 42 ms, +42 ms vs no CMP | 1 ms, +1 ms vs no CMP | 5 ms, +5 ms vs no CMP | 52 ms, +52 ms vs no CMP | 176 ms, +176 ms vs no CMP |

## Page load

Google rates TTFB good up to 0.8 s and FCP good up to 1.8 s. Content paint is the paint time of the article image. We time it even when the banner was the largest element.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| TTFB: Time to First Byte | 19 ms (Good), +13 ms vs no CMP | 11 ms (Good) | 9 ms (Good) | 10 ms (Good) | 8 ms (Good) | 8 ms (Good), +0 ms vs no CMP | 8 ms (Good) | 7 ms (Good) | 10 ms (Good) | 9 ms (Good), +1 ms vs no CMP |
| FCP: First Contentful Paint | 76 ms (Good) | 68 ms (Good) | 68 ms (Good) | 68 ms (Good) | 64 ms (Good) | 64 ms (Good), +4 ms vs no CMP | 68 ms (Good) | 64 ms (Good) | 64 ms (Good) | 64 ms (Good), +4 ms vs no CMP |
| Content paint: The article image painted | 144 ms, +24 ms vs no CMP | 124 ms | 116 ms | 116 ms | 108 ms | 116 ms, +4 ms vs no CMP | 116 ms | 116 ms | 112 ms | 112 ms |
| LCP element: What the browser picked as the largest element | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) | Not measured (No eligible visits to attribute) |

## Banner

Milliseconds from navigation. p75 is where the slowest quarter of visits starts.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| CMP requested: First request for the CMP’s script or config | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) |
| CMP loaded: The download of the CMP’s main script is complete | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) | Not measured (A proposed metric that v3 does not summarise yet) |
| Consent known: The CMP reports the visitor’s consent state | 145 ms | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) | Not measured (This CMP exposes no consent-ready signal) |
| Banner visible: The banner is on screen | 54 ms | 279 ms | 380 ms | 398 ms | 447 ms | 463 ms | 623 ms | 637 ms | 675 ms | 1.64 s |
| Screen covered: Share of the viewport the banner covers | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) |

## Click response

Time until the screen updates. We rate it like INP: good up to 200 ms, poor above 500 ms. The browser reports these times in 8 ms steps. It does not report clicks under 16 ms.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Accept: Accept all, from the banner | 16 ms (Good) | 16 ms (Good) | 24 ms (Good) | 32 ms (Good) | 16 ms (Good) | 24 ms (Good) | 16 ms (Good) | 40 ms (Good) | 16 ms (Good) | 32 ms (Good) |
| Reject: Reject all, from the banner | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) | 32 ms (Good) | 16 ms (Good) | 16 ms (Good) | 24 ms (Good) | 32 ms (Good) | 16 ms (Good) | 16 ms (Good) |
| Save: Save, in the preferences dialog | 24 ms (Good) | Not measured (There is no granular save-preferences flow to test) | Not measured (There is no granular save-preferences flow to test) | 32 ms (Good) | 40 ms (Good) | 24 ms (Good) | 16 ms (Good) | 48 ms (Good) | 16 ms (Good) | 16 ms (Good) |
| Next click: A click on the page 500 ms after Accept | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) | 24 ms (Good) | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) | 16 ms (Good) |

## After Accept

Milliseconds from the click. Main thread is the long-task blocking time after it.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Banner gone: Banner and any overlay removed | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Consent applied: The CMP’s consent state matches the choice | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Scripts ran: Every script that the choice lets run is complete | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Main thread: Long-task blocking time after the click | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |

## After Reject

Reject lets no scripts run, so there is no script time to report.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Banner gone: Banner and any overlay removed | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Consent applied: The CMP’s consent state matches the choice | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Main thread: Long-task blocking time after the click | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |

## After Save

From the Save click in the preferences dialog.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Banner gone: Banner and any overlay removed | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Consent applied: The CMP’s consent state matches the choice | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Scripts ran: Every script that the choice lets run is complete | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |
| Main thread: Long-task blocking time after the click | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) | Not measured (This run published only the next paint after a click) |

## Download size

The first load. Unpacked is the size after decompression. That is the code that the browser must parse.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Transferred: Bytes over the network during the first load | 700 KB, +110 KB vs no CMP | 621 KB, +31 KB vs no CMP | 688 KB, +99 KB vs no CMP | 711 KB, +122 KB vs no CMP | 843 KB, +253 KB vs no CMP | 743 KB, +153 KB vs no CMP | 801 KB, +211 KB vs no CMP | 677 KB, +87 KB vs no CMP | 754 KB, +164 KB vs no CMP | 1.12 MB, +532 KB vs no CMP |
| Unpacked: The same bytes after decompression | 1.31 MB, +461 KB vs no CMP | 944 KB, +97 KB vs no CMP | 1.19 MB, +346 KB vs no CMP | 1.30 MB, +458 KB vs no CMP | 1.85 MB, +1.00 MB vs no CMP | 1.44 MB, +592 KB vs no CMP | 1.70 MB, +855 KB vs no CMP | 1.19 MB, +348 KB vs no CMP | 1.56 MB, +711 KB vs no CMP | 8.05 MB, +7.20 MB vs no CMP |
| Deferred: Bytes transferred after the first load settled | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) |
| Requests: Requests during the first load | 17, +10 vs no CMP | 16, +9 vs no CMP | 9, +2 vs no CMP | 11, +4 vs no CMP | 13, +6 vs no CMP | 9, +2 vs no CMP | 19, +12 vs no CMP | 11, +4 vs no CMP | 24, +17 vs no CMP | 16, +9 vs no CMP |
| Third-party: Requests to other hosts during the first load | 0 | 9 | 2 | 4 | 6 | 2 | 12 | 4 | 17 | 9 |

## Returning visitors

A visitor who accepted earlier loads the page again. We expect the banner to stay hidden.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Banner hidden: The banner stayed hidden on the return visit | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) |
| Consent known: Time from navigation until the CMP restores the stored choice | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) | Not measured (Not published for this run) |

## Consent checks

No tracker or cookie before the visitor chooses, and the choice holds afterwards. A check we could not run is not a failure.

| Metric | c15t | CookieYes | Cookie Control | iubenda | Didomi | Enzuzo | OneTrust | Osano | Usercentrics | Ketch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Checks: Load, Accept, Reject, Save, withdrawal and keyboard checks | 4 of 4 passed | 3 of 4 passed (1 could not run) | 3 of 4 passed (1 could not run) | 4 of 4 passed | 4 of 4 passed | 4 of 4 passed | 4 of 4 passed | 1 of 4 passed (3 could not run) | 4 of 4 passed | 4 of 4 passed |

## Other views

- [Desktop, Next.js](https://cookiebench.com/results.md)
- [Desktop, React](https://cookiebench.com/results/react.md)
- [Desktop, Nuxt](https://cookiebench.com/results/nuxt.md)
- [Desktop, Astro](https://cookiebench.com/results/astro.md)
- [Desktop, Script tag](https://cookiebench.com/results/script-tag.md)
- [Mobile, Next.js](https://cookiebench.com/results/mobile.md)
- [Mobile, React](https://cookiebench.com/results/mobile/react.md)
- [Mobile, Nuxt](https://cookiebench.com/results/mobile/nuxt.md)
- [Mobile, Astro](https://cookiebench.com/results/mobile/astro.md)
- [Mobile, TanStack Start](https://cookiebench.com/results/mobile/tanstack-start.md)
- [Mobile, Script tag](https://cookiebench.com/results/mobile/script-tag.md)

Methodology [cookiebench-v3.2.4](https://cookiebench.com/methodology). inth, the team behind c15t, maintains CookieBench. c15t is one of the consent managers we measure ([disclosure](https://cookiebench.com/methodology)). Feature support comes from vendor documentation unless a row says "Verified by test".
