Repository navigation
Expand file tree
/
Copy pathcloudflared.tgz
More file actions
520 lines (488 loc) · 120 KB
/
Copy pathcloudflared.tgz
File metadata and controls
520 lines (488 loc) · 120 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
<!DOCTYPE html><html lang="en-US" dir="ltr" class="dark h-full" data-applied-theme="dark" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#4a3066"/><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="6a751536"/><meta name="darkreader-lock"/><link rel="sitemap" type="application/xml" href="/sitemap.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>Download ngrok for Windows | ngrok</title><meta property="og:title" content="Download ngrok for Windows | ngrok"/><meta name="twitter:title" content="Download ngrok for Windows | ngrok"/><meta name="description" content="Download ngrok for Windows — step-by-step installation instructions, authtoken configuration, and quick-start examples to get your service online fast."/><meta property="og:description" content="Download ngrok for Windows — step-by-step installation instructions, authtoken configuration, and quick-start examples to get your service online fast."/><meta name="twitter:description" content="Download ngrok for Windows — step-by-step installation instructions, authtoken configuration, and quick-start examples to get your service online fast."/><meta property="og:image" content="https://ngrok.com/assets/download/og-image.png"/><meta name="twitter:image" content="https://ngrok.com/assets/download/og-image.png"/><link rel="canonical" href="https://ngrok.com/download/windows"/><meta property="og:url" content="https://ngrok.com/download/windows"/><meta name="twitter:url" content="https://ngrok.com/download/windows"/><link rel="modulepreload" href="/assets/entry.client-NJVqCC1C.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/react-mKr9-DnF.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/react-dom-DwDvjPh7.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/errorBoundaries-C2fIGB3h.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/jsx-runtime-DJVDe6nZ.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/root-2WoXdoD-.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/lib-DWvBUaAd.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/href-DRCPjoOg.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/cx-IiQEAKf5-D2Qner4y.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/slot-DpNWVci8-BiRfDggI.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/icon-lZ48P8Nn-ByFz0kS3.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/anchor-3OGK2UKU-Cj-GJQK5.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/theme-BorfgnNh-Gg8qf-Ny.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/tooltip-Dnu35cjU-C6K4gXZ5.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/IconBase.es-73Cx980G.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/button-Cnja9Bsr-C9-Esc-g.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/button-IlxHhjPK-DK38yB5L.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/error-page-CsL4BESi.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/accordion-DwYFtP5C.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/CaretDown.es-Br3lTn0Z.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/hooks-ULMlvPl2.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/lazy-overlays-B6Qco391.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/separator-D0D6VyyM-CgIWy-Ug.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/ArrowRight.es-C-Q8cTEX.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Briefcase.es-COrAcZu-.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Buildings.es-DZ-FOjPX.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/CaretRight.es-CUFhZrKR.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/DownloadSimple.es-CDlcmAqs.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/FlowArrow.es-DKSYhWd9.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Globe.es-DKraM0--.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Graph.es-C69MTHy0.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Heart.es-DFzxi2Rz.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/PlugsConnected.es-D0pptNyV.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/ShareFat.es-jsfibyd0.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/ShieldCheck.es-Cm3or4ZD.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Sparkle.es-D-3ayher.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/TerminalWindow.es-B4U_B6zP.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/WebhooksLogo.es-D49joZAs.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/X.es-CBKQvcax.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/attribution-DJhuyg_1.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/kubernetes-Ct-R-M5r.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/docs-link-B2VBZFy1.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/posthog-BLZ1OV7u.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dashboard-link-VijLValR.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/glow-cta-anchor-C_wNHpPH.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dist-CJa-WViy.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dist-U2ywhtn9.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dist-ColaSUru.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/CircleNotch.es-TE0_U1wH.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/clsx-DUGZgXfJ-BZfiPIcu.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/rainbow-gradient-blur-DyyhVxCA.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/rainbow-text-C9X4lAFC.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/compose-refs-BdBMM9ga-DQRE0ZhI.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/browser-only-CmEEzfU3-DUQc-T6K.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/types-D85fCNV3-DOc6skV4.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/download-F1XrYMpW.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/apple-CACoHuFE.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/docker-d3ha5u0B.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/windows-CDjNhICx.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/free-bsd-BseYUSD5.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/golang-Cf6U45_v.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/java-KheQi5Rx.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/linux-C-e4fx-y.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/node-js-BP-_x34X.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/python-CQnDzRd2.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/raspberry-pi-CEi48i3j.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/rust-yUUZuTG8.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/windows-UZcHVMSl.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/code-block-Bl3JNF58.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/ArrowSquareOut.es-B7CbfOZ7.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/whats-next-BK7fsabV.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Confetti.es-vmlcLceY.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/badge-CA_VSluu.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/detect-platform-8lJkVdC7.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/tabs-CqwaJoML.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/popover-CQ9s7jG5-CufHwWFZ.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/get-download-url-DhUsMpSe.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/use-copy-to-clipboard-CSyp4Zk0-B8jcAICT.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Check.es-DiQ8uQFa.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Copy.es-C6aRtVii.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dist-C33IgvKv.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/dist-BQrqDcpN.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/ArrowsClockwise.es-Dg_XOk9w.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/GlobeHemisphereWest.es-usYnINFp.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/MagnifyingGlass.es-MRPAm9u7.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Password.es-D4fpgYCV.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Wrench.es-BSOdLpBn.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/json-ld-BN-Od0KQ.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/title-CKh4bC0_.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/types-DSVrpYtu.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/card-Da4Fem34.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/field-Bpptk_9t-CyAM7um0.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/label-D-D11mlp-SZZM4m4e.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/Combination-CtneY0Yr.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="modulepreload" href="/assets/use-prefers-reduced-motion-Bk5zAfHY-DtMqPRk5.js" nonce="547333bfac9dd61f9000d9875c8ba2dc"/><link rel="stylesheet" id="mantle-dark-styles" href="/assets/mantle-dark-BBpsXNVS.css" media="all"/><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/download/windows#webpage","name":"Download ngrok for Windows | ngrok","description":"Download ngrok for Windows — step-by-step installation instructions, authtoken configuration, and quick-start examples to get your service online fast.","url":"https://ngrok.com/download/windows","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/download/windows#software","name":"ngrok for Windows","url":"https://ngrok.com/download/windows","applicationCategory":"DeveloperApplication","operatingSystem":"Linux, macOS, Windows","description":"Download ngrok for Windows — step-by-step installation instructions, authtoken configuration, and quick-start examples to get your service online fast.","mainEntityOfPage":{"@id":"https://ngrok.com/download/windows#webpage"},"offers":{"@type":"Offer","price":"0","priceCurrency":"USD","description":"Free tier available"},"featureList":["Step-by-step installation and setup","Instant public URLs for local services","Built-in traffic inspection and replay","Traffic policy for auth and access control","Works behind NAT and firewalls"],"publisher":{"@id":"https://ngrok.com/#organization"}}]}</script><link nonce="547333bfac9dd61f9000d9875c8ba2dc" rel="stylesheet" href="/assets/root-B1EZqp0-.css"/><script nonce="547333bfac9dd61f9000d9875c8ba2dc">window.zESettings = {
webWidget: {
color: {
launcher: "#1c1c1c",
launcherText: "#fff",
},
},
};</script><script nonce="547333bfac9dd61f9000d9875c8ba2dc">(function() {
if (window.__ngrokPostHogBootstrapped) {
return;
}
window.__ngrokPostHogBootstrapped = true;
/* ------------------------------------------------------------------ */
/* Phase 1: Create stub + queue pageview immediately (no network) */
/* ------------------------------------------------------------------ */
var e = window.posthog || [];
if (e.__SV) {
return;
}
window.posthog = e;
e._i = [];
e.init = function(i, s, a) {
function createStub(target, methodName) {
var pathParts = methodName.split(".");
if (pathParts.length === 2) {
target = target[pathParts[0]];
methodName = pathParts[1];
}
target[methodName] = function() {
target.push([methodName].concat(Array.prototype.slice.call(arguments, 0)));
};
}
var instance = e;
if (void 0 !== a) {
instance = e[a] = [];
} else {
a = "posthog";
}
instance.people = instance.people || [];
instance.toString = function(stubbed) {
var label = "posthog";
if ("posthog" !== a) {
label += "." + a;
}
if (!stubbed) {
label += " (stub)";
}
return label;
};
instance.people.toString = function() {
return instance.toString(1) + ".people (stub)";
};
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(" ");
for (var n = 0; n < methods.length; n++) {
createStub(instance, methods[n]);
}
e._i.push([i, s, a]);
};
e.__SV = 1;
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"};
initOptions.__add_tracing_headers = [window.location.host, "localhost"];
initOptions.loaded = function(loadedPostHog) {
window.posthog = loadedPostHog;
loadedPostHog.onFeatureFlags(function() {
window.dispatchEvent(new Event("ngrok:posthog:flags"));
});
window.dispatchEvent(new Event("ngrok:posthog:ready"));
window.dispatchEvent(new Event("ngrok:posthog:flags"));
};
window.posthog.init("phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ", initOptions);
window.posthog.capture("$pageview");
/* ------------------------------------------------------------------ */
/* Phase 2: Defer SDK script injection until after LCP + idle */
/* ------------------------------------------------------------------ */
var sdkInjected = false;
function onVisibilityChange() {
if (document.visibilityState === "hidden") {
injectSdk();
}
}
function injectSdk() {
if (sdkInjected) {
return;
}
sdkInjected = true;
document.removeEventListener("visibilitychange", onVisibilityChange);
var loaderScript = document.createElement("script");
loaderScript.type = "text/javascript";
loaderScript.crossOrigin = "anonymous";
loaderScript.async = true;
loaderScript.src = "https://e.ngrok.com/static/array.js";
loaderScript.setAttribute("nonce", "547333bfac9dd61f9000d9875c8ba2dc");
var firstScript = document.getElementsByTagName("script")[0];
if (firstScript && firstScript.parentNode) {
firstScript.parentNode.insertBefore(loaderScript, firstScript);
} else {
document.head.appendChild(loaderScript);
}
}
function scheduleBoot() {
if ("requestIdleCallback" in window) {
window.requestIdleCallback(injectSdk, { timeout: 50 });
return;
}
window.setTimeout(injectSdk, 0);
}
function loadAfterLcp() {
var didScheduleBoot = false;
function startBoot() {
if (didScheduleBoot) {
return;
}
didScheduleBoot = true;
scheduleBoot();
}
if (!("PerformanceObserver" in window)) {
startBoot();
return;
}
try {
var observer = new PerformanceObserver(function(entryList) {
if (entryList.getEntries().length === 0) {
return;
}
observer.disconnect();
clearTimeout(lcpTimer);
startBoot();
});
observer.observe({ type: "largest-contentful-paint", buffered: true });
var lcpTimer = window.setTimeout(function() {
observer.disconnect();
startBoot();
}, 500);
} catch {
startBoot();
}
}
/* Fallback: if the user is leaving before the SDK loaded, force-inject */
/* so PostHog can flush queued events via sendBeacon on unload. */
document.addEventListener("visibilitychange", onVisibilityChange);
loadAfterLcp();
}());</script><script nonce="547333bfac9dd61f9000d9875c8ba2dc">(function canonicalKetchInitScript(ketchTagId, nonce) {
window.semaphore = window.semaphore || [];
window.ketch = function() {
window.semaphore = window.semaphore ?? [];
window.semaphore.push(arguments);
};
/**
* Creates the boot.js script element and appends it to <head>. Runs at most once.
* @example
* ```ts
* loadKetch();
* ```
*/
function loadKetch() {
if (window.__ketch_loaded__) return;
window.__ketch_loaded__ = true;
const ketchScript = document.createElement("script");
ketchScript.async = true;
ketchScript.defer = true;
ketchScript.src = `https://global.ketchcdn.com/web/v2/config/ngrok/${ketchTagId}/boot.js`;
if (nonce) ketchScript.nonce = nonce;
document.head.appendChild(ketchScript);
}
if ("requestIdleCallback" in window) requestIdleCallback(loadKetch, { timeout: 2e3 });
else setTimeout(loadKetch, 2e3);
})("ngrok_ketch_tag", "547333bfac9dd61f9000d9875c8ba2dc");</script><script nonce="547333bfac9dd61f9000d9875c8ba2dc">(function canonicalGtmInitScript(gtmId, nonce) {
window.dataLayer = window.dataLayer || [];
/** Creates the gtm.js script element and appends it to <head>. Runs at most once. */
function loadGtm() {
if (window.__gtm_loaded__) return;
window.__gtm_loaded__ = true;
const dataLayer = window.dataLayer ?? [];
window.dataLayer = dataLayer;
dataLayer.push({
"gtm.start": (/* @__PURE__ */ new Date()).getTime(),
event: "gtm.js"
});
const gtmScript = document.createElement("script");
gtmScript.async = true;
gtmScript.src = `https://www.googletagmanager.com/gtm.js?id=${gtmId}`;
if (nonce) gtmScript.nonce = nonce;
document.head.appendChild(gtmScript);
}
const interactionEvents = [
"mousemove",
"touchstart",
"keydown",
"scroll",
"click"
];
/** Loads GTM on first user interaction and removes all interaction listeners. */
function onInteraction() {
loadGtm();
for (const event of interactionEvents) window.removeEventListener(event, onInteraction, { capture: true });
}
for (const event of interactionEvents) window.addEventListener(event, onInteraction, {
once: true,
passive: true,
capture: true
});
if ("requestIdleCallback" in window) requestIdleCallback(loadGtm, { timeout: 4e3 });
else setTimeout(loadGtm, 4e3);
})("GTM-P4F37ZW", "547333bfac9dd61f9000d9875c8ba2dc");</script></head><body class="bg-base isolate antialiased"><noscript nonce="547333bfac9dd61f9000d9875c8ba2dc"><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-50 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" 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">Skip to main content</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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-9 text-strong focus-visible:ring-focus-accent not-disabled:hover:bg-neutral-500/10 not-disabled:hover:text-strong border-transparent lg:hidden" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="md" aria-expanded="false" type="button"><span class="sr-only">open mobile navigation</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 size-5"><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" 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" 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" 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?utm_source=redirect&utm_medium=html&utm_campaign=equinox" 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-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?utm_source=redirect&utm_medium=html&utm_campaign=equinox" 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 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">Log in</a><a href="https://dashboard.ngrok.com/signup?utm_source=redirect&utm_medium=html&utm_campaign=equinox" 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 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">Sign up</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>Delivery</span><ul><li><a href="/use-cases/api-gateway">API gateway</a></li><li><a href="https://ngrok.ai">AI Gateway</a></li><li><a href="https://ngrok.com/docs/universal-gateway/examples/webhook-gateway">Webhook gateway</a></li><li><a href="https://ngrok.com/docs/universal-gateway/examples/ephemeral-workloads">Ephemeral workloads</a></li></ul></li><li><span>Development</span><ul><li><a href="/use-cases/share-localhost">Share localhost</a></li><li><a href="https://ngrok.com/docs/using-ngrok-with/using-mcp">Connect MCPs to AI providers</a></li><li><a href="https://ngrok.com/docs/guides/share-localhost/webhooks">Test webhooks</a></li><li><a href="https://ngrok.com/docs/k8s/guides/local-projection">Access remote K8s clusters from dev</a></li></ul></li><li><span>Connectivity</span><ul><li><a href="/use-cases/site-to-site-connectivity">Site-to-site connectivity</a></li><li><a href="/use-cases/saas-customer-connectivity">SaaS customer connectivity</a></li><li><a href="/use-cases/device-gateway">Device gateway</a></li><li><a href="https://ngrok.com/docs/guides/ssh-rdp">Remote access</a></li><li><a href="/use-cases/private-connectivity">Private connectivity</a></li></ul></li><li><span>Play</span><ul><li><a href="https://ngrok.com/docs/universal-gateway/examples/minecraft">Minecraft</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/getting-started">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/native-anthropic-sdk-support" data-discover="true">Native Anthropic SDK support for the AI Gateway</a></li><li><a href="/blog/quantization" data-discover="true">Make LLMs 4x smaller and 2x faster</a></li><li><a href="/blog/prompt-caching" data-discover="true">Prompt caching: 10x cheaper LLM tokens, but how?</a></li></ul></li></ul></nav><main data-slot="main" id="main" tabindex="-1" class="focus:outline-hidden relative"><div class="relative"><picture class="pointer-events-none absolute left-1/2 -z-10 block aspect-video w-[183.333%] max-w-335 -translate-x-1/2 select-none motion-safe:animate-in motion-safe:fade-in motion-safe:duration-500 motion-safe:ease-out top-0 -translate-y-1/4"><source type="image/avif" srcSet="https://assets.ngrok.com/images/rainbow-670w.avif 670w, https://assets.ngrok.com/images/rainbow-1340w.avif 1340w" sizes="(min-width: 731px) 1340px, 183.33333333333331vw"/><img src="https://assets.ngrok.com/images/rainbow-670w.avif" alt="" aria-hidden="true" decoding="async" fetchPriority="low" loading="eager" width="1340" height="754" class="pointer-events-none size-full object-contain select-none" sizes="(min-width: 731px) 1340px, 183.33333333333331vw"/></picture><div class="mx-auto flex max-w-5xl gap-14 px-4 pt-6 pb-12 md:pt-12 md:pb-20"><nav class="text-muted sticky top-6 hidden min-w-44 shrink-0 self-start text-sm md:block"><ul><li class="text-muted mb-3 ml-2 font-mono text-xs font-medium tracking-wider uppercase">Agents</li><li><ul><li><a id="download-nav-mac-os" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/mac-os" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" fill="currentColor" data-slot="icon" class="shrink-0 size-5"><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>macOS</a></li><li><a id="download-nav-windows" aria-current="page" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 focus-visible:ring-4 focus:outline-hidden bg-neutral-500/30 text-strong [&>svg]:text-strong font-medium" href="/download/windows" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><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>Windows</a></li><li><a id="download-nav-linux" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/linux" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" fill="currentColor" data-slot="icon" class="shrink-0 size-5"><path d="M15.34 9.12c.05.03.1.09.16.09.05 0 .14-.02.15-.08 0-.07-.1-.12-.17-.15a.33.33 0 0 0-.29 0c-.02 0-.04.03-.03.05.02.07.12.06.18.1Zm-1.14.09c.06 0 .1-.06.15-.09.06-.03.17-.02.19-.08 0-.02-.01-.05-.03-.06-.09-.05-.2-.03-.3 0-.06.04-.17.08-.16.16 0 .05.1.08.15.07Zm11.5 14.52c-.18-.2-.27-.6-.37-1.03-.1-.42-.2-.87-.55-1.16a1.4 1.4 0 0 0-.42-.26c.48-1.42.3-2.84-.2-4.12a13.9 13.9 0 0 0-2.41-3.87c-.9-1.12-1.76-2.18-1.74-3.75.02-2.4.26-6.83-3.95-6.84-5.33-.01-4 5.38-4.06 7.04a6.04 6.04 0 0 1-1.17 3.37 16.63 16.63 0 0 0-3.03 5.04 5.99 5.99 0 0 0-.32 2.77c-.34.3-.6.77-.86 1.05-.22.23-.54.31-.89.44-.35.12-.73.3-.96.75-.11.2-.15.42-.15.65 0 .2.03.4.06.61.07.42.13.82.05 1.09-.28.75-.31 1.27-.12 1.65.2.38.6.54 1.05.64.9.18 2.12.14 3.09.65 1.03.54 2.07.73 2.9.54.61-.14 1.1-.5 1.36-1.05.65 0 1.37-.28 2.51-.35.78-.06 1.75.28 2.87.22a2.09 2.09 0 0 0 2.23 1.55 3.8 3.8 0 0 0 2.52-1.45c.7-.86 1.87-1.21 2.65-1.68.38-.24.7-.53.72-.95.02-.43-.23-.9-.8-1.55ZM15.5 7.25c.51-1.16 1.78-1.14 2.3-.02.33.74.18 1.6-.23 2.1-.09-.04-.31-.14-.66-.26.06-.06.16-.14.2-.24.25-.61 0-1.4-.47-1.42-.38-.02-.72.57-.61 1.2a3.7 3.7 0 0 0-.68-.23c-.05-.36-.02-.76.15-1.13Zm-2.12-.6c.53 0 1.08.74 1 1.74-.19.05-.37.13-.54.24.07-.46-.17-1.04-.5-1.02-.43.04-.5 1.1-.09 1.46.05.05.1 0-.3.3-.82-.77-.55-2.72.43-2.72Zm-.7 3.16.73-.55c.24-.23.7-.74 1.45-.74.37 0 .81.12 1.35.47.33.2.59.23 1.18.48.43.18.7.5.54.95-.13.37-.57.75-1.18.94-.58.19-1.03.83-1.99.78-.2-.01-.36-.06-.5-.11-.42-.18-.63-.54-1.04-.78-.45-.25-.69-.55-.77-.8-.07-.26 0-.47.22-.64Zm.16 17.4c-.14 1.82-2.28 1.78-3.92.93-1.55-.82-3.57-.34-3.98-1.14-.13-.24-.13-.66.13-1.37v-.02c.13-.4.04-.83-.03-1.24-.06-.4-.1-.78.05-1.04.18-.35.44-.48.77-.59.54-.2.61-.18 1.02-.52.29-.3.5-.67.75-.93.26-.29.52-.42.92-.36.42.06.78.35 1.14.83l1.02 1.85c.5 1.04 2.24 2.53 2.13 3.6Zm-.07-1.36c-.21-.34-.5-.7-.75-1.02.37 0 .74-.11.87-.46.12-.32 0-.78-.38-1.3-.7-.94-2-1.69-2-1.69a2.8 2.8 0 0 1-1.28-1.56A3.53 3.53 0 0 1 9.2 18c.27-1.2.97-2.35 1.42-3.08.12-.1.04.16-.45 1.08-.45.84-1.27 2.78-.14 4.3a9 9 0 0 1 .72-3.21c.63-1.43 1.94-3.9 2.05-5.87.05.04.24.17.32.21.24.14.42.35.66.54.64.52 1.48.48 2.2.06.33-.18.59-.39.83-.47.52-.16.93-.44 1.16-.78a26.9 26.9 0 0 0 1.94 4.99c.32.59.95 1.85 1.23 3.36.17 0 .37.02.57.07.72-1.86-.61-3.86-1.22-4.42-.24-.24-.25-.34-.13-.34a6.43 6.43 0 0 1 1.83 3.08c.15.6.17 1.23.02 1.86.86.35 1.87.93 1.6 1.8h-.22c.17-.52-.2-.9-1.18-1.35-1.02-.45-1.88-.45-2 .65-.63.22-.95.76-1.11 1.42a11.5 11.5 0 0 0-.23 2.08c-.03.4-.19.94-.36 1.5-1.67 1.2-4 1.72-5.95.38Zm13.4-.6c-.04.88-2.14 1.04-3.29 2.43A3.48 3.48 0 0 1 20.6 29a1.7 1.7 0 0 1-1.75-1c-.25-.58-.13-1.2.06-1.89.19-.74.48-1.5.51-2.11.04-.8.09-1.49.22-2.02.14-.54.34-.9.71-1.1l.06-.03c.04.7.38 1.39.98 1.54.65.17 1.6-.39 2-.85.46-.01.81-.04 1.17.27.52.44.37 1.58.9 2.16.54.6.72 1.02.7 1.29Zm-13.3-14.8c.1.1.25.23.42.36.35.27.82.56 1.42.56s1.18-.31 1.66-.57c.25-.13.57-.36.77-.54.2-.18.3-.33.16-.34-.14-.02-.13.13-.31.26-.23.17-.5.39-.72.51-.39.22-1.02.54-1.56.54s-.98-.25-1.3-.51c-.16-.13-.3-.26-.4-.36-.08-.07-.1-.24-.22-.25-.08-.01-.1.19.09.33Z"></path></svg>Linux</a></li><li><a id="download-nav-free-bsd" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/free-bsd" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M20.27 7.3c.6-.6 6.19-4.18 7.46-2.89 1.27 1.29-2.26 6.97-2.85 7.57-.6.6-2.11.05-3.38-1.24-1.28-1.3-1.83-2.83-1.23-3.44ZM9.89 5.78C7.94 4.66 5.18 3.4 4.29 4.3c-.88.9.39 3.77 1.5 5.75 1-1.75 2.4-3.23 4.1-4.28Zm15.9 5.76c.17.61.14 1.12-.15 1.42-1.09 1.1-4.69-1.47-5.85-3.82-.97-1.75-.6-2.9.8-2.65.3-.2.65-.4 1.05-.63a11.44 11.44 0 0 0-5.34-1.32A11.64 11.64 0 0 0 4.75 16.27C4.75 22.74 9.92 28 16.3 28c6.39 0 11.55-5.25 11.55-11.73 0-2.09-.54-4.05-1.48-5.76-.2.39-.4.73-.58 1.03Z"></path></svg>FreeBSD</a></li><li><a id="download-nav-docker" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/docker" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><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>Docker</a></li><li><a id="download-nav-docker-desktop" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/docker-desktop" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><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>Docker Desktop</a></li><li><a id="download-nav-raspberry-pi" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/raspberry-pi" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" fill="currentColor" data-slot="icon" class="shrink-0 size-5"><path fill-rule="evenodd" d="M9.25 2.34c.36-.33.77-.27 1.2-.1a.78.78 0 0 1 .46-.2c.18 0 .34.06.5.14l.25.1c.45-.16.64-.04.83.07.07.04.13.08.2.1.6-.12.83.11 1.1.4l.09.1.37-.02a4.2 4.2 0 0 1 1.67 2.4 4.2 4.2 0 0 1 1.66-2.4l.37.01.1-.1c.27-.28.49-.51 1.08-.38l.21-.1c.2-.12.38-.24.84-.09.08-.02.16-.06.24-.1.29-.12.57-.25.97.06.42-.16.83-.22 1.2.11.56-.07.74.08.88.26h.06c.22-.02.9-.08 1.24.42.92-.11 1.22.54.89 1.15v.01c.19.3.38.58-.06 1.14.15.3.06.64-.31 1.05.1.44-.1.75-.44.99.06.55-.46.89-.68 1.04-.02 0-.04.02-.05.03-.07.35-.22.68-.92.86-.1.5-.5.6-.89.7l-.05.02c1.35.78 2.5 1.8 2.5 4.33l.19.36a4.28 4.28 0 0 1 .76 6.4c-.11.6-.28 1.08-.45 1.55l-.14.38a4.7 4.7 0 0 1-2.93 3.75c-.8.61-1.65 1.19-2.8 1.6a4.65 4.65 0 0 1-3.45 1.54h-.05a4.65 4.65 0 0 1-3.45-1.55c-1.15-.4-2-.98-2.8-1.59a4.7 4.7 0 0 1-2.93-3.75l-.14-.38c-.17-.47-.34-.94-.45-1.54a4.28 4.28 0 0 1 .76-6.41l.2-.36a4.42 4.42 0 0 1 2.5-4.33l-.06-.02c-.4-.1-.78-.2-.9-.7-.7-.18-.84-.51-.9-.86l-.06-.03c-.22-.15-.74-.49-.68-1.04-.34-.24-.53-.55-.44-.99-.37-.4-.46-.74-.3-1.05-.44-.56-.26-.85-.07-1.14-.32-.62-.03-1.27.9-1.16.33-.5 1.01-.44 1.24-.43h.05c.14-.17.32-.32.89-.25Zm13.72 2.28C20.32 6 18.78 7.1 17.94 8.03c.43 1.73 2.68 1.81 3.5 1.76-.16-.07-.3-.17-.35-.31.08-.06.26-.08.48-.1.3-.01.67-.04.97-.2-.2-.05-.29-.09-.38-.23l.21-.07a3.5 3.5 0 0 0 1.1-.47h-.08a.65.65 0 0 1-.46-.12l.3-.15c.33-.17.68-.34.96-.62h-.07c-.2 0-.4-.01-.47-.09.4-.24.73-.51 1-.81-.3.04-.44 0-.51-.05l.27-.26c.23-.2.46-.42.59-.69-.24.09-.45.12-.6 0 .04-.1.13-.17.25-.26.17-.14.39-.32.54-.64h-.05c-.23.02-.46.05-.51 0 .1-.45.3-.7.47-.96l.03-.04h-.42c-.44 0-.89 0-.86-.04l.32-.33a2.56 2.56 0 0 0-1.41.14c-.17-.13 0-.3.2-.48-.43.06-.82.16-1.18.3-.14-.13 0-.26.15-.4.05-.03.1-.07.13-.12-.67.13-.96.31-1.24.49-.18-.17-.05-.32.07-.47l.06-.07c-.48.18-.74.4-1 .64l-.05.03-.04-.05c-.08-.1-.17-.2-.02-.47a2.6 2.6 0 0 0-.83.73c-.17-.11-.16-.25-.14-.4V3.1c-.26.22-.46.45-.66.68l-.24.27c-.05-.05-.1-.19-.15-.42-.9.87-2.15 3.05-.32 3.91a17.17 17.17 0 0 1 5.47-2.92Zm-9.02 3.41c-.84-.94-2.38-2.04-5.03-3.4 2.06.7 3.92 1.63 5.48 2.91 1.82-.86.56-3.04-.33-3.9-.04.22-.1.36-.15.4l-.24-.26c-.2-.23-.4-.46-.66-.68v.13c.02.14.03.28-.14.39a2.6 2.6 0 0 0-.83-.73c.15.26.06.37-.02.47l-.04.05-.05-.03a2.93 2.93 0 0 0-1-.64l.06.07c.12.15.25.3.07.47a3.03 3.03 0 0 0-1.24-.49l.13.13c.15.13.3.26.15.39A5.14 5.14 0 0 0 8.92 3c.21.18.39.35.22.48-.39-.12-.9-.28-1.42-.14l.32.33c.03.03-.41.04-.86.04h-.42l.03.04c.18.26.36.51.47.96-.05.05-.28.02-.5 0H6.7c.15.32.36.5.54.64.11.09.2.17.24.26-.15.12-.36.09-.6 0 .13.27.36.48.6.7l.26.25c-.07.05-.2.09-.52.05.28.3.61.57 1.01.81-.06.08-.27.08-.47.09H7.7c.28.28.62.45.96.62l.29.15a.65.65 0 0 1-.46.12h-.08c.26.21.68.34 1.1.47l.21.07c-.09.14-.18.18-.38.22.3.17.67.2.97.22.22.01.4.03.48.09-.05.14-.19.24-.36.31.83.05 3.08-.03 3.51-1.76Zm2.03 17.14a3.3 3.3 0 0 0 2.24-.86c.6-.55.93-1.3.93-2.07a2.8 2.8 0 0 0-.93-2.06c-.6-.55-1.4-.86-2.24-.86-.84 0-1.65.3-2.24.86a2.8 2.8 0 0 0-.93 2.06c0 .78.33 1.52.93 2.07.6.55 1.4.86 2.24.86Zm-.7-9.36c-.1-.81-.5-1.5-1.13-1.92a2.66 2.66 0 0 0-2.23-.28 3.7 3.7 0 0 0-2 1.52c-.5.75-.71 1.62-.61 2.44.1.82.5 1.5 1.14 1.92.63.41 1.43.52 2.22.28a3.7 3.7 0 0 0 2-1.52c.5-.74.72-1.62.62-2.44Zm2.41-2.07a2.63 2.63 0 0 0-1.14 1.92c-.1.82.12 1.7.61 2.43a3.7 3.7 0 0 0 2 1.53c.8.23 1.6.13 2.23-.29a2.63 2.63 0 0 0 1.14-1.92c.1-.81-.12-1.69-.61-2.43a3.7 3.7 0 0 0-2-1.53c-.8-.23-1.6-.13-2.23.29ZM7.6 15.3c1.4-.38.47 5.87-.68 5.35a3.38 3.38 0 0 1 .67-5.35Zm15.96-1.04c-.08 1.02-5.3-3.54-4.4-3.7 2.45-.4 4.49 1.05 4.4 3.7Zm-4.75-2.5c0-.92-1.6-1.9-2.9-1.89-1.46-.04-2.86 1.09-2.86 1.74 0 .79 1.15 1.6 2.88 1.62 1.75.01 2.87-.65 2.88-1.47Zm-2.89 17.29c1.52.03 3.1-1.33 3.07-1.93 0-.62-1.71-1.08-2.99-1.03-1.26-.03-3.2.5-3.18 1.2-.02.47 1.53 1.83 3.1 1.76ZM11.85 26c.76-.57.35-2.49-.56-3.58-1.04-1.2-2.4-1.93-3.27-1.4-.58.45-.69 1.97.14 3.46 1.24 1.77 2.98 1.95 3.7 1.52Zm8.67-3.93c-.98 1.15-1.53 3.25-.81 3.92.68.53 2.52.45 3.87-1.43.99-1.26.66-3.38.1-3.94-.84-.64-2.04.18-3.16 1.45ZM12.39 10.5c-2.45-.41-4.48 1.04-4.4 3.7.08 1.01 5.3-3.55 4.4-3.7Zm11.58 4.73c-1.42-.38-.48 5.87.68 5.36a3.39 3.39 0 0 0-.68-5.36Z" clip-rule="evenodd"></path></svg> Raspberry Pi</a></li></ul></li><li class="text-muted mt-8 mb-3 ml-2 font-mono text-xs font-medium tracking-wider uppercase">Coding Agents</li><li><ul><li><a id="download-nav-coding-agent" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/coding-agent" data-discover="true"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 size-5"><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>Claude, Codex ...</a></li></ul></li><li class="text-muted mt-8 mb-3 ml-2 font-mono text-xs font-medium tracking-wider uppercase">SDKS</li><li><ul><li><a id="download-nav-go" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/go" data-discover="true"><span class="sr-only">Golang</span><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M18.4 12.28a150.26 150.26 0 0 0-2.98.76l-.03.01c-.23.06-.26.07-.48-.18-.26-.3-.46-.49-.83-.66a3.12 3.12 0 0 0-3.2.26 3.68 3.68 0 0 0-1.8 3.3 2.74 2.74 0 0 0 2.38 2.73 3.3 3.3 0 0 0 3-1.15c.13-.14.24-.29.36-.46l.13-.18h-3.42c-.37 0-.45-.23-.33-.52.23-.54.65-1.44.9-1.9.05-.1.18-.27.44-.27h5.69c.26-.8.67-1.55 1.22-2.26a7.43 7.43 0 0 1 4.95-2.9c1.8-.32 3.5-.14 5.04.88a5.4 5.4 0 0 1 2.5 3.88 6.64 6.64 0 0 1-2.04 5.89 8.14 8.14 0 0 1-5.66 2.38 6.7 6.7 0 0 1-4.31-1.53 5.45 5.45 0 0 1-1.77-2.7c-.2.4-.45.8-.74 1.17a7.39 7.39 0 0 1-5.04 2.95 6.34 6.34 0 0 1-4.75-1.14 5.44 5.44 0 0 1-2.25-3.86c-.23-1.9.34-3.6 1.5-5.1a7.86 7.86 0 0 1 4.96-3c1.66-.3 3.25-.1 4.68.85.94.61 1.6 1.45 2.05 2.45.1.16.04.25-.18.3Zm10.05 2.59-.01-.19-.04-.38a2.91 2.91 0 0 0-3.6-2.32 3.83 3.83 0 0 0-3.1 3.03 2.85 2.85 0 0 0 1.62 3.28c.98.42 1.95.37 2.88-.1a3.8 3.8 0 0 0 2.25-3.32ZM1.1 17.1l.48-.9c.06-.11.2-.22.33-.22h2.35c.14 0 .2.1.2.25l.06.83c0 .12-.14.25-.24.25H1.21c-.14 0-.17-.1-.1-.21Zm1.1-5.54.7-.97c.07-.1.24-.18.38-.18h3.25c.14 0 .17.1.1.22l-.73.92c-.08.1-.23.21-.33.21H2.3c-.13 0-.17-.09-.1-.2ZM.25 14.2c-.09.12-.07.22.06.22h4.07c.13 0 .26-.07.3-.22l.27-.86c.03-.11-.04-.22-.17-.22H1.1c-.14 0-.3.07-.37.18l-.49.9Z"></path></svg>Go</a></li><li><a id="download-nav-node-js" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/node-js" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M16 29.32c-.37 0-.72-.1-1.04-.27l-3.3-1.94c-.5-.27-.26-.37-.1-.41.66-.23.79-.27 1.48-.67.08-.05.18-.02.25.03l2.54 1.5c.1.04.22.04.3 0l9.9-5.67c.1-.05.16-.14.16-.27V10.33c0-.12-.05-.22-.15-.27l-9.92-5.63c-.1-.05-.22-.05-.3 0l-9.9 5.63a.32.32 0 0 0-.16.27v11.3c0 .1.05.21.15.26l2.71 1.55c1.47.73 2.39-.13 2.39-.98V11.3c0-.15.12-.3.3-.3h1.26c.15 0 .3.13.3.3v11.15c0 1.93-1.07 3.06-2.93 3.06-.57 0-1.02 0-2.29-.61l-2.6-1.47A2.06 2.06 0 0 1 4 21.64V10.36c0-.73.4-1.42 1.04-1.78l9.92-5.66a2.25 2.25 0 0 1 2.08 0l9.92 5.66A2.06 2.06 0 0 1 28 10.35v11.3c0 .73-.4 1.42-1.04 1.79l-9.92 5.66c-.32.14-.7.22-1.04.22Zm3.06-7.77c-4.35 0-5.25-1.96-5.25-3.63a.3.3 0 0 1 .3-.29h1.3c.14 0 .27.1.27.25.2 1.3.77 1.93 3.4 1.93 2.09 0 2.98-.46 2.98-1.57 0-.63-.25-1.1-3.5-1.42-2.7-.27-4.4-.86-4.4-2.99 0-1.98 1.7-3.16 4.52-3.16 3.18 0 4.75 1.08 4.95 3.43a.4.4 0 0 1-.08.22c-.05.05-.12.1-.2.1h-1.29a.29.29 0 0 1-.27-.22c-.3-1.35-1.07-1.79-3.1-1.79-2.3 0-2.57.79-2.57 1.37 0 .71.33.94 3.4 1.33 3.06.39 4.5.95 4.5 3.06-.02 2.16-1.8 3.38-4.96 3.38Z"></path></svg>Node.js</a></li><li><a id="download-nav-rust" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/rust" data-discover="true"><svg fill="currentColor" viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path d="m29.8 15.65-1.17-.72c0-.12-.02-.23-.03-.35l1-.94a.4.4 0 0 0-.13-.67l-1.29-.49a9.7 9.7 0 0 0-.1-.33l.8-1.12a.4.4 0 0 0-.26-.63l-1.36-.22-.16-.31.57-1.26a.4.4 0 0 0-.18-.52.4.4 0 0 0-.2-.05l-1.38.05a7.93 7.93 0 0 0-.22-.26L26 6.48a.4.4 0 0 0-.5-.49l-1.34.32-.26-.22.05-1.38a.4.4 0 0 0-.58-.38l-1.25.57-.3-.16-.23-1.37a.4.4 0 0 0-.63-.26l-1.12.8a9.9 9.9 0 0 0-.34-.1l-.48-1.29a.4.4 0 0 0-.67-.13L17.4 3.4l-.34-.03-.73-1.18a.4.4 0 0 0-.68 0l-.73 1.18a16 16 0 0 0-.34.03l-.95-1.01a.4.4 0 0 0-.67.13l-.48 1.3-.34.1-1.12-.81a.4.4 0 0 0-.63.26l-.22 1.37-.3.16-1.26-.57a.4.4 0 0 0-.58.38l.05 1.38-.26.22L6.48 6a.4.4 0 0 0-.49.49l.32 1.35-.22.26-1.38-.05a.4.4 0 0 0-.38.57l.57 1.26-.16.3-1.36.23a.4.4 0 0 0-.27.63l.8 1.12-.1.33-1.28.49a.4.4 0 0 0-.14.67l1.01.94-.03.35-1.18.72a.4.4 0 0 0 0 .7l1.18.72.03.34-1 .94a.4.4 0 0 0 .13.68l1.29.48.1.34-.8 1.11a.4.4 0 0 0 .26.64l1.36.22.16.3-.57 1.26a.4.4 0 0 0 .38.57l1.38-.04.22.26L6 25.52a.4.4 0 0 0 .48.48l1.35-.31.26.22-.04 1.38a.4.4 0 0 0 .57.38l1.25-.57.3.16.23 1.36a.4.4 0 0 0 .64.27l1.11-.8.34.1.48 1.28a.4.4 0 0 0 .67.14l.95-1.01.34.03.73 1.18a.4.4 0 0 0 .68 0l.73-1.18c.12 0 .23-.02.34-.03l.95 1a.4.4 0 0 0 .67-.13l.48-1.29.34-.1 1.12.8a.4.4 0 0 0 .63-.26l.22-1.36.3-.16 1.26.57a.4.4 0 0 0 .58-.38l-.05-1.38.26-.22 1.35.31a.4.4 0 0 0 .48-.48l-.31-1.35.21-.26 1.39.04a.4.4 0 0 0 .38-.57l-.57-1.25.16-.3 1.36-.23a.4.4 0 0 0 .27-.64l-.8-1.11.1-.34 1.28-.48a.4.4 0 0 0 .14-.68l-1.01-.94.03-.34 1.18-.73a.4.4 0 0 0 0-.69Zm-7.86 9.75a.83.83 0 1 1 .65-1.5.83.83 0 0 1-.65 1.5Zm-.4-2.7a.76.76 0 0 0-.9.59l-.41 1.94a10.18 10.18 0 0 1-8.54-.04l-.41-1.94a.76.76 0 0 0-.9-.59l-1.72.37c-.32-.33-.62-.68-.9-1.04h8.37c.1 0 .16-.02.16-.1v-2.97c0-.08-.06-.1-.16-.1H13.7v-1.88h2.64c.24 0 1.3.07 1.63 1.41.1.42.33 1.76.5 2.19.15.48.79 1.45 1.47 1.45h4.17l.15-.02c-.29.4-.6.76-.95 1.11l-1.76-.38ZM9.98 25.36a.83.83 0 1 1-.38-1.62.83.83 0 0 1 .38 1.62ZM6.8 12.5a.83.83 0 1 1-1.5.72.83.83 0 0 1 1.5-.72Zm-.97 2.3 1.79-.79a.76.76 0 0 0 .38-1l-.36-.83h1.45v6.53H6.16a10.3 10.3 0 0 1-.33-3.9Zm7.86-.63v-1.92h3.45c.18 0 1.26.2 1.26 1.01 0 .67-.83.91-1.51.91h-3.2Zm12.55 1.74-.03.76h-1.05c-.1 0-.15.07-.15.17v.48c0 1.14-.64 1.38-1.2 1.45-.53.06-1.13-.23-1.2-.55-.31-1.78-.84-2.16-1.67-2.8 1.03-.66 2.1-1.63 2.1-2.92 0-1.39-.95-2.27-1.6-2.7a4.55 4.55 0 0 0-2.2-.72H8.38a10.23 10.23 0 0 1 5.72-3.23l1.28 1.34a.76.76 0 0 0 1.08.02l1.43-1.37a10.24 10.24 0 0 1 7 5l-.98 2.21a.76.76 0 0 0 .39 1l1.88.84c.04.34.05.67.05 1.02ZM15.39 4.7a.83.83 0 1 1 1.14 1.2.83.83 0 0 1-1.14-1.2Zm9.72 7.83a.83.83 0 0 1 1.47-.11.83.83 0 1 1-1.47.1Z"></path></svg>Rust</a></li><li><a id="download-nav-python" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/python" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M15.85 2.5c-1.08 0-2.1.1-3 .26-2.66.48-3.14 1.49-3.14 3.34v2.45h6.27v.81H7.36c-1.82 0-3.42 1.13-3.92 3.26-.57 2.45-.6 3.97 0 6.53.45 1.9 1.51 3.26 3.33 3.26h2.16v-2.94c0-2.12 1.8-3.99 3.92-3.99h6.26a3.2 3.2 0 0 0 3.14-3.26V6.1c0-1.74-1.44-3.05-3.14-3.34a19.1 19.1 0 0 0-3.26-.26Zm-3.4 1.97c.65 0 1.18.55 1.18 1.23a1.2 1.2 0 0 1-1.18 1.22 1.2 1.2 0 0 1-1.17-1.22c0-.68.52-1.23 1.17-1.23Z"></path><path fill="currentColor" d="M23.03 9.36v2.86a4.07 4.07 0 0 1-3.92 4.07h-6.26a3.24 3.24 0 0 0-3.14 3.26v6.12c0 1.74 1.48 2.76 3.14 3.26 1.98.6 3.89.7 6.26 0 1.58-.46 3.14-1.4 3.14-3.26v-2.45h-6.27v-.81h9.4c1.83 0 2.5-1.3 3.14-3.26.65-2.01.63-3.95 0-6.53-.45-1.86-1.31-3.26-3.14-3.26h-2.35Zm-3.52 15.5c.65 0 1.17.54 1.17 1.21a1.2 1.2 0 0 1-1.17 1.23 1.2 1.2 0 0 1-1.18-1.23c0-.67.53-1.22 1.18-1.22Z"></path><defs><linearGradient id="_R_ccq55_" x1="1.22" x2="13.45" y1="1.42" y2="11.6" gradientUnits="userSpaceOnUse"><stop stop-color="#5A9FD4"></stop><stop offset="1" stop-color="#306998"></stop></linearGradient><linearGradient id="_R_ccq55H1_" x1="14.78" x2="10.34" y1="20.8" y2="14.72" gradientUnits="userSpaceOnUse"><stop stop-color="#FFD43B"></stop><stop offset="1" stop-color="#FFE873"></stop></linearGradient></defs></svg> Python</a></li><li><a id="download-nav-java" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/java" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M12 23.68s-1.14.68.78.88c2.3.3 3.52.24 6.07-.25.51.32 1.05.58 1.62.79-5.73 2.45-12.98-.15-8.48-1.42Zm-.74-3.19s-1.23.93.68 1.13c2.5.25 4.46.3 7.84-.39.33.33.73.59 1.18.73-6.9 2.06-14.65.2-9.7-1.47Zm13.52 5.59s.83.68-.93 1.22c-3.28.98-13.77 1.28-16.7 0-1.03-.44.93-1.08 1.55-1.17.64-.15.98-.15.98-.15-1.12-.78-7.49 1.62-3.23 2.3 11.7 1.91 21.36-.83 18.32-2.2Zm-12.26-8.92s-5.34 1.28-1.9 1.72c1.46.2 4.35.14 7.04-.05 2.2-.2 4.41-.59 4.41-.59s-.78.34-1.32.69c-5.43 1.42-15.87.78-12.88-.69 2.55-1.22 4.65-1.08 4.65-1.08Zm9.55 5.34c5.49-2.84 2.94-5.58 1.18-5.24-.44.1-.64.2-.64.2s.15-.3.5-.4c3.47-1.22 6.21 3.68-1.14 5.59 0 0 .05-.05.1-.15Zm-9 7.74c5.28.34 13.36-.2 13.56-2.7 0 0-.4.99-4.36 1.72-4.5.83-10.09.73-13.37.2 0 0 .69.58 4.16.78Z"></path><path fill="currentColor" d="M18.75 1s3.04 3.09-2.89 7.74c-4.75 3.77-1.07 5.92 0 8.37-2.79-2.5-4.8-4.7-3.43-6.75 2.01-3.04 7.55-4.5 6.32-9.36ZM17.2 15.06c1.42 1.61-.39 3.08-.39 3.08s3.63-1.86 1.96-4.16c-1.52-2.2-2.7-3.28 3.67-6.96 0 0-10.04 2.5-5.24 8.04Z"></path></svg>Java</a></li></ul></li><li class="text-muted mt-8 mb-3 ml-2 font-mono text-xs font-medium tracking-wider uppercase">Infrastructure</li><li><ul><li><a id="download-nav-kubernetes" class="ring-focus-accent flex items-center gap-1.5 rounded-md px-2 py-1 font-normal focus-visible:ring-4 focus:outline-hidden text-muted hover:text-strong [&>svg]:text-muted hover:[&>svg]:text-strong" href="/download/kubernetes" data-discover="true"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-5"><path fill="currentColor" d="M18.46 17.5a.46.46 0 0 0-.29.03.48.48 0 0 0-.23.62l1.1 2.65a5.58 5.58 0 0 0 2.25-2.84l-2.82-.47Zm-4.38.37a.48.48 0 0 0-.55-.36v-.01l-2.8.47a5.6 5.6 0 0 0 2.25 2.82l1.08-2.62c.03-.1.04-.2.02-.3Zm2.34 1.02a.48.48 0 0 0-.84 0l-1.38 2.49a5.6 5.6 0 0 0 3.6 0l-1.37-2.49h-.01Zm4.35-5.77-2.12 1.9a.48.48 0 0 0 .2.82v.01l2.73.8a5.68 5.68 0 0 0-.81-3.53Zm-3.93.22a.48.48 0 0 0 .76.36l2.32-1.64a5.62 5.62 0 0 0-3.24-1.56l.16 2.84Zm-2.45.37a.48.48 0 0 0 .76-.36l.01-.01.16-2.84a5.72 5.72 0 0 0-3.26 1.56l2.33 1.65Zm-1.24 2.15a.48.48 0 0 0 .19-.82v-.02l-2.12-1.9a5.57 5.57 0 0 0-.8 3.53l2.73-.79Zm2.07.83.78.38.78-.38.2-.84-.55-.68h-.87l-.54.68.2.84Z"></path><path fill="currentColor" d="m28.96 18.35-2.24-9.7a1.74 1.74 0 0 0-.93-1.16l-9.04-4.32a1.74 1.74 0 0 0-1.5 0L6.2 7.49a1.74 1.74 0 0 0-.94 1.16l-2.23 9.7a1.7 1.7 0 0 0 .33 1.46l6.26 7.78.09.1a1.72 1.72 0 0 0 1.26.54h10.04a1.65 1.65 0 0 0 .61-.12 1.76 1.76 0 0 0 .74-.53l6.25-7.78a1.69 1.69 0 0 0 .34-.7c.05-.25.05-.5 0-.75Zm-9.38 3.78.09.21a.43.43 0 0 0-.04.32c.13.3.3.6.48.86l.29.43.07.15a.54.54 0 1 1-.98.46l-.07-.14a4.52 4.52 0 0 1-.15-.5c-.1-.3-.22-.61-.37-.9a.43.43 0 0 0-.28-.17l-.12-.2a7 7 0 0 1-4.99-.02l-.12.22a.44.44 0 0 0-.24.12c-.18.3-.32.63-.42.97-.04.17-.09.33-.15.5l-.07.13a.54.54 0 1 1-.98-.46l.07-.15c.1-.15.19-.29.3-.43.18-.28.35-.57.48-.88.02-.1 0-.21-.04-.3l.1-.24a7.04 7.04 0 0 1-3.13-3.9l-.23.04a.6.6 0 0 0-.31-.1c-.33.06-.64.15-.95.27l-.48.19-.14.03h-.02a.54.54 0 1 1-.24-1.05h.01l.15-.04c.17-.02.34-.04.51-.04.33-.02.66-.08.97-.16.1-.06.18-.14.24-.23l.22-.07a7 7 0 0 1 1.1-4.88L9.98 12a.6.6 0 0 0-.1-.3 4.87 4.87 0 0 0-.8-.57 4.25 4.25 0 0 1-.46-.27l-.11-.09a.57.57 0 0 1-.14-.8.52.52 0 0 1 .43-.2c.14.01.27.06.38.15l.12.1c.12.12.24.24.35.38a5 5 0 0 0 .73.65c.1.06.22.07.32.04l.2.13a6.96 6.96 0 0 1 4.51-2.17l.02-.23a.59.59 0 0 0 .17-.28c.01-.32 0-.65-.06-.98a4.55 4.55 0 0 1-.07-.51V6.9a.54.54 0 1 1 1.08 0v.15a4.5 4.5 0 0 1-.07.51c-.05.33-.08.66-.06.98.02.11.08.21.17.28l.02.24a7.1 7.1 0 0 1 4.49 2.17l.2-.15a.6.6 0 0 0 .33-.04c.27-.2.51-.41.73-.66.11-.13.23-.25.36-.37l.12-.1a.54.54 0 1 1 .67.85l-.12.1a5.06 5.06 0 0 0-1.25.83.4.4 0 0 0-.1.3l-.2.17a7.03 7.03 0 0 1 1.13 4.87l.22.06c.06.1.14.18.23.24.32.08.65.14.98.16.17 0 .34.01.51.04.05 0 .12.03.16.04a.54.54 0 1 1-.24 1.05h-.02l-.14-.03a4.5 4.5 0 0 1-.48-.2c-.3-.11-.62-.2-.95-.27a.43.43 0 0 0-.3.11 8.22 8.22 0 0 0-.23-.04 7.04 7.04 0 0 1-3.12 3.93Z"></path></svg> Kubernetes</a></li></ul></li></ul></nav><div class="min-w-0 flex-1"><h1 class="text-strong font-family relative text-center text-5xl leading-none md:text-left">Download & Install</h1><p class="text-body relative text-center text-xl md:text-left">The fastest way to put anything on the internet.</p><div class="mt-6"><div data-slot="card" class="border-card bg-card relative border rounded-xl shadow-2xl"><div data-slot="card-body" class="p-6 border-t border-card-muted first:border-t-0"><div class="mb-5 block md:hidden"><label data-slot="label" class="cursor-pointer peer-disabled:cursor-default has-disabled:cursor-default aria-disabled:cursor-default font-sans [:where(&:not(:has(input,textarea,select,button,[contenteditable])))]:font-medium text-strong mb-1.5 block text-sm" for="platform-select">Select a Platform</label><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" data-slot="select-trigger" class="h-9 text-sm border-form bg-form text-strong font-sans placeholder:text-placeholder hover:bg-form-hover hover:text-strong flex w-full items-center justify-between gap-1.5 rounded-md border px-3 py-2 disabled:pointer-events-none disabled:opacity-50 [&>span]:line-clamp-1 [&>span]:text-left hover:border-neutral-400 focus:outline-hidden focus:ring-4 aria-expanded:ring-4 focus:border-accent-600 focus:ring-focus-accent aria-expanded:border-accent-600 aria-expanded:ring-focus-accent data-validation-success:border-success-600 data-validation-success:focus:border-success-600 data-validation-success:focus:ring-focus-success data-validation-success:aria-expanded:border-success-600 data-validation-success:aria-expanded:ring-focus-success data-validation-warning:border-warning-600 data-validation-warning:focus:border-warning-600 data-validation-warning:focus:ring-focus-warning data-validation-warning:aria-expanded:border-warning-600 data-validation-warning:aria-expanded:ring-focus-warning data-validation-error:border-danger-600 data-validation-error:focus:border-danger-600 data-validation-error:focus:ring-focus-danger data-validation-error:aria-expanded:border-danger-600 data-validation-error:aria-expanded:ring-focus-danger" id="platform-select" aria-invalid="false"><span class="sr-only">Select a Platform</span><span style="pointer-events:none"></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-4"><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><select aria-hidden="true" tabindex="-1" name="platform" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div><div><div data-slot="media-object" class="flex mb-10 items-center gap-4"><div data-slot="media-object-media" class="shrink-0 leading-none border-popover bg-popover grid size-12 place-content-center rounded-xl border bg-linear-to-b from-white to-gray-100 shadow-md dark:bg-linear-to-t dark:from-gray-50 dark:to-gray-100"><svg viewBox="0 0 32 32" width="1em" height="1em" data-slot="icon" class="shrink-0 size-7"><path fill="#F8682C" d="m4 7.32 9.8-1.34.01 9.46-9.8.06L4 7.32Z"></path><path fill="#91C300" d="m15 5.8 13-1.9v11.42l-13 .1V5.81Z"></path><path fill="#00B4F1" d="m13.8 16.53.01 9.47-9.8-1.35v-8.18l9.8.06Z"></path><path fill="#FFC300" d="M28 16.62v11.36l-13-1.83-.03-9.55 13.03.02Z"></path></svg></div><div data-slot="media-object-content" class="min-w-0 flex-1"><h2 class="text-strong font-family flex items-center gap-2 text-4xl">Windows<span data-slot="tooltip-trigger" class="inline-flex w-fit shrink-0 cursor-default items-center gap-1 rounded px-1.5 py-0.5 font-medium text-xs font-sans bg-purple-500/20 text-purple-700" data-state="closed">Agent</span><span data-slot="tooltip-trigger" class="inline-flex w-fit shrink-0 cursor-default items-center gap-1 rounded px-1.5 py-0.5 font-medium text-xs font-sans bg-teal-500/20 text-teal-700" data-state="closed">Detected</span></h2></div></div><div class="flex flex-col gap-6"><div class="flex gap-4"><div class="flex size-7 shrink-0 items-center justify-center rounded-full bg-neutral-300"><span class="text-strong text-sm font-semibold">1</span></div><div class="min-w-0 flex-1"><p class="text-strong mb-4 text-xl font-semibold">Install the ngrok agent</p><div dir="ltr" data-orientation="horizontal" data-slot="tabs" data-appearance="pill" class="flex gap-4 flex-col"><div role="tablist" aria-orientation="horizontal" data-slot="tabs-list" class="flex scroll-fade-x flex-row items-center overflow-x-auto overscroll-x-none w-full min-w-0 pt-1 -mt-1 px-1 -mx-1 gap-1 pb-1 -mb-1" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-_R_18qfa55_-content-install" data-state="active" id="download-tab-windows-install-microsoft-store" data-slot="tabs-trigger" class="group/tab-trigger relative flex cursor-pointer items-center gap-1 whitespace-nowrap ring-focus-accent outline-hidden aria-disabled:cursor-default aria-disabled:opacity-50 focus-visible:ring-4 [&>svg]:shrink-0 [&>svg]:size-5 not-aria-disabled:hover:text-gray-900 not-aria-disabled:hover:data-state-active:text-strong not-aria-disabled:hover:data-state-active:bg-neutral-500/15 data-state-active:text-strong data-state-active:bg-neutral-500/15 text-muted hover:text-body data-[state=active]:text-strong! rounded-full px-3 py-1.5 text-sm font-semibold transition-colors data-[state=active]:bg-neutral-500/30!" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><span aria-hidden="true" class="absolute z-0 bottom-0 left-0 right-0 h-0.75 hidden"></span>Microsoft Store</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_18qfa55_-content-install_winget" data-state="inactive" id="download-tab-windows-install-winget" data-slot="tabs-trigger" class="group/tab-trigger relative flex cursor-pointer items-center gap-1 whitespace-nowrap ring-focus-accent outline-hidden aria-disabled:cursor-default aria-disabled:opacity-50 focus-visible:ring-4 [&>svg]:shrink-0 [&>svg]:size-5 not-aria-disabled:hover:text-gray-900 not-aria-disabled:hover:data-state-active:text-strong not-aria-disabled:hover:data-state-active:bg-neutral-500/15 data-state-active:text-strong data-state-active:bg-neutral-500/15 text-muted hover:text-body data-[state=active]:text-strong! rounded-full px-3 py-1.5 text-sm font-semibold transition-colors data-[state=active]:bg-neutral-500/30!" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><span aria-hidden="true" class="absolute z-0 bottom-0 left-0 right-0 h-0.75 hidden"></span>WinGet via Microsoft Store</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_18qfa55_-content-install_scoop" data-state="inactive" id="download-tab-windows-install-scoop" data-slot="tabs-trigger" class="group/tab-trigger relative flex cursor-pointer items-center gap-1 whitespace-nowrap ring-focus-accent outline-hidden aria-disabled:cursor-default aria-disabled:opacity-50 focus-visible:ring-4 [&>svg]:shrink-0 [&>svg]:size-5 not-aria-disabled:hover:text-gray-900 not-aria-disabled:hover:data-state-active:text-strong not-aria-disabled:hover:data-state-active:bg-neutral-500/15 data-state-active:text-strong data-state-active:bg-neutral-500/15 text-muted hover:text-body data-[state=active]:text-strong! rounded-full px-3 py-1.5 text-sm font-semibold transition-colors data-[state=active]:bg-neutral-500/30!" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><span aria-hidden="true" class="absolute z-0 bottom-0 left-0 right-0 h-0.75 hidden"></span>Scoop</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_18qfa55_-content-download" data-state="inactive" id="download-tab-windows-download" data-slot="tabs-trigger" class="group/tab-trigger relative flex cursor-pointer items-center gap-1 whitespace-nowrap ring-focus-accent outline-hidden aria-disabled:cursor-default aria-disabled:opacity-50 focus-visible:ring-4 [&>svg]:shrink-0 [&>svg]:size-5 not-aria-disabled:hover:text-gray-900 not-aria-disabled:hover:data-state-active:text-strong not-aria-disabled:hover:data-state-active:bg-neutral-500/15 data-state-active:text-strong data-state-active:bg-neutral-500/15 text-muted hover:text-body data-[state=active]:text-strong! rounded-full px-3 py-1.5 text-sm font-semibold transition-colors data-[state=active]:bg-neutral-500/30!" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><span aria-hidden="true" class="absolute z-0 bottom-0 left-0 right-0 h-0.75 hidden"></span>Download</button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_18qfa55_-trigger-install" id="radix-_R_18qfa55_-content-install" tabindex="0" data-slot="tabs-content" class="focus-visible:ring-focus-accent outline-hidden focus-visible:ring-4" style="animation-duration:0s"><div class="space-y-4"><p class="text-sm">For the most secure experience, use the Microsoft Store to install ngrok.</p><a href="ms-windows-store://pdp/?ProductId=9mvs1j51gmk6" 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 rounded-md focus:outline-hidden focus-visible:ring-4 disabled:cursor-default disabled:opacity-50 not-disabled:active:scale-97 ease-out transition-transform duration-150 focus-visible:ring-focus-accent border text-sm font-medium h-9 px-3 bg-filled-neutral not-disabled:hover:bg-filled-neutral-hover border-transparent focus-visible:border-transparent text-neutral-50 font-sans pe-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 size-5 order-last"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Microsoft Store Installer</a></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_18qfa55_-trigger-install_winget" hidden="" id="radix-_R_18qfa55_-content-install_winget" tabindex="0" data-slot="tabs-content" class="focus-visible:ring-focus-accent outline-hidden focus-visible:ring-4"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_18qfa55_-trigger-install_scoop" hidden="" id="radix-_R_18qfa55_-content-install_scoop" tabindex="0" data-slot="tabs-content" class="focus-visible:ring-focus-accent outline-hidden focus-visible:ring-4"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_18qfa55_-trigger-download" hidden="" id="radix-_R_18qfa55_-content-download" tabindex="0" data-slot="tabs-content" class="focus-visible:ring-focus-accent outline-hidden focus-visible:ring-4"></div></div></div></div><div class="flex gap-4"><div class="flex size-7 shrink-0 items-center justify-center rounded-full bg-neutral-300"><span class="text-strong text-sm font-semibold">2</span></div><div class="min-w-0 flex-1"><p class="text-strong mb-4 text-xl font-semibold">Add your authtoken</p><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border border-gray-300 bg-base font-mono [&_svg]:shrink-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15 get-started-copy-windows-1" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="sh" data-mantle-line-number-start="1" data-mantle-line-numbers="false" id="_R_59afa55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line" data-line-number="1"><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> config</span><span style="color:var(--shiki-token-string)"> add-authtoken</span><span style="color:var(--shiki-token-string-expression)"> "<YOUR_AUTHTOKEN>"</span></span></span></code></pre></div></div><p class="text-muted mt-2 text-xs">Don’t have an authtoken?<!-- --> <a href="https://dashboard.ngrok.com/signup?ref=downloads&utm_source=redirect&utm_medium=html&utm_campaign=equinox" id="download-cta-signup" 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 get-started-signup-windows-1">Sign up</a> <!-- -->for a free account.</p></div></div><div class="flex gap-4"><div class="flex size-7 shrink-0 items-center justify-center rounded-full bg-neutral-300"><span class="text-strong text-sm font-semibold">3</span></div><div class="min-w-0 flex-1"><p class="text-strong mb-4 text-xl font-semibold">Start an endpoint</p><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border border-gray-300 bg-base font-mono [&_svg]:shrink-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15 get-started-copy-windows-2" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="sh" data-mantle-line-number-start="1" data-mantle-line-numbers="false" id="_R_59qfa55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line" data-line-number="1"><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> http</span><span style="color:var(--shiki-token-constant)"> 80</span></span></span></code></pre></div></div><p class="text-muted mt-2 text-xs">80 is an example port. Use your app’s actual port.<!-- --> <a href="https://ngrok.com/docs/guides/share-localhost/quickstart?utm_source=redirect&utm_medium=html&utm_campaign=equinox" target="_blank" rel="noopener" id="download-docs-link" 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">View docs</a> <!-- -->for more info.</p></div></div><div class="flex items-center gap-4"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="size-7 shrink-0 text-emerald-600"><path d="M111.49,52.63a15.8,15.8,0,0,0-26,5.77L33,202.78A15.83,15.83,0,0,0,47.76,224a16,16,0,0,0,5.46-1l144.37-52.5a15.8,15.8,0,0,0,5.78-26Zm-8.33,135.21-35-35,13.16-36.21,58.05,58.05Zm-55,20,14-38.41,24.45,24.45ZM156,168.64,87.36,100l13-35.87,91.43,91.43ZM160,72a37.8,37.8,0,0,1,3.84-15.58C169.14,45.83,179.14,40,192,40c6.7,0,11-2.29,13.65-7.21A22,22,0,0,0,208,23.94,8,8,0,0,1,224,24c0,12.86-8.52,32-32,32-6.7,0-11,2.29-13.65,7.21A22,22,0,0,0,176,72.06,8,8,0,0,1,160,72ZM136,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm101.66,82.34a8,8,0,1,1-11.32,11.31l-16-16a8,8,0,0,1,11.32-11.32Zm4.87-42.75-24,8a8,8,0,0,1-5.06-15.18l24-8a8,8,0,0,1,5.06,15.18Z"></path></svg><p class="text-strong text-xl font-semibold">Open your ngrok URL in a browser to see it working!</p></div></div></div></div></div><div class="mt-20 flex flex-col gap-6"><p class="font-family text-strong text-center text-4xl leading-10 md:text-left">You’re all set. <em class="font-family italic">What’s next?</em></p><div class="flex flex-col gap-4"><div dir="ltr" data-orientation="horizontal"><div class="border-card overflow-hidden rounded-xl border"><div role="tablist" aria-orientation="horizontal" class="grid grid-cols-4" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-_R_6na55_-content-oauth" data-state="active" id="whats-next-policy-tab-windows-oauth" class="group flex flex-col items-center gap-1.5 border-b border-card p-3 text-center text-xs sm:p-5 sm:text-sm data-state-inactive:bg-card data-state-inactive:text-body data-state-inactive:hover:bg-card-hover data-state-active:bg-card-hover data-state-active:font-medium data-state-active:text-strong [&>svg]:group-data-state-active:text-sky-600 rounded-tl-xl" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="size-5 shrink-0"><path d="M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.26,47,25.53a8,8,0,0,0,4.2,0c1-.27,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm0,72c0,37.07-13.66,67.16-40.6,89.42A129.3,129.3,0,0,1,128,223.62a128.25,128.25,0,0,1-38.92-21.81C61.82,179.51,48,149.3,48,112l0-56,160,0ZM82.34,141.66a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32l-56,56a8,8,0,0,1-11.32,0Z"></path></svg><span class="leading-5">Add OAuth and restrict domains</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_6na55_-content-webhooks" data-state="inactive" id="whats-next-policy-tab-windows-webhooks" class="group flex flex-col items-center gap-1.5 border-b p-3 text-center text-xs sm:p-5 sm:text-sm data-state-inactive:bg-card data-state-inactive:text-body data-state-inactive:hover:bg-card-hover data-state-active:bg-card-hover data-state-active:font-medium data-state-active:text-strong [&>svg]:group-data-state-active:text-sky-600 border-l border-card" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="size-5 shrink-0"><path d="M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z"></path></svg><span class="leading-5">Verify webhook signatures</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_6na55_-content-sso" data-state="inactive" id="whats-next-policy-tab-windows-sso" class="group flex flex-col items-center gap-1.5 border-b p-3 text-center text-xs sm:p-5 sm:text-sm data-state-inactive:bg-card data-state-inactive:text-body data-state-inactive:hover:bg-card-hover data-state-active:bg-card-hover data-state-active:font-medium data-state-active:text-strong [&>svg]:group-data-state-active:text-sky-600 border-l border-card" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="size-5 shrink-0"><path d="M200,112a8,8,0,0,1-8,8H152a8,8,0,0,1,0-16h40A8,8,0,0,1,200,112Zm-8,24H152a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm40-80V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Zm-80.26-34a8,8,0,1,1-15.5,4c-2.63-10.26-13.06-18-24.25-18s-21.61,7.74-24.25,18a8,8,0,1,1-15.5-4,39.84,39.84,0,0,1,17.19-23.34,32,32,0,1,1,45.12,0A39.76,39.76,0,0,1,135.75,166ZM96,136a16,16,0,1,0-16-16A16,16,0,0,0,96,136Z"></path></svg><span class="leading-5">Add SSO with OpenID Connect</span></button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_6na55_-content-basic-auth" data-state="inactive" id="whats-next-policy-tab-windows-basic-auth" class="group flex flex-col items-center gap-1.5 border-b p-3 text-center text-xs sm:p-5 sm:text-sm data-state-inactive:bg-card data-state-inactive:text-body data-state-inactive:hover:bg-card-hover data-state-active:bg-card-hover data-state-active:font-medium data-state-active:text-strong [&>svg]:group-data-state-active:text-sky-600 border-l border-card rounded-tr-xl" tabindex="-1" data-orientation="horizontal" data-radix-collection-item=""><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="size-5 shrink-0"><path d="M48,56V200a8,8,0,0,1-16,0V56a8,8,0,0,1,16,0Zm92,54.5L120,117V96a8,8,0,0,0-16,0v21L84,110.5a8,8,0,0,0-5,15.22l20,6.49-12.34,17a8,8,0,1,0,12.94,9.4l12.34-17,12.34,17a8,8,0,1,0,12.94-9.4l-12.34-17,20-6.49A8,8,0,0,0,140,110.5ZM246,115.64A8,8,0,0,0,236,110.5L216,117V96a8,8,0,0,0-16,0v21l-20-6.49a8,8,0,0,0-4.95,15.22l20,6.49-12.34,17a8,8,0,1,0,12.94,9.4l12.34-17,12.34,17a8,8,0,1,0,12.94-9.4l-12.34-17,20-6.49A8,8,0,0,0,246,115.64Z"></path></svg><span class="leading-5">Add a password with Basic Auth</span></button></div><div class="bg-card p-6"><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_6na55_-trigger-oauth" id="radix-_R_6na55_-content-oauth" tabindex="0" style="animation-duration:0s"><div class="space-y-4"><p class="text-body text-sm">Create a <strong class="text-strong font-semibold">policy.yaml</strong> file and run this command:</p><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border border-gray-300 bg-base font-mono [&_svg]:shrink-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" data-copy-id="windows-policy-copy-oauth" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="sh" data-mantle-line-number-start="1" data-mantle-line-numbers="false" id="_R_kd6na55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line" data-line-number="1"><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> http</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-token-string)"> --traffic-policy-file</span><span style="color:var(--shiki-token-string)"> policy.yaml</span></span></span></code></pre></div></div><div class="border-card overflow-hidden rounded-md border"><div class="border-card flex items-center gap-2 border-b px-4 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="text-muted size-5 shrink-0"><path d="M181.66,146.34a8,8,0,0,1,0,11.32l-24,24a8,8,0,0,1-11.32-11.32L164.69,152l-18.35-18.34a8,8,0,0,1,11.32-11.32Zm-72-24a8,8,0,0,0-11.32,0l-24,24a8,8,0,0,0,0,11.32l24,24a8,8,0,0,0,11.32-11.32L91.31,152l18.35-18.34A8,8,0,0,0,109.66,122.34ZM216,88V216a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V40A16,16,0,0,1,56,24h96a8,8,0,0,1,5.66,2.34l56,56A8,8,0,0,1,216,88Zm-56-8h28.69L160,51.31Zm40,136V96H152a8,8,0,0,1-8-8V40H56V216H200Z"></path></svg><span class="text-strong font-mono text-sm">contents of policy.yaml</span></div><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border-gray-300 bg-base font-mono [&_svg]:shrink-0 border-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="yaml" data-mantle-line-number-start="1" data-mantle-line-numbers="true" id="_R_2md6na55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line mantle-code-line-opener" data-line-number="1"><span class="mantle-code-line-number" data-slot="line-number">1</span><button type="button" class="mantle-code-fold-toggle" data-slot="fold-toggle" data-fold-line="1" aria-expanded="true" aria-label="Toggle code folding"><svg class="mantle-code-fold-caret" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" fill-rule="evenodd" d="M3.22 5.97a.75.75 0 0 1 1.06 0L8 9.69l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.03a.75.75 0 0 1 0-1.06Z"/></svg></button><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-property, var(--shiki-token-function))">on_http_request</span><span style="color:var(--shiki-token-keyword)">:</span><span class="mantle-code-fold-ellipsis" data-slot="fold-ellipsis" aria-hidden="true">⋯</span></span></span><span class="mantle-code-line" data-line-number="2" data-fold-regions="1"><span class="mantle-code-line-number" data-slot="line-number">2</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-comment)"> # redirect users to Google to log in</span></span></span><span class="mantle-code-line mantle-code-line-opener" data-line-number="3" data-fold-regions="1"><span class="mantle-code-line-number" data-slot="line-number">3</span><button type="button" class="mantle-code-fold-toggle" data-slot="fold-toggle" data-fold-line="3" aria-expanded="true" aria-label="Toggle code folding"><svg class="mantle-code-fold-caret" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" fill-rule="evenodd" d="M3.22 5.97a.75.75 0 0 1 1.06 0L8 9.69l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.03a.75.75 0 0 1 0-1.06Z"/></svg></button><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> -</span><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> actions</span><span style="color:var(--shiki-token-keyword)">:</span><span class="mantle-code-fold-ellipsis" data-slot="fold-ellipsis" aria-hidden="true">⋯</span></span></span><span class="mantle-code-line mantle-code-line-opener" data-line-number="4" data-fold-regions="1 3"><span class="mantle-code-line-number" data-slot="line-number">4</span><button type="button" class="mantle-code-fold-toggle" data-slot="fold-toggle" data-fold-line="4" aria-expanded="true" aria-label="Toggle code folding"><svg class="mantle-code-fold-caret" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" fill-rule="evenodd" d="M3.22 5.97a.75.75 0 0 1 1.06 0L8 9.69l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.03a.75.75 0 0 1 0-1.06Z"/></svg></button><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> -</span><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> oauth</span><span class="mantle-code-fold-ellipsis" data-slot="fold-ellipsis" aria-hidden="true">⋯</span></span></span><span class="mantle-code-line mantle-code-line-opener" data-line-number="5" data-fold-regions="1 3 4"><span class="mantle-code-line-number" data-slot="line-number">5</span><button type="button" class="mantle-code-fold-toggle" data-slot="fold-toggle" data-fold-line="5" aria-expanded="true" aria-label="Toggle code folding"><svg class="mantle-code-fold-caret" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" fill-rule="evenodd" d="M3.22 5.97a.75.75 0 0 1 1.06 0L8 9.69l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.03a.75.75 0 0 1 0-1.06Z"/></svg></button><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> config</span><span style="color:var(--shiki-token-keyword)">:</span><span class="mantle-code-fold-ellipsis" data-slot="fold-ellipsis" aria-hidden="true">⋯</span></span></span><span class="mantle-code-line" data-line-number="6" data-fold-regions="1 3 4 5"><span class="mantle-code-line-number" data-slot="line-number">6</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> provider</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> google</span></span></span><span class="mantle-code-line" data-line-number="7" data-fold-regions="1"><span class="mantle-code-line-number" data-slot="line-number">7</span><span class="mantle-code-line-content" data-slot="line-content"> </span></span><span class="mantle-code-line" data-line-number="8" data-fold-regions="1"><span class="mantle-code-line-number" data-slot="line-number">8</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-comment)"> # allow logins *only* from acme.com</span></span></span><span class="mantle-code-line mantle-code-line-opener" data-line-number="9" data-fold-regions="1"><span class="mantle-code-line-number" data-slot="line-number">9</span><button type="button" class="mantle-code-fold-toggle" data-slot="fold-toggle" data-fold-line="9" aria-expanded="true" aria-label="Toggle code folding"><svg class="mantle-code-fold-caret" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" fill-rule="evenodd" d="M3.22 5.97a.75.75 0 0 1 1.06 0L8 9.69l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.03a.75.75 0 0 1 0-1.06Z"/></svg></button><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> -</span><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> expressions</span><span style="color:var(--shiki-token-keyword)">:</span><span class="mantle-code-fold-ellipsis" data-slot="fold-ellipsis" aria-hidden="true">⋯</span></span></span><span class="mantle-code-line" data-line-number="10" data-fold-regions="1 9"><span class="mantle-code-line-number" data-slot="line-number">10</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> -</span><span style="color:var(--shiki-token-string-expression)"> "!actions.ngrok.oauth.identity.email.endsWith('@acme.com')"</span></span></span><span class="mantle-code-line" data-line-number="11" data-fold-regions="1 9"><span class="mantle-code-line-number" data-slot="line-number">11</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> actions</span><span style="color:var(--shiki-token-keyword)">:</span></span></span><span class="mantle-code-line" data-line-number="12" data-fold-regions="1 9"><span class="mantle-code-line-number" data-slot="line-number">12</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> -</span><span style="color:var(--shiki-token-property, var(--shiki-token-function))"> type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-variable, var(--shiki-foreground))"> deny</span></span></span></code></pre></div></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_6na55_-trigger-webhooks" hidden="" id="radix-_R_6na55_-content-webhooks" tabindex="0"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_6na55_-trigger-sso" hidden="" id="radix-_R_6na55_-content-sso" tabindex="0"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_6na55_-trigger-basic-auth" hidden="" id="radix-_R_6na55_-content-basic-auth" tabindex="0"></div></div></div></div><a href="https://dashboard.ngrok.com/traffic-inspector?utm_source=redirect&utm_medium=html&utm_campaign=equinox" id="whats-next-traffic-inspector" target="_blank" rel="noopener" class="group border-card bg-card relative flex items-start overflow-hidden rounded-xl border p-5 no-underline"><div class="relative z-10 flex flex-col gap-2 md:max-w-[48%]"><div 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" class="text-muted size-6 shrink-0"><path d="M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"></path></svg><p class="text-strong text-base leading-6 font-semibold">Inspect every detail of your traffic</p></div><p class="text-body text-sm leading-5">Watch the flow in real time, then dig into the headers, body, latency, response, and more for every request.</p></div><img src="/assets/download/traffic-inspector.png" alt="Traffic inspector showing live request paths, client IPs, and status codes" width="400" height="200" class="absolute right-[-10%] bottom-0 hidden w-85 opacity-85 md:block lg:top-3 lg:bottom-auto lg:w-100" loading="lazy" decoding="async"/><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 text-muted group-hover:text-strong absolute top-5 right-5 size-6"><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 href="https://ngrok.com/docs/agent/config?utm_source=redirect&utm_medium=html&utm_campaign=equinox" target="_blank" rel="noopener" id="whats-next-configure" class="group border-card bg-card relative block rounded-xl border p-5 no-underline"><div class="flex flex-col gap-2"><div 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" class="text-muted size-6 shrink-0"><path d="M226.76,69a8,8,0,0,0-12.84-2.88l-40.3,37.19-17.23-3.7-3.7-17.23,37.19-40.3A8,8,0,0,0,187,29.24,72,72,0,0,0,88,96,72.34,72.34,0,0,0,94,124.94L33.79,177c-.15.12-.29.26-.43.39a32,32,0,0,0,45.26,45.26c.13-.13.27-.28.39-.42L131.06,162A72,72,0,0,0,232,96,71.56,71.56,0,0,0,226.76,69ZM160,152a56.14,56.14,0,0,1-27.07-7,8,8,0,0,0-9.92,1.77L67.11,211.51a16,16,0,0,1-22.62-22.62L109.18,133a8,8,0,0,0,1.77-9.93,56,56,0,0,1,58.36-82.31l-31.2,33.81a8,8,0,0,0-1.94,7.1L141.83,108a8,8,0,0,0,6.14,6.14l26.35,5.66a8,8,0,0,0,7.1-1.94l33.81-31.2A56.06,56.06,0,0,1,160,152Z"></path></svg><p class="text-strong text-base leading-6 font-semibold">Configure your agent</p></div><p class="text-body text-sm leading-5">Configure settings like multiple endpoints, load balancing, and traffic transformation with Traffic Policy.</p></div><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 text-muted group-hover:text-strong absolute top-5 right-5 size-6"><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 class="border-card bg-card relative flex flex-col gap-5 rounded-xl border p-5"><div class="flex flex-col gap-2"><div class="flex flex-wrap 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" class="text-muted size-6 shrink-0"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm88,104a87.62,87.62,0,0,1-6.4,32.94l-44.7-27.49a15.92,15.92,0,0,0-6.24-2.23l-22.82-3.08a16.11,16.11,0,0,0-16,7.86h-8.72l-3.8-7.86a15.91,15.91,0,0,0-11-8.67l-8-1.73L96.14,104h16.71a16.06,16.06,0,0,0,7.73-2l12.25-6.76a16.62,16.62,0,0,0,3-2.14l26.91-24.34A15.93,15.93,0,0,0,166,49.1l-.36-.65A88.11,88.11,0,0,1,216,128ZM143.31,41.34,152,56.9,125.09,81.24,112.85,88H96.14a16,16,0,0,0-13.88,8l-8.73,15.23L63.38,84.19,74.32,58.32a87.87,87.87,0,0,1,69-17ZM40,128a87.53,87.53,0,0,1,8.54-37.8l11.34,30.27a16,16,0,0,0,11.62,10l21.43,4.61L96.74,143a16.09,16.09,0,0,0,14.4,9h1.48l-7.23,16.23a16,16,0,0,0,2.86,17.37l.14.14L128,205.94l-1.94,10A88.11,88.11,0,0,1,40,128Zm102.58,86.78,1.13-5.81a16.09,16.09,0,0,0-4-13.9,1.85,1.85,0,0,1-.14-.14L120,174.74,133.7,144l22.82,3.08,45.72,28.12A88.18,88.18,0,0,1,142.58,214.78Z"></path></svg><p class="text-strong text-base leading-6 font-semibold">Bring your own domain</p><span data-slot="badge" class="inline-flex w-fit shrink-0 cursor-default items-center gap-1 rounded px-1.5 py-0.5 font-medium text-xs font-sans bg-purple-500/20 text-purple-700">Paid feature</span></div><p class="text-body text-sm leading-5">Create a DNS CNAME record to use your own domain name for your endpoint URL.</p></div><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border border-gray-300 bg-base font-mono [&_svg]:shrink-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" data-copy-id="windows-custom-domain-copy" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="sh" data-mantle-line-number-start="1" data-mantle-line-numbers="false" id="_R_aina55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line" data-line-number="1"><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> http</span><span style="color:var(--shiki-token-constant)"> 8080</span><span style="color:var(--shiki-token-string)"> --url</span><span style="color:var(--shiki-token-string)"> https://app.acme.com</span></span></span></code></pre></div></div><a href="https://ngrok.com/docs/universal-gateway/custom-domains?utm_source=redirect&utm_medium=html&utm_campaign=equinox#how-to-use-a-custom-domain" target="_blank" rel="noopener" id="whats-next-custom-domain" aria-label="Custom domains documentation" class="group absolute top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 text-muted group-hover:text-strong size-6"><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 class="border-card bg-card relative flex flex-col gap-5 rounded-xl border p-5"><div class="flex flex-col gap-2"><div 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" class="text-muted size-6 shrink-0"><path d="M160,80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16V96A16,16,0,0,0,160,80Zm0,128H48V96H160ZM136,40a8,8,0,0,1,8-8h16a8,8,0,0,1,0,16H144A8,8,0,0,1,136,40Zm88,8v8a8,8,0,0,1-16,0V48h-8a8,8,0,0,1,0-16h8A16,16,0,0,1,224,48Zm0,48v16a8,8,0,0,1-16,0V96a8,8,0,0,1,16,0Zm0,56v8a16,16,0,0,1-16,16h-8a8,8,0,0,1,0-16h8v-8a8,8,0,0,1,16,0ZM80,56V48A16,16,0,0,1,96,32h8a8,8,0,0,1,0,16H96v8a8,8,0,0,1-16,0Z"></path></svg><p class="text-strong text-base leading-6 font-semibold">Run as background service</p></div><p class="text-body text-sm leading-5">Recover connectivity after unexpected software or hardware failures.</p></div><div data-slot="code-block" class="text-mono w-full overflow-hidden rounded-md border border-gray-300 bg-base font-mono [&_svg]:shrink-0"><div data-slot="code-block-body" class="relative"><span data-slot="code-block-copy-button" class="absolute right-3 top-3 z-10 inline-flex size-7 items-center justify-center rounded-[var(--icon-button-border-radius,0.375rem)] bg-base"><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 not-disabled:active:scale-97 ease-out transition-transform duration-150 size-7 text-strong focus-visible:ring-focus-accent not-disabled:hover:text-strong border-transparent bg-base not-disabled:hover:bg-neutral-500/15" data-appearance="ghost" data-disabled="false" data-icon-button="true" data-intent="neutral" data-loading="false" data-size="sm" data-copy-id="windows-bg-service-copy" type="button"><span class="sr-only">Copy code</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 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></span><pre data-slot="code-block-code" class="scrollbar overflow-x-auto overflow-y-hidden py-4 data-[mantle-line-numbers~='false']:pl-4 text-mono m-0 font-mono outline-hidden aria-collapsed:max-h-[13.6rem]" data-highlighted="true" data-lang="sh" data-mantle-line-number-start="1" data-mantle-line-numbers="true" id="_R_amna55_" style="--mantle-line-number-start:1;tab-size:2;-moz-tab-size:2px"><code class="text-size-inherit block min-w-full w-max"><span class="mantle-code-line" data-line-number="1"><span class="mantle-code-line-number" data-slot="line-number">1</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> service</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> --config</span><span style="color:var(--shiki-token-string)"> .</span><span style="color:var(--shiki-token-escape, var(--shiki-token-constant))">\n</span><span style="color:var(--shiki-token-string)">grok.yml</span></span></span><span class="mantle-code-line" data-line-number="2"><span class="mantle-code-line-number" data-slot="line-number">2</span><span class="mantle-code-line-content" data-slot="line-content"><span style="color:var(--shiki-token-function)">ngrok</span><span style="color:var(--shiki-token-string)"> service</span><span style="color:var(--shiki-token-string)"> start</span></span></span></code></pre></div></div><a href="https://ngrok.com/docs/agent/config/?utm_source=redirect&utm_medium=html&utm_campaign=equinox#running-as-a-service" target="_blank" rel="noopener" id="whats-next-bg-service" aria-label="Background service documentation" class="group absolute top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" data-slot="icon" class="shrink-0 text-muted group-hover:text-strong size-6"><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></div></div></div></div></div></main><div class="min-h-150"></div></div><script nonce="547333bfac9dd61f9000d9875c8ba2dc">((storageKey, restoreKey) => {
if (!window.history.state || !window.history.state.key) {
let key = Math.random().toString(32).slice(2);
window.history.replaceState({ key }, "");
}
try {
let storedY = JSON.parse(sessionStorage.getItem(storageKey) || "{}")[restoreKey || window.history.state.key];
if (typeof storedY === "number") window.scrollTo(0, storedY);
} catch (error) {
console.error(error);
sessionStorage.removeItem(storageKey);
}
})("react-router-scroll-positions", null)</script><script nonce="547333bfac9dd61f9000d9875c8ba2dc">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><script nonce="547333bfac9dd61f9000d9875c8ba2dc" type="module" async="">;
import * as route0 from "/assets/root-2WoXdoD-.js";
import * as route1 from "/assets/download-F1XrYMpW.js";
import * as route2 from "/assets/windows-UZcHVMSl.js";
window.__reactRouterManifest = {
"entry": {
"module": "/assets/entry.client-NJVqCC1C.js",
"imports": [
"/assets/react-mKr9-DnF.js",
"/assets/react-dom-DwDvjPh7.js",
"/assets/errorBoundaries-C2fIGB3h.js",
"/assets/jsx-runtime-DJVDe6nZ.js"
],
"css": []
},
"routes": {
"root": {
"id": "root",
"path": "",
"hasAction": false,
"hasLoader": true,
"hasClientAction": false,
"hasClientLoader": false,
"hasClientMiddleware": false,
"hasDefaultExport": true,
"hasErrorBoundary": true,
"module": "/assets/root-2WoXdoD-.js",
"imports": [
"/assets/react-mKr9-DnF.js",
"/assets/react-dom-DwDvjPh7.js",
"/assets/errorBoundaries-C2fIGB3h.js",
"/assets/jsx-runtime-DJVDe6nZ.js",
"/assets/lib-DWvBUaAd.js",
"/assets/href-DRCPjoOg.js",
"/assets/cx-IiQEAKf5-D2Qner4y.js",
"/assets/slot-DpNWVci8-BiRfDggI.js",
"/assets/icon-lZ48P8Nn-ByFz0kS3.js",
"/assets/anchor-3OGK2UKU-Cj-GJQK5.js",
"/assets/theme-BorfgnNh-Gg8qf-Ny.js",
"/assets/tooltip-Dnu35cjU-C6K4gXZ5.js",
"/assets/IconBase.es-73Cx980G.js",
"/assets/button-Cnja9Bsr-C9-Esc-g.js",
"/assets/button-IlxHhjPK-DK38yB5L.js",
"/assets/error-page-CsL4BESi.js",
"/assets/accordion-DwYFtP5C.js",
"/assets/CaretDown.es-Br3lTn0Z.js",
"/assets/hooks-ULMlvPl2.js",
"/assets/lazy-overlays-B6Qco391.js",
"/assets/separator-D0D6VyyM-CgIWy-Ug.js",
"/assets/ArrowRight.es-C-Q8cTEX.js",
"/assets/Briefcase.es-COrAcZu-.js",
"/assets/Buildings.es-DZ-FOjPX.js",
"/assets/CaretRight.es-CUFhZrKR.js",
"/assets/DownloadSimple.es-CDlcmAqs.js",
"/assets/FlowArrow.es-DKSYhWd9.js",
"/assets/Globe.es-DKraM0--.js",
"/assets/Graph.es-C69MTHy0.js",
"/assets/Heart.es-DFzxi2Rz.js",
"/assets/PlugsConnected.es-D0pptNyV.js",
"/assets/ShareFat.es-jsfibyd0.js",
"/assets/ShieldCheck.es-Cm3or4ZD.js",
"/assets/Sparkle.es-D-3ayher.js",
"/assets/TerminalWindow.es-B4U_B6zP.js",
"/assets/WebhooksLogo.es-D49joZAs.js",
"/assets/X.es-CBKQvcax.js",
"/assets/attribution-DJhuyg_1.js",
"/assets/kubernetes-Ct-R-M5r.js",
"/assets/docs-link-B2VBZFy1.js",
"/assets/posthog-BLZ1OV7u.js",
"/assets/dashboard-link-VijLValR.js",
"/assets/glow-cta-anchor-C_wNHpPH.js",
"/assets/dist-CJa-WViy.js",
"/assets/dist-U2ywhtn9.js",
"/assets/dist-ColaSUru.js",
"/assets/CircleNotch.es-TE0_U1wH.js",
"/assets/clsx-DUGZgXfJ-BZfiPIcu.js",
"/assets/rainbow-gradient-blur-DyyhVxCA.js",
"/assets/rainbow-text-C9X4lAFC.js",
"/assets/compose-refs-BdBMM9ga-DQRE0ZhI.js",
"/assets/browser-only-CmEEzfU3-DUQc-T6K.js",
"/assets/types-D85fCNV3-DOc6skV4.js"
],
"css": [
"/assets/root-B1EZqp0-.css"
]
},
"routes/download": {
"id": "routes/download",
"parentId": "root",
"path": "download",
"hasAction": false,
"hasLoader": true,
"hasClientAction": false,
"hasClientLoader": false,
"hasClientMiddleware": false,
"hasDefaultExport": true,
"hasErrorBoundary": false,
"module": "/assets/download-F1XrYMpW.js",
"imports": [
"/assets/errorBoundaries-C2fIGB3h.js",
"/assets/lib-DWvBUaAd.js",
"/assets/href-DRCPjoOg.js",
"/assets/jsx-runtime-DJVDe6nZ.js",
"/assets/cx-IiQEAKf5-D2Qner4y.js",
"/assets/icon-lZ48P8Nn-ByFz0kS3.js",
"/assets/rainbow-gradient-blur-DyyhVxCA.js",
"/assets/Sparkle.es-D-3ayher.js",
"/assets/kubernetes-Ct-R-M5r.js",
"/assets/apple-CACoHuFE.js",
"/assets/docker-d3ha5u0B.js",
"/assets/windows-CDjNhICx.js",
"/assets/free-bsd-BseYUSD5.js",
"/assets/golang-Cf6U45_v.js",
"/assets/java-KheQi5Rx.js",
"/assets/linux-C-e4fx-y.js",
"/assets/node-js-BP-_x34X.js",
"/assets/python-CQnDzRd2.js",
"/assets/raspberry-pi-CEi48i3j.js",
"/assets/rust-yUUZuTG8.js",
"/assets/react-mKr9-DnF.js",
"/assets/IconBase.es-73Cx980G.js"
],
"css": []
},
"routes/download/windows": {
"id": "routes/download/windows",
"parentId": "routes/download",
"path": "windows",
"hasAction": false,
"hasLoader": false,
"hasClientAction": false,
"hasClientLoader": false,
"hasClientMiddleware": false,
"hasDefaultExport": true,
"hasErrorBoundary": false,
"module": "/assets/windows-UZcHVMSl.js",
"imports": [
"/assets/react-mKr9-DnF.js",
"/assets/errorBoundaries-C2fIGB3h.js",
"/assets/lib-DWvBUaAd.js",
"/assets/jsx-runtime-DJVDe6nZ.js",
"/assets/cx-IiQEAKf5-D2Qner4y.js",
"/assets/icon-lZ48P8Nn-ByFz0kS3.js",
"/assets/anchor-3OGK2UKU-Cj-GJQK5.js",
"/assets/tooltip-Dnu35cjU-C6K4gXZ5.js",
"/assets/button-Cnja9Bsr-C9-Esc-g.js",
"/assets/code-block-Bl3JNF58.js",
"/assets/ArrowSquareOut.es-B7CbfOZ7.js",
"/assets/whats-next-BK7fsabV.js",
"/assets/Confetti.es-vmlcLceY.js",
"/assets/DownloadSimple.es-CDlcmAqs.js",
"/assets/badge-CA_VSluu.js",
"/assets/docs-link-B2VBZFy1.js",
"/assets/dashboard-link-VijLValR.js",
"/assets/detect-platform-8lJkVdC7.js",
"/assets/windows-CDjNhICx.js",
"/assets/tabs-CqwaJoML.js",
"/assets/popover-CQ9s7jG5-CufHwWFZ.js",
"/assets/get-download-url-DhUsMpSe.js",
"/assets/slot-DpNWVci8-BiRfDggI.js",
"/assets/dist-CJa-WViy.js",
"/assets/dist-U2ywhtn9.js",
"/assets/react-dom-DwDvjPh7.js",
"/assets/dist-ColaSUru.js",
"/assets/CircleNotch.es-TE0_U1wH.js",
"/assets/clsx-DUGZgXfJ-BZfiPIcu.js",
"/assets/IconBase.es-73Cx980G.js",
"/assets/button-IlxHhjPK-DK38yB5L.js",
"/assets/compose-refs-BdBMM9ga-DQRE0ZhI.js",
"/assets/CaretDown.es-Br3lTn0Z.js",
"/assets/use-copy-to-clipboard-CSyp4Zk0-B8jcAICT.js",
"/assets/Check.es-DiQ8uQFa.js",
"/assets/Copy.es-C6aRtVii.js",
"/assets/dist-C33IgvKv.js",
"/assets/browser-only-CmEEzfU3-DUQc-T6K.js",
"/assets/dist-BQrqDcpN.js",
"/assets/separator-D0D6VyyM-CgIWy-Ug.js",
"/assets/ArrowRight.es-C-Q8cTEX.js",
"/assets/ArrowsClockwise.es-Dg_XOk9w.js",
"/assets/GlobeHemisphereWest.es-usYnINFp.js",
"/assets/MagnifyingGlass.es-MRPAm9u7.js",
"/assets/Password.es-D4fpgYCV.js",
"/assets/ShieldCheck.es-Cm3or4ZD.js",
"/assets/Wrench.es-BSOdLpBn.js",
"/assets/json-ld-BN-Od0KQ.js",
"/assets/title-CKh4bC0_.js",
"/assets/types-DSVrpYtu.js",
"/assets/card-Da4Fem34.js",
"/assets/field-Bpptk_9t-CyAM7um0.js",
"/assets/label-D-D11mlp-SZZM4m4e.js",
"/assets/Combination-CtneY0Yr.js",
"/assets/attribution-DJhuyg_1.js",
"/assets/href-DRCPjoOg.js",
"/assets/use-prefers-reduced-motion-Bk5zAfHY-DtMqPRk5.js"
],
"css": []
},
"routes/_index": {
"id": "routes/_index",
"parentId": "root",
"index": true,
"hasAction": false,
"hasLoader": false,
"hasClientAction": false,
"hasClientLoader": false,
"hasClientMiddleware": false,
"hasDefaultExport": true,
"hasErrorBoundary": false,
"module": "/assets/_index-DTspgl7Q.js",
"imports": [
"/assets/errorBoundaries-C2fIGB3h.js",
"/assets/lib-DWvBUaAd.js",
"/assets/href-DRCPjoOg.js",
"/assets/jsx-runtime-DJVDe6nZ.js",
"/assets/cx-IiQEAKf5-D2Qner4y.js",
"/assets/icon-lZ48P8Nn-ByFz0kS3.js",
"/assets/tooltip-Dnu35cjU-C6K4gXZ5.js",
"/assets/button-Cnja9Bsr-C9-Esc-g.js",
"/assets/button-IlxHhjPK-DK38yB5L.js",
"/assets/rainbow-gradient-blur-DyyhVxCA.js",
"/assets/rainbow-text-C9X4lAFC.js",
"/assets/ArrowRight.es-C-Q8cTEX.js",
"/assets/CheckCircle.es-BTnDMqqs.js",
"/assets/Globe.es-DKraM0--.js",
"/assets/Sparkle.es-D-3ayher.js",
"/assets/posthog-BLZ1OV7u.js",
"/assets/dashboard-link-VijLValR.js",
"/assets/glow-cta-anchor-C_wNHpPH.js",
"/assets/json-ld-BN-Od0KQ.js",
"/assets/title-CKh4bC0_.js",
"/assets/decorative-svg-CganTkKn.js",
"/assets/logo-loop-CAZbgeVG.js",
"/assets/scroll-depth-tracker-Ixsa6D2d.js",
"/assets/spotlight-card-4JETvuFx.js",
"/assets/types-DSVrpYtu.js",
"/assets/testimonials-section-D5ZVuoC9.js",
"/assets/react-mKr9-DnF.js",
"/assets/slot-DpNWVci8-BiRfDggI.js",
"/assets/dist-CJa-WViy.js",
"/assets/dist-U2ywhtn9.js",
"/assets/react-dom-DwDvjPh7.js",
"/assets/dist-ColaSUru.js",
"/assets/CircleNotch.es-TE0_U1wH.js",
"/assets/clsx-DUGZgXfJ-BZfiPIcu.js",
"/assets/IconBase.es-73Cx980G.js",
"/assets/browser-only-CmEEzfU3-DUQc-T6K.js",
"/assets/attribution-DJhuyg_1.js",
"/assets/types-D85fCNV3-DOc6skV4.js",
"/assets/anchor-3OGK2UKU-Cj-GJQK5.js",
"/assets/use-prefers-reduced-motion-Bk5zAfHY-DtMqPRk5.js",
"/assets/use-copy-to-clipboard-CSyp4Zk0-B8jcAICT.js",
"/assets/hooks-ULMlvPl2.js",
"/assets/Check.es-DiQ8uQFa.js",
"/assets/Copy.es-C6aRtVii.js",
"/assets/DotsThree.es-Bf22wi87.js",
"/assets/ShareFat.es-jsfibyd0.js",
"/assets/detect-platform-8lJkVdC7.js",
"/assets/apple-CACoHuFE.js",
"/assets/docker-d3ha5u0B.js",
"/assets/windows-CDjNhICx.js",
"/assets/dist-C33IgvKv.js",
"/assets/love-card-CFTwTWP5.js",
"/assets/dist-BQrqDcpN.js",
"/assets/card-Da4Fem34.js"
],
"css": []
}
},
"url": "/assets/manifest-403c156d.js",
"version": "403c156d"
};
window.__reactRouterRouteModules = {"root":route0,"routes/download":route1,"routes/download/windows":route2};
import("/assets/entry.client-NJVqCC1C.js");</script><!--$--><script nonce="547333bfac9dd61f9000d9875c8ba2dc">window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{\"_5\":6,\"_7\":8},\"actionData\",\"errors\",\"root\",{\"_9\":10,\"_11\":12,\"_13\":14,\"_15\":16,\"_17\":18,\"_19\":20,\"_21\":-7},\"routes/download\",{},\"appVersion\",\"6a751536\",\"rumEnabled\",true,\"gtmId\",\"GTM-P4F37ZW\",\"ketchTagId\",\"ngrok_ketch_tag\",\"postHogKey\",\"phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ\",\"postHogHost\",\"https://e.ngrok.com\",\"postHogUiHost\"]\n");</script><!--$--><script nonce="547333bfac9dd61f9000d9875c8ba2dc">window.__reactRouterContext.streamController.close();</script><!--/$--><!--/$--></body></html>