214 lines
153 KiB
HTML
214 lines
153 KiB
HTML
<!DOCTYPE html><html data-dpl-id="dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/051742360c26797e-s.p.0f97p8c3305p~.woff2?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="https://use.typekit.net/af/2c0cee/000000000000000077524f49/31/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3" as="font" crossorigin="anonymous" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=640&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 640w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=750&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 750w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=828&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 828w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1080&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1080w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1200&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1200w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1920&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1920w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=2048&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2048w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=3840&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 3840w" imageSizes="(min-width: 1280px) 768px, 100vw" fetchPriority="high"/><link rel="stylesheet" href="/_next/static/chunks/139uxl22pgbkf.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0suulr-dft_4b.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0i7h3yppcug_9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/><script src="/_next/static/chunks/0ze5r15-qp4iu.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0ix107_jx7.ax.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0v~ijwd4bc1ig.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0yv0yxtxxpx~h.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0rhwqqd.l-3xv.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/turbopack-0qlxgh~pm_r5u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><script src="/_next/static/chunks/136_z04zime~r.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" async=""></script><link rel="preload" href="https://use.typekit.net/tcb4uyw.css" as="style"/><link rel="preconnect" href="https://use.typekit.net" crossorigin="anonymous"/><link rel="preconnect" href="https://p.typekit.net" crossorigin="anonymous"/><link rel="preload" href="https://use.typekit.net/af/2c0cee/000000000000000077524f49/31/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3" as="font" type="font/woff2" crossorigin="anonymous"/><meta name="next-size-adjust" content=""/><meta name="theme-color" content="#040406"/><title>Why we're leaving serverless | Unkey</title><link rel="manifest" href="/favicon/manifest.webmanifest"/><link rel="canonical" href="https://unkey.com/blog/serverless-exit"/><meta property="og:title" content="Why we're leaving serverless | Unkey"/><meta property="og:url" content="https://unkey.com/blog/serverless-exit"/><meta property="og:site_name" content="Unkey"/><meta property="og:image" content="https://unkey.com/images/blog-images/covers/serverless-exit.jpg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Unkey social preview"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Why we're leaving serverless | Unkey"/><meta name="twitter:image" content="https://unkey.com/images/blog-images/covers/serverless-exit.jpg"/><link rel="shortcut icon" href="/favicon/favicon.ico"/><link rel="icon" href="/favicon/favicon.ico"/><link rel="icon" href="/favicon/favicon-light.svg" media="(prefers-color-scheme: light)" type="image/svg+xml"/><link rel="icon" href="/favicon/favicon-dark.svg" media="(prefers-color-scheme: dark)" type="image/svg+xml"/><link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png"/><link rel="stylesheet" href="https://use.typekit.net/tcb4uyw.css"/><script src="/_next/static/chunks/03~yq9q893hmn.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" noModule=""></script></head><body class="bg-background inter_dfe0d3ab-module__S0kLsG__variable jetbrains_mono_72f04ab4-module__hEmn3q__variable font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><style id="c15t-theme">:root, .c15t-theme-root {
|
|
--c15t-primary: var(--color-foreground);
|
|
--c15t-primary-hover: var(--color-gray-90);
|
|
--c15t-surface: var(--color-popover);
|
|
--c15t-surface-hover: var(--color-popover);
|
|
--c15t-border: var(--color-border);
|
|
--c15t-border-hover: var(--color-border);
|
|
--c15t-text: var(--color-foreground);
|
|
--c15t-text-muted: var(--color-muted-foreground);
|
|
--c15t-text-on-primary: var(--color-background);
|
|
--c15t-overlay: hsla(0, 0%, 0%, 0.5);
|
|
--c15t-switch-track: var(--color-gray-30);
|
|
--c15t-switch-track-active: var(--color-foreground);
|
|
--c15t-switch-thumb: var(--color-foreground);
|
|
--c15t-font-family: system-ui, -apple-system, sans-serif;
|
|
--c15t-font-size-sm: 0.875rem;
|
|
--c15t-font-size-base: 1rem;
|
|
--c15t-font-size-lg: 1.125rem;
|
|
--c15t-font-weight-normal: 400;
|
|
--c15t-font-weight-medium: 500;
|
|
--c15t-font-weight-semibold: 600;
|
|
--c15t-line-height-tight: 1.25;
|
|
--c15t-line-height-normal: 1.5;
|
|
--c15t-line-height-relaxed: 1.75;
|
|
--c15t-space-xs: 0.25rem;
|
|
--c15t-space-sm: 0.5rem;
|
|
--c15t-space-md: 1rem;
|
|
--c15t-space-lg: 1.5rem;
|
|
--c15t-space-xl: 2rem;
|
|
--c15t-radius-sm: 0;
|
|
--c15t-radius-md: 0;
|
|
--c15t-radius-lg: 0;
|
|
--c15t-radius-full: 0;
|
|
--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);
|
|
--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);
|
|
--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);
|
|
--c15t-duration-fast: 80ms;
|
|
--c15t-duration-normal: 150ms;
|
|
--c15t-duration-slow: 200ms;
|
|
--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
|
|
:root.dark, .dark .c15t-theme-root, :root.c15t-dark, .c15t-dark .c15t-theme-root {
|
|
--c15t-primary: var(--color-foreground);
|
|
--c15t-primary-hover: var(--color-gray-90);
|
|
--c15t-surface: var(--color-popover);
|
|
--c15t-surface-hover: var(--color-popover);
|
|
--c15t-border: var(--color-border);
|
|
--c15t-border-hover: var(--color-border);
|
|
--c15t-text: var(--color-foreground);
|
|
--c15t-text-muted: var(--color-muted-foreground);
|
|
--c15t-text-on-primary: var(--color-background);
|
|
--c15t-overlay: hsla(0, 0%, 0%, 0.5);
|
|
--c15t-switch-track: var(--color-gray-30);
|
|
--c15t-switch-track-active: var(--color-foreground);
|
|
--c15t-switch-thumb: var(--color-foreground);
|
|
--c15t-font-family: system-ui, -apple-system, sans-serif;
|
|
--c15t-font-size-sm: 0.875rem;
|
|
--c15t-font-size-base: 1rem;
|
|
--c15t-font-size-lg: 1.125rem;
|
|
--c15t-font-weight-normal: 400;
|
|
--c15t-font-weight-medium: 500;
|
|
--c15t-font-weight-semibold: 600;
|
|
--c15t-line-height-tight: 1.25;
|
|
--c15t-line-height-normal: 1.5;
|
|
--c15t-line-height-relaxed: 1.75;
|
|
--c15t-space-xs: 0.25rem;
|
|
--c15t-space-sm: 0.5rem;
|
|
--c15t-space-md: 1rem;
|
|
--c15t-space-lg: 1.5rem;
|
|
--c15t-space-xl: 2rem;
|
|
--c15t-radius-sm: 0;
|
|
--c15t-radius-md: 0;
|
|
--c15t-radius-lg: 0;
|
|
--c15t-radius-full: 0;
|
|
--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);
|
|
--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);
|
|
--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);
|
|
--c15t-duration-fast: 80ms;
|
|
--c15t-duration-normal: 150ms;
|
|
--c15t-duration-slow: 200ms;
|
|
--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
|
|
/*
|
|
* Utility class to disable transitions during theme switching.
|
|
* Apply this class to the root element before switching themes,
|
|
* then remove it after a short delay to prevent flash of
|
|
* animated content during the color scheme change.
|
|
*
|
|
* Example usage:
|
|
* document.documentElement.classList.add('c15t-no-transitions');
|
|
* // Switch theme...
|
|
* requestAnimationFrame(() => {
|
|
* document.documentElement.classList.remove('c15t-no-transitions');
|
|
* });
|
|
*/
|
|
.c15t-no-transitions,
|
|
.c15t-no-transitions *,
|
|
.c15t-no-transitions *::before,
|
|
.c15t-no-transitions *::after {
|
|
transition: none !important;
|
|
animation: none !important;
|
|
}</style><div class="flex min-h-svh grow flex-col rounded-none bg-background aria-hidden:[-webkit-mask-image:-webkit-radial-gradient(white,black)]" vaul-drawer-wrapper=""><header class="sticky top-0 z-50 flex items-center pt-2.5"><div class="pointer-events-none absolute inset-0 -z-10 h-full"></div><div class="container flex items-center gap-1"><div class="relative z-60 flex h-11 flex-1 items-center justify-between bg-foreground pr-0 pl-6"><div class="relative flex h-full shrink-0 items-center"><a class="inline-flex shrink-0" aria-expanded="false" aria-haspopup="menu" href="/"><img alt="unkey" loading="lazy" width="83" height="28" decoding="async" data-nimg="1" class="block h-7 w-auto shrink-0" style="color:transparent" src="/logo-dark.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></a></div><nav aria-label="Primary navigation" class="hidden h-full lg:flex"><div class="relative flex items-center justify-center"><button type="button" aria-expanded="false" aria-haspopup="true" class="relative inline-flex h-full items-center gap-0.5 px-5 py-0 text-sm leading-none font-medium tracking-tight transition-colors text-background">Resources<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-3.5 opacity-70 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="absolute top-full mt-1.5 w-82.5 transition-all duration-200 invisible opacity-0 left-0"><ul class="flex w-full flex-col bg-foreground shadow-lg"><li><a class="flex items-start gap-3 px-5 py-4 transition-colors hover:bg-gray-94" href="/blog"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70 bg-foreground"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5 shrink-0" style="color:transparent" src="/icons/header/blog.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex min-w-0 flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Blog</span><span class="text-xs leading-tight tracking-tight text-gray-40">Read product updates and insights</span></div></a></li><li><a class="flex items-start gap-3 px-5 py-4 transition-colors hover:bg-gray-94" href="/case-studies"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70 bg-foreground"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5 shrink-0" style="color:transparent" src="/icons/header/case-studies.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex min-w-0 flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Case studies</span><span class="text-xs leading-tight tracking-tight text-gray-40">Practical results from real deployments</span></div></a></li><li><a class="flex items-start gap-3 px-5 py-4 transition-colors hover:bg-gray-94" href="/changelog"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70 bg-foreground"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5 shrink-0" style="color:transparent" src="/icons/header/changelog.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex min-w-0 flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Changelog</span><span class="text-xs leading-tight tracking-tight text-gray-40">Track what shipped, improved, and fixed</span></div></a></li><li><a class="flex items-start gap-3 px-5 py-4 transition-colors hover:bg-gray-94" href="/glossary"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70 bg-foreground"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5 shrink-0" style="color:transparent" src="/icons/header/glossary.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex min-w-0 flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Glossary</span><span class="text-xs leading-tight tracking-tight text-gray-40">Clear definitions for API terms</span></div></a></li></ul></div></div><a class="inline-flex items-center gap-0.5 px-5 text-sm leading-none font-medium tracking-tight transition-colors first:pl-0 last:pr-6 text-background" href="/pricing">Pricing</a><a target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-0.5 px-5 text-sm leading-none font-medium tracking-tight transition-colors first:pl-0 last:pr-6 text-background" href="https://unkey.com/docs/introduction">Docs</a></nav></div><nav aria-label="Actions" class="hidden items-center gap-16 lg:flex"><div class="flex items-center gap-1"><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-6 text-sm [&_svg]:size-3.5" href="https://unkey.com/discord" target="_blank" rel="noopener noreferrer">Discord</a><a class="inline-flex items-center justify-center h-11 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-6 text-sm gap-1 [&_svg]:size-4.5" href="https://github.com/unkeyed/unkey" aria-label="GitHub repository (5.3k stars)" target="_blank" rel="noopener noreferrer"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" class="text-background" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.9317 1C5.91925 1 1 6.07047 1 12.2677C1 17.1973 4.14286 21.4227 8.51553 22.972C9.06211 23.1129 9.19876 22.6903 9.19876 22.4086C9.19876 22.1269 9.19876 21.4227 9.19876 20.4368C6.19255 21.141 5.50932 19.0283 5.50932 19.0283C4.96273 17.7607 4.2795 17.3382 4.2795 17.3382C3.32298 16.6339 4.41615 16.6339 4.41615 16.6339C5.50932 16.7748 6.0559 17.7607 6.0559 17.7607C7.01242 19.5917 8.65217 19.0283 9.19876 18.7466C9.3354 18.0424 9.6087 17.479 9.88199 17.1973C7.42236 16.9156 4.96273 15.9297 4.96273 11.5635C4.96273 10.2959 5.37267 9.30993 6.0559 8.6057C5.91925 8.32401 5.50932 7.19724 6.19255 5.64793C6.19255 5.64793 7.14907 5.36624 9.19876 6.7747C10.0186 6.49301 10.9752 6.35216 11.9317 6.35216C12.8882 6.35216 13.8447 6.49301 14.6646 6.7747C16.7143 5.36624 17.6708 5.64793 17.6708 5.64793C18.2174 7.19724 17.9441 8.32401 17.8075 8.6057C18.4907 9.45078 18.9006 10.4367 18.9006 11.5635C18.9006 15.9297 16.3043 16.7748 13.8447 17.0565C14.2547 17.6199 14.6646 18.3241 14.6646 19.31C14.6646 20.8593 14.6646 21.9861 14.6646 22.4086C14.6646 22.6903 14.8012 23.1129 15.4845 22.972C19.8571 21.4227 23 17.1973 23 12.2677C22.8634 6.07047 17.9441 1 11.9317 1Z"></path></svg><span class="sr-only">GitHub</span><span>5.3k</span></a></div><div class="flex items-center gap-1"><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight ease-in-out border border-foreground text-foreground hover:bg-gray-12 px-6 text-sm [&_svg]:size-3.5 bg-background transition-colors duration-300" href="https://app.unkey.com/">Login</a><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-6 text-sm [&_svg]:size-3.5" href="https://app.unkey.com/auth/sign-up">Sign Up</a></div></nav><button type="button" class="relative z-60 flex size-11 items-center justify-center bg-foreground lg:hidden" aria-expanded="false" aria-label="Open menu"><div class="relative size-5"><span class="absolute left-0 block h-0.5 w-full bg-background transition-all duration-300 top-1"></span><span class="absolute top-1/2 left-0 block h-0.5 w-full -translate-y-1/2 bg-background transition-opacity duration-300 opacity-100"></span><span class="absolute left-0 block h-0.5 w-full bg-background transition-all duration-300 bottom-1"></span></div></button><div class="fixed inset-0 z-40 bg-background/50 transition-opacity duration-300 lg:hidden pointer-events-none opacity-0" aria-hidden="true"></div><div class="absolute top-full right-5 left-5 z-50 max-h-[calc(100dvh-60px)] overflow-y-auto bg-foreground shadow-2xl transition-all duration-300 md:right-8 md:left-8 lg:hidden invisible -translate-y-2 opacity-0"><div class="px-5 py-5"><nav class="flex flex-col"><div class="border-b border-foreground/10"><button type="button" class="flex w-full items-center justify-between py-3.5 text-base font-medium tracking-tight text-background transition-colors hover:text-gray-30">Resources<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size-4 opacity-70 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="grid transition-all duration-200 grid-rows-[0fr] opacity-0"><div class="overflow-hidden"><ul class="flex flex-col gap-1 pb-3"><li><a class="flex items-start gap-3 py-2.5 transition-colors hover:bg-foreground/5" href="/blog"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5" style="color:transparent" src="/icons/header/blog.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Blog</span><span class="text-xs leading-tight tracking-tight text-gray-40">Read product updates and insights</span></div></a></li><li><a class="flex items-start gap-3 py-2.5 transition-colors hover:bg-foreground/5" href="/case-studies"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5" style="color:transparent" src="/icons/header/case-studies.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Case studies</span><span class="text-xs leading-tight tracking-tight text-gray-40">Practical results from real deployments</span></div></a></li><li><a class="flex items-start gap-3 py-2.5 transition-colors hover:bg-foreground/5" href="/changelog"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5" style="color:transparent" src="/icons/header/changelog.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Changelog</span><span class="text-xs leading-tight tracking-tight text-gray-40">Track what shipped, improved, and fixed</span></div></a></li><li><a class="flex items-start gap-3 py-2.5 transition-colors hover:bg-foreground/5" href="/glossary"><div class="flex size-9 shrink-0 items-center justify-center border border-gray-70"><img alt="" aria-hidden="true" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" class="size-5" style="color:transparent" src="/icons/header/glossary.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex flex-col gap-1.5"><span class="text-sm leading-none font-medium tracking-tight text-background">Glossary</span><span class="text-xs leading-tight tracking-tight text-gray-40">Clear definitions for API terms</span></div></a></li></ul></div></div></div><a class="border-b border-foreground/10 py-3.5 text-base font-medium tracking-tight text-background transition-colors hover:text-gray-30" href="/pricing">Pricing</a><a class="border-b border-foreground/10 py-3.5 text-base font-medium tracking-tight text-background transition-colors hover:text-gray-30" target="_blank" rel="noopener noreferrer" href="https://unkey.com/docs/introduction">Docs</a><a class="border-b border-foreground/10 py-3.5 text-base font-medium tracking-tight text-background transition-colors hover:text-gray-30" target="_blank" rel="noopener noreferrer" href="https://unkey.com/discord">Discord</a><a class="flex items-center gap-1 border-b border-foreground/10 py-3.5 text-base font-medium tracking-tight text-background transition-colors hover:text-gray-30" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository (5.3k stars)" href="https://github.com/unkeyed/unkey"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" class="text-background" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.9317 1C5.91925 1 1 6.07047 1 12.2677C1 17.1973 4.14286 21.4227 8.51553 22.972C9.06211 23.1129 9.19876 22.6903 9.19876 22.4086C9.19876 22.1269 9.19876 21.4227 9.19876 20.4368C6.19255 21.141 5.50932 19.0283 5.50932 19.0283C4.96273 17.7607 4.2795 17.3382 4.2795 17.3382C3.32298 16.6339 4.41615 16.6339 4.41615 16.6339C5.50932 16.7748 6.0559 17.7607 6.0559 17.7607C7.01242 19.5917 8.65217 19.0283 9.19876 18.7466C9.3354 18.0424 9.6087 17.479 9.88199 17.1973C7.42236 16.9156 4.96273 15.9297 4.96273 11.5635C4.96273 10.2959 5.37267 9.30993 6.0559 8.6057C5.91925 8.32401 5.50932 7.19724 6.19255 5.64793C6.19255 5.64793 7.14907 5.36624 9.19876 6.7747C10.0186 6.49301 10.9752 6.35216 11.9317 6.35216C12.8882 6.35216 13.8447 6.49301 14.6646 6.7747C16.7143 5.36624 17.6708 5.64793 17.6708 5.64793C18.2174 7.19724 17.9441 8.32401 17.8075 8.6057C18.4907 9.45078 18.9006 10.4367 18.9006 11.5635C18.9006 15.9297 16.3043 16.7748 13.8447 17.0565C14.2547 17.6199 14.6646 18.3241 14.6646 19.31C14.6646 20.8593 14.6646 21.9861 14.6646 22.4086C14.6646 22.6903 14.8012 23.1129 15.4845 22.972C19.8571 21.4227 23 17.1973 23 12.2677C22.8634 6.07047 17.9441 1 11.9317 1Z"></path></svg><span class="sr-only">GitHub</span><span>5.3k</span></a></nav><div class="mt-5 flex flex-col gap-2"><div class="flex gap-1"><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out border bg-transparent hover:bg-gray-12 px-5 text-base flex-1 border-gray-70 text-background" href="https://app.unkey.com/">Login</a><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out px-5 text-base flex-1 bg-background text-foreground hover:bg-gray-12" href="https://app.unkey.com/auth/sign-up">Sign Up</a></div></div></div></div></div></header><div class="grow"><main class="pt-8 md:pt-11 lg:pt-21"><section class="post"><div class="post-container"><article class="mx-auto grid w-full max-w-5xl grid-cols-1 gap-x-12 gap-y-10 md:gap-y-16 lg:grid-cols-[minmax(0,1fr)_12rem] xl:max-w-[72rem] xl:grid-cols-[48rem_18rem] xl:gap-x-24 xl:gap-y-15"><header class="col-start-1 row-start-1 w-full"><header class="post-header"><nav class="flex w-full max-w-full min-w-0" aria-label="Breadcrumb"><ol class="flex w-full min-w-0 items-center" role="list"><li class="flex items-center shrink-0"><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out text-sm [&_svg]:size-3.5 gap-x-0.5 px-0 leading-snug whitespace-nowrap text-muted-foreground hover:text-foreground group" href="/blog"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left size-3.5 shrink-0 transition-transform duration-300 group-hover:-translate-x-0.5" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg><span class="" title="Blog">Blog</span></a></li><li class="flex items-center min-w-0 flex-1"><span class="mx-2.5 text-sm leading-snug font-medium tracking-tight text-muted-foreground" aria-hidden="true">/</span><span class="px-0 text-sm leading-snug whitespace-nowrap text-foreground block max-w-full min-w-0 truncate" aria-current="page" title="Why we're leaving serverless">Why we're leaving serverless</span></li></ol></nav><h1 class="mt-2 font-display text-4xl leading-[1.125] font-normal whitespace-pre-line text-foreground md:text-5xl lg:text-[3.25rem] xl:text-[3.5rem]">Why we're leaving serverless</h1><p class="mt-5 text-lg leading-snug tracking-tight text-balance text-foreground/80 md:text-xl md:leading-snug lg:text-2xl lg:leading-snug"></p><div class="relative mt-10 mb-7 overflow-hidden bg-gray-8 after:pointer-events-none after:absolute after:inset-0 after:border after:border-border after:content-['']"><img alt="Why we're leaving serverless" fetchPriority="high" loading="eager" width="768" height="432" decoding="async" data-nimg="1" class="aspect-video w-full object-cover" style="color:transparent" sizes="(min-width: 1280px) 768px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=640&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 640w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=750&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 750w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=828&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 828w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1080&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1080w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1200&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1200w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=1920&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1920w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=2048&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2048w, /_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=3840&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 3840w" src="/_next/image?url=%2Fimages%2Fblog-images%2Fcovers%2Fserverless-exit.jpg&w=3840&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div><div class="flex items-center justify-between gap-3"><div class="authors flex items-center"><span class="sr-only">Author<!-- -->:</span><img alt="Andreas Thomas" loading="lazy" width="28" height="28" decoding="async" data-nimg="1" class="shrink-0 rounded-full bg-muted size-7" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fteam%2Fandreas.jpeg&w=32&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1x, /_next/image?url=%2Fimages%2Fteam%2Fandreas.jpeg&w=64&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2x" src="/_next/image?url=%2Fimages%2Fteam%2Fandreas.jpeg&w=64&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/><div class="line-clamp-2 leading-none ml-2.5"><span class="font-medium tracking-tight text-foreground text-[0.8125rem]">Andreas Thomas</span></div></div><div class="flex items-center"><time class="flex text-[0.8125rem] leading-none tracking-tight whitespace-nowrap text-muted-foreground uppercase font-normal" dateTime="2025-08-01T00:00:00.000Z">AUG 1, 2025</time><div class="mx-2 size-1 shrink-0 rounded-full bg-muted-foreground" aria-hidden="true"></div><time class="text-[0.8125rem] leading-none font-normal tracking-tight text-muted-foreground" aria-label="Read time: 9 min">9 min</time></div></div><div class="flex flex-col gap-3 border-y border-border py-4 md:flex-row md:items-center md:justify-between md:gap-6 mt-6"><span class="text-[0.8125rem] leading-none font-semibold tracking-tight whitespace-nowrap text-muted-foreground uppercase">Explore with AI</span><div class="flex flex-wrap items-center gap-x-6 gap-y-3"><a class="inline-flex items-center justify-center transition duration-200 ease-in-out text-muted-foreground hover:text-secondary-foreground/80 h-auto gap-2 text-[0.8125rem] font-medium tracking-tight" href="https://chatgpt.com/?hints=search&q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md" target="_blank" rel="noopener noreferrer"><svg class="size-4 shrink-0" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" role="img"><path d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z"></path></svg>Open in <!-- -->ChatGPT</a><a class="inline-flex items-center justify-center transition duration-200 ease-in-out text-muted-foreground hover:text-secondary-foreground/80 h-auto gap-2 text-[0.8125rem] font-medium tracking-tight" href="https://claude.ai/new?q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md" target="_blank" rel="noopener noreferrer"><svg class="size-4 shrink-0" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" role="img"><path d="M4.709 15.955l4.72-2.647.079-.23-.079-.128h-.23l-.79-.048-2.695-.073-2.337-.097-2.265-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.388-1.618-2.586-1.71-1.354-.984-.733-.499-.37-.468-.16-1.025.667-.733.898.061.228.062.91.7 1.945 1.505 2.538 1.869.371.31.149-.105.018-.075-.166-.276-1.377-2.49-1.47-2.534-.654-1.047-.171-.626a3 3 0 01-.105-.74L7.918.094 8.34 0l1.013.135.426.371.628 1.434 1.018 2.264 1.58 3.08.462.913.246.846.093.256h.16V9.18l.129-1.731.244-2.119.236-2.728.082-.768.387-.93.771-.51.6.288.493.703-.069.45-.293 1.907-.574 2.974-.375 1.99h.219l.25-.249 1.013-1.345 1.7-2.123.75-.84.872-.93.563-.444h1.064l.782 1.166-.35 1.205-1.1 1.392-.908 1.179-1.301 1.749-.812 1.4.075.111.194-.02 2.946-.625 1.591-.286 1.896-.326.857.4.094.407-.337.833-2.025.499-2.375.475-3.537.836-.043.031.05.063 1.595.149.683.037h1.673l3.115.235.811.534.486.66-.08.5-1.241.633-1.676-.398-3.911-.93-1.342-.334h-.187v.11l1.117 1.092 2.061 1.853 2.574 2.396.131.589-.328.464-.345-.05-2.236-1.682-.864-.756-1.954-1.643h-.131v.175l.448.659 2.385 3.582.123 1.099-.176.358-.629.221-.689-.126-1.418-1.984-1.464-2.239-1.181-2.008-.144.083-.7 7.532-.328.385-.754.287-.629-.476-.332-.772.332-1.52.4-1.984.328-1.575.295-1.957.176-.65-.014-.045-.144.018-1.482 2.034-2.252 3.044-1.785 1.91-.428.169-.74-.385.067-.685.415-.61 2.475-3.143 1.495-1.953.961-1.122-.011-.169h-.06L4.456 19.13l-1.288.165-.555-.524.067-.853.263-.275 2.183-1.5z"></path></svg>Open in <!-- -->Claude</a><a class="inline-flex items-center justify-center transition duration-200 ease-in-out text-muted-foreground hover:text-secondary-foreground/80 h-auto gap-2 text-[0.8125rem] font-medium tracking-tight" href="https://www.perplexity.ai/?q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md" target="_blank" rel="noopener noreferrer"><svg class="size-4 shrink-0" viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" aria-hidden="true" role="img"><path d="M19.785 0v7.272H22.5V17.62h-2.935V24l-7.037-6.194v6.145h-1.091v-6.152L4.392 24v-6.465H1.5V7.188h2.884V0l7.053 6.494V.19h1.09v6.49L19.786 0zm-7.257 9.044v7.319l5.946 5.234V14.44l-5.946-5.397zm-1.099-.08l-5.946 5.398v7.235l5.946-5.234V8.965zm8.136 7.58h1.844V8.349H13.46l6.105 5.54v2.655zm-8.982-8.28H2.59v8.195h1.8v-2.576l6.192-5.62zM5.475 2.476v4.71h5.115l-5.115-4.71zm13.219 0l-5.115 4.71h5.115v-4.71z"></path></svg>Open in <!-- -->Perplexity</a></div></div></header></header><div class="content col-start-1 row-start-2 prose max-w-none prose-clear-first-child prose-lg"><p>Every millisecond matters when you're in the critical path of API authentication. After two years of fighting serverless limitations, we rebuilt our entire API stack and slashed the end-to-end latency.</p>
|
|
<figure class="my-6 md:my-8"><div class="relative"><img alt="Latency Drop" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="w-full rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=1920&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1x, /_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2x" src="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div></figure>
|
|
<p>When we launched our API on Cloudflare Workers, it seemed like the perfect choice for an API authentication service. Global edge deployment, automatic scaling, and pay-per-use pricing. What's not to love?</p>
|
|
<p>Fast forward, and we've completely rebuilt it using stateful Go servers. The result is a 6x performance improvement and a dramatically simplified architecture that enabled self-hosting and platform independence.</p>
|
|
<p><strong>TL;DR:</strong></p>
|
|
<ul>
|
|
<li>Moved from Cloudflare Workers to Go servers</li>
|
|
<li>Lowered latency by 6x</li>
|
|
<li>Eliminated complex caching workarounds and data pipeline overhead</li>
|
|
<li>Simplified architecture from distributed system to straightforward application</li>
|
|
<li>Enabled self-hosting and platform independence</li>
|
|
</ul>
|
|
<p>Here's the story of why we made this move, the problems that forced our hand, and what we learned along the way.</p>
|
|
<h2 id="the-performance-wall-we-hit" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The Performance Wall We Hit<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>When developers integrate Unkey into their request path, our latency directly impacts their users' experience. We knew we needed to be fast, but serverless was fighting us every step of the way.</p>
|
|
<h3 id="the-caching-problem" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The Caching Problem<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>The fundamental issue was caching. In serverless, you have no guaranteed persistent memory between function invocations. Every cache read requires a network request to an external store, and that's where things got painful. We still used the global scope trick to cache some data across invocations, but the hit rates were very low.</p>
|
|
<figure class="my-6 md:my-8"><div class="relative"><img alt="Cache Hits" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="w-full rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-hits.png&w=1920&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1x, /_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-hits.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2x" src="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-hits.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div></figure>
|
|
<p>And while Cloudflare's cache had a very good hit rate, the latency was just not acceptable. It consistently took 30ms+ at p99 for cache reads. That's not necessarily terrible if you compare it to other networked caches, but when you're trying to build a sub-10ms API, it's a showstopper.</p>
|
|
<figure class="my-6 md:my-8"><div class="relative"><img alt="Cache Latency" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="w-full rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-latency.png&w=1920&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1x, /_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-latency.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2x" src="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Fcf-cache-latency.png&w=3840&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div></figure>
|
|
<p>Our caching strategy used SWR across multiple tiered caches, but here's the thing: zero network requests are always faster than one network request. No amount of stacking external caches could get us around this fundamental limitation.</p>
|
|
<h3 id="the-saas-glue-problem" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The SaaS Glue Problem<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>Serverless promised everyone you wouldn't need to worry about operations, it just works. And for the actual function execution that was indeed our experience too. Cloudflare Workers themselves were very stable. However, you end up needing multiple other products to solve artificial problems that serverless itself created.</p>
|
|
<p>Need caching? Add Redis. Need batching? Add a Queue and downstream handler. Need real-time features? Add Something. Each service adds latency, complexity, and another point of failure in addition to charging you for their services.</p>
|
|
<p>What's frustrating is that these aren't inherent technical challenges but limitations imposed by the serverless model. In a traditional server, you'd have all of these capabilities built-in or easily accessible without network hops.</p>
|
|
<p>We ended up having to use Cloudflare Durable Objects, Cloudflare Logstreams, Cloudflare Queues, Cloudflare Workflows and then actually some homemade stateful servers on top of that.</p>
|
|
<p>We found ourselves constantly evaluating and integrating new SaaS products, not to add business value, but just to work around the constraints of our chosen architecture. Many "simple" features required researching vendors, comparing pricing, handling authentication for yet another service, and debugging network issues between systems we don't control.</p>
|
|
<h3 id="the-data-pipeline-nightmare" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The Data Pipeline Nightmare<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>Performance wasn't our only problem. Getting data out of serverless functions was equally challenging.</p>
|
|
<p><strong>The Batching Problem</strong></p>
|
|
<p>Our API emits events for every key verification, rate limit, and API call. In traditional servers, you'd batch these events in memory and flush them periodically. In serverless, you have to flush on every single function invocation because the function might disappear after handling the request.</p>
|
|
<p>This led us to build an elaborate and overly complex pipeline:</p>
|
|
<p><strong>For Analytics Events:</strong></p>
|
|
<p>We built chproxy specifically because ClickHouse doesn't like thousands of tiny inserts. It's a Go service that buffers events and sends them in large batches. Each Cloudflare Worker would send individual analytics events to <code>chproxy</code>, which would then aggregate and send them to ClickHouse.</p>
|
|
<p><strong>For Metrics and Logs:</strong></p>
|
|
<p>To get metrics and logs out of Cloudflare Workers and into Axiom, we couldn't just send them directly because Axiom would sometimes reject them due to rate limits. We had to build a buffering service that would aggregate logs and metrics before sending them to Axiom without breaking the bank. Initially we thought we could just use Cloudflare Queues, but it would've been way too expensive. I think it was around trippling our current costs just to add queues.</p>
|
|
<p>Our metrics became elaborate JSON logs that Cloudflare would capture, then we had another worker acting as logdrain consumer. The consumer worker would parse the payload from Cloudflare, split the metrics events from log events and then send them off to Axiom.</p>
|
|
<p>We essentially built a distributed event processing system with multiple failure points just to work around serverless limitations.</p>
|
|
<h2 id="the-solution-stateful-simplicity" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The Solution: Stateful Simplicity<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>When we decided to rebuild our API in Go for v2, the difference was immediately obvious. Instead of that complex pipeline, we could just batch events in memory and flush directly every few seconds or whenever the buffer reached a certain size.</p>
|
|
<p>That's it. No auxiliary services, no complex log pipelines, no coordination. Just straightforward batching that any server application would do.</p>
|
|
<h3 id="performance-results" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Performance Results<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>Being easier to operate or think about is one thing, but not really what our users care about. They care about performance. So how much faster is it?</p>
|
|
<figure class="my-6 md:my-8"><div class="relative"><img alt="API latency comparison: serverless vs stateful showing dramatic improvement" loading="lazy" width="800" height="400" decoding="async" data-nimg="1" class="w-full rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=828&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1x, /_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=1920&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2x" src="/_next/image?url=%2Fimages%2Fblog-images%2Fserverless-exit%2Flatency_drop.png&w=1920&q=100&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></div></figure>
|
|
<p>We tested calling our <code>/v1/keys.verifyKey</code> endpoint from multiple regions and then switching over to <code>/v2/keys.verifyKey</code>. I think it's pretty easy to spot in the chart above.</p>
|
|
<p>Now you might say, it's kind of unfair to measure the latency from the same cloud provider as where the API runs. However that's where most of our customers are located too. So maybe this is an unfair comparison, but it accurately reflects the reality of our users' experiences. It's worth noting that the v1 API runs in over 300 POPs around the world and has datacenters in each of those regions as well.</p>
|
|
<h2 id="strategic-benefits-beyond-performance" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Strategic Benefits Beyond Performance<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>The move to stateful servers also unlocked other benefits.</p>
|
|
<h3 id="self-hosting" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Self-Hosting<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>Being tied to Cloudflare's runtime meant our customers couldn't self-host Unkey. While the Workers runtime is technically open source, getting it running locally (even in dev mode) is incredibly difficult.</p>
|
|
<p>With standard Go servers, self-hosting becomes trivial:</p>
|
|
<figure class="code-block group h-fit w-full rounded-lg border border-border bg-background max-w-full"><div class="relative"><div dir="ltr" data-slot="scroll-area" class="relative overflow-hidden w-full" style="position:relative;--radix-scroll-area-corner-width:0px;--radix-scroll-area-corner-height:0px"><style>[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}</style><div data-radix-scroll-area-viewport="" class="size-full rounded-[inherit]" data-slot="scroll-area-viewport" style="overflow-x:hidden;overflow-y:hidden"><div style="min-width:100%;display:table"><div class="code-block-body px-4 py-5 text-left font-mono text-sm"><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># That's it. No special runtime, no complex setup.</span></span>
|
|
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 8080:8080</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> unkey/api</span></span></code></pre></div></div></div></div><button class="code-block-copy-button absolute right-4 flex size-7 items-center justify-center rounded border border-border bg-popover text-muted-foreground top-4 opacity-100 transition-[color,opacity] duration-300 hover:text-foreground/80 md:opacity-0 md:group-focus-within:opacity-100 md:group-hover:opacity-100" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg></button></div></figure>
|
|
<p>This isn't just about customer choice. It dramatically improved our own development experience. Developers can now spin up the entire Unkey stack locally in seconds, making debugging and testing infinitely easier.</p>
|
|
<h3 id="developer-experience-transformation" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Developer Experience Transformation<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>The complexity tax of serverless was affecting our entire team. Every new feature required thinking about:</p>
|
|
<ul>
|
|
<li>How to work around function limits</li>
|
|
<li>How to handle data persistence between invocations</li>
|
|
<li>How to debug issues across distributed log pipelines</li>
|
|
<li>How to test locally with Cloudflare-specific APIs</li>
|
|
</ul>
|
|
<h3 id="platform-independence" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Platform Independence<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>Perhaps most importantly, we're no longer locked into Cloudflare's ecosystem. We can deploy anywhere, use any database, and integrate with any third-party service without worrying about runtime compatibility.</p>
|
|
<h2 id="migration-strategy-and-lessons" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Migration Strategy and Lessons<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>We used the migration as an opportunity to fix API design issues that had accumulated over time. The new v2 API runs alongside the old v1, and customers can use both during the deprecation period.</p>
|
|
<p>The one advantage of keeping serverless around? It doesn't cost us much to keep the v1 API running as usage dwindles to zero. We're essentially getting a free migration period.</p>
|
|
<h3 id="what-we-kept" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">What We Kept<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>We didn't throw out everything about our serverless approach:</p>
|
|
<ul>
|
|
<li><strong>Global edge deployment:</strong> We're using AWS Global Accelerator to maintain low latency worldwide</li>
|
|
<li><strong>Automatic scaling:</strong> Fargate handles scaling for us without the serverless constraints</li>
|
|
</ul>
|
|
<h3 id="rate-limiter-performance-boost" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">Rate Limiter Performance Boost<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>One area where the improvement has been particularly dramatic is our rate limiter. In the serverless model, we had to make significant tradeoffs between speed, accuracy, and cost. The distributed nature made achieving all three nearly impossible.</p>
|
|
<p>With stateful servers and in-memory state, we've been able to build a rate limiter that's faster, more accurate, and actually reduces our operational costs. We'll dive deep into this in a future post.</p>
|
|
<h2 id="when-serverless-makes-sense-and-when-it-doesnt" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">When Serverless Makes Sense (And When It Doesn't)<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>This isn't an anti-serverless post. Serverless is fantastic for many use cases:</p>
|
|
<ul>
|
|
<li><strong>Infrequent workloads:</strong> When you're not running consistently, the scaling-to-zero economics are unbeatable</li>
|
|
<li><strong>Simple request/response patterns:</strong> When you don't need persistent state or complex data pipelines</li>
|
|
<li><strong>Event-driven architectures:</strong> Serverless excels at responding to events without managing infrastructure</li>
|
|
</ul>
|
|
<p>But serverless struggles when:</p>
|
|
<ul>
|
|
<li><strong>You need consistent low latency:</strong> External networked dependencies kill performance</li>
|
|
<li><strong>You require persistent state:</strong> Working around statelessness creates complexity</li>
|
|
<li><strong>You have high-frequency workloads:</strong> The per-invocation model becomes expensive</li>
|
|
<li><strong>You need fine-grained control:</strong> Platform abstractions can become limitations</li>
|
|
</ul>
|
|
<h3 id="the-complexity-tax" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">The Complexity Tax<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h3>
|
|
<p>The biggest lesson from our migration is understanding the complexity tax of working around platform limitations.</p>
|
|
<p>In serverless, we built:</p>
|
|
<ul>
|
|
<li>A sophisticated caching library to work around statelessness</li>
|
|
<li>Multiple auxiliary services for data batching</li>
|
|
<li>Complex log pipelines for metrics collection</li>
|
|
<li>Elaborate workarounds for local development</li>
|
|
</ul>
|
|
<p>In stateful servers, all of that disappeared. We went from a distributed system with many moving parts to a straightforward application architecture.</p>
|
|
<p>Sometimes the best solution isn't to work around limitations but to choose a different foundation.</p>
|
|
<h2 id="whats-next" class="w-fit font-semibold text-pretty text-foreground !scroll-mt-[calc(var(--sticky-header-height)+2rem)] cursor-pointer">What's Next<span class="inline-flex min-w-4 shrink-0 lg:min-w-14"></span></h2>
|
|
<p>We're currently running on AWS Fargate behind Global Accelerator, but this is temporary. Next year, we're launching "Unkey Deploy", our own deployment platform that will let customers (and us) run Unkey anywhere they want.</p>
|
|
<p>The move to stateful Go servers was the first step in making Unkey truly portable and self-hostable. Stay tuned for more details on that front.</p>
|
|
<p>Want to see the implementation details? Both our serverless and stateful APIs are open source in our GitHub repository. The serverless version is in <a href="https://github.com/unkeyed/unkey/tree/main/apps/api"><code>apps/api/</code></a> and the new Go version is in <a href="https://github.com/unkeyed/unkey/tree/main/go/apps/api"><code>go/apps/api/</code></a>.</p></div><aside class="aside -my-10 h-fit max-h-svh overflow-auto py-9 sticky top-[var(--sticky-header-height)] col-start-2 row-start-2 hidden w-full shrink-0 flex-col lg:flex"><nav class="table-of-contents flex w-full flex-col items-start gap-3.5 mt-2" aria-label="On this page"><h2 class="text-sm leading-snug font-medium tracking-tight text-foreground">On this page</h2><ol class="flex w-full flex-col gap-y-3.5"><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#the-performance-wall-we-hit">The Performance Wall We Hit</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#the-caching-problem">The Caching Problem</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#the-saas-glue-problem">The SaaS Glue Problem</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#the-data-pipeline-nightmare">The Data Pipeline Nightmare</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#the-solution-stateful-simplicity">The Solution: Stateful Simplicity</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#performance-results">Performance Results</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#strategic-benefits-beyond-performance">Strategic Benefits Beyond Performance</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#self-hosting">Self-Hosting</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#developer-experience-transformation">Developer Experience Transformation</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#platform-independence">Platform Independence</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#migration-strategy-and-lessons">Migration Strategy and Lessons</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#what-we-kept">What We Kept</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#rate-limiter-performance-boost">Rate Limiter Performance Boost</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#when-serverless-makes-sense-and-when-it-doesnt">When Serverless Makes Sense (And When It Doesn't)</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 pl-2.5 font-normal text-muted-foreground hover:text-foreground" href="#the-complexity-tax">The Complexity Tax</a></li><li class="flex w-full"><a class="line-clamp-2 w-full text-left text-sm leading-snug tracking-tight transition-colors duration-200 font-normal text-muted-foreground hover:text-foreground" href="#whats-next">What's Next</a></li></ol></nav><span class="invisible h-5" aria-hidden="true"></span></aside></article></div></section><section class="relative h-[clamp(26.25rem,94vw,28.75rem)] overflow-hidden bg-panel sm:h-[31.25rem] md:h-130 lg:h-[32.5rem] xl:h-[34.125rem] mt-51.75"><img alt="" loading="lazy" decoding="async" data-nimg="fill" class="pointer-events-none absolute inset-0 z-0 object-cover sm:hidden" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 960px" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=32&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 32w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=48&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 48w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=64&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 64w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=96&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=128&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=256&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=384&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=640&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=750&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=828&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=1080&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=1200&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=1920&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=2048&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=3840&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE 3840w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fposter.1365l~u5h1w2q.jpg&w=3840&q=95&dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/><video autoPlay="" loop="" muted="" playsInline="" preload="none" poster="/_next/static/media/poster.1365l~u5h1w2q.jpg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" aria-hidden="true" class="pointer-events-none absolute inset-0 z-0 hidden h-full w-full object-cover sm:block"></video><div class="relative z-10 container flex h-full flex-col pt-12 pb-10 sm:pt-14 sm:pb-11 md:pt-16 md:pb-12.75 lg:pb-14 xl:pb-12.75"><h2 class="max-w-144 font-display text-2xl leading-[1.125] text-white sm:text-[1.875rem] md:text-[2rem]">Turn your API stack into one workflow.<!-- --> <span class="text-gray-60 min-[480px]:block">Start for free, integrate in minutes, and scale when you need to.</span></h2><a class="inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-5 text-base mt-auto w-fit lg:mt-13 xl:mt-auto" href="https://app.unkey.com/">Start for free</a></div></section><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Why we're leaving serverless","description":"","datePublished":"2025-08-01T00:00:00.000Z","url":"https://unkey.com/blog/serverless-exit","image":"https://unkey.com/images/blog-images/covers/serverless-exit.jpg","author":[{"@type":"Person","name":"Andreas Thomas","image":"/images/team/andreas.jpeg"}]}</script></main><!--$--><!--/$--></div><footer class="relative w-full pt-8 pb-10 md:pt-10 lg:pt-11 lg:pb-18"><div class="container flex flex-col gap-y-10 sm:flex-row sm:items-start sm:gap-x-27.5 lg:gap-x-20 xl:justify-start xl:gap-x-40 2xl:gap-x-91"><div class="flex max-w-72 flex-col gap-y-10 lg:shrink-0"><a class="inline-flex w-fit self-start" href="/"><img alt="unkey" loading="lazy" width="83" height="28" decoding="async" data-nimg="1" class="block h-auto w-20.75" style="color:transparent" src="/logo-light.svg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE"/></a><div class="flex flex-col gap-y-4"><p class="text-sm leading-tight font-medium -tracking-wide text-gray-80">Build better APIs faster</p><p class="text-sm leading-tight font-medium -tracking-wide text-gray-40">© 2026 Unkey Inc. All rights reserved.</p><a class="inline-flex w-fit items-center gap-x-1.5 rounded-full border border-gray-40/40 px-3 py-1.5 text-xs leading-none font-medium tracking-tight text-gray-60 transition-colors duration-200 hover:border-gray-60/60 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://trust.inc/unkey"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check size-3.5" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg>SOC 2 Type II Certified</a></div></div><nav aria-label="Footer navigation" class="grid grid-cols-2 gap-x-8 gap-y-10 sm:grid-cols-[repeat(2,minmax(10rem,10rem))] md:gap-y-12 lg:grid-cols-4 lg:gap-8 2xl:gap-16 w-full flex-1"><div class="flex flex-col gap-y-5"><h3 class="text-[0.9375rem] leading-snug font-medium tracking-tight text-white">Company</h3><ul class="flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60"><li><a class="transition-colors duration-200 hover:text-white" href="/about">About</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://github.com/unkeyed/unkey">Source Code</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://status.unkey.com">Status Page</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://feedback.unkey.com/roadmap">Roadmap</a></li></ul></div><div class="flex flex-col gap-y-5"><h3 class="text-[0.9375rem] leading-snug font-medium tracking-tight text-white">Resources</h3><ul class="flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60"><li><a class="transition-colors duration-200 hover:text-white" href="/blog">Blog</a></li><li><a class="transition-colors duration-200 hover:text-white" href="/case-studies">Case Studies</a></li><li><a class="transition-colors duration-200 hover:text-white" href="/changelog">Changelog</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://unkey.com/docs/introduction">Docs</a></li><li><a class="transition-colors duration-200 hover:text-white" href="/glossary">Glossary</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://feedback.unkey.com/">Feature Request</a></li></ul></div><div class="flex flex-col gap-y-5"><h3 class="text-[0.9375rem] leading-snug font-medium tracking-tight text-white">Connect</h3><ul class="flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60"><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://x.com/unkeydev">X (Twitter)</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://unkey.com/discord">Discord</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://unkey.cal.com/unkey/user-interview?utm_source=banner&utm_campaign=oss&slug=unkey&type=user-interview&orgRedirection=true">Book a Call</a></li></ul></div><div class="flex flex-col gap-y-5"><h3 class="text-[0.9375rem] leading-snug font-medium tracking-tight text-white">Legal</h3><ul class="flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60"><li><a class="transition-colors duration-200 hover:text-white" href="/policies/terms">Terms of Service</a></li><li><a class="transition-colors duration-200 hover:text-white" href="/policies/privacy">Privacy Policy</a></li><li><a class="transition-colors duration-200 hover:text-white" target="_blank" rel="noopener noreferrer" href="https://trust.inc/unkey">Trust Center</a></li></ul></div></nav></div></footer></div><script src="/_next/static/chunks/0i7h3yppcug_9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[256759,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"ConsentProvider\"]\n3:I[714308,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n4:I[30445,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n5:I[405539,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n6:I[95874,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n7:I[75933,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n8:I[183559,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n9:I[25387,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dp"])</script><script>self.__next_f.push([1,"l=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"\"]\n13:I[565614,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\",1]\n:HL[\"/_next/static/chunks/139uxl22pgbkf.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"style\"]\n:HL[\"/_next/static/chunks/0suulr-dft_4b.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"style\"]\n:HL[\"/_next/static/media/051742360c26797e-s.p.0f97p8c3305p~.woff2?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"https://use.typekit.net/af/2c0cee/000000000000000077524f49/31/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191\u0026fvd=n4\u0026v=3\",\"font\",{\"crossOrigin\":\"anonymous\",\"type\":\"font/woff2\"}]\n:HL[\"https://use.typekit.net/tcb4uyw.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"blog\",\"serverless-exit\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(website)\",{\"children\":[\"blog\",{\"children\":[[\"slug\",\"serverless-exit\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/139uxl22pgbkf.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0suulr-dft_4b.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://use.typekit.net\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://p.typekit.net\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"href\":\"https://use.typekit.net/af/2c0cee/000000000000000077524f49/31/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191\u0026fvd=n4\u0026v=3\",\"as\":\"font\",\"type\":\"font/woff2\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"https://use.typekit.net/tcb4uyw.css\"}]]}],[\"$\",\"body\",null,{\"className\":\"bg-background inter_dfe0d3ab-module__S0kLsG__variable jetbrains_mono_72f04ab4-module__hEmn3q__variable font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-svh flex-col bg-background\",\"children\":[[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-50 flex items-center pt-2.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"pointer-events-none absolute inset-0 -z-10 h-full\"}],[\"$\",\"div\",null,{\"className\":\"container flex items-center gap-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative z-60 flex h-11 flex-1 items-center justify-between bg-foreground pr-0 pl-6\",\"children\":[[\"$\",\"$L5\",null,{\"alt\":\"unkey\",\"href\":\"/\",\"src\":\"/logo-dark.svg\"}],[\"$\",\"$L6\",null,{\"className\":\"hidden h-full lg:flex\",\"items\":[{\"label\":\"Resources\",\"href\":\"/\",\"children\":[{\"label\":\"Blog\",\"href\":\"/blog\",\"description\":\"Read product updates and insights\",\"icon\":\"/icons/header/blog.svg\"},{\"label\":\"Case studies\",\"href\":\"/case-studies\",\"description\":\"Practical results from real deployments\",\"icon\":\"/icons/header/case-studies.svg\"},{\"label\":\"Changelog\",\"href\":\"/changelog\",\"description\":\"Track what shipped, improved, and fixed\",\"icon\":\"/icons/header/changelog.svg\"},{\"label\":\"Glossary\",\"href\":\"/glossary\",\"description\":\"Clear definitions for API terms\",\"icon\":\"/icons/header/glossary.svg\"}]},{\"label\":\"Pricing\",\"href\":\"/pricing\"},{\"label\":\"Docs\",\"href\":\"https://unkey.com/docs/introduction\"}]}]]}],[\"$\",\"$L7\",null,{}],[\"$\",\"$L8\",null,{\"items\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:0:props:notFound:0:props:children:0:props:children:1:props:children:0:props:children:1:props:items\"}]]}]]}],[\"$\",\"main\",null,{\"className\":\"flex grow\",\"children\":[\"$\",\"section\",null,{\"className\":\"not-found flex grow items-center justify-center px-5 py-20 md:px-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex max-w-md flex-col items-center justify-center md:max-w-lg\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-8xl leading-none font-semibold tracking-tighter text-foreground md:text-9xl md:leading-none\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"Error\"}],\"404\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\": Page Not Found\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-2.5 text-center text-base leading-normal tracking-tight text-foreground md:text-lg md:leading-normal\",\"children\":\"We know this isn't where you intended to land, but we hope you have some fun while you're here.\"}],[\"$\",\"$L9\",null,{\"className\":\"inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-5 text-base mt-6 xl:mt-8\",\"href\":\"/\",\"ref\":\"$undefined\",\"children\":\"Go to homepage\"}]]}]}]}],\"$La\"]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],\"$Lb\",\"$Lc\"]}]}]]}]]}],{\"children\":[\"$Ld\",{\"children\":[\"$Le\",{\"children\":[\"$Lf\",{\"children\":[\"$L10\",{},null,false,null]},null,false,\"$@11\"]},null,false,\"$@11\"]},null,false,null]},null,false,null],\"$L12\",false]],\"m\":\"$undefined\",\"G\":[\"$13\",[\"$L14\",\"$L15\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"16:I[484556,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"Image\"]\n17:I[293752,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n1c:I[763331,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"Tracking\"]\n1d:I[599159,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"ConsentBanner\"]\n1f:I[614085,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/136_z04zime~r.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n21:I[654824,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"OutletBoundary\"]\n22:\"$Sreact.suspense\"\n25:I[654824,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99"])</script><script>self.__next_f.push([1,"HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"ViewportBoundary\"]\n27:I[654824,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"footer\",null,{\"className\":\"relative w-full pt-8 pb-10 md:pt-10 lg:pt-11 lg:pb-18\",\"children\":[\"$\",\"div\",null,{\"className\":\"container flex flex-col gap-y-10 sm:flex-row sm:items-start sm:gap-x-27.5 lg:gap-x-20 xl:justify-start xl:gap-x-40 2xl:gap-x-91\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex max-w-72 flex-col gap-y-10 lg:shrink-0\",\"children\":[[\"$\",\"$L9\",null,{\"className\":\"inline-flex w-fit self-start\",\"href\":\"/\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"block h-auto w-20.75\",\"src\":\"/logo-light.svg\",\"alt\":\"unkey\",\"width\":83,\"height\":28}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-4\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm leading-tight font-medium -tracking-wide text-gray-80\",\"children\":\"Build better APIs faster\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-tight font-medium -tracking-wide text-gray-40\",\"children\":\"© 2026 Unkey Inc. All rights reserved.\"}],[\"$\",\"$L9\",null,{\"className\":\"inline-flex w-fit items-center gap-x-1.5 rounded-full border border-gray-40/40 px-3 py-1.5 text-xs leading-none font-medium tracking-tight text-gray-60 transition-colors duration-200 hover:border-gray-60/60 hover:text-white\",\"href\":\"https://trust.inc/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\"key\":\"oel41y\"}],[\"path\",{\"d\":\"m9 12 2 2 4-4\",\"key\":\"dzmm74\"}]],\"className\":\"lucide-shield-check size-3.5\",\"aria-hidden\":\"true\"}],\"SOC 2 Type II Certified\"]}]]}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer navigation\",\"className\":\"grid grid-cols-2 gap-x-8 gap-y-10 sm:grid-cols-[repeat(2,minmax(10rem,10rem))] md:gap-y-12 lg:grid-cols-4 lg:gap-8 2xl:gap-16 w-full flex-1\",\"children\":[[\"$\",\"div\",\"Company\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Company\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"About\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/about\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"About\"}]}],[\"$\",\"li\",\"Source Code\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://github.com/unkeyed/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Source Code\"}]}],[\"$\",\"li\",\"Status Page\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://status.unkey.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Status Page\"}]}],[\"$\",\"li\",\"Roadmap\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://feedback.unkey.com/roadmap\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Roadmap\"}]}]]}]]}],[\"$\",\"div\",\"Resources\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"Blog\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/blog\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Blog\"}]}],[\"$\",\"li\",\"Case Studies\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/case-studies\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Case Studies\"}]}],[\"$\",\"li\",\"Changelog\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/changelog\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Changelog\"}]}],[\"$\",\"li\",\"Docs\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.com/docs/introduction\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Docs\"}]}],[\"$\",\"li\",\"Glossary\",{\"children\":\"$L18\"}],\"$L19\"]}]]}],\"$L1a\",\"$L1b\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"b:[\"$\",\"$L1c\",null,{}]\nc:[\"$\",\"$L1d\",null,{}]\nd:[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L1e\"]}]\ne:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$1f\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/136_z04zime~r.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true}]],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nf:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n10:[\"$\",\"$1\",\"c\",{\"children\":[\"$L20\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L21\",null,{\"children\":[\"$\",\"$22\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@23\"}]}]]}]\n24:[]\n11:\"$W24\"\n12:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L25\",null,{\"children\":\"$L26\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L27\",null,{\"children\":[\"$\",\"$22\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L28\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n14:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/139uxl22pgbkf.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n15:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0suulr-dft_4b.css?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/glossary\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Glossary\"}]\n19:[\"$\",\"li\",\"Feature Request\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://feedback.unkey.com/\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Feature Request\"}]}]\n1a:[\"$\",\"div\",\"Connect\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Connect\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"X (Twitter)\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://x.com/unkeydev\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"X (Twitter)\"}]}],[\"$\",\"li\",\"Discord\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.com/discord\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Discord\"}]}],[\"$\",\"li\",\"Book a Call\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.cal.com/unkey/user-interview?utm_source=banner\u0026utm_campaign=oss\u0026slug=unkey\u0026type=user-interview\u0026orgRedirection=true\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Book a Call\"}]}]]}]]}]\n1b:[\"$\",\"div\",\"Legal\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Legal\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"Terms of Service\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/policies/terms\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Terms of Service\"}]}],[\"$\",\"li\",\"Privacy Policy\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/policies/privacy\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Privacy Policy\"}]}],[\"$\",\"li\",\"Trust Center\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://trust.inc/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Trust Center\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"flex min-h-svh grow flex-col rounded-none bg-background aria-hidden:[-webkit-mask-image:-webkit-radial-gradient(white,black)]\",\"vaul-drawer-wrapper\":\"\",\"children\":[[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-50 flex items-center pt-2.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"pointer-events-none absolute inset-0 -z-10 h-full\"}],[\"$\",\"div\",null,{\"className\":\"container flex items-center gap-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative z-60 flex h-11 flex-1 items-center justify-between bg-foreground pr-0 pl-6\",\"children\":[[\"$\",\"$L5\",null,{\"alt\":\"unkey\",\"href\":\"/\",\"src\":\"/logo-dark.svg\"}],[\"$\",\"$L6\",null,{\"className\":\"hidden h-full lg:flex\",\"items\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:0:props:notFound:0:props:children:0:props:children:1:props:children:0:props:children:1:props:items\"}]]}],[\"$\",\"$L7\",null,{}],[\"$\",\"$L8\",null,{\"items\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:0:props:notFound:0:props:children:0:props:children:1:props:children:0:props:children:1:props:items\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"grow\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"className\":\"flex min-h-svh flex-col bg-background\",\"children\":[\"$\",\"section\",null,{\"className\":\"not-found flex grow items-center justify-center px-5 py-20 md:px-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex max-w-md flex-col items-center justify-center md:max-w-lg\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-8xl leading-none font-semibold tracking-tighter text-foreground md:text-9xl md:leading-none\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"Error\"}],\"404\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\": Page Not Found\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-2.5 text-center text-base leading-normal tracking-tight text-foreground md:text-lg md:leading-normal\",\"children\":\"We know this isn't where you intended to land, but we hope you have some fun while you're here.\"}],[\"$\",\"$L9\",null,{\"className\":\"inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out bg-foreground text-background hover:bg-gray-90 px-5 text-base mt-6 xl:mt-8\",\"href\":\"/\",\"ref\":\"$undefined\",\"children\":\"Go to homepage\"}]]}]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"footer\",null,{\"className\":\"relative w-full pt-8 pb-10 md:pt-10 lg:pt-11 lg:pb-18\",\"children\":[\"$\",\"div\",null,{\"className\":\"container flex flex-col gap-y-10 sm:flex-row sm:items-start sm:gap-x-27.5 lg:gap-x-20 xl:justify-start xl:gap-x-40 2xl:gap-x-91\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex max-w-72 flex-col gap-y-10 lg:shrink-0\",\"children\":[[\"$\",\"$L9\",null,{\"className\":\"inline-flex w-fit self-start\",\"href\":\"/\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"block h-auto w-20.75\",\"src\":\"/logo-light.svg\",\"alt\":\"unkey\",\"width\":83,\"height\":28}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-4\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm leading-tight font-medium -tracking-wide text-gray-80\",\"children\":\"Build better APIs faster\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-tight font-medium -tracking-wide text-gray-40\",\"children\":\"© 2026 Unkey Inc. All rights reserved.\"}],[\"$\",\"$L9\",null,{\"className\":\"inline-flex w-fit items-center gap-x-1.5 rounded-full border border-gray-40/40 px-3 py-1.5 text-xs leading-none font-medium tracking-tight text-gray-60 transition-colors duration-200 hover:border-gray-60/60 hover:text-white\",\"href\":\"https://trust.inc/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$a:props:children:props:children:0:props:children:1:props:children:2:props:children:0:props:iconNode\",\"className\":\"lucide-shield-check size-3.5\",\"aria-hidden\":\"true\"}],\"SOC 2 Type II Certified\"]}]]}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer navigation\",\"className\":\"grid grid-cols-2 gap-x-8 gap-y-10 sm:grid-cols-[repeat(2,minmax(10rem,10rem))] md:gap-y-12 lg:grid-cols-4 lg:gap-8 2xl:gap-16 w-full flex-1\",\"children\":[[\"$\",\"div\",\"Company\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Company\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"About\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/about\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"About\"}]}],\"$L29\",\"$L2a\",\"$L2b\"]}]]}],\"$L2c\",\"$L2d\",\"$L2e\"]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"29:[\"$\",\"li\",\"Source Code\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://github.com/unkeyed/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Source Code\"}]}]\n2a:[\"$\",\"li\",\"Status Page\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://status.unkey.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Status Page\"}]}]\n2b:[\"$\",\"li\",\"Roadmap\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://feedback.unkey.com/roadmap\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Roadmap\"}]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"div\",\"Resources\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"Blog\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/blog\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Blog\"}]}],[\"$\",\"li\",\"Case Studies\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/case-studies\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Case Studies\"}]}],[\"$\",\"li\",\"Changelog\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/changelog\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Changelog\"}]}],[\"$\",\"li\",\"Docs\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.com/docs/introduction\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Docs\"}]}],[\"$\",\"li\",\"Glossary\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/glossary\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Glossary\"}]}],[\"$\",\"li\",\"Feature Request\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://feedback.unkey.com/\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Feature Request\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2d:[\"$\",\"div\",\"Connect\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Connect\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"X (Twitter)\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://x.com/unkeydev\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"X (Twitter)\"}]}],[\"$\",\"li\",\"Discord\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.com/discord\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Discord\"}]}],[\"$\",\"li\",\"Book a Call\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://unkey.cal.com/unkey/user-interview?utm_source=banner\u0026utm_campaign=oss\u0026slug=unkey\u0026type=user-interview\u0026orgRedirection=true\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Book a Call\"}]}]]}]]}]\n2e:[\"$\",\"div\",\"Legal\",{\"className\":\"flex flex-col gap-y-5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[0.9375rem] leading-snug font-medium tracking-tight text-white\",\"children\":\"Legal\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-3 text-[0.9375rem] leading-snug font-medium tracking-tight text-gray-60\",\"children\":[[\"$\",\"li\",\"Terms of Service\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/policies/terms\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Terms of Service\"}]}],[\"$\",\"li\",\"Privacy Policy\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"/policies/privacy\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Privacy Policy\"}]}],[\"$\",\"li\",\"Trust Center\",{\"children\":[\"$\",\"$L9\",null,{\"className\":\"transition-colors duration-200 hover:text-white\",\"href\":\"https://trust.inc/unkey\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Trust Center\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"26:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#040406\"}]]\n"])</script><script>self.__next_f.push([1,"20:[\"$\",\"main\",null,{\"className\":\"pt-8 md:pt-11 lg:pt-21\",\"children\":[[\"$\",\"section\",null,{\"className\":\"post\",\"children\":[\"$\",\"div\",null,{\"className\":\"post-container\",\"children\":[\"$\",\"article\",null,{\"className\":\"mx-auto grid w-full max-w-5xl grid-cols-1 gap-x-12 gap-y-10 md:gap-y-16 lg:grid-cols-[minmax(0,1fr)_12rem] xl:max-w-[72rem] xl:grid-cols-[48rem_18rem] xl:gap-x-24 xl:gap-y-15\",\"children\":[[\"$\",\"header\",null,{\"className\":\"col-start-1 row-start-1 w-full\",\"children\":[\"$\",\"header\",null,{\"className\":\"post-header\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"flex w-full max-w-full min-w-0\",\"aria-label\":\"Breadcrumb\",\"children\":[\"$\",\"ol\",null,{\"className\":\"flex w-full min-w-0 items-center\",\"role\":\"list\",\"children\":[[\"$\",\"li\",\"0\",{\"className\":\"flex items-center shrink-0\",\"children\":[false,[\"$\",\"$L9\",null,{\"className\":\"inline-flex items-center justify-center h-11 gap-1 font-medium tracking-tight transition duration-200 ease-in-out text-sm [\u0026_svg]:size-3.5 gap-x-0.5 px-0 leading-snug whitespace-nowrap text-muted-foreground hover:text-foreground group\",\"href\":\"/blog\",\"ref\":\"$undefined\",\"children\":[[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m12 19-7-7 7-7\",\"key\":\"1l729n\"}],[\"path\",{\"d\":\"M19 12H5\",\"key\":\"x3x0zl\"}]],\"className\":\"lucide-arrow-left size-3.5 shrink-0 transition-transform duration-300 group-hover:-translate-x-0.5\",\"size\":14,\"strokeWidth\":2.5,\"aria-hidden\":true}],[\"$\",\"span\",null,{\"className\":\"\",\"title\":\"Blog\",\"children\":\"Blog\"}]]}]]}],[\"$\",\"li\",\"1\",{\"className\":\"flex items-center min-w-0 flex-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"mx-2.5 text-sm leading-snug font-medium tracking-tight text-muted-foreground\",\"aria-hidden\":true,\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"px-0 text-sm leading-snug whitespace-nowrap text-foreground block max-w-full min-w-0 truncate\",\"aria-current\":\"page\",\"title\":\"Why we're leaving serverless\",\"children\":\"Why we're leaving serverless\"}]]}]]}]}],[\"$\",\"h1\",null,{\"className\":\"mt-2 font-display text-4xl leading-[1.125] font-normal whitespace-pre-line text-foreground md:text-5xl lg:text-[3.25rem] xl:text-[3.5rem]\",\"children\":\"Why we're leaving serverless\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-lg leading-snug tracking-tight text-balance text-foreground/80 md:text-xl md:leading-snug lg:text-2xl lg:leading-snug\",\"children\":\"\"}],[\"$\",\"div\",null,{\"className\":\"relative mt-10 mb-7 overflow-hidden bg-gray-8 after:pointer-events-none after:absolute after:inset-0 after:border after:border-border after:content-['']\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"aspect-video w-full object-cover\",\"src\":\"/images/blog-images/covers/serverless-exit.jpg\",\"width\":768,\"height\":432,\"alt\":\"Why we're leaving serverless\",\"quality\":95,\"loading\":\"eager\",\"fetchPriority\":\"high\",\"sizes\":\"(min-width: 1280px) 768px, 100vw\"}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"authors flex items-center\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Author\",\"\",\":\"]}],[\"$\",\"$L16\",null,{\"className\":\"shrink-0 rounded-full bg-muted size-7\",\"src\":\"/images/team/andreas.jpeg\",\"alt\":\"Andreas Thomas\",\"width\":28,\"height\":28,\"quality\":100}],[\"$\",\"div\",null,{\"className\":\"line-clamp-2 leading-none ml-2.5\",\"children\":[[\"$\",\"span\",\"Andreas Thomas0\",{\"className\":\"font-medium tracking-tight text-foreground text-[0.8125rem]\",\"children\":[\"Andreas Thomas\",false]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"time\",null,{\"className\":\"flex text-[0.8125rem] leading-none tracking-tight whitespace-nowrap text-muted-foreground uppercase font-normal\",\"dateTime\":\"2025-08-01T00:00:00.000Z\",\"children\":\"AUG 1, 2025\"}],[\"$\",\"div\",null,{\"className\":\"mx-2 size-1 shrink-0 rounded-full bg-muted-foreground\",\"aria-hidden\":true}],[\"$\",\"time\",null,{\"className\":\"text-[0.8125rem] leading-none font-normal tracking-tight text-muted-foreground\",\"aria-label\":\"Read time: 9 min\",\"children\":\"9 min\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-3 border-y border-border py-4 md:flex-row md:items-center md:justify-between md:gap-6 mt-6\",\"children\":[\"$L2f\",\"$L30\"]}]]}]}],\"$L31\",\"$L32\"]}]}]}],\"$L33\",\"$L34\"]}]\n"])</script><script>self.__next_f.push([1,"35:I[85341,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"TrackingLink\"]\n39:I[872352,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n76:I[153767,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n77:I[635436,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"]"])</script><script>self.__next_f.push([1,",\"default\"]\n78:I[759455,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n79:I[559227,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"BackgroundVideo\"]\n2f:[\"$\",\"span\",null,{\"className\":\"text-[0.8125rem] leading-none font-semibold tracking-tight whitespace-nowrap text-muted-foreground uppercase\",\"children\":\"Explore with AI\"}]\n36:T4e0,M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z37:T5d0,"])</script><script>self.__next_f.push([1,"M4.709 15.955l4.72-2.647.079-.23-.079-.128h-.23l-.79-.048-2.695-.073-2.337-.097-2.265-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.388-1.618-2.586-1.71-1.354-.984-.733-.499-.37-.468-.16-1.025.667-.733.898.061.228.062.91.7 1.945 1.505 2.538 1.869.371.31.149-.105.018-.075-.166-.276-1.377-2.49-1.47-2.534-.654-1.047-.171-.626a3 3 0 01-.105-.74L7.918.094 8.34 0l1.013.135.426.371.628 1.434 1.018 2.264 1.58 3.08.462.913.246.846.093.256h.16V9.18l.129-1.731.244-2.119.236-2.728.082-.768.387-.93.771-.51.6.288.493.703-.069.45-.293 1.907-.574 2.974-.375 1.99h.219l.25-.249 1.013-1.345 1.7-2.123.75-.84.872-.93.563-.444h1.064l.782 1.166-.35 1.205-1.1 1.392-.908 1.179-1.301 1.749-.812 1.4.075.111.194-.02 2.946-.625 1.591-.286 1.896-.326.857.4.094.407-.337.833-2.025.499-2.375.475-3.537.836-.043.031.05.063 1.595.149.683.037h1.673l3.115.235.811.534.486.66-.08.5-1.241.633-1.676-.398-3.911-.93-1.342-.334h-.187v.11l1.117 1.092 2.061 1.853 2.574 2.396.131.589-.328.464-.345-.05-2.236-1.682-.864-.756-1.954-1.643h-.131v.175l.448.659 2.385 3.582.123 1.099-.176.358-.629.221-.689-.126-1.418-1.984-1.464-2.239-1.181-2.008-.144.083-.7 7.532-.328.385-.754.287-.629-.476-.332-.772.332-1.52.4-1.984.328-1.575.295-1.957.176-.65-.014-.045-.144.018-1.482 2.034-2.252 3.044-1.785 1.91-.428.169-.74-.385.067-.685.415-.61 2.475-3.143 1.495-1.953.961-1.122-.011-.169h-.06L4.456 19.13l-1.288.165-.555-.524.067-.853.263-.275 2.183-1.5z"])</script><script>self.__next_f.push([1,"30:[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-6 gap-y-3\",\"children\":[[\"$\",\"$L35\",\"ChatGPT\",{\"variant\":\"muted\",\"size\":\"none\",\"className\":\"h-auto gap-2 text-[0.8125rem] font-medium tracking-tight\",\"href\":\"https://chatgpt.com/?hints=search\u0026q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"trackEvent\":\"blog open in llm\",\"trackProperties\":{\"service\":\"ChatGPT\",\"slug\":\"serverless-exit\"},\"children\":[[\"$\",\"svg\",null,{\"className\":\"size-4 shrink-0\",\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"role\":\"img\",\"children\":[\"$\",\"path\",null,{\"d\":\"$36\"}]}],\"Open in \",\"ChatGPT\"]}],[\"$\",\"$L35\",\"Claude\",{\"variant\":\"muted\",\"size\":\"none\",\"className\":\"h-auto gap-2 text-[0.8125rem] font-medium tracking-tight\",\"href\":\"https://claude.ai/new?q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"trackEvent\":\"blog open in llm\",\"trackProperties\":{\"service\":\"Claude\",\"slug\":\"serverless-exit\"},\"children\":[[\"$\",\"svg\",null,{\"className\":\"size-4 shrink-0\",\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"role\":\"img\",\"children\":[\"$\",\"path\",null,{\"d\":\"$37\"}]}],\"Open in \",\"Claude\"]}],\"$L38\"]}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"div\",null,{\"className\":\"content col-start-1 row-start-2 prose max-w-none prose-clear-first-child prose-lg\",\"children\":[[\"$\",\"p\",null,{\"children\":\"Every millisecond matters when you're in the critical path of API authentication. After two years of fighting serverless limitations, we rebuilt our entire API stack and slashed the end-to-end latency.\"}],\"\\n\",[\"$\",\"figure\",null,{\"className\":\"my-6 md:my-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"w-full rounded-lg\",\"src\":\"/images/blog-images/serverless-exit/latency_drop.png\",\"width\":1920,\"height\":1080,\"quality\":100,\"alt\":\"Latency Drop\"}]}],\"$undefined\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"When we launched our API on Cloudflare Workers, it seemed like the perfect choice for an API authentication service. Global edge deployment, automatic scaling, and pay-per-use pricing. What's not to love?\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"Fast forward, and we've completely rebuilt it using stateful Go servers. The result is a 6x performance improvement and a dramatically simplified architecture that enabled self-hosting and platform independence.\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"$\",\"strong\",null,{\"children\":\"TL;DR:\"}]}],\"\\n\",[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"Moved from Cloudflare Workers to Go servers\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Lowered latency by 6x\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Eliminated complex caching workarounds and data pipeline overhead\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Simplified architecture from distributed system to straightforward application\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Enabled self-hosting and platform independence\"}],\"\\n\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"Here's the story of why we made this move, the problems that forced our hand, and what we learned along the way.\"}],\"\\n\",[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"the-performance-wall-we-hit\",\"children\":\"The Performance Wall We Hit\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"When developers integrate Unkey into their request path, our latency directly impacts their users' experience. We knew we needed to be fast, but serverless was fighting us every step of the way.\"}],\"\\n\",[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"the-caching-problem\",\"children\":\"The Caching Problem\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"The fundamental issue was caching. In serverless, you have no guaranteed persistent memory between function invocations. Every cache read requires a network request to an external store, and that's where things got painful. We still used the global scope trick to cache some data across invocations, but the hit rates were very low.\"}],\"\\n\",[\"$\",\"figure\",null,{\"className\":\"my-6 md:my-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"w-full rounded-lg\",\"src\":\"/images/blog-images/serverless-exit/cf-cache-hits.png\",\"width\":1920,\"height\":1080,\"quality\":100,\"alt\":\"Cache Hits\"}]}],\"$undefined\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"And while Cloudflare's cache had a very good hit rate, the latency was just not acceptable. It consistently took 30ms+ at p99 for cache reads. That's not necessarily terrible if you compare it to other networked caches, but when you're trying to build a sub-10ms API, it's a showstopper.\"}],\"\\n\",[\"$\",\"figure\",null,{\"className\":\"my-6 md:my-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"w-full rounded-lg\",\"src\":\"/images/blog-images/serverless-exit/cf-cache-latency.png\",\"width\":1920,\"height\":1080,\"quality\":100,\"alt\":\"Cache Latency\"}]}],\"$undefined\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"Our caching strategy used SWR across multiple tiered caches, but here's the thing: zero network requests are always faster than one network request. No amount of stacking external caches could get us around this fundamental limitation.\"}],\"\\n\",[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"the-saas-glue-problem\",\"children\":\"The SaaS Glue Problem\"}],\"\\n\",\"$L3a\",\"\\n\",\"$L3b\",\"\\n\",\"$L3c\",\"\\n\",\"$L3d\",\"\\n\",\"$L3e\",\"\\n\",\"$L3f\",\"\\n\",\"$L40\",\"\\n\",\"$L41\",\"\\n\",\"$L42\",\"\\n\",\"$L43\",\"\\n\",\"$L44\",\"\\n\",\"$L45\",\"\\n\",\"$L46\",\"\\n\",\"$L47\",\"\\n\",\"$L48\",\"\\n\",\"$L49\",\"\\n\",\"$L4a\",\"\\n\",\"$L4b\",\"\\n\",\"$L4c\",\"\\n\",\"$L4d\",\"\\n\",\"$L4e\",\"\\n\",\"$L4f\",\"\\n\",\"$L50\",\"\\n\",\"$L51\",\"\\n\",\"$L52\",\"\\n\",\"$L53\",\"\\n\",\"$L54\",\"\\n\",\"$L55\",\"\\n\",\"$L56\",\"\\n\",\"$L57\",\"\\n\",\"$L58\",\"\\n\",\"$L59\",\"\\n\",\"$L5a\",\"\\n\",\"$L5b\",\"\\n\",\"$L5c\",\"\\n\",\"$L5d\",\"\\n\",\"$L5e\",\"\\n\",\"$L5f\",\"\\n\",\"$L60\",\"\\n\",\"$L61\",\"\\n\",\"$L62\",\"\\n\",\"$L63\",\"\\n\",\"$L64\",\"\\n\",\"$L65\",\"\\n\",\"$L66\",\"\\n\",\"$L67\",\"\\n\",\"$L68\",\"\\n\",\"$L69\",\"\\n\",\"$L6a\",\"\\n\",\"$L6b\",\"\\n\",\"$L6c\",\"\\n\",\"$L6d\",\"\\n\",\"$L6e\",\"\\n\",\"$L6f\",\"\\n\",\"$L70\",\"\\n\",\"$L71\",\"\\n\",\"$L72\",\"\\n\",\"$L73\",\"\\n\",\"$L74\",\"\\n\",\"$L75\"]}]\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"$L76\",null,{\"className\":\"col-start-2 row-start-2 hidden w-full shrink-0 flex-col lg:flex\",\"sticky\":true,\"children\":[[\"$\",\"$L77\",null,{\"className\":\"mt-2\",\"title\":\"On this page\",\"items\":[{\"title\":\"The Performance Wall We Hit\",\"anchor\":\"the-performance-wall-we-hit\",\"depth\":2},{\"title\":\"The Caching Problem\",\"anchor\":\"the-caching-problem\",\"depth\":3},{\"title\":\"The SaaS Glue Problem\",\"anchor\":\"the-saas-glue-problem\",\"depth\":3},{\"title\":\"The Data Pipeline Nightmare\",\"anchor\":\"the-data-pipeline-nightmare\",\"depth\":3},{\"title\":\"The Solution: Stateful Simplicity\",\"anchor\":\"the-solution-stateful-simplicity\",\"depth\":2},{\"title\":\"Performance Results\",\"anchor\":\"performance-results\",\"depth\":3},{\"title\":\"Strategic Benefits Beyond Performance\",\"anchor\":\"strategic-benefits-beyond-performance\",\"depth\":2},{\"title\":\"Self-Hosting\",\"anchor\":\"self-hosting\",\"depth\":3},{\"title\":\"Developer Experience Transformation\",\"anchor\":\"developer-experience-transformation\",\"depth\":3},{\"title\":\"Platform Independence\",\"anchor\":\"platform-independence\",\"depth\":3},{\"title\":\"Migration Strategy and Lessons\",\"anchor\":\"migration-strategy-and-lessons\",\"depth\":2},{\"title\":\"What We Kept\",\"anchor\":\"what-we-kept\",\"depth\":3},{\"title\":\"Rate Limiter Performance Boost\",\"anchor\":\"rate-limiter-performance-boost\",\"depth\":3},{\"title\":\"When Serverless Makes Sense (And When It Doesn't)\",\"anchor\":\"when-serverless-makes-sense-and-when-it-doesnt\",\"depth\":2},{\"title\":\"The Complexity Tax\",\"anchor\":\"the-complexity-tax\",\"depth\":3},{\"title\":\"What's Next\",\"anchor\":\"whats-next\",\"depth\":2}]}],[\"$\",\"$L78\",null,{\"withSeparator\":true}]]}]\n"])</script><script>self.__next_f.push([1,"33:[\"$\",\"section\",null,{\"className\":\"relative h-[clamp(26.25rem,94vw,28.75rem)] overflow-hidden bg-panel sm:h-[31.25rem] md:h-130 lg:h-[32.5rem] xl:h-[34.125rem] mt-51.75\",\"children\":[[\"$\",\"$L16\",null,{\"src\":\"/_next/static/media/poster.1365l~u5h1w2q.jpg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"alt\":\"\",\"fill\":true,\"quality\":95,\"sizes\":\"(max-width: 640px) 960px\",\"className\":\"pointer-events-none absolute inset-0 z-0 object-cover sm:hidden\"}],[\"$\",\"$L79\",null,{\"poster\":\"/_next/static/media/poster.1365l~u5h1w2q.jpg?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"videos\":[{\"src\":\"/videos/home/cta.mp4\",\"type\":\"video/mp4; codecs=hvc1\"},{\"src\":\"/videos/home/cta.webm\",\"type\":\"video/webm\"}],\"deferLoad\":true,\"rootMargin\":\"200px\",\"sourceMedia\":\"(min-width: 640px)\",\"className\":\"pointer-events-none absolute inset-0 z-0 hidden h-full w-full object-cover sm:block\"}],[\"$\",\"div\",null,{\"className\":\"relative z-10 container flex h-full flex-col pt-12 pb-10 sm:pt-14 sm:pb-11 md:pt-16 md:pb-12.75 lg:pb-14 xl:pb-12.75\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"max-w-144 font-display text-2xl leading-[1.125] text-white sm:text-[1.875rem] md:text-[2rem]\",\"children\":[\"Turn your API stack into one workflow.\",\" \",[\"$\",\"span\",null,{\"className\":\"text-gray-60 min-[480px]:block\",\"children\":\"Start for free, integrate in minutes, and scale when you need to.\"}]]}],[\"$\",\"$L35\",null,{\"href\":\"https://app.unkey.com/\",\"className\":\"mt-auto w-fit lg:mt-13 xl:mt-auto\",\"trackEvent\":\"sign up\",\"trackProperties\":{\"location\":\"CTA\"},\"children\":\"Start for free\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"34:[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"Why we're leaving serverless\\\",\\\"description\\\":\\\"\\\",\\\"datePublished\\\":\\\"2025-08-01T00:00:00.000Z\\\",\\\"url\\\":\\\"https://unkey.com/blog/serverless-exit\\\",\\\"image\\\":\\\"https://unkey.com/images/blog-images/covers/serverless-exit.jpg\\\",\\\"author\\\":[{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Andreas Thomas\\\",\\\"image\\\":\\\"/images/team/andreas.jpeg\\\"}]}\"}}]\n"])</script><script>self.__next_f.push([1,"38:[\"$\",\"$L35\",\"Perplexity\",{\"variant\":\"muted\",\"size\":\"none\",\"className\":\"h-auto gap-2 text-[0.8125rem] font-medium tracking-tight\",\"href\":\"https://www.perplexity.ai/?q=Read%20this%20blog%20post%20by%20Unkey%20and%20help%20me%20explore%20it%3A%20%22Why%20we're%20leaving%20serverless%22%20%E2%80%94%20https%3A%2F%2Funkey.com%2Fblog%2Fserverless-exit.md\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"trackEvent\":\"blog open in llm\",\"trackProperties\":{\"service\":\"Perplexity\",\"slug\":\"serverless-exit\"},\"children\":[[\"$\",\"svg\",null,{\"className\":\"size-4 shrink-0\",\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"aria-hidden\":\"true\",\"role\":\"img\",\"children\":[\"$\",\"path\",null,{\"d\":\"M19.785 0v7.272H22.5V17.62h-2.935V24l-7.037-6.194v6.145h-1.091v-6.152L4.392 24v-6.465H1.5V7.188h2.884V0l7.053 6.494V.19h1.09v6.49L19.786 0zm-7.257 9.044v7.319l5.946 5.234V14.44l-5.946-5.397zm-1.099-.08l-5.946 5.398v7.235l5.946-5.234V8.965zm8.136 7.58h1.844V8.349H13.46l6.105 5.54v2.655zm-8.982-8.28H2.59v8.195h1.8v-2.576l6.192-5.62zM5.475 2.476v4.71h5.115l-5.115-4.71zm13.219 0l-5.115 4.71h5.115v-4.71z\"}]}],\"Open in \",\"Perplexity\"]}]\n3a:[\"$\",\"p\",null,{\"children\":\"Serverless promised everyone you wouldn't need to worry about operations, it just works. And for the actual function execution that was indeed our experience too. Cloudflare Workers themselves were very stable. However, you end up needing multiple other products to solve artificial problems that serverless itself created.\"}]\n3b:[\"$\",\"p\",null,{\"children\":\"Need caching? Add Redis. Need batching? Add a Queue and downstream handler. Need real-time features? Add Something. Each service adds latency, complexity, and another point of failure in addition to charging you for their services.\"}]\n3c:[\"$\",\"p\",null,{\"children\":\"What's frustrating is that these aren't inherent technical challenges but limitations imposed by the serverless model. In a traditional server, you'd have all of these capabilities built-in or easily accessible without network hops.\"}]\n3d:[\"$\",\"p\",null,{\"children\":\"We ended up having to use Cloudflare Durable Objects, Cloudflare Logstreams, Cloudflare Queues, Cloudflare Workflows and then actually some homemade stateful servers on top of that.\"}]\n3e:[\"$\",\"p\",null,{\"children\":\"We found ourselves constantly evaluating and integrating new SaaS products, not to add business value, but just to work around the constraints of our chosen architecture. Many \\\"simple\\\" features required researching vendors, comparing pricing, handling authentication for yet another service, and debugging network issues between systems we don't control.\"}]\n3f:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"the-data-pipeline-nightmare\",\"children\":\"The Data Pipeline Nightmare\"}]\n40:[\"$\",\"p\",null,{\"children\":\"Performance wasn't our only problem. Getting data out of serverless functions was equally challenging.\"}]\n41:[\"$\",\"p\",null,{\"children\":[\"$\",\"strong\",null,{\"children\":\"The Batching Problem\"}]}]\n42:[\"$\",\"p\",null,{\"children\":\"Our API emits events for every key verification, rate limit, and API call. In traditional servers, you'd batch these events in memory and flush them periodically. In serverless, you have to flush on every single function invocation because the function might disappear after handling the request.\"}]\n43:[\"$\",\"p\",null,{\"children\":\"This led us to build an elaborate and overly complex pipeline:\"}]\n44:[\"$\",\"p\",null,{\"children\":[\"$\",\"strong\",null,{\"children\":\"For Analytics Events:\"}]}]\n45:[\"$\",\"p\",null,{\"children\":[\"We built chproxy specifically because ClickHouse doesn't like thousands of tiny inserts. It's a Go service that buffers events and sends them in large batches. Each Cloudflare Worker would send individual analytics events to \",[\"$\",\"code\",null,{\"children\":\"chproxy\"}],\", which would then aggregate and send them to ClickHouse.\"]}]\n46:[\"$\",\"p\",null,{\"children\":[\"$\",\"strong\",null,{\"children\":\"For Metrics and Logs:\"}]}]\n47:[\"$\",\"p\",null,{\"children\":\"To get metrics and logs out of Cloudflare Workers and into Axiom, we couldn't just send them directly because Axiom would sometimes reject them due t"])</script><script>self.__next_f.push([1,"o rate limits. We had to build a buffering service that would aggregate logs and metrics before sending them to Axiom without breaking the bank. Initially we thought we could just use Cloudflare Queues, but it would've been way too expensive. I think it was around trippling our current costs just to add queues.\"}]\n48:[\"$\",\"p\",null,{\"children\":\"Our metrics became elaborate JSON logs that Cloudflare would capture, then we had another worker acting as logdrain consumer. The consumer worker would parse the payload from Cloudflare, split the metrics events from log events and then send them off to Axiom.\"}]\n49:[\"$\",\"p\",null,{\"children\":\"We essentially built a distributed event processing system with multiple failure points just to work around serverless limitations.\"}]\n4a:[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"the-solution-stateful-simplicity\",\"children\":\"The Solution: Stateful Simplicity\"}]\n4b:[\"$\",\"p\",null,{\"children\":\"When we decided to rebuild our API in Go for v2, the difference was immediately obvious. Instead of that complex pipeline, we could just batch events in memory and flush directly every few seconds or whenever the buffer reached a certain size.\"}]\n4c:[\"$\",\"p\",null,{\"children\":\"That's it. No auxiliary services, no complex log pipelines, no coordination. Just straightforward batching that any server application would do.\"}]\n4d:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"performance-results\",\"children\":\"Performance Results\"}]\n4e:[\"$\",\"p\",null,{\"children\":\"Being easier to operate or think about is one thing, but not really what our users care about. They care about performance. So how much faster is it?\"}]\n4f:[\"$\",\"figure\",null,{\"className\":\"my-6 md:my-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative\",\"children\":[\"$\",\"$L16\",null,{\"className\":\"w-full rounded-lg\",\"src\":\"/images/blog-images/serverless-exit/latency_drop.png\",\"width\":800,\"height\":400,\"quality\":100,\"alt\":\"API latency comparison: serverless vs stateful showing dramatic improvement\"}]}],\"$undefined\"]}]\n50:[\"$\",\"p\",null,{\"children\":[\"We tested calling our \",[\"$\",\"code\",null,{\"children\":\"/v1/keys.verifyKey\"}],\" endpoint from multiple regions and then switching over to \",[\"$\",\"code\",null,{\"children\":\"/v2/keys.verifyKey\"}],\". I think it's pretty easy to spot in the chart above.\"]}]\n51:[\"$\",\"p\",null,{\"children\":\"Now you might say, it's kind of unfair to measure the latency from the same cloud provider as where the API runs. However that's where most of our customers are located too. So maybe this is an unfair comparison, but it accurately reflects the reality of our users' experiences. It's worth noting that the v1 API runs in over 300 POPs around the world and has datacenters in each of those regions as well.\"}]\n52:[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"strategic-benefits-beyond-performance\",\"children\":\"Strategic Benefits Beyond Performance\"}]\n53:[\"$\",\"p\",null,{\"children\":\"The move to stateful servers also unlocked other benefits.\"}]\n54:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"self-hosting\",\"children\":\"Self-Hosting\"}]\n55:[\"$\",\"p\",null,{\"children\":\"Being tied to Cloudflare's runtime meant our customers couldn't self-host Unkey. While the Workers runtime is technically open source, getting it running locally (even in dev mode) is incredibly difficult.\"}]\n56:[\"$\",\"p\",null,{\"children\":\"With standard Go servers, self-hosting becomes trivial:\"}]\n58:[\"$\",\"p\",null,{\"children\":\"This isn't just about customer choice. It dramatically improved our own development experience. Developers can now spin up the entire Unkey stack locally in seconds, making debugging and testing infinitely easier.\"}]\n59:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"developer-experience-transformation\",\"children\":\"Developer Experience Transformation\"}]\n5a:[\"$\",\"p\",null,{\"children\":\"The complexity tax of serverless was affecting our entire team. Every new feature required thinking about:\"}]\n5b:[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":\"How to work around function limits\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"How to handle data persistence between invocations\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"How to debug iss"])</script><script>self.__next_f.push([1,"ues across distributed log pipelines\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"How to test locally with Cloudflare-specific APIs\"}],\"\\n\"]}]\n5c:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"platform-independence\",\"children\":\"Platform Independence\"}]\n5d:[\"$\",\"p\",null,{\"children\":\"Perhaps most importantly, we're no longer locked into Cloudflare's ecosystem. We can deploy anywhere, use any database, and integrate with any third-party service without worrying about runtime compatibility.\"}]\n5e:[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"migration-strategy-and-lessons\",\"children\":\"Migration Strategy and Lessons\"}]\n5f:[\"$\",\"p\",null,{\"children\":\"We used the migration as an opportunity to fix API design issues that had accumulated over time. The new v2 API runs alongside the old v1, and customers can use both during the deprecation period.\"}]\n60:[\"$\",\"p\",null,{\"children\":\"The one advantage of keeping serverless around? It doesn't cost us much to keep the v1 API running as usage dwindles to zero. We're essentially getting a free migration period.\"}]\n61:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"what-we-kept\",\"children\":\"What We Kept\"}]\n62:[\"$\",\"p\",null,{\"children\":\"We didn't throw out everything about our serverless approach:\"}]\n63:[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Global edge deployment:\"}],\" We're using AWS Global Accelerator to maintain low latency worldwide\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Automatic scaling:\"}],\" Fargate handles scaling for us without the serverless constraints\"]}],\"\\n\"]}]\n64:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"rate-limiter-performance-boost\",\"children\":\"Rate Limiter Performance Boost\"}]\n65:[\"$\",\"p\",null,{\"children\":\"One area where the improvement has been particularly dramatic is our rate limiter. In the serverless model, we had to make significant tradeoffs between speed, accuracy, and cost. The distributed nature made achieving all three nearly impossible.\"}]\n66:[\"$\",\"p\",null,{\"children\":\"With stateful servers and in-memory state, we've been able to build a rate limiter that's faster, more accurate, and actually reduces our operational costs. We'll dive deep into this in a future post.\"}]\n67:[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"when-serverless-makes-sense-and-when-it-doesnt\",\"children\":\"When Serverless Makes Sense (And When It Doesn't)\"}]\n68:[\"$\",\"p\",null,{\"children\":\"This isn't an anti-serverless post. Serverless is fantastic for many use cases:\"}]\n69:[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Infrequent workloads:\"}],\" When you're not running consistently, the scaling-to-zero economics are unbeatable\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Simple request/response patterns:\"}],\" When you don't need persistent state or complex data pipelines\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Event-driven architectures:\"}],\" Serverless excels at responding to events without managing infrastructure\"]}],\"\\n\"]}]\n6a:[\"$\",\"p\",null,{\"children\":\"But serverless struggles when:\"}]\n6b:[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"You need consistent low latency:\"}],\" External networked dependencies kill performance\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"You require persistent state:\"}],\" Working around statelessness creates complexity\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"You have high-frequency workloads:\"}],\" The per-invocation model becomes expensive\"]}],\"\\n\",[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"You need fine-grained control:\"}],\" Platform abstractions can become limitations\"]}],\"\\n\"]}]\n6c:[\"$\",\"$L39\",null,{\"tag\":\"h3\",\"id\":\"the-complexity-tax\",\"children\":\"The Complexity Tax\"}]\n6d:[\"$\",\"p\",null,{\"children\":\"The biggest lesson from our migration is understanding the complexity tax of working around platform limitations.\"}]\n6e:[\"$\",\"p\",null,{\"children\":\"In serverless, we built:\"}]\n6f:[\"$\",\"ul\",null,{\"children\":[\"\\n\",[\"$\",\"li\",null,{\"chil"])</script><script>self.__next_f.push([1,"dren\":\"A sophisticated caching library to work around statelessness\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Multiple auxiliary services for data batching\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Complex log pipelines for metrics collection\"}],\"\\n\",[\"$\",\"li\",null,{\"children\":\"Elaborate workarounds for local development\"}],\"\\n\"]}]\n70:[\"$\",\"p\",null,{\"children\":\"In stateful servers, all of that disappeared. We went from a distributed system with many moving parts to a straightforward application architecture.\"}]\n71:[\"$\",\"p\",null,{\"children\":\"Sometimes the best solution isn't to work around limitations but to choose a different foundation.\"}]\n72:[\"$\",\"$L39\",null,{\"tag\":\"h2\",\"id\":\"whats-next\",\"children\":\"What's Next\"}]\n73:[\"$\",\"p\",null,{\"children\":\"We're currently running on AWS Fargate behind Global Accelerator, but this is temporary. Next year, we're launching \\\"Unkey Deploy\\\", our own deployment platform that will let customers (and us) run Unkey anywhere they want.\"}]\n74:[\"$\",\"p\",null,{\"children\":\"The move to stateful Go servers was the first step in making Unkey truly portable and self-hostable. Stay tuned for more details on that front.\"}]\n75:[\"$\",\"p\",null,{\"children\":[\"Want to see the implementation details? Both our serverless and stateful APIs are open source in our GitHub repository. The serverless version is in \",[\"$\",\"a\",null,{\"href\":\"https://github.com/unkeyed/unkey/tree/main/apps/api\",\"children\":[\"$\",\"code\",null,{\"children\":\"apps/api/\"}]}],\" and the new Go version is in \",[\"$\",\"a\",null,{\"href\":\"https://github.com/unkeyed/unkey/tree/main/go/apps/api\",\"children\":[\"$\",\"code\",null,{\"children\":\"go/apps/api/\"}]}],\".\"]}]\n"])</script><script>self.__next_f.push([1,"7a:I[262606,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"default\"]\n7b:I[759684,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"ScrollArea\"]\n7c:I[759684,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0y~hi_be6hgyd.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/11f9d~j7i~80y.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0_4mm6qkbluqe.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/10-rgy-_i83kh.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/17nb1qjzla9n0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0mgtb4~2yv4.n.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yryskz1im~l9.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0gwu_rp58~9pm.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0yg~pk27tipxa.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"ScrollBar\"]\n57:[\"$\",\"$L7a\",null,{\"className\":\"max-w-full\",\"fileName\":\"$undefined\",\"as\":\"figure\",\"children\":[\"$\",\"$L7b\",null,{\"className\":\"w-full\",\"children\":[[\"$\",\"div\",null,{\"className\":\"code-block-body px-4 py-5 text-left font-mono text-sm\",\"children\":[\"$\",\"pre\",null,{\"className\":\"shiki shiki-themes github-light github-dark\",\"style\":{\"--shiki-light\":\"#24292e\",\"--shiki-dark\":\"#e1e4e8\",\"--shiki-light-bg\":\"#fff\",\"--shiki-dark-bg\":\"#24292e\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#6A737D\",\"--shiki-dark\":\"#6A737D\"},\"children\":\"# That's it. No special runtime, no complex setup.\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#6F42C1\",\"--shiki-dark\":\"#B392F0\"},\"children\":\"docker\"}],[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#032F62\",\"--shiki-dark\":\"#9ECBFF\"},\"children\":\" run\"}],[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#005CC5\",\"--shiki-dark\":\"#79B8FF"])</script><script>self.__next_f.push([1,"\"},\"children\":\" -p\"}],[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#032F62\",\"--shiki-dark\":\"#9ECBFF\"},\"children\":\" 8080:8080\"}],[\"$\",\"span\",null,{\"style\":{\"--shiki-light\":\"#032F62\",\"--shiki-dark\":\"#9ECBFF\"},\"children\":\" unkey/api\"}]]}]]}]}]}],[\"$\",\"$L7c\",null,{\"className\":\"invisible\",\"orientation\":\"horizontal\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"7d:I[571989,[\"/_next/static/chunks/0es.k-llcili0.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0doz0k0lge4vr.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/089yuqh7b3y2u.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\",\"/_next/static/chunks/0820cmikm84lb.js?dpl=dpl_99HXAYi6tpmqgwi44xHi8C3YCdpE\"],\"IconMark\"]\n23:null\n"])</script><script>self.__next_f.push([1,"28:[[\"$\",\"title\",\"0\",{\"children\":\"Why we're leaving serverless | Unkey\"}],[\"$\",\"link\",\"1\",{\"rel\":\"manifest\",\"href\":\"/favicon/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"canonical\",\"href\":\"https://unkey.com/blog/serverless-exit\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"Why we're leaving serverless | Unkey\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:url\",\"content\":\"https://unkey.com/blog/serverless-exit\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:site_name\",\"content\":\"Unkey\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image\",\"content\":\"https://unkey.com/images/blog-images/covers/serverless-exit.jpg\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:alt\",\"content\":\"Unkey social preview\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"Why we're leaving serverless | Unkey\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"https://unkey.com/images/blog-images/covers/serverless-exit.jpg\"}],[\"$\",\"link\",\"14\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon/favicon.ico\"}],[\"$\",\"link\",\"15\",{\"rel\":\"icon\",\"href\":\"/favicon/favicon.ico\"}],[\"$\",\"link\",\"16\",{\"rel\":\"icon\",\"href\":\"/favicon/favicon-light.svg\",\"media\":\"(prefers-color-scheme: light)\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"17\",{\"rel\":\"icon\",\"href\":\"/favicon/favicon-dark.svg\",\"media\":\"(prefers-color-scheme: dark)\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"18\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon/apple-touch-icon.png\"}],[\"$\",\"$L7d\",\"19\",{}]]\n"])</script></body></html> |