PageSourceSearch

https://ngrok.com/

html ngrok.com collected 2026-09-24 06:48:41 UTC 144,916 bytes, 547 lines download raw bytes

1<!DOCTYPE html><html lang="en-US" dir="ltr" class="h-full dark" data-applied-theme="dark" data-theme="system"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/assets/mantle-dark-BdjafGXp.css" as="style"/><link rel="preload" href="/assets/root-B12E_F54.css" as="style"/><meta name="theme-color" content="#4a3066"/><link rel="preconnect" href="https://assets.ngrok.com" crossorigin="anonymous"/><link rel="preconnect" href="https://e.ngrok.com" crossorigin="anonymous"/><link rel="preconnect" href="https://global.ketchcdn.com"/><link rel="preconnect" href="https://cdn.ketchjs.com"/><link rel="dns-prefetch" href="https://www.googletagmanager.com"/><link rel="dns-prefetch" href="https://www.google-analytics.com"/><link rel="preload" href="https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><link rel="preload" href="https://assets.ngrok.com/fonts/family/family-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><link rel="preload" href="https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><meta name="google-site-verification" content="NuaXoaJOg65EEby46q68Tk2MjKJbImfQvgF8ZWWIyFc"/><meta name="msvalidate.01" content="806C0F5946BE89DCD6BB21AB9A525B34"/><meta name="author" content="ngrok"/><link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><meta name="app-version" content="c283af1c"/><meta name="darkreader-lock"/><link rel="sitemap" type="application/xml" href="/sitemap.xml"/><link rel="alternate" type="application/rss+xml" title="ngrok blog" href="https://ngrok.com/blog/rss.xml"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta property="og:site_name" content="ngrok.com"/><meta name="twitter:card" content="summary_large_image"/><title>ngrok: deliver your apps, APIs, and AI on local and prod</title><meta property="og:title" content="ngrok: deliver your apps, APIs, and AI on local and prod"/><meta name="twitter:title" content="ngrok: deliver your apps, APIs, and AI on local and prod"/><meta name="description" content="ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models, wherever they run. Start on localhost, ship to prod."/><meta property="og:description" content="ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models, wherever they run. Start on localhost, ship to prod."/><meta name="twitter:description" content="ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models, wherever they run. Start on localhost, ship to prod."/><meta property="og:image" content="https://ngrok.com/assets/home/og-image.png"/><meta name="twitter:image" content="https://ngrok.com/assets/home/og-image.png"/><link rel="canonical" href="https://ngrok.com/"/><meta property="og:url" content="https://ngrok.com/"/><meta name="twitter:url" content="https://ngrok.com/"/><link rel="modulepreload" href="/assets/entry.client-Q3doW8M7.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/icon-BT8FnkkJ-BXNRZ6YI.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/root-Df6qxCYM.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/preconnect-on-intent-Ct11lnrS.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/browser-only-Crr3sgA0-ChZXuJOp.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/href-SWPxf9Xv.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/slot-BsvE2ntj-B4hthNWr.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/canonical-origin-DEvI19Uw.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/use-matches-media-query-m860lols-BPcGxkvr.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/tooltip-H03l7E4Y-BpX1gR5z.
1js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/button-Dij5vCQG-D-1fShZx.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/IconBase.es-Uflyhfs3.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/button-pwkdtR3U-BvUx4nf0.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/error-page-CN5xrspE.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/CaretDown.es-qTa5geRk.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/accordion-BzEXMr0m.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/separator-D98be0gY-BV1W8AlQ.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/ArrowRight.es-DbIDcYkD.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Briefcase.es-BT4L41Sl.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Buildings.es-C1mUTXFt.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/CaretRight.es-Cb69Rram.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Robot.es-C8KQk72Z.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/DownloadSimple.es-Cpx5kR_N.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/FlowArrow.es-4UIYZEAu.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Globe.es-D47Pp2Ey.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Heart.es-D44FqSCf.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/PlugsConnected.es-DiCfYYGn.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/ShareFat.es-Cv4Iziuc.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/ShieldCheck.es-Dzm4_y07.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/Sparkle.es-D-iS7tAi.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/TerminalWindow.es-B2kmu4j2.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/WebhooksLogo.es-BTVTnKhG.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/X.es-BXsepu2C.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/attribution-DJhuyg_1.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/docs-link-OfjHuLpn.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/posthog-BUtcC3lK.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/dashboard-link-CFy8vj_N.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/glow-cta-anchor-BMFtzL9f.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/live-region-B2vJRvPH-ZACnO4fI.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/dist-CRFnOJFM.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/dist-BGdOy5lc.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/compose-refs-sFdxsL7k-B9Yq4TfS.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/dist-CseTSy7X.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/rainbow-gradient-blur-ChSjnpBD.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/rainbow-text-Bq55m6qb.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/types-D85fCNV3-DOc6skV4.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/root-B50ctFl6.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/_index-BdD8l8lh.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/CheckCircle.es-BQuhItOx.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/json-ld-JSGdREsX.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/title-CRAFBM5R.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/decorative-svg-BE0lCU_Y.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/logo-loop-Oh0ihhVA.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/scroll-depth-tracker-BIkLmn0C.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/spotlight-card-DbSuHGOD.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/lazy-home-page-svgs-832CDDg7.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/use-prefers-reduced-motion-Cj9tJ181-qAhyIwDp.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/><link rel="modulepreload" href="/assets/hooks-DwpBe2z4.js" nonce="5dcdab8db3cf0cb91eefa3c448846ec0"/>
1<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">(function j(e) {
2	let { storageKey: t, defaultTheme: n, themes: r, resolvedThemes: i, prefersDarkModeMediaQuery: a, prefersHighContrastMediaQuery: o, forceTheme: s } = e;
3	function c(e) {
4		return typeof e == `string` && r.includes(e);
5	}
6	function l(e) {
7		let t = document.cookie;
8		if (!t) return null;
9		try {
10			let n = t.split(`;`).find((t) => t.trim().startsWith(`${e}=`))?.trim().slice(e.length + 1);
11			return n ? decodeURIComponent(n) : null;
12		} catch {
13			return null;
14		}
15	}
16	function u(e, t) {
17		let n = /* @__PURE__ */ new Date();
18		n.setFullYear(n.getFullYear() + 1);
19		let r = window.location.hostname, i = window.location.protocol, a = r === `ngrok.com` || r.endsWith(`.ngrok.com`) ? `; domain=.ngrok.com` : ``, o = i === `https:` ? `; Secure` : ``;
20		return `${e}=${encodeURIComponent(t)}; expires=${n.toUTCString()}; path=/${a}; SameSite=Lax${o}`;
21	}
22	function d(e, t) {
23		try {
24			document.cookie = u(e, t);
25		} catch {}
26	}
27	function f(e, t, n) {
28		return e === `system` ? n ? t ? `dark-high-contrast` : `light-high-contrast` : t ? `dark` : `light` : e;
29	}
30	let p = null, m = null, h = null;
31	try {
32		p = l(t);
33	} catch {}
34	if (c(p)) h = p;
35	else {
36		try {
37			m = window.localStorage?.getItem(t) ?? null;
38		} catch {}
39		c(m) && (h = m);
40	}
41	let g = c(h) ? h : n, _ = matchMedia(a).matches, v = matchMedia(o).matches, y = s ?? f(g, _, v), b = document.documentElement;
42	if (b.dataset.appliedTheme !== y || b.dataset.theme !== g) {
43		for (let e of i) b.classList.remove(e);
44		b.classList.add(y), b.dataset.theme = g, b.dataset.appliedTheme = y;
45	}
46	let x = c(p);
47	try {
48		if (c(m) && !x) {
49			d(t, m);
50			try {
51				window.localStorage.removeItem(t);
52			} catch {}
53		} else x || d(t, g);
54	} catch {}
55})({"storageKey":"mantle-ui-theme","defaultTheme":"system","themes":["system","light","dark","light-high-contrast","dark-high-contrast"],"resolvedThemes":["light","dark","light-high-contrast","dark-high-contrast"],"prefersDarkModeMediaQuery":"(prefers-color-scheme: dark)","prefersHighContrastMediaQuery":"(prefers-contrast: more)","forceTheme":"dark"})</script>
55<link rel="stylesheet" id="mantle-dark-styles" href="/assets/mantle-dark-BdjafGXp.css" media="all"/>
55<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ngrok.com/#website","name":"ngrok","url":"https://ngrok.com"},{"@type":"Organization","@id":"https://ngrok.com/#organization","name":"ngrok","url":"https://ngrok.com","logo":{"@type":"ImageObject","url":"https://ngrok.com/assets/ngrok-logo.png","width":1200,"height":1200},"description":"ngrok is an all-in-one cloud networking platform that secures, transforms, and routes your traffic to services running anywhere.","foundingDate":"2013","sameAs":["https://twitter.com/ngrokHQ","https://github.com/ngrok","https://www.linkedin.com/company/ngrok"],"contactPoint":[{"@type":"ContactPoint","contactType":"sales","url":"https://ngrok.com/contact"},{"@type":"ContactPoint","contactType":"technical support","url":"https://ngrok.com/docs"}],"address":{"@type":"PostalAddress","addressCountry":"US"}},{"@type":"WebPage","@id":"https://ngrok.com/#webpage","name":"ngrok: deliver your apps, APIs, and AI on local and prod","description":"ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models, wherever they run. Start on localhost, ship to prod.","url":"https://ngrok.com/","inLanguage":"en-US","isPartOf":{"@id":"https://ngrok.com/#website"},"author":{"@id":"https://ngrok.com/#organization"},"publisher":{"@id":"https://ngrok.com/#organization"}},{"@type":"SoftwareApplication","@id":"https://ngrok.com/#software","name":"ngrok","url":"https://ngrok.com/","applicationCategory":"DeveloperApplication","operatingSystem":"Linux, macOS, Windows","description":"ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models, wherever they run. Start on localhost, ship to prod.","mainEntityOfPage":{"@id":"https://ngrok.com/#webpage"},"offers":{"@type":"Offer","price":"0","priceCurrency":"USD","description":"Free tier available"},"featureList":["AI gateway routing any hosted or self-hosted model behind one URL","API gateway with load balancing, WAF, and observability built in","Secure tunnels to services running anywhere with zero open ports","Traffic Policy for routing, transforming, and authenticating requests","SOC 2, HIPAA, and GDPR-ready with SSO, RBAC, and audit logs"],"publisher":{"@id":"https://ngrok.com/#organization"}}]}</script>
55<link nonce="5dcdab8db3cf0cb91eefa3c448846ec0" rel="stylesheet" href="/assets/root-B12E_F54.css"/>
55<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">(function() {
56	if (window.__ngrokPostHogBootstrapped) {
57		return;
58	}
59
60	window.__ngrokPostHogBootstrapped = true;
61
62	/* ------------------------------------------------------------------ */
63	/* Phase 1: Create stub + queue pageview immediately (no network)      */
64	/* ------------------------------------------------------------------ */
65
66	var e = window.posthog || [];
67	if (e.__SV) {
68		return;
69	}
70
71	window.posthog = e;
72	e._i = [];
73	e.init = function(i, s, a) {
74		function createStub(target, methodName) {
75			var pathParts = methodName.split(".");
76			if (pathParts.length === 2) {
77				target = target[pathParts[0]];
78				methodName = pathParts[1];
79			}
80			target[methodName] = function() {
81				target.push([methodName].concat(Array.prototype.slice.call(arguments, 0)));
82			};
83		}
84
85		var instance = e;
86		if (void 0 !== a) {
87			instance = e[a] = [];
88		} else {
89			a = "posthog";
90		}
91
92		instance.people = instance.people || [];
93		instance.toString = function(stubbed) {
94			var label = "posthog";
95			if ("posthog" !== a) {
96				label += "." + a;
97			}
98			if (!stubbed) {
99				label += " (stub)";
100			}
101			return label;
102		};
103		instance.people.toString = function() {
104			return instance.toString(1) + ".people (stub)";
105		};
106
107		var methods = "init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" ");
108
109		for (var n = 0; n < methods.length; n++) {
110			createStub(instance, methods[n]);
111		}
112
113		e._i.push([i, s, a]);
114	};
115	e.__SV = 1;
116
117	var initOptions = {"api_host":"https://e.ngrok.com","autocapture":{"element_allowlist":["a","button","input","select","textarea","label"]},"capture_pageleave":"if_capture_pageview","capture_pageview":"history_change","capture_performance":false,"defaults":"2026-01-30","disable_session_recording":true,"session_recording":{"maskTextSelector":"[data-mask]"},"ui_host":"https://us.posthog.com","disable_surveys":true,"capture_heatmaps":false};
118	initOptions.loaded = function(loadedPostHog) {
119		window.posthog = loadedPostHog;
120
121		loadedPostHog.onFeatureFlags(function() {
122			window.dispatchEvent(new Event("ngrok:posthog:flags"));
123		});
124
125		window.dispatchEvent(new Event("ngrok:posthog:ready"));
126		window.dispatchEvent(new Event("ngrok:posthog:flags"));
127	};
128
129	window.posthog.init("phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ", initOptions);
130	window.posthog.capture("$pageview");
131
132	/* ------------------------------------------------------------------ */
133	/* Phase 2: Defer SDK script injection until after LCP + idle          */
134	/* ------------------------------------------------------------------ */
135
136	var sdkInjected = false;
137
138	function onVisibilityChange() {
139		if (document.visibilityState === "hidden") {
140			injectSdk();
141		}
142	}
143
144	function injectSdk() {
145		if (sdkInjected) {
146			return;
147		}
148
149		sdkInjected = true;
150		document.removeEventListener("visibilitychange", onVisibilityChange);
151
152		var loaderScript = document.createElement("script");
153		loaderScript.type = "text/javascript";
154		loaderScript.crossOrigin = "anonymous";
155		loaderScript.async = true;
156		loaderScript.src = "https://e.ngrok.com/static/array.js";
157		loaderScript.setAttribute("nonce", "5dcdab8db3cf0cb91eefa3c448846ec0");
158
159		var firstScript = document.getElementsByTagName("script")[0];
160		if (firstScript && firstScript.parentNode) {
161			firstScript.parentNode.insertBefore(loaderScript, firstScript);
162		} else {
163			document.head.appendChild(loaderScript);
164		}
165	}
166
167	function scheduleBoot() {
168		if ("requestIdleCallback" in window) {
169			window.requestIdleCallback(injectSdk, { timeout: 50 });
170			return;
171		}
172
173		window.setTimeout(injectSdk, 0);
174	}
175
176	function loadAfterLcp() {
177		var didScheduleBoot = false;
178
179		function startBoot() {
180			if (didScheduleBoot) {
181				return;
182			}
183
184			didScheduleBoot = true;
185			scheduleBoot();
186		}
187
188		if (!("PerformanceObserver" in window)) {
189			startBoot();
190			return;
191		}
192
193		try {
194			var observer = new PerformanceObserver(function(entryList) {
195				if (entryList.getEntries().length === 0) {
196					return;
197				}
198
199				observer.disconnect();
200				clearTimeout(lcpTimer);
201				startBoot();
202			});
203
204			observer.observe({ type: "largest-contentful-paint", buffered: true });
205
206			var lcpTimer = window.setTimeout(function() {
207				observer.disconnect();
208				startBoot();
209			}, 500);
210		} catch {
211			startBoot();
212		}
213	}
214
215	/* Fallback: if the user is leaving before the SDK loaded, force-inject   */
216	/* so PostHog can flush queued events via sendBeacon on unload.            */
217	document.addEventListener("visibilitychange", onVisibilityChange);
218	loadAfterLcp();
219}());</script>
219<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">(function canonicalKetchInitScript(ketchTagId, nonce) {
220	window.semaphore = window.semaphore || [];
221	/**
222	* Time of the last explicit `showPreferences` / `showConsent` call through
223	* `window.ketch`. The focus guard below reads it: an explicit show call is
224	* user intent, so the opened experience may take focus. The SDK keeps this
225	* stub after boot (`window.ketch = window.ketch || …`), so post-boot calls
226	* still stamp it.
227	*/
228	let lastShowCallTime = 0;
229	window.ketch = function() {
230		const command = arguments[0];
231		if (command === "showPreferences" || command === "showConsent") lastShowCallTime = Date.now();
232		window.semaphore = window.semaphore ?? [];
233		window.semaphore.push(arguments);
234	};
235	/**
236	* Add mantle's `overlay-prompt` marker class to Ketch's `#lanyard_root`
237	* container. Lanyard can emit `willShowExperience` before it inserts
238	* `#lanyard_root` into the DOM, so retry on a short timer until the node
239	* exists. The retry loop is bounded so a suppressed experience cannot
240	* poll forever.
241	*/
242	function tagLanyardRootAsOverlayPrompt() {
243		let remainingAttempts = 40;
244		function applyOverlayPromptTag() {
245			const lanyardRoot = document.getElementById("lanyard_root");
246			if (lanyardRoot) {
247				lanyardRoot.classList.add("overlay-prompt");
248				return;
249			}
250			remainingAttempts -= 1;
251			if (remainingAttempts > 0) setTimeout(applyOverlayPromptTag, 50);
252		}
253		applyOverlayPromptTag();
254	}
255	window.ketch("on", "willShowExperience", tagLanyardRootAsOverlayPrompt);
256	/**
257	* Stop lanyard from stealing focus. Lanyard wraps consent experiences in
258	* a focus-trap. An active trap grabs focus on mount and pulls focus back
259	* whenever focus lands outside the experience — mid-keystroke on a login
260	* form. The modal and preference experiences always trap; the banner
261	* traps when the server-side Ketch config enables `forceInteraction`.
262	* The embed cannot turn the trap off.
263	*
264	* The guard wraps `HTMLElement.prototype.focus` and swallows programmatic
265	* focus into a lanyard root, with three exceptions that keep the consent
266	* UI reachable. Focus already inside a lanyard root stays managed, so the
267	* trap's Tab containment keeps working. A pointerdown inside a lanyard
268	* root opens a short window, so a click that opens the preference modal
269	* can still focus it. An explicit show call through `window.ketch` opens
270	* a window too, so a page control (www's /privacy-preferences button) can
271	* open the preference center by keyboard and it still takes focus. Clicks
272	* and Tab focus natively, without `focus()`, so mouse and keyboard access
273	* to the banner stay intact.
274	*/
275	function installLanyardFocusGuard() {
276		function isInsideLanyardRoot(node) {
277			return node instanceof Element && node.closest("[id^=\"lanyard_root\"]") != null;
278		}
279		let lastLanyardPointerDownTime = 0;
280		document.addEventListener("pointerdown", function(event) {
281			if (isInsideLanyardRoot(event.target)) lastLanyardPointerDownTime = Date.now();
282		}, { capture: true });
283		const nativeFocus = HTMLElement.prototype.focus;
284		HTMLElement.prototype.focus = function(focusOptions) {
285			if (isInsideLanyardRoot(this)) {
286				const focusAlreadyInside = isInsideLanyardRoot(document.activeElement);
287				const pointerJustPressedInside = Date.now() - lastLanyardPointerDownTime < 1e3;
288				const showJustCalled = Date.now() - lastShowCallTime < 2e3;
289				if (!focusAlreadyInside && !pointerJustPressedInside && !showJustCalled) return;
290			}
291			nativeFocus.call(this, focusOptions);
292		};
293	}
294	installLanyardFocusGuard();
295	/**
296	* Creates the boot.js script element and appends it to <head>. Runs at most once.
297	* @example
298	* ```ts
299	* loadKetch();
300	* ```
301	*/
302	function loadKetch() {
303		if (window.__ketch_loaded__) return;
304		window.__ketch_loaded__ = true;
305		const ketchScript = document.createElement("script");
306		ketchScript.async = true;
307		ketchScript.defer = true;
308		ketchScript.src = `https://global.ketchcdn.com/web/v2/config/ngrok/${ketchTagId}/boot.js`;
309		if (nonce) ketchScript.nonce = nonce;
310		document.head.appendChild(ketchScript);
311	}
312	if ("requestIdleCallback" in window) requestIdleCallback(loadKetch, { timeout: 2e3 });
313	else setTimeout(loadKetch, 2e3);
314})("ngrok_ketch_tag", "5dcdab8db3cf0cb91eefa3c448846ec0");</script>
314<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">(function canonicalGtmInitScript(gtmId, nonce) {
315	window.dataLayer = window.dataLayer || [];
316	/** Milliseconds after `load` to wait for the Ketch decision before loading anyway. */
317	const CONSENT_FALLBACK_MS = 1e4;
318	const ketch = window.ketch;
319	let isDocumentLoaded = document.readyState === "complete";
320	let isConsentSettled = typeof ketch !== "function";
321	let isScheduled = false;
322	let fallbackTimer;
323	/** Creates the gtm.js script element and appends it to <head>. Runs at most once. */
324	function loadGtm() {
325		if (window.__gtm_loaded__) return;
326		window.__gtm_loaded__ = true;
327		const dataLayer = window.dataLayer ?? [];
328		window.dataLayer = dataLayer;
329		dataLayer.push({
330			"gtm.start": (/* @__PURE__ */ new Date()).getTime(),
331			event: "gtm.js"
332		});
333		const gtmScript = document.createElement("script");
334		gtmScript.async = true;
335		gtmScript.src = `https://www.googletagmanager.com/gtm.js?id=${gtmId}`;
336		if (nonce) gtmScript.nonce = nonce;
337		document.head.appendChild(gtmScript);
338	}
339	/** Loads gtm.js at the next idle period, at most 2 s from now. */
340	function scheduleLoad() {
341		if ("requestIdleCallback" in window) requestIdleCallback(loadGtm, { timeout: 2e3 });
342		else setTimeout(loadGtm, 2e3);
343	}
344	/** Schedules the load once, after both gates have opened. */
345	function scheduleWhenReady() {
346		if (isScheduled || !isDocumentLoaded || !isConsentSettled) return;
347		isScheduled = true;
348		scheduleLoad();
349	}
350	function settleConsent() {
351		isConsentSettled = true;
352		clearTimeout(fallbackTimer);
353		scheduleWhenReady();
354	}
355	function onDocumentLoaded() {
356		isDocumentLoaded = true;
357		if (!isConsentSettled) fallbackTimer = setTimeout(settleConsent, CONSENT_FALLBACK_MS);
358		scheduleWhenReady();
359	}
360	if (typeof ketch === "function") ketch("on", "hideExperience", settleConsent);
361	if (isDocumentLoaded) onDocumentLoaded();
362	else window.addEventListener("load", onDocumentLoaded, { once: true });
363})("GTM-P4F37ZW", "5dcdab8db3cf0cb91eefa3c448846ec0");</script>
363</head><body class="bg-base isolate antialiased"><noscript nonce="5dcdab8db3cf0cb91eefa3c448846ec0"><iframe title="Google Tag Manager (noscript)" src="https://www.googletagmanager.com/ns.html?id=GTM-P4F37ZW" height="0" width="0" class="sr-only"></iframe></noscript><div class="overflow-clip"><div aria-hidden="true" aria-valuemin="0" aria-valuemax="100" aria-valuenow="100" data-state="idle" class="group fixed inset-x-0 top-0 z-max h-0.5 pointer-events-none" role="progressbar"><div class="h-full bg-linear-to-r transition-[width,opacity] duration-500 ease-in-out will-change-[width,opacity] motion-reduce:transition-none from-accent-500 to-fuchsia-500 group-data-[state=submitting]:w-1/3 group-data-[state=loading]:w-4/5 group-data-[state=idle]:w-full" style="width:0;opacity:0;transition:none"></div></div><a data-slot="skip-to-main-link anchor" class="cursor-pointer rounded text-accent-600 hover:underline focus:outline-hidden focus-visible:ring-3 focus-visible:ring-focus-accent not-focus:sr-only bg-card fixed top-2 left-2 z-max px-4 py-2 shadow-lg" href="#main"><span data-slot="anchor-label">Skip to main content</span></a><nav class="flex items-center justify-center px-4 lg:py-10 py-4"><div class="flex w-full max-w-267 items-center justify-between gap-4"><a class="text-strong/90 hover:text-strong" title="ngrok home" href="/" data-discover="true"><span class="sr-only">ngrok home</span><svg fill="currentColor" height="1em" viewBox="0 0 94 36" width="2.61em" class="h-10 w-26.75 lg:h-12 lg:w-32"><path d="M32.272 12.011c-1.298-1.466-2.904-2.205-4.812-2.205-1.176 0-2.26.233-3.255.7a7.995 7.995 0 0 0-2.581 1.906 9.205 9.205 0 0 0-1.715 2.853 9.773 9.773 0 0 0-.628 3.546c0 1.25.194 2.39.58 3.419.362.98.918 1.877 1.635 2.636A7.543 7.543 0 0 0 24 26.584c.965.41 2.025.617 3.176.617.522 0 1.005-.041 1.445-.116.439-.075.858-.2 1.26-.37.4-.175.79-.398 1.18-.664.385-.27.792-.612 1.21-1.018v4.353h-.005v.421h-5.33l-4.005 4.64v.798h15.037v-24.98h-5.697v1.746Zm-.014 7.979a4.25 4.25 0 0 1-.786 1.215 3.555 3.555 0 0 1-2.592 1.1 3.627 3.627 0 0 1-1.464-.292 3.508 3.508 0 0 1-1.166-.808 3.93 3.93 0 0 1-1.054-2.72c0-.519.097-1.006.298-1.457a3.77 3.77 0 0 1 .804-1.181 4.114 4.114 0 0 1 1.162-.808 3.484 3.484 0 0 1 2.817-.016c.448.19.844.463 1.181.81.336.347.6.743.804 1.194.202.452.298.95.298 1.493 0 .505-.104 1.005-.302 1.47m-16.261-7.708a6.173 6.173 0 0 0-2.06-1.602 4.875 4.875 0 0 0-.57-.22 6.383 6.383 0 0 0-.923-.216H8.383L5.697 13.39v-3.082H.002v16.61h5.695V15.712h5.35l.444-.01v11.214h5.697V16.528c0-.885-.084-1.674-.25-2.366a4.655 4.655 0 0 0-.941-1.877zm38.367-2.018h-6.213l-2.47 2.863v-2.864h-5.7v16.61h5.71l.004-11.117h4.144l4.526-5.26zm31.051 7.672 7.79-7.392v-.281H85.7l-5.975 5.991V0h-5.696v26.87h5.696v-6.766l6.262 6.763h7.663v-.316l-8.233-8.617zm-16.11-5.78a9.436 9.436 0 0 0-3.085-1.842 10.953 10.953 0 0 0-3.855-.664c-1.407 0-2.705.226-3.884.678a9.611 9.611 0 0 0-3.072 1.858 8.488 8.488 0 0 0-2.016 2.788 8.281 8.281 0 0 0-.722 3.449c0 1.362.24 2.596.722 3.707a8.52 8.52 0 0 0 2.002 2.862c.85.798 1.86 1.415 3.036 1.847 1.177.432 2.455.647 3.842.647 1.406 0 2.707-.215 3.919-.647 1.204-.431 2.24-1.04 3.098-1.833a8.583 8.583 0 0 0 2.031-2.816c.493-1.09.742-2.29.742-3.611 0-1.316-.244-2.52-.722-3.612a8.424 8.424 0 0 0-2.035-2.81Zm-3.558 7.864c-.2.461-.463.869-.786 1.215a3.573 3.573 0 0 1-2.592 1.1c-.502 0-.981-.096-1.434-.291a3.44 3.44 0 0 1-1.16-.809 4.155 4.155 0 0 1-.788-1.215 3.825 3.825 0 0 1-.297-1.537c0-.517.098-1.004.297-1.456.201-.451.46-.849.787-1.194a3.579 3.579 0 0 1 2.597-1.1c.502 0 .98.096 1.43.29.448.19.839.461 1.16.81.328.345.586.752.786 1.214.2.461.297.954.297 1.471 0 .538-.096 1.04-.297 1.502"></path></svg></a><button aria-disabled="false" data-slot="icon-button" class="icon-button inline-flex shrink-0 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] border focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 text-strong focus-visible:ring-focus-accent not-disabled:hover:bg-neutral-500/10 not-disabled:hover:text-strong border-transparent size-9 lg:hidden" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="md" aria-expanded="false" aria-label="open mobile navigation" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5">
363<path d="M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z"></path></svg></button><div class="hidden items-center gap-6 lg:flex"><button class="text-muted hover:text-strong click-area flex shrink-0 items-center gap-1 font-mono text-xs font-medium tracking-wider uppercase" type="button" id="nav-product" aria-expanded="false">Products<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 relative -top-px size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><button class="text-muted hover:text-strong click-area flex shrink-0 items-center gap-1 font-mono text-xs font-medium tracking-wider uppercase" type="button" id="nav-problems-we-solve" aria-expanded="false">Problems We Solve<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 relative -top-px size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><button class="text-muted hover:text-strong click-area flex shrink-0 items-center gap-1 font-mono text-xs font-medium tracking-wider uppercase" type="button" id="nav-resources" aria-expanded="false">Resources<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 relative -top-px size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><a href="https://ngrok.com/docs/start" target="_blank" rel="noopener" class="text-muted hover:text-strong click-area font-mono text-xs font-medium tracking-wider uppercase" id="nav-docs">Docs</a><a class="text-muted hover:text-strong click-area font-mono text-xs font-medium tracking-wider uppercase" id="nav-download" href="/download" data-discover="true">Download</a><a class="text-muted hover:text-strong click-area font-mono text-xs font-medium tracking-wider uppercase" id="nav-pricing" href="/pricing" data-discover="true">Pricing</a></div><div class="hidden items-center gap-2 lg:flex"><a href="https://dashboard.ngrok.com/login" data-slot="button" aria-disabled="false" data-appearance="filled" data-disabled="false" data-intent="neutral" data-loading="false" data-size="md" id="nav-login" class="inline-flex items-center justify-center gap-1.5 whitespace-nowrap focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 focus-visible:ring-focus-accent border px-3 border-transparent focus-visible:border-transparent h-9 rounded-full bg-black/10 not-disabled:hover:bg-black/15 not-disabled:active:bg-black/15 text-strong font-mono text-[0.8125rem] font-medium tracking-wider uppercase"><span data-slot="button-label" class="contents">Log in</span></a><a href="https://dashboard.ngrok.com/signup" data-slot="button" aria-disabled="false" data-appearance="filled" data-disabled="false" data-intent="neutral" data-loading="false" data-size="md" id="nav-signup" class="inline-flex items-center justify-center gap-1.5 whitespace-nowrap focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 focus-visible:ring-focus-accent border px-3 border-transparent focus-visible:border-transparent h-9 rounded-full bg-black/90 font-mono text-[0.8125rem] font-medium tracking-wider text-white/90 uppercase not-disabled:hover:bg-black not-disabled:active:bg-black"><span data-slot="button-label" class="contents">Sign up</span></a></div></div><ul class="sr-only"><li><span>Products</span><ul><li><a href="/gateway">Gateway</a></li><li><a href="https://ngrok.ai">AI Gateway</a></li><li><a href="/use-cases/share-localhost">Share localhost</a></li></ul></li><li><span>Build &amp; test</span><ul><li><a href="/use-cases/share-localhost">Share a local app</a></li><li><a href="https://ngrok.com/docs/share-localhost/webhooks">Test webhooks locally</a></li><li><a href="https://ngrok.com/docs/using-ngrok-with/using-mcp">Connect local MCP servers</a></li></ul></li><li><span>Play</span><ul><li><a href="https://ngrok.com/docs/gateway/examples/minecraft">Host a Minecraft server</a></li></ul></li><li><span>Deploy &amp; run</span><ul><li><a href="https://ngrok.ai">Route traffic to self-hosted models</a></li><li><a href="https://ngrok.com/docs/gateway/examples/ephemeral-workloads">Run preview and CI workloads</a></li></ul></li><li><span>Deliver &amp; connect</span><ul><li><a href="/use-cases/api-gateway">Deliver and secure APIs</a></li><li><a href="/use-cases/site-to-site-connectivity">Reach customer networks</a></li><li><a href="/use-cases/ai-agent-connectivity">Connect AI agents to customer data</a></li><li><a href="/use-cases/webhook-gateway">Receive webhooks on-prem</a></li><li><a href="/use-cases/private-connectivity">Connect privately across networks</a></li><li><a href="/use-cases/device-gateway">Connect device fleets</a></li><li><a href="/use-cases/saas-customer-connectivity">
363Connect your SaaS to customers</a></li><li><a href="/use-cases/connect-on-prem-database">Reach on-prem databases</a></li><li><a href="https://ngrok.com/docs/gateway/ssh-rdp">Open SSH and RDP sessions</a></li></ul></li><li><span>Developers</span><ul><li><a href="/download">Download</a></li><li><a href="https://ngrok.com/docs/start">Docs</a></li><li><a href="https://ngrok.com/docs/start">Quickstart</a></li><li><a href="https://www.youtube.com/@ngrokHQ">Videos</a></li><li><a href="https://ngrok.com/docs/api">API</a></li><li><a href="https://ngrok.com/docs/integrations">Integrations</a></li><li><a href="https://github.com/ngrok">GitHub</a></li><li><a href="https://status.ngrok.com/">Status</a></li></ul></li><li><span>Resources</span><ul><li><a href="/support">Support</a></li><li><a href="/security">Security</a></li><li><a href="/customers">Case studies</a></li><li><a href="/careers">Careers</a></li><li><a href="https://ngrok.com/contact">Contact</a></li></ul></li><li><span>Blog</span><ul><li><a href="/blog" data-discover="true">Blog home</a></li><li><a href="/blog/probes" data-discover="true">How Kubernetes probes work</a></li><li><a href="/blog/compression-is-prediction" data-discover="true">Compression is prediction</a></li><li><a href="/blog/new-ngrok-ai" data-discover="true">The new ngrok.ai</a></li><li><a data-slot="anchor" class="cursor-pointer rounded bg-transparent text-accent-600 hover:underline focus:outline-hidden focus-visible:ring-3 focus-visible:ring-focus-accent" href="/changelog"><span data-slot="anchor-label">Changelog</span></a></li></ul></li></ul></nav><main data-slot="main" id="main" tabindex="-1" class="focus:outline-hidden relative"><div class="relative"><div aria-hidden="true" class="pointer-events-none absolute left-0 h-px w-px top-1/4"></div><div aria-hidden="true" class="pointer-events-none absolute left-0 h-px w-px top-1/2"></div><div aria-hidden="true" class="pointer-events-none absolute left-0 h-px w-px top-3/4"></div><div aria-hidden="true" class="pointer-events-none absolute left-0 h-px w-px bottom-0"></div><section class="flex flex-col items-center justify-center px-4 pt-20 pb-12"><div class="relative flex w-full max-w-270 flex-col items-center"><picture class="pointer-events-none absolute top-1/2 left-1/2 -z-10 block aspect-video w-[183.333%] max-w-335 -translate-x-1/2 -translate-y-1/2 select-none"><img src="/assets/rainbow-blur-Cu_UEMUm.avif" alt="" aria-hidden="true" decoding="async" fetchPriority="high" width="1340" height="754" class="pointer-events-none size-full object-contain select-none"/></picture><div class="flex w-full max-w-full flex-col items-center space-y-6"><div class="flex w-full flex-col items-center space-y-2"><h1 class="font-family text-strong min-h-30 w-full text-center text-6xl leading-none text-balance md:min-h-36 md:text-7xl">Connect anything,<br/><span class="bg-[linear-gradient(98deg,var(--color-amber-700)_1.35%,var(--color-lime-700)_18.48%,var(--color-emerald-700)_38.35%,var(--color-sky-700)_58.63%,var(--color-purple-700)_79.7%,var(--color-rose-700)_100%)] bg-clip-text text-transparent will-change-transform">anywhere.</span></h1><p class="text-body max-w-lg text-center text-xl">ngrok is developer infrastructure that routes and secures traffic to your apps, APIs, and AI models.</p></div><div class="2xs:w-auto relative w-full shrink-0"><svg class="sr-only" aria-hidden="true"><defs><filter id="_R_ka55_" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur in="SourceGraphic" stdDeviation="8"></feGaussianBlur></filter></defs></svg><a class="flex items-center justify-center relative rounded-full bg-black/90 hover:bg-black px-5 h-12 font-mono text-[0.8125rem] font-medium uppercase tracking-wider text-white/90 glow hover:after:scale-105 after:transition-transform active:scale-[97%] select-none [-webkit-user-select:none] [-webkit-touch-callout:none] [-webkit-tap-highlight-color:transparent] text-center 2xs:w-auto w-full shrink-0" href="https://dashboard.ngrok.com/signup" style="--glow-filter:url(#_R_ka55_)" id="hero-signup-cta">Get started (for free)</a></div></div></div></section><section class="flex w-full justify-center px-4 py-8"><div class="flex w-full max-w-300 flex-col items-center"><div class="relative w-full overflow-hidden mask-x-from-90% mask-x-to-100% md:mask-x-from-70% md:mask-x-to-90%"><section aria-label="Partner logos" class="relative overflow-x-hidden" style="--logoloop-gap:50px;--logoloop-logoHeight:48px;--logoloop-duration:109.93333333333334s"><div class="relative z-0 flex w-max will-change-transform select-none motion-reduce:transform-none"><ul class="flex items-center" aria-hidden="false"><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:170px" src="/assets/home/logo/calendly.svg" width="170" height="48" alt="Calendly" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:149px" src="/assets/home/logo/cyera.svg" width="149" height="48" alt="Cyera" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:194px" src="/assets/home/logo/databricks.svg" width="194" height="48" alt="Databricks" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:48px" src="/assets/home/logo/github.svg" width="48" height="48" alt="GitHub" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:227px" src="/assets/home/logo/grafana.svg" width="227" height="48" alt="Grafana" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:118px" src="/assets/home/logo/harvey.svg" width="118" height="48" alt="Harvey" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:179px" src="/assets/home/logo/huggingface.svg" width="179" height="48" alt="Hugging Face" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:45px" src="/assets/home/logo/mercor.png" width="45" height="48" alt="Mercor" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:144px" src="/assets/home/logo/microsoft.svg" width="144" height="48" alt="Microsoft" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:86px" src="/assets/home/logo/okta.svg" width="86" height="48" alt="Okta" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:47px" src="/assets/home/logo/openai.svg" width="47" height="48" alt="Open AI" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:170px" src="/assets/home/logo/perplexity.svg" width="170" height="48" alt="Perplexity" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:157px" src="/assets/home/logo/ramp.svg" width="157" height="48" alt="Ramp" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:116px" src="/assets/home/logo/schneider.svg" width="116" height="48" alt="Schneider Electric" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:119px" src="/assets/home/logo/twilio.svg" width="119" height="48" alt="Twilio" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:140px" src="/assets/home/logo/vercel.svg" width="140" height="48" alt="Vercel" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:189px" src="/assets/home/logo/windsurf.svg" width="189" height="48" alt="Windsurf" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:100px" src="/assets/home/logo/zoom.svg" width="100" height="48" alt="Zoom" loading="lazy" decoding="async" draggable="false"/></li></ul><ul class="flex items-center" aria-hidden="true"><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:170px" src="/assets/home/logo/calendly.svg" width="170" height="48" alt="Calendly" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:149px" src="/assets/home/logo/cyera.svg" width="149" height="48" alt="Cyera" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:194px" src="/assets/home/logo/databricks.svg" width="194" height="48" alt="Databricks" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:48px" src="/assets/home/logo/github.svg" width="48" height="48" alt="GitHub" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:227px" src="/assets/home/logo/grafana.svg" width="227" height="48" alt="Grafana" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:118px" src="/assets/home/logo/harvey.svg" width="118" height="48" alt="Harvey" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:179px" src="/assets/home/logo/huggingface.svg" width="179" height="48" alt="Hugging Face" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:45px" src="/assets/home/logo/mercor.png" width="45" height="48" alt="Mercor" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:144px" src="/assets/home/logo/microsoft.svg" width="144" height="48" alt="Microsoft" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:86px" src="/assets/home/logo/okta.svg" width="86" height="48" alt="Okta" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:47px" src="/assets/home/logo/openai.svg" width="47" height="48" alt="Open AI" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:170px" src="/assets/home/logo/perplexity.svg" width="170" height="48" alt="Perplexity" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:157px" src="/assets/home/logo/ramp.svg" width="157" height="48" alt="Ramp" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--lo
363goloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:116px" src="/assets/home/logo/schneider.svg" width="116" height="48" alt="Schneider Electric" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:119px" src="/assets/home/logo/twilio.svg" width="119" height="48" alt="Twilio" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:140px" src="/assets/home/logo/vercel.svg" width="140" height="48" alt="Vercel" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:189px" src="/assets/home/logo/windsurf.svg" width="189" height="48" alt="Windsurf" loading="lazy" decoding="async" draggable="false"/></li><li class="mr-(--logoloop-gap) flex-none text-(length:--logoloop-logoHeight) leading-none"><img class="pointer-events-none block h-(--logoloop-logoHeight) [-webkit-user-drag:none] [image-rendering:-webkit-optimize-contrast]" style="width:100px" src="/assets/home/logo/zoom.svg" width="100" height="48" alt="Zoom" loading="lazy" decoding="async" draggable="false"/></li></ul></div></section></div></div></section><section class="flex flex-col items-center justify-center px-4 pt-4 pb-12"><div class="relative flex w-full max-w-133 flex-col gap-4 min-[64rem]:max-w-267"><div class="flex w-full flex-col items-center gap-2 pt-4 pb-2"><p class="text-muted text-center font-mono text-[0.75rem] font-medium tracking-[0.08em] uppercase">Our products</p><h2 class="font-family text-strong text-center text-4xl leading-none text-balance md:text-5xl">Way more than a tunnel to localhost.</h2></div><div class="grid items-stretch gap-4 min-[64rem]:grid-cols-2"><a href="https://ngrok.ai" target="_blank" rel="noopener" id="home-tile-ai-gateway" class="group rounded-xl border border-card bg-card relative flex flex-col items-center gap-6 overflow-hidden p-8 text-center transition-colors hover:border-amber-600/30"><div class="pointer-events-none absolute inset-0 z-10 -m-px rounded-xl opacity-0 transition-opacity duration-500 ease-in-out group-focus-within:opacity-100 group-hover:opacity-100" style="background:radial-gradient(circle at 50% 100%, rgba(245, 158, 11, 0.2), transparent 80%)"></div><div class="pointer-events-none flex flex-col items-center gap-2"><div class="flex items-center justify-center rounded-md bg-amber-500/20 p-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-8 text-amber-600"><path d="M197.58,129.06,146,110l-19-51.62a15.92,15.92,0,0,0-29.88,0L78,110l-51.62,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0L146,178l51.62-19a15.92,15.92,0,0,0,0-29.88ZM137,164.22a8,8,0,0,0-4.74,4.74L112,223.85,91.78,169A8,8,0,0,0,87,164.22L32.15,144,87,123.78A8,8,0,0,0,91.78,119L112,64.15,132.22,119a8,8,0,0,0,4.74,4.74L191.85,144ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z"></path></svg></div><span class="font-mono text-[0.8125rem] font-medium tracking-wider text-amber-600 uppercase">AI Gateway</span><h3 class="text-strong text-3xl font-semibold text-balance">The managed path to any model and inference provider.</h3><p class="text-body text-sm text-balance">Change one URL to route between hosted or self-hosted models, with failover and observability built in.</p></div><div class="pointer-events-none w-full max-w-full mask-t-from-95%"><div class="aspect-408/344 w-full"></div></div><span class="text-strong pointer-events-none mt-auto inline-flex h-9 items-center justify-center rounded-full bg-neutral-500/20 px-[1.125rem] font-mono text-[0.8125rem] font-medium tracking-wider up
363percase transition-colors group-hover:bg-neutral-950 group-hover:text-neutral-50">Learn more</span></a><a id="home-tile-gateway" class="group rounded-xl border border-card bg-card relative flex flex-col items-center gap-6 overflow-hidden p-8 text-center transition-colors hover:border-emerald-600/30" href="/gateway" data-discover="true"><div class="pointer-events-none absolute inset-0 z-10 -m-px rounded-xl opacity-0 transition-opacity duration-500 ease-in-out group-focus-within:opacity-100 group-hover:opacity-100" style="background:radial-gradient(circle at 50% 100%, rgba(16, 185, 129, 0.2), transparent 80%)"></div><div class="pointer-events-none flex flex-col items-center gap-2"><div class="flex items-center justify-center rounded-md bg-emerald-500/20 p-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-8 text-emerald-600"><path d="M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm88,104a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48ZM40,128a87.61,87.61,0,0,1,3.33-24H81.84a157.44,157.44,0,0,0,0,48H43.33A87.61,87.61,0,0,1,40,128ZM154,88H102a115.11,115.11,0,0,1,26-45A115.27,115.27,0,0,1,154,88Zm52.33,0H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM107.59,42.4A135.28,135.28,0,0,0,85.29,88H49.63A88.29,88.29,0,0,1,107.59,42.4ZM49.63,168H85.29a135.28,135.28,0,0,0,22.3,45.6A88.29,88.29,0,0,1,49.63,168Zm98.78,45.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z"></path></svg></div><span class="font-mono text-[0.8125rem] font-medium tracking-wider text-emerald-600 uppercase">Gateway</span><h3 class="text-strong text-3xl font-semibold text-balance">One gateway to services running anywhere.</h3><p class="text-body text-sm text-balance">An all-in-one cloud networking platform that secures, transforms, and routes traffic to all your services no matter where they run.</p></div><div class="pointer-events-none w-full max-w-full mask-t-from-95%"><div class="aspect-424/344 w-full"></div></div><span class="text-strong pointer-events-none mt-auto inline-flex h-9 items-center justify-center rounded-full bg-neutral-500/20 px-[1.125rem] font-mono text-[0.8125rem] font-medium tracking-wider uppercase transition-colors group-hover:bg-neutral-950 group-hover:text-neutral-50">Learn more</span></a></div></div></section><!--$--><section class="flex flex-col items-center justify-center px-4 py-12 sm:py-20"><div class="flex w-full max-w-268.75 flex-col items-center justify-center gap-12 min-[70.625rem]:flex-row"><svg aria-hidden="true" width="146" height="201" viewBox="0 0 146 201" class="min-[70.625rem]:block hidden"><path d="M145.5 0V100.5M145.5 201V100.5M145.5 100.5H0" stroke="var(--border-color-popover)"></path></svg><svg aria-hidden="true" width="162" height="67" fill="none" viewBox="0 0 162 67" class="block min-[70.625rem]:hidden"><path stroke="var(--border-color-popover)" d="M.25 66.5h81m80 0h-80m0 0V0"></path></svg><div class="flex flex-1 flex-col items-center gap-8"><div class="flex flex-col items-center gap-2"><div class="flex items-center justify-center rounded-md bg-purple-500/20 p-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-8 text-purple-600"><path d="M237.66,106.35l-80-80A8,8,0,0,0,144,32V72.35c-25.94,2.22-54.59,14.92-78.16,34.91-28.38,24.08-46.05,55.11-49.76,87.37a12,12,0,0,0,20.68,9.58h0c11-11.71,50.14-48.74,107.24-52V192a8,8,0,0,0,13.66,5.65l80-80A8,8,0,0,0,237.66,106.35ZM160,172.69V144a8,8,0,0,0-8-8c-28.08,0-55.43,7.33-81.29,21.8a196.17,196.17,0,0,0-36.57,26.52c5.8-23.84,20.42-46.51,42.05-64.86C99.41,99.77,127.75,88,152,88a8,8,0,0,0,8-8V51.32L220.69,112Z"></path></svg></div><span class="font-mono text-[0.8125rem] font-medium tracking-wider text-purple-600 uppercase">Share localhost</span><h2 class="font-family text-strong w-full max-w-xs text-center text-3xl leading-tight md:max-w-none md:text-4xl">Try ngrok by sharing a local app. <br class="hidden md:block"/>
363<span class="italic">Right now</span>.</h2></div><div dir="ltr" data-orientation="horizontal" class="flex flex-col items-center gap-6"><div class="flex items-center gap-2"><div role="tablist" aria-orientation="horizontal" class="flex items-center gap-2" aria-label="Operating system" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_km55_-content-mac-os" data-state="inactive" id="try-ngrok-mac-os" class="text-muted data-state-active:text-strong flex items-center justify-center rounded-full p-2 hover:bg-black/10 data-state-active:bg-black/20" aria-label="macOS" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg viewBox="0 0 32 32" width="1em" height="1em" fill="currentColor" color="inherit" data-slot="icon" aria-hidden="true" class="shrink-0 size-6"><path d="M16.21 8.05c-1.1 0-2.8-1.26-4.6-1.22a6.78 6.78 0 0 0-5.74 3.52c-2.46 4.29-.64 10.62 1.76 14.1 1.17 1.7 2.56 3.6 4.4 3.55 1.76-.08 2.42-1.15 4.56-1.15 2.12 0 2.72 1.15 4.59 1.1 1.9-.03 3.1-1.72 4.26-3.44a15.27 15.27 0 0 0 1.93-3.98 6.17 6.17 0 0 1-.73-10.99 6.5 6.5 0 0 0-5.09-2.77c-2.31-.18-4.26 1.28-5.34 1.28Zm3.92-3.58A6.15 6.15 0 0 0 21.57 0c-1.4.06-3.09.94-4.1 2.12A5.88 5.88 0 0 0 16 6.45c1.55.13 3.15-.8 4.12-1.98"></path></svg></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_km55_-content-windows" data-state="inactive" id="try-ngrok-windows" class="text-muted data-state-active:text-strong flex items-center justify-center rounded-full p-2 hover:bg-black/10 data-state-active:bg-black/20" aria-label="Windows" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" aria-hidden="true" class="shrink-0 size-6"><path fill="currentColor" d="m4 7.32 9.8-1.34.01 9.46-9.8.06L4 7.32Z"></path><path fill="currentColor" d="m15 5.8 13-1.9v11.42l-13 .1V5.81Z"></path><path fill="currentColor" d="m13.8 16.53.01 9.47-9.8-1.35v-8.18l9.8.06Z"></path><path fill="currentColor" d="M28 16.62v11.36l-13-1.83-.03-9.55 13.03.02Z"></path></svg></button><button type="button" role="tab" aria-selected="true" aria-controls="radix-_R_km55_-content-docker" data-state="active" id="try-ngrok-docker" class="text-muted data-state-active:text-strong flex items-center justify-center rounded-full p-2 hover:bg-black/10 data-state-active:bg-black/20" aria-label="Docker" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" aria-hidden="true" class="shrink-0 size-6"><path fill="currentColor" d="M16.4 4.98h3.04v3.04h-3.03V4.98Zm0 3.82h3.04v3.03h-3.03V8.8Zm3.04 3.81h-3.03v3.04h3.03v-3.04ZM12.72 8.8h3.03v3.03h-3.03V8.8Zm3.03 3.81h-3.03v3.04h3.03v-3.04ZM9.03 8.8h3.03v3.03H9.03V8.8Zm3.03 3.81H9.03v3.04h3.03v-3.04Zm-6.68 0h3.04v3.04H5.38v-3.04Zm17.75 0H20.1v3.04h3.04v-3.04Z"></path><path fill="currentColor" d="M3.71 16.63s-1.3 9.85 9.89 9.85c11.55 0 13.93-9.5 13.93-9.5s3.64.17 4.47-2.52c-1.48-1.35-3.86-.57-3.86-.57s.09-2-2.26-3.34c-2.08 2.78-.3 5.08-.3 5.08s-.04 1-3.2 1H3.72Z"></path></svg></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_km55_-content-coding-agent" data-state="inactive" id="try-ngrok-coding-agent" class="text-muted data-state-active:text-strong flex items-center justify-center rounded-full p-2 hover:bg-black/10 data-state-active:bg-black/20" aria-label="Coding Agent" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><span class="relative flex size-6 items-center justify-center"><svg viewBox="0 -1 512 512" height="1em" width="1em" data-slot="icon" aria-hidden="true" class="shrink-0 absolute inset-0 size-6 motion-safe:animate-[icon-carousel_8s_ease-in-out_infinite_backwards]"><path fill="currentColor" d="m142.27 316.62 73.66-41.33 1.23-3.59-1.23-2h-3.6l-12.3-.75-42.09-1.14-36.5-1.52-35.36-1.9-8.9-1.89-8.33-11 .86-5.48 7.48-5.03 10.71.94 23.69 1.62 35.53 2.45 25.79 1.52 38.19 3.96h6.06l.86-2.45-2.07-1.51-1.62-1.52-36.77-24.92
363-39.81-26.34-20.86-15.17-11.27-7.68-5.69-7.2-2.45-15.73 10.24-11.27 13.75.94 3.51.93 13.93 10.72 29.75 23.03 38.85 28.6 5.69 4.73 2.27-1.61.28-1.14-2.55-4.27-21.13-38.2-22.55-38.84-10.04-16.1-2.65-9.66c-.93-3.97-1.62-7.3-1.62-11.37l11.66-15.83 6.44-2.07 15.55 2.07 6.54 5.7 9.66 22.08 15.64 34.78 24.27 47.3 7.1 14.02 3.8 13 1.4 3.96h2.46v-2.27l2-26.64 3.68-32.71 3.6-42.09 1.23-11.85 5.87-14.2L287.76 73l9.1 4.35 7.48 10.72L303.3 95l-4.45 28.92-8.72 45.29-5.68 30.33h3.3l3.8-3.79 15.34-20.37 25.78-32.23 11.38-12.79 13.27-14.13 8.52-6.72h16.1l11.85 17.62-5.3 18.2-16.59 21.02-13.75 17.82-19.71 26.54-12.31 21.23 1.13 1.7 2.94-.28 44.53-9.48 24.06-4.35 28.72-4.93 13 6.07 1.4 6.17-5.1 12.61-30.7 7.58-36.03 7.2-53.63 12.7-.66.48.76.93 24.16 2.28 10.34.55h25.3l47.11 3.52 12.31 8.14 7.38 9.96-1.23 7.58-18.96 9.65-25.58-6.06-59.7-14.2-20.48-5.11h-2.83v1.69l17.06 16.68 31.27 28.23 39.15 36.4 2 9-5.03 7.1-5.3-.76-34.4-25.88-13.28-11.65-30.05-25.3h-2v2.65l6.93 10.14 36.57 54.97 1.9 16.86-2.66 5.49-9.47 3.3-10.42-1.89-21.4-30.05-22.1-33.85-17.82-30.33-2.17 1.24-10.52 113.26-4.92 5.79-11.38 4.35-9.48-7.2-5.03-11.66 5.03-23.02 6.07-30.06 4.93-23.88 4.45-29.68 2.65-9.85-.18-.66-2.17.28-22.37 30.7-34.02 45.98-26.92 28.82-6.44 2.55-11.18-5.79 1.04-10.33 6.24-9.2 37.26-47.4 22.47-29.37 14.5-16.96-.1-2.45h-.85l-98.96 64.25-17.61 2.28-7.59-7.1.94-11.66 3.59-3.79 29.75-20.47-.1.1z"></path></svg><svg viewBox="0 0 32 32" height="1em" width="1em" data-slot="icon" aria-hidden="true" class="shrink-0 absolute inset-0 size-6 opacity-0 motion-safe:animate-[icon-carousel_8s_ease-in-out_2s_infinite_backwards]"><path fill="currentColor" d="M27.142 13.671a6.32 6.32 0 0 0-.558-5.25c-1.42-2.44-4.272-3.694-7.058-3.104a6.52 6.52 0 0 0-4.89-2.15c-2.848-.006-5.375 1.803-6.25 4.477a6.48 6.48 0 0 0-4.333 3.101 6.4 6.4 0 0 0 .807 7.584 6.32 6.32 0 0 0 .556 5.252c1.42 2.438 4.272 3.692 7.058 3.103a6.52 6.52 0 0 0 4.889 2.15c2.85.006 5.378-1.804 6.254-4.48a6.48 6.48 0 0 0 4.334-3.104 6.4 6.4 0 0 0-.808-7.58zm-9.778 13.485a4.9 4.9 0 0 1-3.121-1.113c.04-.021.108-.059.154-.087l5.18-2.951a.83.83 0 0 0 .425-.727v-7.205l2.19 1.247a.08.08 0 0 1 .041.058v5.968c-.003 2.653-2.181 4.804-4.87 4.81M6.89 22.743a4.74 4.74 0 0 1-.581-3.223c.037.023.105.064.153.09l5.18 2.953a.85.85 0 0 0 .851 0l6.323-3.603v2.494a.08.08 0 0 1-.031.067l-5.236 2.982c-2.332 1.325-5.31.536-6.658-1.762zM5.527 11.585a4.84 4.84 0 0 1 2.537-2.107l-.002.177v5.903a.83.83 0 0 0 .425.728l6.323 3.601-2.189 1.249a.08.08 0 0 1-.073.006L7.31 18.156c-2.328-1.33-3.126-4.268-1.785-6.568zm17.986 4.13-6.323-3.602 2.189-1.246a.08.08 0 0 1 .073-.007l5.237 2.983c2.331 1.33 3.13 4.272 1.784 6.572a4.86 4.86 0 0 1-2.536 2.108v-6.08a.83.83 0 0 0-.424-.727m2.178-3.235-.153-.09-5.18-2.953a.85.85 0 0 0-.851 0l-6.323 3.603v-2.494a.08.08 0 0 1 .031-.067L18.45 7.5c2.333-1.327 5.314-.537 6.658 1.765.568.972.776 2.11.584 3.216m-13.697 4.445-2.19-1.246a.08.08 0 0 1-.042-.06V9.653c.001-2.656 2.185-4.8
36309 4.878-4.806 1.138 0 2.24.394 3.116 1.112l-.153.086-5.18 2.951a.83.83 0 0 0-.426.727l-.003 7.202zm1.19-2.53L16 12.793l2.816 1.604v3.208L16 19.208l-2.818-1.604v-3.208z"></path></svg><svg viewBox="0 0 24 24" height="1em" width="1em" data-slot="icon" aria-hidden="true" class="shrink-0 absolute inset-0 size-6 opacity-0 motion-safe:animate-[icon-carousel_8s_ease-in-out_4s_infinite_backwards]"><path fill="currentColor" d="M11.5.13 1.9 5.68a.8.8 0 0 0-.43.72v11.2c0 .3.16.57.42.72l9.61 5.55a1 1 0 0 0 1 0l9.6-5.55a.8.8 0 0 0 .43-.73V6.4a.8.8 0 0 0-.42-.72L12.5.13a1 1 0 0 0-1 0m-8.84 6.2H21.2c.26 0 .43.3.3.52l-9.28 16.07c-.06.1-.23.06-.23-.06V12.34a.6.6 0 0 0-.3-.51L2.6 6.57c-.11-.06-.07-.23.06-.23"></path></svg><svg viewBox="0 0 24 24" height="1em" width="1em" data-slot="icon" aria-hidden="true" class="shrink-0 absolute inset-0 size-6 opacity-0 motion-safe:animate-[icon-carousel_8s_ease-in-out_6s_infinite_backwards]"><path fill="currentColor" d="M12 0A12 12 0 0 1 0 12a12 12 0 0 1 12 12 12 12 0 0 1 12-12A12 12 0 0 1 12 0"></path></svg></span></button></div><button aria-disabled="false" data-slot="icon-button" class="icon-button inline-flex shrink-0 items-center justify-center border focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 focus-visible:ring-focus-accent not-disabled:hover:bg-neutral-500/10 not-disabled:hover:text-strong border-transparent size-9 text-muted data-state-active:text-strong rounded-full data-state-active:bg-black/20" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="md" aria-label="Choose another platform" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="shrink-0 size-6" data-slot="icon" aria-hidden="true"><path d="M144,128a16,16,0,1,1-16-16A16,16,0,0,1,144,128ZM60,112a16,16,0,1,0,16,16A16,16,0,0,0,60,112Zm136,0a16,16,0,1,0,16,16A16,16,0,0,0,196,112Z"></path></svg></button></div><div class="grid items-center justify-items-center"><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_km55_-trigger-mac-os" id="radix-_R_km55_-content-mac-os" tabindex="0" class="relative col-start-1 row-start-1 data-[state=inactive]:invisible"><code class="border-card bg-card xs:w-80 text-muted block rounded-full border py-2 pr-12 pl-4 font-mono text-[0.9375rem]">$ <span class="bg-[linear-gradient(98deg,var(--color-amber-700)_1.35%,var(--color-lime-700)_18.48%,var(--color-emerald-700)_38.35%,var(--color-sky-700)_58.63%,var(--color-purple-700)_79.7%,var(--color-rose-700)_100%)] bg-clip-text text-transparent">brew install ngrok</span></code><button type="button" class="text-muted hover:text-strong absolute top-1/2 right-2 -translate-y-1/2 rounded-full p-2 transition-colors" aria-label="Copy to clipboard"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="size-5"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_km55_-trigger-windows" id="radix-_R_km55_-content-windows" tabindex="0" class="relative col-start-1 row-start-1 data-[state=inactive]:invisible"><code class="border-card bg-card xs:w-80 text-muted block rounded-full border py-2 pr-12 pl-4 font-mono text-[0.9375rem]">$ <span class="bg-[linear-gradient(98deg,var(--color-amber-700)_1.35%,var(--color-lime-700)_18.48%,var(--color-emerald-700)_38.35%,var(--color-sky-700)_58.63%,var(--color-purple-700)_79.7%,var(--color-rose-700)_100%)] bg-clip-text text-transparent">scoop install ngrok</span></code><button type="button" class="text-muted hover:text-strong absolute top-1/2 right-2 -translate-y-1/2 rounded-full p-2 transition-colors" aria-label="Copy to clipboard"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="size-5"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_km55_-trigger-docker" id="radix-_R_km55_-content-docker" tabindex="0" class="relative col-start-1 row-start-1 data-[state=inactive]:invisible" style="animation-duration:0s"><code class="border-card bg-card xs:w-80 text-muted block rounded-full border py-2 pr-12 pl-4 font-mono text-[0.9375rem]">$ <span class="bg-[linear-gradient(98deg,var(--color-amber-700)_1.35%,var(--color-lime-700)_18.48%,var(--color-emerald-700)_38.35%,var(--color-sky-700)_58.63%,var(--color-purple-700)_79.7%,var(--color-rose-700)_100%)] bg-clip-text text-transparent">docker pull ngrok/ngrok</span></code><button type="button" class="text-muted hover:text-strong absolute top-1/2 right-2 -translate-y-1/2 roun
363ded-full p-2 transition-colors" aria-label="Copy to clipboard"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="size-5"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_km55_-trigger-coding-agent" id="radix-_R_km55_-content-coding-agent" tabindex="0" class="relative col-start-1 row-start-1 data-[state=inactive]:invisible"><code class="border-card bg-card text-muted block max-w-lg rounded-xl border py-3 pr-12 pl-4 font-mono text-[0.9375rem] leading-relaxed"><span class="bg-[linear-gradient(98deg,var(--color-amber-700)_1.35%,var(--color-lime-700)_18.48%,var(--color-emerald-700)_38.35%,var(--color-sky-700)_58.63%,var(--color-purple-700)_79.7%,var(--color-rose-700)_100%)] bg-clip-text text-transparent">Read https://ngrok.com/agent-setup/prompt.md and follow it
364to get my app online with ngrok.</span></code><button type="button" class="text-muted hover:text-strong absolute top-1/2 right-2 -translate-y-1/2 rounded-full p-2 transition-colors" aria-label="Copy to clipboard"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="size-5"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div></div></div><div class="flex flex-wrap items-center justify-center gap-x-8 gap-y-2"><a class="text-muted group hover:text-strong inline-flex items-center gap-2 font-mono text-[0.8125rem] font-medium tracking-wider uppercase transition-colors" id="try-ngrok-learn-more" href="/use-cases/share-localhost" data-discover="true">Learn more about Share localhost<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-6 transition-transform group-hover:translate-x-1.5"><path d="M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z"></path></svg></a><a class="text-muted group hover:text-strong inline-flex items-center gap-2 font-mono text-[0.8125rem] font-medium tracking-wider uppercase transition-colors" id="try-ngrok-download-link" href="/download/docker" data-discover="true">Download &amp; setup<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-6 transition-transform group-hover:translate-x-1.5"><path d="M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z"></path></svg></a></div></div><svg aria-hidden="true" width="146" height="201" viewBox="0 0 146 201" class="min-[70.625rem]:block hidden -scale-x-100"><path d="M145.5 0V100.5M145.5 201V100.5M145.5 100.5H0" stroke="var(--border-color-popover)"></path></svg><svg aria-hidden="true" width="162" height="67" fill="none" viewBox="0 0 162 67" class="block min-[70.625rem]:hidden -scale-y-100"><path stroke="var(--border-color-popover)" d="M.25 66.5h81m80 0h-80m0 0V0"></path></svg></div></section><!--/$--><!--$--><section class="py-12 sm:py-20"><div class="mx-auto flex w-full flex-col items-center gap-12"><div class="flex w-full max-w-270 flex-col items-center gap-2 px-4"><h2 class="font-family text-strong w-full max-w-xs text-center text-4xl leading-none md:max-w-173.5 md:text-5xl">Developers go on and on about us.</h2></div><div class="w-full [scrollbar-width:none] overflow-x-auto overscroll-x-contain pl-4 [-ms-overflow-style:none] sm:hidden [&amp;::-webkit-scrollbar]:hidden"><div class="flex w-max snap-x snap-mandatory gap-4 pr-4"><div class="w-[calc(100vw-3.5rem)] shrink-0 snap-center"><div class="flex flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Scott Motte</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@motdotla</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is so effing amazing</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-rose-600/30 bg-[radial-gradient(150%_150%_at_50%_100%,#F43F5E26_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Ihor Leshko</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Director of Engineering</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok opened the door for Databricks to rapidly onboard big enterprise customers with comprehensive security much less operational complexity.</p><img loading="lazy" decoding="async" src="/assets/home/databricks-wordmark.svg" alt="Databricks" width="150" height="24" class="relative mt-4 h-6 w-37.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/databricks.svg" alt="" width="164" height="178" class="pointer-events-none absolute -right-14 -bottom-10 h-44.5 w-41 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kevin Simper</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kevinsimper</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">I wouldn&#x27;t know how to work without ngrok.</p></div></div></div></div><div class="w-[calc(100vw-3.5rem)] shrink-0 snap-center"><div class="flex flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Lyzi Diamond</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@lyzidiamond</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">OMG life changer. I can&#x27;t imagine how I lived without ngrok.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-lime-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#84cc1626_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Wesley Gorman</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Senior Director, Engineering, Zendesk</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok has been super user friendly, works seamlessly, and never gets in our way. Today, our engineers spend less time troubleshooting proxy issues and more time building.</p><img loading="lazy" decoding="async" src="/assets/home/zendesk-wordmark.svg" alt="Zendesk" width="101" height="20" class="relative mt-4 h-5 w-25.25"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/zendesk-icon.svg" alt="" width="320" height="320" class="pointer-events-none absolute -right-32 -bottom-40 z-5 size-80 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Brian Ketelsen</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@bketelsen</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Just used ngrok for the first time to show off a new GopherCon web layout. Wow, that&#x27;s awesome.</p></div></div></div></div><div class="w-[calc(100vw-3.5rem)] shrink-0 snap-center"><div class="flex flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Cassidy Williams</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@cassidoo</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok saves me so much time during development. What a tool.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-sky-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#38BDF826_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Austin Cottrell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">
364Cloud Infrastructure Engineer</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok continues to wow us with great APIs and automation. Establishing secure remote connectivity with our customer&#x27;s environments via REST APIs is fast and safe ... and amazing!</p><img loading="lazy" decoding="async" src="/assets/home/copado-wordmark.svg" alt="Copado" width="118" height="32" class="relative mt-4 h-8 w-29.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/copado.svg" alt="" width="187" height="187" class="pointer-events-none absolute -right-14 -bottom-10 size-46.75 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Steve Kinney</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@stevekinney</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok makes the hard parts of networking feel effortless.</p></div></div></div></div></div></div><div class="relative hidden w-full overflow-hidden sm:block mask-x-from-80% mask-x-to-100% xl:mx-auto xl:max-w-7xl"><div class="flex w-max gap-4 will-change-transform"><div class="flex shrink-0 gap-4"><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Scott Motte</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@motdotla</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is so effing amazing</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-rose-600/30 bg-[radial-gradient(150%_150%_at_50%_100%,#F43F5E26_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Ihor Leshko</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Director of Engineering</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok opened the door for Databricks to rapidly onboard big enterprise customers with comprehensive security much less operational complexity.</p><img loading="lazy" decoding="async" src="/assets/home/databricks-wordmark.svg" alt="Databricks" width="150" height="24" class="relative mt-4 h-6 w-37.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/databricks.svg" alt="" width="164" height="178" class="pointer-events-none absolute -right-14 -bottom-10 h-44.5 w-41 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kevin Simper</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kevinsimper</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">I wouldn&#x27;t know how to work without ngrok.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Brian Cantrell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@briancantrell</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is making my life so much better.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kent C. Dodds</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kentcdodds</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Just got introduced to #ngrok by @geddski. This thing&#x27;s amazing.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Lorna Mitchell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@lornajane</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">I have literally no idea how I solved many of these problems before I used ngrok</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Lyzi Diamond</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@lyzidiamond</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">OMG life changer. I can&#x27;t imagine how I lived without ngrok.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-lime-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#84cc1626_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Wesley Gorman</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Senior Director, Engineering, Zendesk</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok has been super user friendly, works seamlessly, and never gets in our way. Today, our engineers spend less time troubleshooting proxy issues and more time building.</p><img loading="lazy" decoding="async" src="/assets/home/zendesk-wordmark.svg" alt="Zendesk" width="101" height="20" class="relative mt-4 h-5 w-25.25"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/zendesk-icon.svg" alt="" width="320" height="320" class="pointer-events-none absolute -right-32 -bottom-40 z-5 size-80 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Brian Ketelsen</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@bketelsen</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Just used ngrok for the first time to show off a new GopherCon web layout. Wow, that&#x27;s awesome.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Gajus</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kuizinas</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Holy smokes, ngrok is incredible. This is going to change my workflow forever.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">georges</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@multiplegeorges</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is so useful that I actually enjoy paying for it.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Yehuda Katz</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@waborwycatz</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is one of those tools that you don&#x27;t realize you need until you try it. Then it&#x27;s indispensable.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Cassidy Williams</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@cassidoo</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok saves me so much time during development. What a tool.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-sky-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#38BDF826_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Austin Cottrell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">
364Cloud Infrastructure Engineer</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok continues to wow us with great APIs and automation. Establishing secure remote connectivity with our customer&#x27;s environments via REST APIs is fast and safe ... and amazing!</p><img loading="lazy" decoding="async" src="/assets/home/copado-wordmark.svg" alt="Copado" width="118" height="32" class="relative mt-4 h-8 w-29.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/copado.svg" alt="" width="187" height="187" class="pointer-events-none absolute -right-14 -bottom-10 size-46.75 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Steve Kinney</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@stevekinney</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok makes the hard parts of networking feel effortless.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kareem</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kareemsinchin</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is the api gateway goat honestly</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Bree Hoffman</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@breefield</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is genius, replaying requests makes webhooks 1M times easier to handle.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Peter Vukovic</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@pvukovic</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Spent 3 hours looking for a good ngrok alternative. Let me save you some time: there isn&#x27;t a better ngrok alternative.</p></div></div></div></div><div class="flex shrink-0 gap-4" aria-hidden="true"><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Scott Motte</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@motdotla</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is so effing amazing</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-rose-600/30 bg-[radial-gradient(150%_150%_at_50%_100%,#F43F5E26_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Ihor Leshko</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Director of Engineering</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok opened the door for Databricks to rapidly onboard big enterprise customers with comprehensive security much less operational complexity.</p><img loading="lazy" decoding="async" src="/assets/home/databricks-wordmark.svg" alt="Databricks" width="150" height="24" class="relative mt-4 h-6 w-37.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/databricks.svg" alt="" width="164" height="178" class="pointer-events-none absolute -right-14 -bottom-10 h-44.5 w-41 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kevin Simper</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kevinsimper</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">I wouldn&#x27;t know how to work without ngrok.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Brian Cantrell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@briancantrell</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is making my life so much better.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kent C. Dodds</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kentcdodds</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Just got introduced to #ngrok by @geddski. This thing&#x27;s amazing.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Lorna Mitchell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@lornajane</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">I have literally no idea how I solved many of these problems before I used ngrok</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Lyzi Diamond</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@lyzidiamond</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">OMG life changer. I can&#x27;t imagine how I lived without ngrok.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-lime-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#84cc1626_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Wesley Gorman</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">Senior Director, Engineering, Zendesk</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok has been super user friendly, works seamlessly, and never gets in our way. Today, our engineers spend less time troubleshooting proxy issues and more time building.</p><img loading="lazy" decoding="async" src="/assets/home/zendesk-wordmark.svg" alt="Zendesk" width="101" height="20" class="relative mt-4 h-5 w-25.25"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/zendesk-icon.svg" alt="" width="320" height="320" class="pointer-events-none absolute -right-32 -bottom-40 z-5 size-80 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Brian Ketelsen</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@bketelsen</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Just used ngrok for the first time to show off a new GopherCon web layout. Wow, that&#x27;s awesome.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Gajus</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kuizinas</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Holy smokes, ngrok is incredible. This is going to change my workflow forever.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">georges</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@multiplegeorges</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is so useful that I actually enjoy paying for it.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Yehuda Katz</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@waborwycatz</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is one of those tools that you don&#x27;t realize you need until you try it. Then it&#x27;s indispensable.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Cassidy Williams</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@cassidoo</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok saves me so much time during development. What a tool.</p></div></div><div data-slot="card" class="bg-card border rounded-xl relative group overflow-hidden border-sky-700/20 bg-[radial-gradient(150%_150%_at_50%_100%,#38BDF826_0%,transparent_60%)]" data-spotlight="true"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Austin Cottrell</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">
364Cloud Infrastructure Engineer</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok continues to wow us with great APIs and automation. Establishing secure remote connectivity with our customer&#x27;s environments via REST APIs is fast and safe ... and amazing!</p><img loading="lazy" decoding="async" src="/assets/home/copado-wordmark.svg" alt="Copado" width="118" height="32" class="relative mt-4 h-8 w-29.5"/><img aria-hidden="true" loading="lazy" decoding="async" src="/assets/home/copado.svg" alt="" width="187" height="187" class="pointer-events-none absolute -right-14 -bottom-10 size-46.75 opacity-5 select-none"/></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Steve Kinney</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@stevekinney</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok makes the hard parts of networking feel effortless.</p></div></div></div><div class="flex w-80 shrink-0 flex-col gap-4"><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Kareem</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@kareemsinchin</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is the api gateway goat honestly</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Bree Hoffman</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@breefield</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">ngrok is genius, replaying requests makes webhooks 1M times easier to handle.</p></div></div><div data-slot="card" class="border-card bg-card border rounded-xl relative group overflow-hidden" data-spotlight="false"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0 flex flex-col gap-2"><div><div class="text-body group-data-[spotlight~=&#x27;true&#x27;]:text-strong text-lg font-semibold">Peter Vukovic</div><div class="text-muted group-data-[spotlight~=&#x27;true&#x27;]:text-body text-sm">@pvukovic</div></div><p class="text-body text-base group-data-[spotlight~=&#x27;true&#x27;]:text-strong">Spent 3 hours looking for a good ngrok alternative. Let me save you some time: there isn&#x27;t a better ngrok alternative.</p></div></div></div></div></div></div></div></section><!--/$--><section class="flex flex-col items-center gap-12 px-4 py-12 sm:py-20"><div class="relative flex w-full max-w-270 flex-col items-center gap-12"><div class="relative flex flex-col items-center gap-4"><h2 class="font-family text-strong relative text-center text-4xl leading-none md:text-5xl">Every security checkbox, checked.</h2></div><div class="flex flex-col items-center gap-8"><ul class="text-strong grid grid-cols-2 gap-x-6 gap-y-2 text-sm md:grid-cols-5 md:text-base"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>SOC2 Type II</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>HIPAA &amp; BAA</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>GDPR</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>CCPA</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>EU-US DPF</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>RBAC</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>SSO &amp; SCIM</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>Audit logs</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>Data residency</li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5 text-emerald-600 md:size-6"><path d="M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z" opacity="0.2"></path><path d="M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>White-labeling</li></ul><a href="https://trust.ngrok.com/" class="group flex items-center gap-2 text-emerald-600" id="home-trust-center"><span class="font-mono text-[0.8125rem] font-medium tracking-wider up
364percase">Trust Center</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-6 transition-transform group-hover:translate-x-1.5"><path d="M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z"></path></svg></a></div></div></section><section class="relative flex flex-col items-center justify-center px-4 py-12 sm:py-20"><picture class="pointer-events-none absolute top-1/2 left-1/2 -z-10 block aspect-video w-[183.333%] max-w-335 -translate-x-1/2 -translate-y-1/2 select-none"><img src="/assets/rainbow-blur-Cu_UEMUm.avif" alt="" aria-hidden="true" decoding="async" fetchPriority="high" width="1340" height="754" class="pointer-events-none size-full object-contain select-none"/></picture><div class="relative flex w-full max-w-268.75 flex-col items-center justify-center gap-12 min-[70.625rem]:flex-row"><svg aria-hidden="true" width="146" height="201" viewBox="0 0 146 201" class="min-[70.625rem]:block hidden"><path d="M145.5 0V100.5M145.5 201V100.5M145.5 100.5H0" stroke="var(--border-color-popover)"></path></svg><svg aria-hidden="true" width="162" height="67" fill="none" viewBox="0 0 162 67" class="block min-[70.625rem]:hidden"><path stroke="var(--border-color-popover)" d="M.25 66.5h81m80 0h-80m0 0V0"></path></svg><div class="grid items-center gap-8"><div class="flex flex-col items-center gap-4 text-center"><h2 class="font-family text-strong w-full max-w-6xl text-4xl leading-none md:text-5xl">Less wrestling with infrastructure.<br/> More shipping.</h2></div><div class="2xs:flex-row flex w-full flex-col items-center justify-center gap-2"><svg class="sr-only" aria-hidden="true"><defs><filter id="_R_6l255_" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur in="SourceGraphic" stdDeviation="8"></feGaussianBlur></filter></defs></svg><a class="flex items-center justify-center relative rounded-full bg-black/90 hover:bg-black px-5 h-12 font-mono text-[0.8125rem] font-medium uppercase tracking-wider text-white/90 glow hover:after:scale-105 after:transition-transform active:scale-[97%] select-none [-webkit-user-select:none] [-webkit-touch-callout:none] [-webkit-tap-highlight-color:transparent] text-center 2xs:w-auto w-full shrink-0" href="https://dashboard.ngrok.com/signup" style="--glow-filter:url(#_R_6l255_)" id="footer-signup-cta">Get started (for free)</a><a id="footer-see-pricing" data-slot="button" aria-disabled="false" data-appearance="filled" data-disabled="false" data-intent="neutral" data-loading="false" data-size="md" class="inline-flex items-center justify-center gap-1.5 whitespace-nowrap focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 focus-visible:ring-focus-accent border text-sm font-medium border-transparent focus-visible:border-transparent text-neutral-50 font-sans bg-static-white/10 not-disabled:hover:bg-static-white/15 not-disabled:active:bg-static-white/15 2xs:w-auto h-12 w-full rounded-full px-5" href="/pricing" data-discover="true"><span data-slot="button-label" class="contents"><span class="text-strong font-mono text-[0.8125rem] leading-[1.538em] font-medium tracking-[0.05em] uppercase">See pricing</span></span></a></div></div><svg aria-hidden="true" width="146" height="201" viewBox="0 0 146 201" class="min-[70.625rem]:block hidden -scale-x-100"><path d="M145.5 0V100.5M145.5 201V100.5M145.5 100.5H0" stroke="var(--border-color-popover)"></path></svg><svg aria-hidden="true" width="162" height="67" fill="none" viewBox="0 0 162 67" class="block min-[70.625rem]:hidden -scale-y-100"><path stroke="var(--border-color-popover)" d="M.25 66.5h81m80 0h-80m0 0V0"></path></svg></div></section></div></main><div class="min-h-150"><!--$--><footer class="py-12 sm:py-20 px-4 flex justify-center"><div class="flex w-full max-w-270 flex-col items-center"><div class="grid w-full max-w-2xl grid-cols-2 gap-6 gap-y-12 font-mono text-[0.8125rem] min-[70.625rem]:max-w-none min-[70.625rem]:grid-cols-5"><div class="flex flex-col gap-3"><h3 class="text-strong text-xs leading-none font-semibold tracking-wider up
364percase">Products</h3><div class="flex flex-col gap-2"><a href="https://ngrok.ai" class="text-muted hover:text-strong flex items-center gap-1.5 font-mono text-[0.8125rem] leading-[1.5em] font-medium">AI Gateway<span class="rounded-full bg-amber-500/20 px-1.5 py-0.5 font-mono text-[0.625rem] font-medium tracking-wider text-amber-700 uppercase">New</span></a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/gateway" data-discover="true">Gateway</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/use-cases/share-localhost" data-discover="true">Share localhost</a></div></div><div class="flex flex-col gap-3"><h3 class="text-strong text-xs leading-none font-semibold tracking-wider uppercase">Problems We Solve</h3><div class="flex flex-col gap-2"><button class="text-muted hover:text-strong flex items-center gap-1 text-left font-mono text-[0.8125rem] leading-[1.5em] font-medium" type="button" aria-expanded="false">Build &amp; test<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><button class="text-muted hover:text-strong flex items-center gap-1 text-left font-mono text-[0.8125rem] leading-[1.5em] font-medium" type="button" aria-expanded="false">Deploy &amp; run<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><button class="text-muted hover:text-strong flex items-center gap-1 text-left font-mono text-[0.8125rem] leading-[1.5em] font-medium" type="button" aria-expanded="false">Deliver &amp; connect<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><a href="https://ngrok.com/docs/gateway/examples/minecraft" target="_blank" rel="noopener" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Host a Minecraft server</a></div></div><div class="flex flex-col gap-3"><h3 class="text-strong text-xs leading-none font-semibold tracking-wider uppercase">Resources</h3><div class="flex flex-col gap-2"><a href="https://ngrok.com/docs/start" target="_blank" rel="noopener" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Docs</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/download" data-discover="true">Download</a><a href="https://ngrok.com/docs/start" target="_blank" rel="noopener" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Guides</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/pricing" data-discover="true">Pricing</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/security" data-discover="true">Security</a><a href="https://trust.ngrok.com/" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Trust</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/customers" data-discover="true">Case studies</a><a href="https://ngrok.com/docs/integrations" target="_blank" rel="noopener" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Integrations</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/support" data-discover="true">Support</a><a href="https://ngrok.com/abuse" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Abuse</a><a href="https://status.ngrok.com/" class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium">Status</a></div></div><div class="flex flex-col gap-3"><h3 class="text-strong text-xs leading-none font-semibold tracking-wider up
364percase">Company</h3><div class="flex flex-col gap-2"><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/about" data-discover="true">About</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/contact" data-discover="true">Contact</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/blog" data-discover="true">Blog</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/newsletter" data-discover="true">Newsletter</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/press" data-discover="true">Press</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/brand" data-discover="true">Brand</a><a class="text-muted hover:text-strong font-mono text-[0.8125rem] leading-[1.5em] font-medium" href="/careers" data-discover="true">Careers</a><button class="text-muted hover:text-strong flex items-center gap-1 text-left font-mono text-[0.8125rem] leading-[1.5em] font-medium" type="button" aria-expanded="false">Legal<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-3"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div></div><div class="flex flex-col gap-3"><h3 class="text-strong text-xs leading-none font-semibold tracking-wider uppercase">Social</h3><div class="flex flex-row gap-2 min-[70.625rem]:flex-col"><a href="https://github.com/ngrok" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="GitHub"><svg fill="currentColor" viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><path d="M16 3C8.82 3 3 8.97 3 16.34c0 5.83 3.64 10.79 8.7 12.6.7.19.59-.31.59-.65v-2.32c-3.95.48-4.1-2.2-4.37-2.65-.53-.93-1.8-1.17-1.42-1.62.9-.48 1.81.12 2.87 1.73.77 1.16 2.27.97 3.02.77a3.8 3.8 0 0 1 1.01-1.81c-4.08-.75-5.78-3.31-5.78-6.36 0-1.47.47-2.83 1.4-3.93-.6-1.8.05-3.35.14-3.58 1.69-.15 3.44 1.24 3.58 1.35.96-.26 2.05-.4 3.28-.4s2.33.14 3.3.41c.32-.25 1.95-1.45 3.52-1.3.08.22.72 1.73.16 3.51a5.97 5.97 0 0 1 1.42 3.95c0 3.05-1.71 5.61-5.81 6.35a3.81 3.81 0 0 1 1.1 2.72v3.36c.03.26 0 .53.44.53A13.33 13.33 0 0 0 29 16.35C29 8.97 23.18 3 16 3Z"></path></svg><span class="hidden min-[70.625rem]:block">GitHub</span></a><a href="https://x.com/ngrokHQ" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="X"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z"></path></svg><span class="hidden min-[70.625rem]:block">X</span></a><a href="https://bsky.app/profile/ngrok.com" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="Bluesky"><svg fill="currentColor" viewBox="0 0 600 530" width="1em" height="1em" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><path d="m135.72 44.03c66.496 49.921 138.02 151.14 164.28 205.46 26.262-54.316 97.782-155.54 164.28-205.46 47.98-36.021 125.72-63.892 125.72 24.795 0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.3797-3.6904-10.832-3.7077-7.8964-0.0174-2.9357-1.1937 0.51669-3.7077 7.8964-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.4491-163.25-81.433-5.9562-21.282-16.111-152.36-16.111-170.07 0-88.687 77.742-60.816 125.72-24.795z"></path></svg><span class="hidden min-[70.625rem]:block">Bluesky</span></a><a href="https://www.linkedin.com/company/ngrok/" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="LinkedIn"><svg viewBox="0 0 24 24" width="1em" height="1em" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><circle cx="4.983" cy="5.009" r="2.188" fill="currentColor"></circle>
364<path fill="currentColor" d="M9.237 8.855v12.139h3.769v-6.003c0-1.584.298-3.118 2.262-3.118 1.937 0 1.961 1.811 1.961 3.218v5.904H21v-6.657c0-3.27-.704-5.783-4.526-5.783-1.835 0-3.065 1.007-3.568 1.96h-.051v-1.66H9.237zm-6.142 0H6.87v12.139H3.095z"></path></svg><span class="hidden min-[70.625rem]:block">LinkedIn</span></a><a href="https://www.youtube.com/@ngrokHQ" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="YouTube"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><path d="M234.33,69.52a24,24,0,0,0-14.49-16.4C185.56,39.88,131,40,128,40s-57.56-.12-91.84,13.12a24,24,0,0,0-14.49,16.4C19.08,79.5,16,97.74,16,128s3.08,48.5,5.67,58.48a24,24,0,0,0,14.49,16.41C69,215.56,120.4,216,127.34,216h1.32c6.94,0,58.37-.44,91.18-13.11a24,24,0,0,0,14.49-16.41c2.59-10,5.67-28.22,5.67-58.48S236.92,79.5,234.33,69.52Zm-73.74,65-40,28A8,8,0,0,1,108,156V100a8,8,0,0,1,12.59-6.55l40,28a8,8,0,0,1,0,13.1Z"></path></svg><span class="hidden min-[70.625rem]:block">YouTube</span></a><a href="https://ngrok.com/blog/rss.xml" class="text-muted hover:text-strong flex items-center gap-1 font-mono text-[0.8125rem] leading-[1.5em] font-medium" aria-label="RSS"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" aria-hidden="true" class="shrink-0 size-5"><path d="M228,192a12,12,0,0,1-24,0c0-77.2-62.8-140-140-140a12,12,0,0,1,0-24C154.43,28,228,101.57,228,192ZM64,100a12,12,0,0,0,0,24,68.07,68.07,0,0,1,68,68,12,12,0,0,0,24,0A92.1,92.1,0,0,0,64,100Zm4,72a16,16,0,1,0,16,16A16,16,0,0,0,68,172Z"></path></svg><span class="hidden min-[70.625rem]:block">RSS</span></a></div></div></div><div class="flex w-full flex-col items-end justify-between gap-6 sm:flex-row"><div class="relative ml-auto max-w-full"><svg fill="currentColor" height="187" viewBox="0 0 94 36" width="504" class="h-auto w-full max-w-126 text-neutral-200"><path d="M32.272 12.011c-1.298-1.466-2.904-2.205-4.812-2.205-1.176 0-2.26.233-3.255.7a7.995 7.995 0 0 0-2.581 1.906 9.205 9.205 0 0 0-1.715 2.853 9.773 9.773 0 0 0-.628 3.546c0 1.25.194 2.39.58 3.419.362.98.918 1.877 1.635 2.636A7.543 7.543 0 0 0 24 26.584c.965.41 2.025.617 3.176.617.522 0 1.005-.041 1.445-.116.439-.075.858-.2 1.26-.37.4-.175.79-.398 1.18-.664.385-.27.792-.612 1.21-1.018v4.353h-.005v.421h-5.33l-4.005 4.64v.798h15.037v-24.98h-5.697v1.746Zm-.014 7.979a4.25 4.25 0 0 1-.786 1.215 3.555 3.555 0 0 1-2.592 1.1 3.627 3.627 0 0 1-1.464-.292 3.508 3.508 0 0 1-1.166-.808 3.93 3.93 0 0 1-1.054-2.72c0-.519.097-1.006.298-1.457a3.77 3.77 0 0 1 .804-1.181 4.114 4.114 0 0 1 1.162-.808 3.484 3.484 0 0 1 2.817-.016c.448.19.844.463 1.181.81.336.347.6.743.804 1.194.202.452.298.95.298 1.493 0 .505-.104 1.005-.302 1.47m-16.261-7.708a6.173 6.173 0 0 0-2.06-1.602 4.875 4.875 0 0 0-.57-.22 6.383 6.383 0 0 0-.923-.216H8.383L5.697 13.39v-3.082H.002v16.61h5.695V15.712h5.35l.444-.01v11.214h5.697V16.528c0-.885-.084-1.674-.25-2.366a4.655 4.655 0 0 0-.941-1.877zm38.367-2.018h-6.213l-2.47 2.863v-2.864h-5.7v16.61h5.71l.004-11.117h4.144l4.526-5.26zm31.051 7.672 7.79-7.392v-.281H85.7l-5.975 5.991V0h-5.696v26.87h5.696v-6.766l6.262 6.763h7.663v-.316l-8.233-8.617zm-16.11-5.78a9.436 9.436 0 0 0-3.085-1.842 10.953 10.953 0 0 0-3.855-.664c-1.407 0-2.705.226-3.884.678a9.611 9.611 0 0 0-3.072 1.858 8.488 8.488 0 0 0-2.016 2.788 8.281 8.281 0 0 0-.722 3.449c0 1.362.24 2.596.722 3.707a8.52 8.52 0 0 0 2.002 2.862c.85.798 1.86 1.415 3.036 1.847 1.177.432 2.455.647 3.842.647 1.406 0 2.707-.215 3.919-.647 1.204-.431 2.24-1.04 3.098-1.833a8.583 8.583 0 0 0 2.031-2.816c.493-1.09.742-2.29.742-3.611 0-1.316-.244-2.52-.722-3.612a8.424 8.424 0 0 0-2.035-2.81Zm-3.558 7.864c-.2.461-.463.869-.786 1.215a3.573 3.573 0 0 1-2.592 1.1c-.502 0-.981-.096-1.434-.291a3.44 3.44 0 0 1-1.16-.809 4.155 4.155 0 0 1-.788-1.215 3.825 3.825 0 0 1-.297-1.537c0-.517.098-1.004.297-1.456.201-.451.46-.849.787-1.194a3.579 3.579 0 0 1 2.597-1.1c.502 0 .98.096 1.43.29.448.19.839.461 1.16.81.328.345.586.752.786 1.214.2.461.297.954.297 1.471 0 .538-.096 1.04-.297 1.502"></path></svg><a href="https://status.ngrok.com/" class="2xs:absolute 2xs:left-[44.5%] 2xs:justify-start 2xs:pt-0 2xs:pl-0 bottom-[7%] flex items-center gap-2 pt-4 pl-1.5 font-mono text-xs text-emerald-600 hover:text-emerald-700 min-[27rem]:left-[44.8%] min-[27rem]:text-sm"><span class="relative flex size-2"><span class="absolute inline-flex size-full motion-safe:animate-ping rounded-full bg-emerald-600 opacity-75"></span>
364<span class="relative inline-flex size-2 rounded-full bg-emerald-600"></span></span>All systems operational</a></div></div></div></footer><!--/$--></div></div><span data-slot="live-region" role="status" aria-live="polite" aria-atomic="true" class="sr-only"></span>
364<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">((storageKey, restoreKey) => {
365		if (!window.history.state || !window.history.state.key) {
366			let key = Math.random().toString(32).slice(2);
367			window.history.replaceState({ key }, "");
368		}
369		try {
370			let storedY = JSON.parse(sessionStorage.getItem(storageKey) || "{}")[restoreKey || window.history.state.key];
371			if (typeof storedY === "number") window.scrollTo(0, storedY);
372		} catch (error) {
373			console.error(error);
374			sessionStorage.removeItem(storageKey);
375		}
376	})("react-router-scroll-positions", null)</script>
376<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">window.__reactRouterContext = {"basename":"/","future":{"unstable_enableNodeReadableStream":false,"unstable_optimizeDeps":false},"routeDiscovery":{"mode":"lazy"},"ssr":true,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script>
376<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0" type="module" async="">;
377import * as route0 from "/assets/root-B50ctFl6.js";
378import * as route1 from "/assets/_index-BdD8l8lh.js";
379  window.__reactRouterManifest = {
380  "entry": {
381    "module": "/assets/entry.client-Q3doW8M7.js",
382    "imports": [
383      "/assets/icon-BT8FnkkJ-BXNRZ6YI.js",
384      "/assets/root-Df6qxCYM.js",
385      "/assets/preconnect-on-intent-Ct11lnrS.js",
386      "/assets/browser-only-Crr3sgA0-ChZXuJOp.js",
387      "/assets/href-SWPxf9Xv.js",
388      "/assets/slot-BsvE2ntj-B4hthNWr.js",
389      "/assets/canonical-origin-DEvI19Uw.js",
390      "/assets/use-matches-media-query-m860lols-BPcGxkvr.js",
391      "/assets/tooltip-H03l7E4Y-BpX1gR5z.js",
392      "/assets/button-Dij5vCQG-D-1fShZx.js",
393      "/assets/IconBase.es-Uflyhfs3.js",
394      "/assets/button-pwkdtR3U-BvUx4nf0.js",
395      "/assets/error-page-CN5xrspE.js",
396      "/assets/CaretDown.es-qTa5geRk.js",
397      "/assets/accordion-BzEXMr0m.js",
398      "/assets/separator-D98be0gY-BV1W8AlQ.js",
399      "/assets/ArrowRight.es-DbIDcYkD.js",
400      "/assets/Briefcase.es-BT4L41Sl.js",
401      "/assets/Buildings.es-C1mUTXFt.js",
402      "/assets/CaretRight.es-Cb69Rram.js",
403      "/assets/Robot.es-C8KQk72Z.js",
404      "/assets/DownloadSimple.es-Cpx5kR_N.js",
405      "/assets/FlowArrow.es-4UIYZEAu.js",
406      "/assets/Globe.es-D47Pp2Ey.js",
407      "/assets/Heart.es-D44FqSCf.js",
408      "/assets/PlugsConnected.es-DiCfYYGn.js",
409      "/assets/ShareFat.es-Cv4Iziuc.js",
410      "/assets/ShieldCheck.es-Dzm4_y07.js",
411      "/assets/Sparkle.es-D-iS7tAi.js",
412      "/assets/TerminalWindow.es-B2kmu4j2.js",
413      "/assets/WebhooksLogo.es-BTVTnKhG.js",
414      "/assets/X.es-BXsepu2C.js",
415      "/assets/attribution-DJhuyg_1.js",
416      "/assets/docs-link-OfjHuLpn.js",
417      "/assets/posthog-BUtcC3lK.js",
418      "/assets/dashboard-link-CFy8vj_N.js",
419      "/assets/glow-cta-anchor-BMFtzL9f.js",
420      "/assets/live-region-B2vJRvPH-ZACnO4fI.js",
421      "/assets/dist-CRFnOJFM.js",
422      "/assets/dist-BGdOy5lc.js",
423      "/assets/compose-refs-sFdxsL7k-B9Yq4TfS.js",
424      "/assets/dist-CseTSy7X.js",
425      "/assets/rainbow-gradient-blur-ChSjnpBD.js",
426      "/assets/rainbow-text-Bq55m6qb.js",
427      "/assets/types-D85fCNV3-DOc6skV4.js"
428    ],
429    "css": [
430      "/assets/root-B12E_F54.css"
431    ]
432  },
433  "routes": {
434    "root": {
435      "id": "root",
436      "path": "",
437      "hasAction": false,
438      "hasLoader": true,
439      "hasClientAction": false,
440      "hasClientLoader": false,
441      "hasClientMiddleware": false,
442      "hasDefaultExport": true,
443      "hasErrorBoundary": true,
444      "module": "/assets/root-B50ctFl6.js",
445      "imports": [
446        "/assets/icon-BT8FnkkJ-BXNRZ6YI.js",
447        "/assets/root-Df6qxCYM.js",
448        "/assets/preconnect-on-intent-Ct11lnrS.js",
449        "/assets/browser-only-Crr3sgA0-ChZXuJOp.js",
450        "/assets/href-SWPxf9Xv.js",
451        "/assets/slot-BsvE2ntj-B4hthNWr.js",
452        "/assets/canonical-origin-DEvI19Uw.js",
453        "/assets/use-matches-media-query-m860lols-BPcGxkvr.js",
454        "/assets/tooltip-H03l7E4Y-BpX1gR5z.js",
455        "/assets/button-Dij5vCQG-D-1fShZx.js",
456        "/assets/IconBase.es-Uflyhfs3.js",
457        "/assets/button-pwkdtR3U-BvUx4nf0.js",
458        "/assets/error-page-CN5xrspE.js",
459        "/assets/CaretDown.es-qTa5geRk.js",
460        "/assets/accordion-BzEXMr0m.js",
461        "/assets/separator-D98be0gY-BV1W8AlQ.js",
462        "/assets/ArrowRight.es-DbIDcYkD.js",
463        "/assets/Briefcase.es-BT4L41Sl.js",
464        "/assets/Buildings.es-C1mUTXFt.js",
465        "/assets/CaretRight.es-Cb69Rram.js",
466        "/assets/Robot.es-C8KQk72Z.js",
467        "/assets/DownloadSimple.es-Cpx5kR_N.js",
468        "/assets/FlowArrow.es-4UIYZEAu.js",
469        "/assets/Globe.es-D47Pp2Ey.js",
470        "/assets/Heart.es-D44FqSCf.js",
471        "/assets/PlugsConnected.es-DiCfYYGn.js",
472        "/assets/ShareFat.es-Cv4Iziuc.js",
473        "/assets/ShieldCheck.es-Dzm4_y07.js",
474        "/assets/Sparkle.es-D-iS7tAi.js",
475        "/assets/TerminalWindow.es-B2kmu4j2.js",
476        "/assets/WebhooksLogo.es-BTVTnKhG.js",
477        "/assets/X.es-BXsepu2C.js",
478        "/assets/attribution-DJhuyg_1.js",
479        "/assets/docs-link-OfjHuLpn.js",
480        "/assets/posthog-BUtcC3lK.js",
481        "/assets/dashboard-link-CFy8vj_N.js",
482        "/assets/glow-cta-anchor-BMFtzL9f.js",
483        "/assets/live-region-B2vJRvPH-ZACnO4fI.js",
484        "/assets/dist-CRFnOJFM.js",
485        "/assets/dist-BGdOy5lc.js",
486        "/assets/compose-refs-sFdxsL7k-B9Yq4TfS.js",
487        "/assets/dist-CseTSy7X.js",
488        "/assets/rainbow-gradient-blur-ChSjnpBD.js",
489        "/assets/rainbow-text-Bq55m6qb.js",
490        "/assets/types-D85fCNV3-DOc6skV4.js"
491      ],
492      "css": [
493        "/assets/root-B12E_F54.css"
494      ]
495    },
496    "routes/_index": {
497      "id": "routes/_index",
498      "parentId": "root",
499      "index": true,
500      "hasAction": false,
501      "hasLoader": false,
502      "hasClientAction": false,
503      "hasClientLoader": false,
504      "hasClientMiddleware": false,
505      "hasDefaultExport": true,
506      "hasErrorBoundary": false,
507      "module": "/assets/_index-BdD8l8lh.js",
508      "imports": [
509        "/assets/icon-BT8FnkkJ-BXNRZ6YI.js",
510        "/assets/href-SWPxf9Xv.js",
511        "/assets/canonical-origin-DEvI19Uw.js",
512        "/assets/button-Dij5vCQG-D-1fShZx.js",
513        "/assets/rainbow-gradient-blur-ChSjnpBD.js",
514        "/assets/rainbow-text-Bq55m6qb.js",
515        "/assets/ArrowRight.es-DbIDcYkD.js",
516        "/assets/Globe.es-D47Pp2Ey.js",
517        "/assets/Sparkle.es-D-iS7tAi.js",
518        "/assets/posthog-BUtcC3lK.js",
519        "/assets/dashboard-link-CFy8vj_N.js",
520        "/assets/glow-cta-anchor-BMFtzL9f.js",
521        "/assets/CheckCircle.es-BQuhItOx.js",
522        "/assets/json-ld-JSGdREsX.js",
523        "/assets/title-CRAFBM5R.js",
524        "/assets/decorative-svg-BE0lCU_Y.js",
525        "/assets/logo-loop-Oh0ihhVA.js",
526        "/assets/scroll-depth-tracker-BIkLmn0C.js",
527        "/assets/spotlight-card-DbSuHGOD.js",
528        "/assets/lazy-home-page-svgs-832CDDg7.js",
529        "/assets/slot-BsvE2ntj-B4hthNWr.js",
530        "/assets/IconBase.es-Uflyhfs3.js",
531        "/assets/browser-only-Crr3sgA0-ChZXuJOp.js",
532        "/assets/preconnect-on-intent-Ct11lnrS.js",
533        "/assets/attribution-DJhuyg_1.js",
534        "/assets/types-D85fCNV3-DOc6skV4.js",
535        "/assets/use-prefers-reduced-motion-Cj9tJ181-qAhyIwDp.js",
536        "/assets/use-matches-media-query-m860lols-BPcGxkvr.js",
537        "/assets/hooks-DwpBe2z4.js"
538      ],
539      "css": []
540    }
541  },
542  "url": "/assets/manifest-15e56011.js",
543  "version": "15e56011"
544};
545  window.__reactRouterRouteModules = {"root":route0,"routes/_index":route1};
546
547import("/assets/entry.client-Q3doW8M7.js");</script>
547<!--$-->
547<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{\"_5\":6},\"actionData\",\"errors\",\"root\",{\"_7\":8,\"_9\":10,\"_11\":12,\"_13\":14,\"_15\":16,\"_17\":18,\"_19\":-7,\"_20\":-7},\"appVersion\",\"c283af1c\",\"rumEnabled\",true,\"gtmId\",\"GTM-P4F37ZW\",\"ketchTagId\",\"ngrok_ketch_tag\",\"postHogKey\",\"phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ\",\"postHogHost\",\"https://e.ngrok.com\",\"postHogUiHost\",\"ssrCookie\"]\n");</script>
547<!--$-->
547<script nonce="5dcdab8db3cf0cb91eefa3c448846ec0">window.__reactRouterContext.streamController.close();</script>
547<!--/$--><!--/$--></body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.