CINXE.COM

Get started with edge function injection | 2.23.3

<!DOCTYPE html><html lang="en" dir="ltr" data-has-toc data-has-sidebar data-theme="dark" class="astro-2yxxy2tc"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Get started with edge function injection | 2.23.3</title><link rel="canonical" href="https://www.netlify.com/sdk/edge-functions/get-started/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,500,700,400italic|Roboto+Mono:400"/><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NMKKF2M');</script><link rel="sitemap" href="/sitemap-index.xml"/><link rel="shortcut icon" href="/sdk/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v4.16.18"/><meta name="generator" content="Starlight v0.28.1"/><meta property="og:title" content="Get started with edge function injection"/><meta property="og:type" content="article"/><meta property="og:url" content="https://www.netlify.com/sdk/edge-functions/get-started/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Learn how to create an extension that injects edge functions, the limitations, and how edge functions are invoked in the consuming site."/><meta property="og:site_name" content="2.23.3"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Learn how to create an extension that injects edge functions, the limitations, and how edge functions are invoked in the consuming site."/><meta property="og:image" content="https://www.netlify.com/sdk/sdk-og.png"/><meta name="twitter:image" content="https://www.netlify.com/sdk/sdk-og.png"/><meta name="slack-app-id" content="A05P27DR8C8"/><script> window.StarlightThemeProvider = (() => { const storedTheme = typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme'); const theme = storedTheme || (window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'); document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark'; return { updatePickers(theme = storedTheme || 'auto') { document.querySelectorAll('starlight-theme-select').forEach((picker) => { const select = picker.querySelector('select'); if (select) select.value = theme; /** @type {HTMLTemplateElement | null} */ const tmpl = document.querySelector(`#theme-icons`); const newIcon = tmpl && tmpl.content.querySelector('.' + theme); if (newIcon) { const oldIcon = picker.querySelector('svg.label-icon'); if (oldIcon) { oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes); } } }); }, }; })(); </script><template id="theme-icons"><svg aria-hidden="true" class="light astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/_astro/index.DiUrxZYH.css"> <style>:root{--sl-badge-default-border: var(--sl-color-accent);--sl-badge-default-bg: var(--sl-color-accent-low);--sl-badge-default-text: #fff;--sl-badge-note-border: var(--sl-color-blue);--sl-badge-note-bg: var(--sl-color-blue-low);--sl-badge-note-text: #fff;--sl-badge-danger-border: var(--sl-color-red);--sl-badge-danger-bg: var(--sl-color-red-low);--sl-badge-danger-text: #fff;--sl-badge-success-border: var(--sl-color-green);--sl-badge-success-bg: var(--sl-color-green-low);--sl-badge-success-text: #fff;--sl-badge-caution-border: var(--sl-color-orange);--sl-badge-caution-bg: var(--sl-color-orange-low);--sl-badge-caution-text: #fff;--sl-badge-tip-border: var(--sl-color-purple);--sl-badge-tip-bg: var(--sl-color-purple-low);--sl-badge-tip-text: #fff}[data-theme=light]:root{--sl-badge-default-bg: var(--sl-color-accent-high);--sl-badge-note-bg: var(--sl-color-blue-high);--sl-badge-danger-bg: var(--sl-color-red-high);--sl-badge-success-bg: var(--sl-color-green-high);--sl-badge-caution-bg: var(--sl-color-orange-high);--sl-badge-tip-bg: var(--sl-color-purple-high)}.sl-badge:where(.astro-fnxivpkf){display:inline-block;border:1px solid var(--sl-color-border-badge);border-radius:.25rem;font-family:var(--sl-font-system-mono);line-height:normal;color:var(--sl-color-text-badge);background-color:var(--sl-color-bg-badge);overflow-wrap:anywhere}.sidebar-content .sl-badge:where(.astro-fnxivpkf){line-height:1;font-size:var(--sl-text-xs);padding:.125rem .375rem}.sidebar-content a[aria-current=page]>.sl-badge:where(.astro-fnxivpkf){--sl-color-bg-badge: transparent;--sl-color-border-badge: currentColor;color:inherit}.default:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-default-bg);--sl-color-border-badge: var(--sl-badge-default-border);--sl-color-text-badge: var(--sl-badge-default-text)}.note:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-note-bg);--sl-color-border-badge: var(--sl-badge-note-border);--sl-color-text-badge: var(--sl-badge-note-text)}.danger:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-danger-bg);--sl-color-border-badge: var(--sl-badge-danger-border);--sl-color-text-badge: var(--sl-badge-danger-text)}.success:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-success-bg);--sl-color-border-badge: var(--sl-badge-success-border);--sl-color-text-badge: var(--sl-badge-success-text)}.tip:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-tip-bg);--sl-color-border-badge: var(--sl-badge-tip-border);--sl-color-text-badge: var(--sl-badge-tip-text)}.caution:where(.astro-fnxivpkf){--sl-color-bg-badge: var(--sl-badge-caution-bg);--sl-color-border-badge: var(--sl-badge-caution-border);--sl-color-text-badge: var(--sl-badge-caution-text)}.small:where(.astro-fnxivpkf){font-size:var(--sl-text-xs);padding:.125rem .25rem}.medium:where(.astro-fnxivpkf){font-size:var(--sl-text-sm);padding:.175rem .35rem}.large:where(.astro-fnxivpkf){font-size:var(--sl-text-base);padding:.225rem .45rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) .sl-badge:where(.astro-fnxivpkf){vertical-align:middle} svg:where(.astro-2nn42ynm){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em} starlight-tabs:where(.astro-fgycviln){display:block}.tablist-wrapper:where(.astro-fgycviln){overflow-x:auto}:where(.astro-fgycviln)[role=tablist]{display:flex;list-style:none;border-bottom:2px solid var(--sl-color-gray-5);padding:0}.tab:where(.astro-fgycviln){margin-bottom:-2px}.tab:where(.astro-fgycviln)>:where(.astro-fgycviln)[role=tab]{display:flex;align-items:center;gap:.5rem;padding:0 1.25rem;text-decoration:none;border-bottom:2px solid var(--sl-color-gray-5);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial}.tab:where(.astro-fgycviln) :where(.astro-fgycviln)[role=tab][aria-selected=true]{color:var(--sl-color-white);border-color:var(--sl-color-text-accent);font-weight:600}.tablist-wrapper:where(.astro-fgycviln)~[role=tabpanel]{margin-top:1rem} .sl-steps{--bullet-size: calc(var(--sl-line-height) * 1rem);--bullet-margin: .375rem;list-style:none;counter-reset:steps-counter var(--sl-steps-start, 0);padding-inline-start:0}.sl-steps>li{counter-increment:steps-counter;position:relative;padding-inline-start:calc(var(--bullet-size) + 1rem);padding-bottom:1px;min-height:calc(var(--bullet-size) + var(--bullet-margin))}.sl-steps>li+li{margin-top:0}.sl-steps>li:before{content:counter(steps-counter);position:absolute;top:0;inset-inline-start:0;width:var(--bullet-size);height:var(--bullet-size);line-height:var(--bullet-size);font-size:var(--sl-text-xs);font-weight:600;text-align:center;color:var(--sl-color-white);background-color:var(--sl-color-gray-6);border-radius:99rem;box-shadow:inset 0 0 0 1px var(--sl-color-gray-5)}.sl-steps>li:after{--guide-width: 1px;content:"";position:absolute;top:calc(var(--bullet-size) + var(--bullet-margin));bottom:var(--bullet-margin);inset-inline-start:calc((var(--bullet-size) - var(--guide-width)) / 2);width:var(--guide-width);background-color:var(--sl-color-hairline-light)}.sl-steps>li>:first-child{--lh: calc(1em * var(--sl-line-height));--shift-y: calc(.5 * (var(--bullet-size) - var(--lh)));transform:translateY(var(--shift-y));margin-bottom:var(--shift-y)}.sl-steps>li>:first-child:where(h1,h2,h3,h4,h5,h6){--lh: calc(1em * var(--sl-line-height-headings))}@supports (--prop: 1lh){.sl-steps>li>:first-child{--lh: 1lh}} .sl-link-button:where(.astro-zen7zwuc){align-items:center;border:1px solid transparent;border-radius:999rem;display:inline-flex;font-size:var(--sl-text-sm);gap:.5em;line-height:1.1875;outline-offset:.25rem;padding:.4375rem 1.125rem;text-decoration:none}.sl-link-button:where(.astro-zen7zwuc).primary{background:var(--sl-color-text-accent);border-color:var(--sl-color-text-accent);color:var(--sl-color-black)}.sl-link-button:where(.astro-zen7zwuc).primary:hover{color:var(--sl-color-black)}.sl-link-button:where(.astro-zen7zwuc).secondary{border-color:inherit;color:var(--sl-color-white)}.sl-link-button:where(.astro-zen7zwuc).minimal{color:var(--sl-color-white);padding-inline:0}.sl-link-button:where(.astro-zen7zwuc) svg{flex-shrink:0}@media (min-width: 50rem){.sl-link-button:where(.astro-zen7zwuc){font-size:var(--sl-text-base);padding:.9375rem 1.25rem}}.sl-markdown-content .sl-link-button:where(.astro-zen7zwuc){margin-inline-end:1rem}.sl-markdown-content .sl-link-button:where(.astro-zen7zwuc):not(:where(p *)){margin-block:1rem} </style><script type="module" src="/_astro/hoisted.DNXxk2ll.js"></script> <script type="module" src="/_astro/page.7qqag-5g.js"></script><style>div:where(.astro-fr5qezfu){border:1px solid var(--colorGrayLight);color:var(--colorTextMutedInverse);border-radius:var(--bigRadius);box-shadow:0 2px 4px #0e1e251f;padding:.4rem .6rem;margin-top:.8rem;width:-moz-fit-content;width:fit-content;[data-theme=dark] &{border-color:var(--colorGray)}}:root div:where(.astro-fr5qezfu){font-size:var(--defaultText)}:root .beta-badge:where(.astro-fr5qezfu){color:var(--colorWarningText);background-color:var(--colorWarningLight);padding-left:6px;padding-right:6px;border-radius:40px;text-decoration:none;font-weight:var(--bold);[data-theme=dark] &{color:var(--facetsGold200)}}:root .beta-badge:where(.astro-fr5qezfu):hover{color:var(--colorWarning);text-decoration:underline} </style><style>div:where(.astro-taqzzmlm){border:1px solid var(--colorGrayLight);border-radius:var(--bigRadius);box-shadow:0 2px 4px #0e1e251f;padding:.4rem .6rem;margin-top:.8rem;width:-moz-fit-content;width:fit-content}:root div:where(.astro-taqzzmlm){font-size:var(--defaultText)}:root .beta-badge:where(.astro-taqzzmlm){color:var(--colorWarningText);background-color:var(--colorWarningLight);padding-left:6px;padding-right:6px;border-radius:40px;text-decoration:none;font-weight:var(--bold)}:root .beta-badge:where(.astro-taqzzmlm):hover{color:var(--colorWarning);text-decoration:underline} </style><style>:root[data-theme=dark] #svg-downvote circle{fill:var(--facetsRed900)}:root[data-theme=dark] #svg-downvote circle:hover{fill:var(--facetsRed800)}:root[data-theme=dark] #svg-downvote path{color:var(--facetsRed400)}:root[data-theme=dark] #downvote:checked+label #svg-downvote circle{fill:var(--facetsRed800)}#svg-downvote path{color:#6b2120}#svg-downvote circle{fill:var(--facetsRed000)}#svg-downvote circle:hover{fill:var(--facetsRed100)}#downvote:checked+label #svg-downvote circle{fill:var(--facetsRed400)} </style><style>#none:where(.astro-77rygnu7){display:none}#upvote:where(.astro-77rygnu7),#downvote:where(.astro-77rygnu7){height:0;opacity:0;position:absolute;width:0}#upvote:where(.astro-77rygnu7),#downvote:where(.astro-77rygnu7)+svg:where(.astro-77rygnu7){cursor:pointer}.vote-button:where(.astro-77rygnu7){align-items:center;background:transparent;border:none;cursor:pointer;display:flex;height:100%;justify-content:center;margin:10px;padding:0;width:100%}form:where(.astro-77rygnu7)[name=feedback] .votes:where(.astro-77rygnu7){display:flex;margin-top:0}.feedback:where(.astro-77rygnu7){align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}textarea:where(.astro-77rygnu7){background-color:var(--colorBg);border:1px solid var(--colorBorder);border-radius:var(--bigRadius);margin:1.25rem 0;min-height:130px;padding:.5rem 1rem;transition:box-shadow ease-in-out var(--transitionDuration);width:100%}textarea:where(.astro-77rygnu7):focus{box-shadow:0 0 0 2px var(--colorTeal),0 0 1px 0 var(--colorGrayDarkest);outline:2px solid transparent}form:where(.astro-77rygnu7)[name=feedback] .form-submit:where(.astro-77rygnu7){background-color:var(--colorButtonSecondary);border:none;border-radius:var(--smallRadius);color:var(--colorButtonSecondaryText);cursor:pointer;font-family:var(--fontFamilyHeading);font-size:var(--defaultText);font-weight:600;line-height:1;margin:0;min-width:20%;padding:.75rem 1.5rem;transition:all var(--transitionDurationShort)}form:where(.astro-77rygnu7)[name=feedback] .form-submit:where(.astro-77rygnu7):hover{background-color:var(--colorButtonSecondaryHover)}form:where(.astro-77rygnu7)[name=feedback] .form-submit:where(.astro-77rygnu7):disabled{background-color:var(--colorButtonTertiary);color:var(--colorTextNeutral);cursor:not-allowed}form:where(.astro-77rygnu7)[name=feedback],.success-message:where(.astro-77rygnu7){border-top:1px solid var(--sl-color-hairline);margin-top:3rem;padding:1.5rem 0}form:where(.astro-77rygnu7)[name=feedback] .feedback:where(.astro-77rygnu7) h4:where(.astro-77rygnu7),.success-message:where(.astro-77rygnu7) h4:where(.astro-77rygnu7){font-family:var(--sl-font-system);font-size:1.25rem;font-weight:600;margin:1em 0}form:where(.astro-77rygnu7)[name=feedback] .feedback:where(.astro-77rygnu7) p:where(.astro-77rygnu7),.success-message:where(.astro-77rygnu7) p:where(.astro-77rygnu7){margin:0 0 .75rem}.hidden:where(.astro-77rygnu7){visibility:hidden}.success-message:where(.astro-77rygnu7){display:none} </style><style>footer:where(.astro-sz7xmlte){border-top:1px solid var(--sl-color-hairline);padding:1rem 0}.footer_nav:where(.astro-sz7xmlte){list-style-type:none;display:flex;padding-inline-start:0;justify-content:center}.footer_nav:where(.astro-sz7xmlte) li:where(.astro-sz7xmlte){margin:.25rem 1rem 1rem 0;font-size:15px}.footer_nav:where(.astro-sz7xmlte) li:where(.astro-sz7xmlte) a:where(.astro-sz7xmlte){color:var(--sl-color-text);text-decoration:none}.footer_copyright:where(.astro-sz7xmlte){font-size:15px;text-align:center} </style><style>.netlify-panel:where(.astro-vweeohgf){line-height:1.15;border-left-style:solid;border-left-width:var(--micro);margin:var(--tiny) 0;padding:var(--tiny) var(--small) var(--micro);border-radius:8px;&.warning{background-color:var(--colorWarningLight);border-color:var(--colorWarning);.title,.panel-content,#question-icon{color:var(--colorWarningText)}& p a{color:var(--colorWarningText)}}&.note{background-color:var(--colorNoteLight);border-color:var(--colorNote);.title,.panel-content,#question-icon{color:var(--colorNoteText)}& p a{color:var(--colorNoteText)}}&.tip{background-color:var(--colorTipLight);border-color:var(--colorTip);.title,.panel-content,#question-icon{color:var(--colorTipText)}& p a{color:var(--colorTipText)}}&.danger{background-color:var(--colorDangerLight);border-color:var(--colorDanger);.title,.panel-content,#question-icon{color:var(--colorDangerText)}& p a{color:var(--colorDangerText)}}}.title:where(.astro-vweeohgf){display:flex;font-weight:var(--semibold);font-size:var(--defaultText)}.panel-content:where(.astro-vweeohgf){line-height:1.67;margin-top:var(--micro);margin-bottom:var(--micro);word-wrap:break-word;font-size:var(--smallText)}#icon:where(.astro-vweeohgf){margin-right:.5rem;height:1.3rem;width:1.3rem} </style><style>:root[data-theme=dark] #svg-upvote circle{fill:var(--facetsTeal900)}:root[data-theme=dark] #svg-upvote path{color:var(--facetsTeal200)}:root[data-theme=dark] #svg-upvote circle:hover{fill:var(--facetsTeal700)}:root[data-theme=dark] #upvote:checked+label #svg-upvote circle{fill:var(--facetsTeal700)}#svg-upvote path{color:#145f69}#svg-upvote circle{fill:var(--facetsTeal000)}#svg-upvote circle:hover{fill:var(--facetsTeal100)}#upvote:checked+label #svg-upvote circle{fill:var(--facetsTeal400)} </style><script src="/_astro/FeedbackForm.astro_astro_type_script_index_0_lang.CxPg6FTE.js" type="module"></script><script src="/_astro/Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js" type="module"></script></head> <body class="astro-2yxxy2tc"> <a href="#_top" class="astro-un6n26nc">Skip to content</a> <div class="page sl-flex astro-orpkluty"> <header class="header astro-orpkluty"><div class="header sl-flex astro-escs5d3c"> <div class="title-wrapper sl-flex astro-escs5d3c"> <a href="/" class="site-title sl-flex astro-qqwfsgyo"> <img class="light:sl-hidden astro-qqwfsgyo" alt="Netlify SDK Docs" src="/_astro/logo-dark.CGIhDU-N.svg" width="133" height="40"> <img class="dark:sl-hidden astro-qqwfsgyo" alt="Netlify SDK Docs" src="/_astro/logo-light.Dzqm5Mvw.svg" width="133" height="40"> <span class="astro-qqwfsgyo"> 2.23.3 </span> </a> </div> <div class="sl-flex astro-escs5d3c"> <site-search data-translations="{&#34;placeholder&#34;:&#34;Search&#34;}" class="astro-otpdt6jm"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-otpdt6jm"> <svg aria-hidden="true" class="astro-otpdt6jm astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-otpdt6jm" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-otpdt6jm" style="display: none;"> <kbd class="astro-otpdt6jm">Ctrl</kbd><kbd class="astro-otpdt6jm">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-otpdt6jm"> <div class="dialog-frame sl-flex astro-otpdt6jm"> <button data-close-modal class="sl-flex md:sl-hidden astro-otpdt6jm"> Cancel </button> <div class="search-container astro-otpdt6jm"> <div id="starlight__search" class="astro-otpdt6jm"></div> </div> </div> </dialog> </site-search> <script> (() => { const openBtn = document.querySelector("button[data-open-modal]"); const shortcut = openBtn?.querySelector("kbd"); if (!openBtn || !(shortcut instanceof HTMLElement)) return; const platformKey = shortcut.querySelector("kbd"); if (platformKey && /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) { platformKey.textContent = "⌘"; openBtn.setAttribute("aria-keyshortcuts", "Meta+K"); } shortcut.style.display = ""; })(); </script> </div> <div class="sl-hidden md:sl-flex right-group astro-escs5d3c"> <div class="sl-flex social-icons astro-escs5d3c"> <a href="https://developers.netlify.com/feed/tag/sdk" class="external-link astro-aycwkagb" target="_blank">Changelog</a> </div> <starlight-theme-select> <label style="--sl-select-width: 6.25em" class="astro-t62vsnnj"> <span class="sr-only astro-t62vsnnj">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-t62vsnnj astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select value="auto" class="astro-t62vsnnj"> <option value="dark" class="astro-t62vsnnj">Dark</option><option value="light" class="astro-t62vsnnj">Light</option><option value="auto" selected class="astro-t62vsnnj">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-t62vsnnj astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select> <script> StarlightThemeProvider.updatePickers(); </script> </div> </div> </header> <nav class="sidebar astro-orpkluty" aria-label="Main"> <starlight-menu-button class="astro-jlihn6fg"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-jlihn6fg"> <svg aria-hidden="true" class="astro-jlihn6fg astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> </button> </starlight-menu-button> <div id="starlight__sidebar" class="sidebar-pane astro-orpkluty"> <div class="sidebar-content sl-flex astro-orpkluty"> <sl-sidebar-state-persist data-hash="0zy4z1g" class="astro-gw3ex3m2"> <script> (() => { try { if (!matchMedia('(min-width: 50em)').matches) return; /** @type {HTMLElement | null} */ const target = document.querySelector('sl-sidebar-state-persist'); const state = JSON.parse(sessionStorage.getItem('sl-sidebar-state') || '0'); if (!target || !state || target.dataset.hash !== state.hash) return; window._starlightScrollRestore = state.scroll; customElements.define( 'sl-sidebar-restore', class SidebarRestore extends HTMLElement { connectedCallback() { try { const idx = parseInt(this.dataset.index || ''); const details = this.closest('details'); if (details && typeof state.open[idx] === 'boolean') details.open = state.open[idx]; } catch {} } } ); } catch {} })(); </script> <ul class="top-level astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="https://docs.netlify.com/" class="large external-link astro-a4avwkba" target="_blank" class="external-link"> <span class="astro-a4avwkba">Netlify user docs</span> </a> </li><li class="astro-a4avwkba"> <details open class="astro-a4avwkba"> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Get started</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/get-started/introduction" class="astro-a4avwkba"> <span class="astro-a4avwkba">Introduction</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/create-a-new-extension" class="astro-a4avwkba"> <span class="astro-a4avwkba">Create a new extension</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/anatomy-of-an-extension" class="astro-a4avwkba"> <span class="astro-a4avwkba">Anatomy of an extension</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/installation-flow" class="astro-a4avwkba"> <span class="astro-a4avwkba">Installation flow</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/environment-variables" class="astro-a4avwkba"> <span class="astro-a4avwkba">Environment variables</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/requirements-and-limitations" class="astro-a4avwkba"> <span class="astro-a4avwkba">Requirements &amp; limitations</span> </a> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="10"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Migration guide</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/get-started/migration-guide/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/get-started/migration-guide/migration-steps/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Step-by-step instructions</span> </a> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="1"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Connectors</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/connectors/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="11"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Develop</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/define-data-model/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Data model</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/sync-data/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Sync data</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/configuration-options/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Configuration options</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/check-permissions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Check permissions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/write-data/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Write data</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/manage-assets/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Manage assets</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/localization/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Localization</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/scheduled-publishing/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Scheduled publishing</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/develop/dynamic-connectors/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Dynamic connectors</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/build/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Build</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/connectors/debug-and-test/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Debug &amp; test</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="2"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Build event handlers</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/hook-into-events/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Hook into build events</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/values-and-methods/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Values &amp; methods</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/debug-and-test/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Debug &amp; test</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/build-event-handlers/migrate-build-plugins/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Migrate Build Plugins</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="3"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/functions/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/functions/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/functions/debug-and-test/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Debug &amp; test</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details open class="astro-a4avwkba"> <sl-sidebar-restore data-index="4"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Edge Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/edge-functions/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/edge-functions/get-started/" aria-current="page" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/edge-functions/debug-and-test/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Debug &amp; test</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="5"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Endpoints</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/endpoints/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/endpoints/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/endpoints/values-and-methods/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Values &amp; methods</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/endpoints/debug-and-test/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Debug &amp; test</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/endpoints/use-cases/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Use cases</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/endpoints/trpc/" class="astro-a4avwkba"> <span class="astro-a4avwkba">tRPC integration</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="6"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Extension UI</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/extension-ui/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/extension-ui/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/extension-ui/develop-locally/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Develop locally</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/extension-ui/add-a-new-surface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Add a new surface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/extension-ui/call-endpoints/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Call endpoints</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="7"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">OAuth</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/oauth/overview/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/oauth/get-started/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Get started</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/oauth/best-practices/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Best practices</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="8"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Publish and manage</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/publish/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/publish/publish-extensions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Publish extensions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/publish/manage-extensions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Manage extensions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/publish/partner-extensions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Partner extensions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/publish/deploy-to-netlify-button/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Deploy to Netlify button</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="9"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Reference docs</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/reference/overview" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <details open class="astro-a4avwkba"> <sl-sidebar-restore data-index="12"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">SDK</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="15"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Classes</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="20"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">NetlifyConnector</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Overview</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/assets/" class="astro-a4avwkba"> <span class="astro-a4avwkba">assets</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/documents/" class="astro-a4avwkba"> <span class="astro-a4avwkba">documents</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/hasaccess/" class="astro-a4avwkba"> <span class="astro-a4avwkba">hasAccess</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/init/" class="astro-a4avwkba"> <span class="astro-a4avwkba">init</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/model/" class="astro-a4avwkba"> <span class="astro-a4avwkba">model</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/proxyschema/" class="astro-a4avwkba"> <span class="astro-a4avwkba">proxySchema</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/scheduledactions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">scheduledActions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyconnector/sync/" class="astro-a4avwkba"> <span class="astro-a4avwkba">sync</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyextension/" class="astro-a4avwkba"> <span class="astro-a4avwkba">NetlifyExtension</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/classes/netlifyextensionclient/" class="astro-a4avwkba"> <span class="astro-a4avwkba">NetlifyExtensionClient</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/interfaces" class="astro-a4avwkba"> <span class="astro-a4avwkba">Interfaces</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/reference/commands" class="astro-a4avwkba"> <span class="astro-a4avwkba">Commands</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details open class="astro-a4avwkba"> <sl-sidebar-restore data-index="13"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">UI Endpoints</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="16"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">@netlify/sdk/ui/functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="21"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Type Aliases</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/type-aliases/netlifysdkcontext/" class="astro-a4avwkba"> <span class="astro-a4avwkba">NetlifySDKContext</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/type-aliases/netlifysdkhandler/" class="astro-a4avwkba"> <span class="astro-a4avwkba">NetlifySDKHandler</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="22"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/functions/withnetlifysdkcontext/" class="astro-a4avwkba"> <span class="astro-a4avwkba">withNetlifySDKContext</span> </a> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="17"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">@netlify/sdk/ui/functions/trpc</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="23"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Type Aliases</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/type-aliases/connectrouter/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ConnectRouter</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/type-aliases/context/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Context</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/type-aliases/createconnectrouteroptions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CreateConnectRouterOptions</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/type-aliases/createnetlifytrpchandleroptions/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CreateNetlifyTRPCHandlerOptions</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="24"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/functions/createconnectrouter/" class="astro-a4avwkba"> <span class="astro-a4avwkba">createConnectRouter</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api-endpoints/netlify/sdk/ui/functions/trpc/functions/createnetlifytrpchandler/" class="astro-a4avwkba"> <span class="astro-a4avwkba">createNetlifyTRPCHandler</span> </a> </li> </ul> </details> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details open class="astro-a4avwkba"> <sl-sidebar-restore data-index="14"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">React</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="18"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">@netlify/sdk/ui/react</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="25"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Enumerations</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/enumerations/surfaces/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Surfaces</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="26"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/functions/usenetlifyextensionuifetch/" class="astro-a4avwkba"> <span class="astro-a4avwkba">useNetlifyExtensionUIFetch</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/functions/usenetlifysdk/" class="astro-a4avwkba"> <span class="astro-a4avwkba">useNetlifySDK</span> </a> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="19"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">@netlify/sdk/ui/react/components</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="27"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Type Aliases</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/alertprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">AlertProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/buttongroupprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ButtonGroupProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/buttonprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ButtonProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/cardfooterprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardFooterProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/cardprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/cardtitleprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardTitleProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/checkboxprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CheckboxProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/clipboardbuttonprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ClipboardButtonProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/codeblockprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CodeBlockProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/connectconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ConnectConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/connectedconnectformprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ConnectedConnectFormProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/decorativeiconprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">DecorativeIconProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/dropdownprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">DropdownProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/extensionsettingsprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ExtensionSettingsProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/formerrorprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">FormErrorProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/linkprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">LinkProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/listloaderprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ListLoaderProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/netlifyextensionuiprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">NetlifyExtensionUIProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/selectprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SelectProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/settingscardprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SettingsCardProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/siteaccessconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteAccessConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitebuilddeployconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteBuildDeployConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/siteconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitedeploysurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteDeploySurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitegeneralconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteGeneralConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitelogssurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteLogsSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitemetricssurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteMetricsSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/sitenotificationsconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteNotificationsConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/smartformfieldmetadata/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SmartFormFieldMetadata</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/smartformfieldsmetadata/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SmartFormFieldsMetadata</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/smartformprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SmartFormProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/surfacerouteprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SurfaceRouteProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/surfacerouterprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SurfaceRouterProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/teamconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">TeamConfigurationSurfaceProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/tooltipprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">TooltipProps</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/type-aliases/visualeditorconfigurationsurfaceprops/" class="astro-a4avwkba"> <span class="astro-a4avwkba">VisualEditorConfigurationSurfaceProps</span> </a> </li> </ul> </details> </li><li class="astro-a4avwkba"> <details class="astro-a4avwkba"> <sl-sidebar-restore data-index="28"></sl-sidebar-restore> <summary class="astro-a4avwkba"> <div class="group-label astro-a4avwkba"> <span class="large astro-a4avwkba">Functions</span> </div> <svg aria-hidden="true" class="caret astro-a4avwkba astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-a4avwkba"> <li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/alert/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Alert</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/button/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Button</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/buttongroup/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ButtonGroup</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/card/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Card</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/cardfooter/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardFooter</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/cardloader/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardLoader</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/cardtitle/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CardTitle</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/checkbox/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Checkbox</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/clipboardbutton/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ClipboardButton</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/cn/" class="astro-a4avwkba"> <span class="astro-a4avwkba">cn</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/codeblock/" class="astro-a4avwkba"> <span class="astro-a4avwkba">CodeBlock</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/connectconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ConnectConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/connectedconnectform/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ConnectedConnectForm</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/decorativeicon/" class="astro-a4avwkba"> <span class="astro-a4avwkba">DecorativeIcon</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/extensionsettings/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ExtensionSettings</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/extensionsettingsheader/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ExtensionSettingsHeader</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/form/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Form</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/formerror/" class="astro-a4avwkba"> <span class="astro-a4avwkba">FormError</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/link/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Link</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/listloader/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ListLoader</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/providerauthcard/" class="astro-a4avwkba"> <span class="astro-a4avwkba">ProviderAuthCard</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/select/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Select</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/siteaccessconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteAccessConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitebuilddeployconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteBuildDeployConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/siteconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitedeploysurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteDeploySurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitegeneralconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteGeneralConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitelogssurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteLogsSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitemetricssurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteMetricsSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/sitenotificationsconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SiteNotificationsConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/smartform/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SmartForm</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/surfaceroute/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SurfaceRoute</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/surfacerouter/" class="astro-a4avwkba"> <span class="astro-a4avwkba">SurfaceRouter</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/teamconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">TeamConfigurationSurface</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/tooltip/" class="astro-a4avwkba"> <span class="astro-a4avwkba">Tooltip</span> </a> </li><li class="astro-a4avwkba"> <a href="/sdk/api/netlify/sdk/ui/react/components/functions/visualeditorconfigurationsurface/" class="astro-a4avwkba"> <span class="astro-a4avwkba">VisualEditorConfigurationSurface</span> </a> </li> </ul> </details> </li> </ul> </details> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-a4avwkba"> <a href="https://developers.netlify.com/feed/tag/sdk" class="large external-link margin-top astro-a4avwkba" target="_blank" class="external-link margin-top"> <span class="astro-a4avwkba">Changelog</span> </a> </li><li class="astro-a4avwkba"> <a href="https://answers.netlify.com/" class="large text-sm external-link margin-top astro-a4avwkba" target="_blank" class="text-sm external-link margin-top"> <span class="astro-a4avwkba">Forums</span> </a> </li><li class="astro-a4avwkba"> <a href="https://www.netlify.com/support/" class="large text-sm external-link astro-a4avwkba" target="_blank" class="text-sm external-link"> <span class="astro-a4avwkba">Contact support</span> </a> </li> </ul> <script> (() => { const scroller = document.getElementById('starlight__sidebar'); if (!window._starlightScrollRestore || !scroller) return; scroller.scrollTop = window._starlightScrollRestore; delete window._starlightScrollRestore; })(); </script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-uqshtffl"> <div class="sl-flex social-icons astro-uqshtffl"> <a href="https://developers.netlify.com/feed/tag/sdk" class="external-link astro-aycwkagb" target="_blank">Changelog</a> </div> <starlight-theme-select> <label style="--sl-select-width: 6.25em" class="astro-t62vsnnj"> <span class="sr-only astro-t62vsnnj">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-t62vsnnj astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select value="auto" class="astro-t62vsnnj"> <option value="dark" class="astro-t62vsnnj">Dark</option><option value="light" class="astro-t62vsnnj">Light</option><option value="auto" selected class="astro-t62vsnnj">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-t62vsnnj astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select> <script> StarlightThemeProvider.updatePickers(); </script> </div> </div> </div> </div> </nav> <div class="main-frame astro-orpkluty"> <div class="lg:sl-flex astro-wydqmu3q"> <aside class="right-sidebar-container astro-wydqmu3q"> <div class="right-sidebar astro-wydqmu3q"> <div class="lg:sl-hidden astro-alr624kb"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-uk22uh2y"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-uk22uh2y"><details id="starlight__mobile-toc" class="astro-uk22uh2y"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-uk22uh2y"><div class="toggle sl-flex astro-uk22uh2y">On this page<svg aria-hidden="true" class="caret astro-uk22uh2y astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </div><span class="display-current astro-uk22uh2y"></span></summary><div class="dropdown astro-uk22uh2y"><ul class="isMobile astro-rukuya45" style="--depth: 0;"> <li class="astro-rukuya45" style="--depth: 0;"> <a href="#_top" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Overview</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#prerequisites" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Prerequisites</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#install" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Install</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#create-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Create edge functions</span> </a> <ul class="isMobile astro-rukuya45" style="--depth: 1;"> <li class="astro-rukuya45" style="--depth: 1;"> <a href="#limitations" class="astro-rukuya45" style="--depth: 1;"> <span class="astro-rukuya45" style="--depth: 1;">Limitations</span> </a> </li> </ul> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#inject-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Inject edge functions</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#invoke-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Invoke edge functions</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#next-steps" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Next steps</span> </a> </li> </ul> </div></details></nav></mobile-starlight-toc></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-alr624kb"><div class="sl-container astro-alr624kb"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-rukuya45" style="--depth: 0;"> <li class="astro-rukuya45" style="--depth: 0;"> <a href="#_top" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Overview</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#prerequisites" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Prerequisites</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#install" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Install</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#create-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Create edge functions</span> </a> <ul class="astro-rukuya45" style="--depth: 1;"> <li class="astro-rukuya45" style="--depth: 1;"> <a href="#limitations" class="astro-rukuya45" style="--depth: 1;"> <span class="astro-rukuya45" style="--depth: 1;">Limitations</span> </a> </li> </ul> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#inject-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Inject edge functions</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#invoke-edge-functions" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Invoke edge functions</span> </a> </li><li class="astro-rukuya45" style="--depth: 0;"> <a href="#next-steps" class="astro-rukuya45" style="--depth: 0;"> <span class="astro-rukuya45" style="--depth: 0;">Next steps</span> </a> </li> </ul> </nav></starlight-toc></div></div> </div> </aside> <div class="main-pane astro-wydqmu3q"> <main data-pagefind-body lang="en" dir="ltr" class="astro-2yxxy2tc"> <div class="content-panel astro-kwdjkz4j"> <div class="sl-container astro-kwdjkz4j"> <h1 id="_top" class="astro-7qearqpy">Get started with edge function injection</h1> </div> </div> <div class="content-panel astro-kwdjkz4j"> <div class="sl-container astro-kwdjkz4j"> <div class="sl-markdown-content"> <p>This page provides information on how to create an extension that injects edge functions. It describes how to install and generate the boilerplate code, how to create edge functions for your extension, how to inject the edge functions, and how the edge functions are invoked in the consuming site.</p> <h2 id="prerequisites">Prerequisites</h2> <div class="netlify-panel warning astro-vweeohgf"> <p class="title astro-vweeohgf"> <span id="icon" class="astro-vweeohgf"><svg width="1em" height="1em" viewBox="0 0 24 24" class="astro-vweeohgf" data-icon="uil:exclamation-triangle"> <symbol id="ai:uil:exclamation-triangle"><path fill="currentColor" d="M12 16a1 1 0 1 0 1 1a1 1 0 0 0-1-1m10.67 1.47l-8.05-14a3 3 0 0 0-5.24 0l-8 14A3 3 0 0 0 3.94 22h16.12a3 3 0 0 0 2.61-4.53m-1.73 2a1 1 0 0 1-.88.51H3.94a1 1 0 0 1-.88-.51a1 1 0 0 1 0-1l8-14a1 1 0 0 1 1.78 0l8.05 14a1 1 0 0 1 .05 1.02ZM12 8a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1"/></symbol><use xlink:href="#ai:uil:exclamation-triangle"></use> </svg></span>Windows users should run the Netlify SDK through WSL 2 </p> <div class="panel-content astro-vweeohgf"> <p>Support for using the Netlify SDK on Windows is currently only available through <a href="https://learn.microsoft.com/en-us/windows/wsl/install" class="external-link" rel="noopener noreferrer" target="_blank">WSL 2</a>.</p> </div> </div> <div class="netlify-panel warning astro-vweeohgf"> <p class="title astro-vweeohgf"> <span id="icon" class="astro-vweeohgf"><svg width="1em" height="1em" viewBox="0 0 24 24" class="astro-vweeohgf" data-icon="uil:exclamation-triangle"> <use xlink:href="#ai:uil:exclamation-triangle"></use> </svg></span>Dev Server is required to use a custom content source in Netlify Visual Editor </p> <div class="panel-content astro-vweeohgf"> <p><a href="https://docs.netlify.com/platform/dev-server/" class="external-link" rel="noopener noreferrer" target="_blank">Dev Server</a> is currently in Private Beta. Please <a href="https://www.netlify.com/support/" class="external-link" rel="noopener noreferrer" target="_blank">contact us</a> to enable it for your team.</p> </div> </div> <ul> <li><a href="https://github.com/nodejs/release#release-schedule" class="external-link" rel="noopener noreferrer" target="_blank">Node.js 18.19.0</a> or later</li> <li><a href="https://docs.netlify.com/cli/get-started/" class="external-link" rel="noopener noreferrer" target="_blank">Netlify CLI</a></li> <li><a href="https://www.typescriptlang.org/" class="external-link" rel="noopener noreferrer" target="_blank">TypeScript</a></li> </ul> <h2 id="install">Install</h2> <ol> <li> <p>To get started, run the following command to <a href="/sdk/get-started/create-a-new-extension/">create a new extension</a>:</p> <starlight-tabs class="astro-fgycviln"> <div class="tablist-wrapper not-content astro-fgycviln"> <ul role="tablist" class="astro-fgycviln"> <li role="presentation" class="tab astro-fgycviln"> <a role="tab" href="#tab-panel-26" id="tab-26" aria-selected="true" tabindex="0" class="astro-fgycviln"> pnpm </a> </li><li role="presentation" class="tab astro-fgycviln"> <a role="tab" href="#tab-panel-27" id="tab-27" aria-selected="false" tabindex="-1" class="astro-fgycviln"> yarn </a> </li><li role="presentation" class="tab astro-fgycviln"> <a role="tab" href="#tab-panel-28" id="tab-28" aria-selected="false" tabindex="-1" class="astro-fgycviln"> npm </a> </li> </ul> </div> <section id="tab-panel-26" aria-labelledby="tab-26" role="tabpanel"> <div class="expressive-code"><link rel="stylesheet" href="/_astro/ec.cnoz8.css"><script type="module" src="/_astro/ec.8zarh.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="sh"><code><div class="ec-line"><div class="code"><span style="--0:#91B4D5">pnpm</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">create</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">@netlify/sdk@latest</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="pnpm create @netlify/sdk@latest"><div></div></button></div></figure></div> </section><section id="tab-panel-27" aria-labelledby="tab-27" role="tabpanel" hidden> <div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="sh"><code><div class="ec-line"><div class="code"><span style="--0:#91B4D5">yarn</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">create</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">@netlify/sdk@latest</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="yarn create @netlify/sdk@latest"><div></div></button></div></figure></div> </section><section id="tab-panel-28" aria-labelledby="tab-28" role="tabpanel" hidden> <div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="sh"><code><div class="ec-line"><div class="code"><span style="--0:#91B4D5">npm</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">create</span><span style="--0:#A6ACCD"> </span><span style="--0:#ADD7FF">@netlify/sdk@latest</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="npm create @netlify/sdk@latest"><div></div></button></div></figure></div> </section> </starlight-tabs> </li> <li> <p>Then, follow the prompts to add the <code dir="auto">Edge Functions Injection</code> boilerplate. The Netlify SDK will scaffold the basic structure needed for your extension and output the required files:</p> <div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── extension.yaml</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── netlify.toml</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── node_modules</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── package-lock.json</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── package.json</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">├── src</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">│ ├── index.ts</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">│ └── edge-functions</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">│ └── hello-world.ts</span></div></div><div class="ec-line"><div class="code"><span style="--0:#a6accd">└── tsconfig.json</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="├── extension.yaml├── netlify.toml├── node_modules├── package-lock.json├── package.json├── src│ ├── index.ts│ └── edge-functions│ └── hello-world.ts└── tsconfig.json"><div></div></button></div></figure></div> <ul> <li><code dir="auto">extension.yaml</code> - The extension configuration file. This is where you configure the extension name, description, and other metadata.</li> <li><code dir="auto">netlify.toml</code> - The <a href="https://docs.netlify.com/configure-builds/file-based-configuration/" class="external-link" rel="noopener noreferrer" target="_blank">Netlify configuration file</a>. This is where you configure the settings for building and deploying your extension.</li> <li><code dir="auto">src/index.ts</code> - The entrypoint for developing the extension.</li> <li><code dir="auto">src/edge-functions/</code> - The folder to store your edge functions in.</li> <li><code dir="auto">src/edge-functions/hello-world.ts</code> - An example edge function.</li> </ul> <div class="netlify-panel tip astro-vweeohgf"> <p class="title astro-vweeohgf"> <span id="icon" class="astro-vweeohgf"><svg width="1em" height="1em" viewBox="0 0 24 24" class="astro-vweeohgf" data-icon="uil:lightbulb-alt"> <symbol id="ai:uil:lightbulb-alt"><path fill="currentColor" d="M17.09 2.82a8 8 0 0 0-6.68-1.66a8 8 0 0 0-6.27 6.32a8.07 8.07 0 0 0 1.72 6.65A4.54 4.54 0 0 1 7 17v3a3 3 0 0 0 3 3h4a3 3 0 0 0 3-3v-2.81A5.17 5.17 0 0 1 18.22 14a8 8 0 0 0-1.13-11.2ZM15 20a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-1h6Zm1.67-7.24A7.13 7.13 0 0 0 15 17h-2v-3a1 1 0 0 0-2 0v3H9a6.5 6.5 0 0 0-1.6-4.16a6 6 0 0 1 3.39-9.72A6 6 0 0 1 18 9a5.89 5.89 0 0 1-1.33 3.76"/></symbol><use xlink:href="#ai:uil:lightbulb-alt"></use> </svg></span>Configure VS Code for Edge Functions </p> <div class="panel-content astro-vweeohgf"> <p>If you use Visual Studio Code, we recommend answering yes to the prompt to <a href="/sdk/edge-functions/debug-and-test/#configure-your-code-editor">configure your editor to use Edge Functions</a>. This will install the <a href="https://deno.com/" class="external-link" rel="noopener noreferrer" target="_blank">Deno runtime</a> and configure your editor for a better development experience.</p> </div> </div> </li> </ol> <p>You now have a working extension that injects the example <code dir="auto">hello-world.ts</code> edge function. After you install this extension on a team and then build and serve one of the team’s sites, the <code dir="auto">hello-world.ts</code> edge function will execute on requests to the <code dir="auto">/hello</code> path. You can <a href="/sdk/edge-functions/debug-and-test/">test this extension locally</a> now or follow the next sections to create and inject your own edge functions.</p> <h2 id="create-edge-functions">Create edge functions</h2> <p>Following the documentation for Netlify <a href="https://docs.netlify.com/edge-functions/overview/" class="external-link" rel="noopener noreferrer" target="_blank">Edge Functions</a>, create your edge functions in a dedicated edge functions folder within your extension code base. The boilerplate automatically includes a <code dir="auto">src/edge-functions</code> folder for you but you can change this and specify a different location when you inject the edge functions.</p> <p>For extensions, edge functions must be declared inline and can only use URL imports. Learn more about the <a href="#limitations">limitations</a> for edge functions in extensions.</p> <p>For example:</p> <div class="expressive-code"><figure class="frame has-title not-content"><figcaption class="header"><span class="title">src/edge-functions/hello-world.ts</span></figcaption><pre data-language="ts"><code><div class="ec-line"><div class="code"><span style="--0:#5DE4C7">export default </span><span style="--0:#A6ACCD">()</span><span style="--0:#5DE4C7"> </span><span style="--0:#91B4D5">=></span><span style="--0:#5DE4C7"> new </span><span style="--0:#E4F0FBD0">Response</span><span style="--0:#A6ACCD">(</span><span style="--0:#A6ACCD">"</span><span style="--0:#5DE4C7">Hello, world!</span><span style="--0:#A6ACCD">"</span><span style="--0:#A6ACCD">);</span></div></div><div class="ec-line"><div class="code"> </div></div><div class="ec-line"><div class="code"><span style="--0:#5DE4C7">export</span><span style="--0:#A6ACCD"> </span><span style="--0:#91B4D5">const</span><span style="--0:#A6ACCD"> </span><span style="--0:#E4F0FB">config</span><span style="--0:#A6ACCD"> </span><span style="--0:#91B4D5">=</span><span style="--0:#A6ACCD"> {</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#ADD7FF">path</span><span style="--0:#A6ACCD">:</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">"</span><span style="--0:#5DE4C7">/hello</span><span style="--0:#A6ACCD">"</span><span style="--0:#A6ACCD">,</span></div></div><div class="ec-line"><div class="code"><span style="--0:#A6ACCD">};</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="export default () => new Response(&#x22;Hello, world!&#x22;);export const config = { path: &#x22;/hello&#x22;,};"><div></div></button></div></figure></div> <h3 id="limitations">Limitations</h3> <p>Along with the extension-specific limitations that are listed below, make sure to review the <a href="https://docs.netlify.com/edge-functions/limits/" class="external-link" rel="noopener noreferrer" target="_blank">operation and feature limits for Netlify Edge Functions</a>.</p> <p>Edge functions that you create and inject with an extension have the following limitations:</p> <ul> <li><strong>Only inline edge function declarations are supported.</strong> Declaring edge functions in a <code dir="auto">netlify.toml</code> or <code dir="auto">manifest.json</code> for your extension isn’t supported. You can only <a href="https://docs.netlify.com/edge-functions/declarations/#declare-edge-functions-inline" class="external-link" rel="noopener noreferrer" target="_blank">declare edge functions inline</a> in an extension.</li> <li><strong>Only URL imports are supported.</strong> It’s not possible to use npm modules in your extension’s edge functions. To import a module in your extension’s edge functions, make a URL import directly. For example, <code dir="auto">import React from "https://esm.sh/react"</code>.</li> <li><strong>Import maps aren’t supported.</strong> It’s not possible to use <a href="https://docs.netlify.com/edge-functions/api/#import-maps" class="external-link" rel="noopener noreferrer" target="_blank">import maps</a> to import dependencies in your extension’s edge functions.</li> <li><strong>Node.js built-in modules aren’t supported.</strong> It’s not possible to use Node.js built-in modules in your extension’s edge functions. For example, <code dir="auto">import { randomBytes } from "node:crypto"</code> is not possible.</li> </ul> <h2 id="inject-edge-functions">Inject edge functions</h2> <p>Once you create your edge functions, use the <code dir="auto">addEdgeFunctions</code> method in the extension’s <code dir="auto">src/index.ts</code> file to specify the details for injecting the edge functions into the user’s site.</p> <p>The <code dir="auto">addEdgeFunctions</code> method receives two required arguments:</p> <ul> <li><strong><code dir="auto">path</code></strong>: the path to the folder that contains the edge functions.</li> <li><strong><code dir="auto">options</code></strong>: an object with <code dir="auto">prefix</code> and <code dir="auto">shouldInjectFunction</code> properties — we recommend you set both of these. <ul> <li>The <code dir="auto">prefix</code> property is used to namespace the edge functions and helps avoid conflicts between other edge functions in a user’s site that may have the same name. For example, edge functions that a framework might inject.</li> <li>The <code dir="auto">shouldInjectFunction</code> property is for a function that you need to define to determine whether or not to inject an edge function into a site. Without it, Netlify will inject the edge function into all of a team’s sites during the <code dir="auto">onPreBuild</code> and <code dir="auto">onPreDev</code> <a href="/sdk/build-event-handlers/hook-into-events/">build events</a>.</li> </ul> </li> </ul> <p>This example conditionally injects all of the edge functions from the <code dir="auto">src/edge-functions</code> folder, with the prefix <code dir="auto">YOUR_EF_PREFIX</code>. Make sure to update the prefix to use a unique value, such as your extension slug.</p> <div class="expressive-code"><figure class="frame has-title not-content"><figcaption class="header"><span class="title">src/index.ts</span></figcaption><pre data-language="ts"><code><div class="ec-line"><div class="code"><span style="--0:#5DE4C7">import </span><span style="--0:#A6ACCD">{</span><span style="--0:#5DE4C7"> </span><span style="--0:#ADD7FF">NetlifyExtension</span><span style="--0:#5DE4C7"> </span><span style="--0:#A6ACCD">}</span><span style="--0:#5DE4C7"> </span><span style="--0:#A6ACCD">from</span><span style="--0:#5DE4C7"> </span><span style="--0:#A6ACCD">"</span><span style="--0:#5DE4C7">@netlify/sdk</span><span style="--0:#A6ACCD">"</span><span style="--0:#A6ACCD">;</span></div></div><div class="ec-line"><div class="code"> </div></div><div class="ec-line"><div class="code"><span style="--0:#91B4D5">const</span><span style="--0:#A6ACCD"> </span><span style="--0:#E4F0FB">extension</span><span style="--0:#A6ACCD"> </span><span style="--0:#91B4D5">=</span><span style="--0:#A6ACCD"> </span><span style="--0:#5DE4C7">new</span><span style="--0:#A6ACCD"> </span><span style="--0:#E4F0FBD0">NetlifyExtension</span><span style="--0:#A6ACCD">();</span></div></div><div class="ec-line"><div class="code"> </div></div><div class="ec-line"><div class="code"><span style="--0:#E4F0FB">extension</span><span style="--0:#A6ACCD">.</span><span style="--0:#E4F0FBD0">addEdgeFunctions</span><span style="--0:#A6ACCD">(</span><span style="--0:#A6ACCD">"</span><span style="--0:#5DE4C7">./src/edge-functions</span><span style="--0:#A6ACCD">"</span><span style="--0:#A6ACCD">, {</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#ADD7FF">prefix</span><span style="--0:#A6ACCD">:</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">"</span><span style="--0:#5DE4C7">YOUR_EF_PREFIX</span><span style="--0:#A6ACCD">"</span><span style="--0:#A6ACCD">,</span><span style="--0:#E4F0FB"> </span><span style="--0:#8E93AF;--0fs:italic">// update this prefix to use a unique value</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#ADD7FF">shouldInjectFunction</span><span style="--0:#A6ACCD">:</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">({</span><span style="--0:#ADD7FF"> </span><span style="--0:#E4F0FB">name</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">})</span><span style="--0:#ADD7FF"> </span><span style="--0:#91B4D5">=></span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#91B4D5">const</span><span style="--0:#ADD7FF"> </span><span style="--0:#E4F0FB">extensionConfigured</span><span style="--0:#ADD7FF"> </span><span style="--0:#91B4D5">=</span><span style="--0:#ADD7FF"> </span><span style="--0:#E4F0FB">process</span><span style="--0:#A6ACCD">.</span><span style="--0:#E4F0FB">env</span><span style="--0:#A6ACCD">.</span><span style="--0:#E4F0FB">MY_EXTENSION_WAS_CONFIGURED_VARIABLE</span><span style="--0:#A6ACCD">;</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#A6ACCD">if</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">(</span><span style="--0:#E4F0FB">extensionConfigured</span><span style="--0:#A6ACCD">)</span><span style="--0:#ADD7FF"> </span><span style="--0:#A6ACCD">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#5DE4C7C0">return</span><span style="--0:#ADD7FF"> </span><span style="--0:#5DE4C7">true</span><span style="--0:#A6ACCD">;</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#A6ACCD">}</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#5DE4C7C0">return</span><span style="--0:#ADD7FF"> </span><span style="--0:#D576A7">false</span><span style="--0:#A6ACCD">;</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#A6ACCD">},</span></div></div><div class="ec-line"><div class="code"><span style="--0:#A6ACCD">});</span></div></div><div class="ec-line"><div class="code"> </div></div><div class="ec-line"><div class="code"><span style="--0:#5DE4C7">export </span><span style="--0:#A6ACCD">{</span><span style="--0:#5DE4C7"> </span><span style="--0:#ADD7FF">extension</span><span style="--0:#5DE4C7"> </span><span style="--0:#A6ACCD">};</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="import { NetlifyExtension } from &#x22;@netlify/sdk&#x22;;const extension = new NetlifyExtension();extension.addEdgeFunctions(&#x22;./src/edge-functions&#x22;, { prefix: &#x22;YOUR_EF_PREFIX&#x22;, // update this prefix to use a unique value shouldInjectFunction: ({ name }) => { const extensionConfigured = process.env.MY_EXTENSION_WAS_CONFIGURED_VARIABLE; if (extensionConfigured) { return true; } return false; },});export { extension };"><div></div></button></div></figure></div> <p>The <code dir="auto">shouldInjectFunction</code> checks for an environment variable that the extension creates when the user configures the extension. For an example of how to create environment variables using <a href="/sdk/reference/classes/netlifyextensionclient/#createorupdatevariables"><code dir="auto">createOrUpdateVariables</code></a>, refer to the <a href="https://github.com/netlify/extension-showcase/blob/main/src/server/router.ts#L115" class="external-link" rel="noopener noreferrer" target="_blank"><code dir="auto">extension-showcase</code></a> repository.</p> <p>Note that if your extension includes custom <a href="/sdk/build-event-handlers/overview/">build event handlers</a> that run <code dir="auto">onPreBuild</code> or <code dir="auto">onPreDev</code>, Netlify injects the edge functions before your build event handlers run.</p> <h2 id="invoke-edge-functions">Invoke edge functions</h2> <p>After a user installs your extension on their team and Netlify injects the edge functions during the build step for one of the team’s sites, the site is ready.</p> <p>When a request is made for a path on the site, such as <code dir="auto">/hello</code>, edge functions run according to the <a href="https://docs.netlify.com/edge-functions/declarations/#declaration-processing-order" class="external-link" rel="noopener noreferrer" target="_blank">declaration processing order</a>.</p> <h2 id="next-steps">Next steps</h2> <p>Learn how to <a href="/sdk/edge-functions/debug-and-test/">test your extension</a> and edge function injection locally.</p> <p>Once you’re ready, learn how to <a href="/sdk/publish/">publish</a> your extension.</p> <div class="not-content astro-77rygnu7"> <form class='astro-77rygnu7' method='POST' name='feedback'> <div class="feedback astro-77rygnu7"> <div class="astro-77rygnu7"> <h4 class="astro-77rygnu7">Did you find this doc useful?</h4> <p class="astro-77rygnu7">Your feedback helps us improve our docs.</p> </div> <div class="votes astro-77rygnu7"> <input type="radio" name="vote" value="upvote" id="upvote" class="astro-77rygnu7"> <label class="vote-button astro-77rygnu7" for="upvote"><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" aria-hidden="true" id="svg-upvote"> <g fill="none" fill-rule="evenodd"> <circle cx="32" cy="32" r="32" fill="none" fill-rule="nonzero"></circle> <g stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M40 29h-7.645l1.473-3.889c.377-.996.042-2.135-.803-2.73-.963-.679-2.263-.427-2.936.569L26 29v9a4 4 0 0 0 4 4h6.517c1.51 0 2.893-.852 3.573-2.203L42 36v-5a2 2 0 0 0-2-2zM22 29v12"></path> </g> </g> </svg> </label> <input type="radio" name="vote" value="downvote" id="downvote" class="astro-77rygnu7"> <label class="vote-button astro-77rygnu7" for="downvote"><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" aria-hidden="true" id="svg-downvote"> <g fill="none" fill-rule="evenodd"> <circle cx="32" cy="32" r="32"></circle> <g stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> <path d="M23 35h7.645l-1.473 3.889c-.377.996-.042 2.135.803 2.73.963.679 2.263.427 2.936-.569l4.09-6.05v-9a4 4 0 0 0-4-4h-6.518c-1.51 0-2.893.852-3.573 2.202L21 28v5a2 2 0 0 0 2 2zM41 35V23"></path> </g> </g> </svg> </label> <input type="radio" name="vote" value="none" id="none" checked class="astro-77rygnu7"> </div> </div> <input type="hidden" name="form-name" value="feedback" class="astro-77rygnu7"> <input type="hidden" name="path" value="/sdk/edge-functions/get-started/" class="astro-77rygnu7"> <textarea name="feedback" placeholder="What else would you like to tell us about this doc?" class="astro-77rygnu7"></textarea> <p class="hidden astro-77rygnu7"> <label class="astro-77rygnu7"> Don’t fill this out if you’re human: <input name="bot-field" class="astro-77rygnu7"> </label> </p> <button class="form-submit astro-77rygnu7" type="submit" disabled>Send</button> </form> <div class="success-message astro-77rygnu7"> <h4 class="astro-77rygnu7">Got it!</h4> <p class="astro-77rygnu7">Your feedback helps us improve our docs.</p> </div> </div> <footer class="astro-sz7xmlte"> <nav aria-label="Footer navigation" class="astro-sz7xmlte"> <ul class="footer_nav astro-sz7xmlte"> <li class="astro-sz7xmlte"> <a href="https://netlify.com/" class="astro-sz7xmlte">Netlify</a> </li> <li class="astro-sz7xmlte"> <a href="https://netlify.com/careers/" class="astro-sz7xmlte">Careers</a> </li> <li class="astro-sz7xmlte"> <a href="https://netlify.com/blog/" class="astro-sz7xmlte">Blog</a> </li> <li class="astro-sz7xmlte"> <a href="https://www.netlify.com/legal/terms-of-use/" class="astro-sz7xmlte">Terms</a> </li> <li class="astro-sz7xmlte"> <a href="https://www.netlify.com/privacy/" class="astro-sz7xmlte">Privacy</a> </li> </ul> </nav> <p class="footer_copyright astro-sz7xmlte">© 2023 Netlify</p> </footer> <script type="astro-raw"> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NMKKF2M" height="0" width="0" style="display:none;visibility:hidden" ></iframe> </noscript>; </script> </div> <footer class="sl-flex astro-4ycbworp"> <div class="meta sl-flex astro-4ycbworp"> </div> <div class="pagination-links astro-onttlcsu" dir="ltr"> <a href="/sdk/edge-functions/overview/" rel="prev" class="astro-onttlcsu"> <svg aria-hidden="true" class="astro-onttlcsu astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg> <span class="astro-onttlcsu"> Previous <br class="astro-onttlcsu"> <span class="link-title astro-onttlcsu">Edge function injection overview</span> </span> </a> <a href="/sdk/edge-functions/debug-and-test/" rel="next" class="astro-onttlcsu"> <svg aria-hidden="true" class="astro-onttlcsu astro-2nn42ynm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg> <span class="astro-onttlcsu"> Next <br class="astro-onttlcsu"> <span class="link-title astro-onttlcsu">Debug &amp; test</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> <script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="35ffcf76-cab5-463d-a2e5-8983dba16a56" data-netlify-deploy-branch="main" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiMzVmZmNmNzYtY2FiNS00NjNkLWEyZTUtODk4M2RiYTE2YTU2IiwiYWNjb3VudF9pZCI6IjU4ZGE4ODkzZDY4NjVkMzVjOTJhNzJiOCIsImRlcGxveV9pZCI6IjY3YjRjNmFmZjA0ODI2MDAwODI3Zjk0MSIsImlzc3VlciI6Im5mc2VydmVyIn0.RSH8lI6GZlz1GhrlIVSXJjlShA3US0qUsqMx2xtYwzs"></script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10