diff --git a/benchmarks/with-dgp-cookie-consent/app/favicon.ico b/benchmarks/with-dgp-cookie-consent/app/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/benchmarks/with-dgp-cookie-consent/app/favicon.ico differ
diff --git a/benchmarks/with-dgp-cookie-consent/app/layout.tsx b/benchmarks/with-dgp-cookie-consent/app/layout.tsx
new file mode 100644
index 0000000..38a7002
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/app/layout.tsx
@@ -0,0 +1,84 @@
+import type { Metadata } from "next";
+import Script from "next/script";
+import type { ReactNode } from "react";
+
+export const metadata: Metadata = {
+ title: "benchmark",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: ReactNode;
+}>) {
+ return (
+
+
+ {/** Add custom styles to consent-dialog to allow benchmarking, cuz selecting elements inside shadow DOM is not yet supported */}
+
+
+
+
+ {children}
+
+ );
+}
diff --git a/benchmarks/with-dgp-cookie-consent/app/page.tsx b/benchmarks/with-dgp-cookie-consent/app/page.tsx
new file mode 100644
index 0000000..cb954f2
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/app/page.tsx
@@ -0,0 +1,7 @@
+export default function Home() {
+ return (
+
+
Benchmark
+
+ );
+}
diff --git a/benchmarks/with-dgp-cookie-consent/config.json b/benchmarks/with-dgp-cookie-consent/config.json
new file mode 100644
index 0000000..e2e2a03
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/config.json
@@ -0,0 +1,48 @@
+{
+ "$schema": "./node_modules/@cookiebench/benchmark-schema/schema.json",
+ "name": "with-dgp-cookie-consent",
+ "id": "dgp-cookie-consent",
+ "iterations": 20,
+ "cookieBanner": {
+ "selectors": ["consent-dialog"],
+ "serviceHosts": ["cdn.jsdelivr.net"],
+ "waitForVisibility": true,
+ "measureViewportCoverage": true,
+ "expectedLayoutShift": true,
+ "serviceName": "DGP Cookie Consent"
+ },
+ "techStack": {
+ "bundler": "rollup",
+ "bundleType": "iffe",
+ "frameworks": [],
+ "languages": ["typescript"],
+ "packageManager": "npm",
+ "typescript": true
+ },
+ "internationalization": {
+ "detection": "manual",
+ "stringLoading": "server"
+ },
+ "source": {
+ "isOpenSource": true,
+ "license": "MIT",
+ "github": "https://github.com/danielsitek/dgp-cookie-consent",
+ "website": "https://github.com/danielsitek/dgp-cookie-consent"
+ },
+ "company": {
+ "name": "Daniel Sitek",
+ "website": "https://github.com/danielsitek",
+ "avatar": "https://avatars.githubusercontent.com/u/danielsitek"
+ },
+ "includes": {
+ "backend": "false",
+ "components": ["webcomponent", "typescript"]
+ },
+ "tags": [
+ "lightweight",
+ "zero-dependency",
+ "gdpr",
+ "webcomponent",
+ "typescript"
+ ]
+}
diff --git a/benchmarks/with-dgp-cookie-consent/next-env.d.ts b/benchmarks/with-dgp-cookie-consent/next-env.d.ts
new file mode 100644
index 0000000..1b3be08
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/benchmarks/with-dgp-cookie-consent/next.config.ts b/benchmarks/with-dgp-cookie-consent/next.config.ts
new file mode 100644
index 0000000..7921f35
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/next.config.ts
@@ -0,0 +1,7 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+ /* config options here */
+};
+
+export default nextConfig;
diff --git a/benchmarks/with-dgp-cookie-consent/package.json b/benchmarks/with-dgp-cookie-consent/package.json
new file mode 100644
index 0000000..dd77d0f
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "with-dgp-cookie-consent",
+ "private": true,
+ "scripts": {
+ "benchmark": "pnpm exec benchmark-cli benchmark",
+ "build": "next build",
+ "dev": "next dev --port 3001",
+ "fmt": "biome format . --write",
+ "lint": "biome lint .",
+ "start": "next start"
+ },
+ "dependencies": {
+ "next": "16.0.1",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
+ },
+ "devDependencies": {
+ "@cookiebench/benchmark-schema": "workspace:*",
+ "@cookiebench/cli": "workspace:*",
+ "@cookiebench/ts-config": "workspace:*",
+ "@types/node": "^24.9.2",
+ "@types/react": "^19.2.2",
+ "@types/react-dom": "^19.2.2",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/benchmarks/with-dgp-cookie-consent/tsconfig.json b/benchmarks/with-dgp-cookie-consent/tsconfig.json
new file mode 100644
index 0000000..787e3f6
--- /dev/null
+++ b/benchmarks/with-dgp-cookie-consent/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "extends": "@cookiebench/ts-config/nextjs.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", ".next/types/**/*.ts", "**/*.ts", "**/*.tsx"],
+ "exclude": ["node_modules"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d9efcae..50dc1be 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -221,6 +221,40 @@ importers:
specifier: ^5.9.3
version: 5.9.3
+ benchmarks/with-dgp-cookie-consent:
+ dependencies:
+ next:
+ specifier: 16.0.1
+ version: 16.0.1(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react:
+ specifier: ^19.2.0
+ version: 19.2.0
+ react-dom:
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
+ devDependencies:
+ '@cookiebench/benchmark-schema':
+ specifier: workspace:*
+ version: link:../../packages/benchmark-schema
+ '@cookiebench/cli':
+ specifier: workspace:*
+ version: link:../../packages/cli
+ '@cookiebench/ts-config':
+ specifier: workspace:*
+ version: link:../../packages/typescript-config
+ '@types/node':
+ specifier: ^24.9.2
+ version: 24.9.2
+ '@types/react':
+ specifier: ^19.2.2
+ version: 19.2.2
+ '@types/react-dom':
+ specifier: ^19.2.2
+ version: 19.2.2(@types/react@19.2.2)
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
benchmarks/with-didomi:
dependencies:
'@didomi/react':