CINXE.COM

Zuplo Changelog - Latest platform updates and new features

<!DOCTYPE html><html lang="en" class="__variable_29bbdb __variable_dbf9c5 __variable_64184a"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=96&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=128&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=256&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=384&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=576&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 576w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=640&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=760&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 760w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=828&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=992&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 992w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=1180&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1180w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1440w" imageSizes="(min-width: 992px) 711px, 0px" fetchPriority="high"/><link rel="stylesheet" href="/_next/static/css/25523e006f6d47ff.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/5b72a068be09cde3.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f573e34074d45acf.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG"/><script src="/_next/static/chunks/fd9d1056-df1e16794215723f.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/2117-afb81cc387711d98.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/main-app-be3d940aef6bd3eb.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script src="/_next/static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><title>Zuplo Changelog - Latest platform updates and new features</title><meta name="description" content="Read about the latest and greatest features and updates we&#x27;ve shipped for API developers like you."/><link rel="canonical" href="https://zuplo.com/changelog"/><meta property="og:title" content="Zuplo Changelog - Latest platform updates and new features"/><meta property="og:description" content="Read about the latest and greatest features and updates we&#x27;ve shipped for API developers like you."/><meta property="og:site_name" content="Zuplo"/><meta property="og:image" content="https://zuplo.com/og?text=Zuplo%20Changelog"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Zuplo Changelog - Latest platform updates and new features"/><meta name="twitter:description" content="Read about the latest and greatest features and updates we&#x27;ve shipped for API developers like you."/><meta name="twitter:image" content="https://zuplo.com/og?text=Zuplo%20Changelog"/><meta name="next-size-adjust"/><link rel="preconnect" href="https://cdn.zuplo.com" crossorigin=""/><link rel="icon" type="image/x-icon" href="https://cdn.zuplo.com/www/favicon.svg"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" noModule=""></script></head><body><!--$--><!--/$--><div class="overflow-x-hidden"><nav class="scroll-hidden fixed z-20 flex h-dvh w-full flex-col gap-6 overflow-y-scroll overscroll-none bg-black px-4 pb-20 pt-32 font-fancy text-xl font-semibold text-white transition-opacity xl:hidden pointer-events-none opacity-0"><button class="flex items-center outline-none transition-colors hover:text-pink" id="headlessui-disclosure-button-:Ramkq:" type="button" aria-expanded="false" data-headlessui-state="">Product<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 ml-auto h-5 w-5 transition-transform" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><a class="no-underline transition-colors hover:text-pink" href="https://zuplo.com/docs">Docs</a><a class="no-underline transition-colors hover:text-pink" href="/pricing">Pricing</a><a class="no-underline transition-colors hover:text-pink" href="/blog">Blog</a><a class="no-underline transition-colors hover:text-pink" href="https://portal.zuplo.com/">Sign In</a><div class="mt-auto flex flex-col justify-center gap-y-4 sm:flex-row sm:gap-x-4 sm:gap-y-0"><a class="btn inline-block btn-medium btn-primary-dark" href="https://portal.zuplo.com/signup">Start for Free</a><a class="btn btn-medium btn-primary-dark" href="/meeting">Book a demo</a></div></nav><header class="fixed top-0 z-50 w-full border-b border-white/15 bg-black px-4"><div class="absolute inset-0 backdrop-blur gradient-mask-b-0"></div><div class="container relative flex h-24 w-full items-center gap-8 px-2 py-5 lg:px-8"><a class="transition-opacity hover:opacity-80 mr-auto" aria-label="Navigate to home page" href="https://zuplo.com"><svg xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" viewBox="0 0 147 33" alt="Zuplo logo" class="w-auto h-8"><path fill="#FFF" d="M27.142 19.978H16.62L27.83 8.746a.758.758 0 0 0-.534-1.293H9.488V0h19.534a7.57 7.57 0 0 1 4.065 1.125 7.6 7.6 0 0 1 2.836 3.126 7.4 7.4 0 0 1-1.461 8.398l-7.32 7.328z"></path><path fill="#FFF" d="M9.489 11.042h10.524l-11.19 11.21a.772.772 0 0 0 .543 1.316h17.759v7.452H7.61a7.57 7.57 0 0 1-4.065-1.125A7.6 7.6 0 0 1 .71 26.768a7.4 7.4 0 0 1 1.462-8.397zm73.297 5.728c0 2.657-1.034 4.283-3.46 4.244-2.227-.04-3.38-1.666-3.38-4.283V6.696h-5.488v10.43c0 5.038 3.142 8.607 8.868 8.647 5.25.04 8.948-3.807 8.948-8.606V6.697h-5.488zm53.306-10.512c-5.925 0-10.098 4.204-10.098 9.757 0 5.552 4.175 9.756 10.098 9.756s10.099-4.204 10.099-9.756-4.173-9.757-10.099-9.757m0 14.794c-2.744 0-4.69-2.063-4.69-5.037 0-2.975 1.948-5.038 4.69-5.038s4.691 2.063 4.691 5.038-1.947 5.037-4.691 5.037M101.966 6.258c-5.926 0-10.099 4.204-10.099 9.757 0 .073.009.144.01.22h-.01v15.772h5.408V24.75a10.9 10.9 0 0 0 4.691 1.02c5.926 0 10.099-4.204 10.099-9.756s-4.173-9.756-10.099-9.756m0 14.794c-2.744 0-4.69-2.063-4.69-5.037 0-2.975 1.948-5.038 4.69-5.038s4.691 2.063 4.691 5.038-1.947 5.037-4.691 5.037M49.868 11.41h10.814l-10.814 8.452v5.473h17.514v-4.716h-10.84l10.84-8.473V6.694H49.868zm74.501 13.925h-1.831a7.46 7.46 0 0 1-5.262-2.177 7.42 7.42 0 0 1-2.183-5.248V.005h5.518V17.91a1.927 1.927 0 0 0 1.927 1.921h1.831z"></path></svg></a><button type="button" class="flex h-6 w-6 items-center justify-center font-base text-sm text-gray-400/75 sm:justify-start md:h-auto md:w-52 md:flex-none md:rounded-lg md:bg-gray-800/75 md:py-2.5 md:pl-4 md:pr-3.5 md:ring-1 md:ring-inset md:ring-gray-800/90 md:hover:bg-gray-700/40 md:hover:ring-gray-400/40"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><span class="sr-only font-light md:not-sr-only md:ml-2">Search</span></button><div class="hidden items-center gap-8 text-base font-semibold text-white xl:flex"><div data-headlessui-state=""><div><button class="flex items-center tracking-wider outline-none transition-colors hover:text-pink" type="button" aria-expanded="false" data-headlessui-state="">Product<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 h-5 w-5 transition-transform" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></div></div><div hidden="" style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><a class="tracking-wider no-underline outline-none transition-colors hover:text-pink" href="https://zuplo.com/docs">Docs</a><a class="tracking-wider no-underline outline-none transition-colors hover:text-pink" href="/pricing">Pricing</a><a class="tracking-wider no-underline outline-none transition-colors hover:text-pink" href="/blog">Blog</a><a class="tracking-wider no-underline outline-none transition-colors hover:text-pink" href="https://portal.zuplo.com/">Sign In</a><div class="w-6"></div><a class="btn inline-block font-base text-sm tracking-wider btn-primary-dark" href="https://portal.zuplo.com/signup">Start for Free</a></div><button class="text-white xl:hidden" aria-label="Open Menu"><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-menu block h-6 w-6" aria-hidden="true"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button></div></header><main class="layout relative mt-24"><section class="relative mt-[calc(-1*var(--page-pt))] pb-12 lg:mt-0 lg:pb-24"><div class="container relative max-w-wide"><img alt="Changelog image 3" role="presentation" fetchPriority="high" width="1280" height="1036" decoding="async" data-nimg="1" class="absolute z-[-1] max-w-[initial] -left-[350px] -top-[240px] z-0 hidden h-[calc(550px/0.8)] w-[calc(569px/0.8)] lg:-left-[380px] lg:-top-[160px] lg:flex" style="color:transparent" sizes="(min-width: 992px) 711px, 0px" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=96&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=128&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=256&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=384&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=576&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 576w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=640&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=760&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 760w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=828&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=992&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 992w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=1180&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1180w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1440w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_3.8168ee8f.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG"/><img alt="Changelog image 2" role="presentation" loading="lazy" width="1280" height="1194" decoding="async" data-nimg="1" class="absolute z-[-1] max-w-[initial] lgw-[853px] -right-[380px] bottom-[10%] z-0 hidden h-[calc(825px/1.5)] w-[calc(853px/1.5)] lg:-bottom-[340px] lg:-right-[350px] lg:flex lg:h-[825px]" style="color:transparent" sizes="568px" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=96&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=128&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=256&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=384&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=576&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 576w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=640&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=760&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 760w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=828&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=992&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 992w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=1180&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1180w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1440w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_2.c4d4ff32.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG"/><div class="px-4 py-8 md:p-12 lg:p-24 bg-white mx-[calc(-1*var(--page-px))] lg:mx-0 lg:rounded-2xl"><div class="container relative max-w-wide"><div class="max-w-xl"><section class="lg:pb-15 pb-10 md:pb-5 text-black [&amp;&gt;div&gt;h1]:max-w-[120px] [&amp;&gt;div&gt;h1]:text-4xl [&amp;&gt;div&gt;h1]:!font-bold [&amp;&gt;div&gt;h1]:!leading-narrow [&amp;&gt;div&gt;h1]:md:!text-[76px] [&amp;&gt;div&gt;p]:!font-normal [&amp;&gt;div&gt;p]:!leading-[30px]"><div class=""><div class="align-center mb-4 flex"><h1 class="text-3xl lg:text-5xl">Zuplo Changelog</h1></div><p class="text-xl">We release improvements, new features, and fixes daily. Follow along here to see the most important updates.</p></div></section></div><div class="mt-8 flex flex-wrap gap-2"><a href="/changelog"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent bg-pink text-white hover:bg-pink">ALL</div> </a><a href="?tag=dev-experience"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">DEV EXPERIENCE</div></a><a href="?tag=dev-portal"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">DEV PORTAL</div></a><a href="?tag=docs"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">DOCS</div></a><a href="?tag=monetization"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">MONETIZATION</div></a><a href="?tag=performance"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">PERFORMANCE</div></a><a href="?tag=policy"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">POLICY</div></a><a href="?tag=portal"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">PORTAL</div></a><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">RUNTIME</div></a><a href="?tag=security"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent">SECURITY</div></a></div></div><div class="mt-12 space-y-16" data-testid="changelog-grid"><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-28T00:00:00.000Z">March 28, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">Splunk Logging Plugin</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>The wave of fresh logging plugins continues this week with the addition of Splunk. Now available for use direct from your Zuplo API project.</p> <p>To add the Splunk logging plugin to your Zuplo project, add the following code to your zuplo.runtime.ts file. Set the url parameter to your Splunk HEC endpoint and the token parameter to your Splunk HEC token.</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#E1E4E8"> RuntimeExtensions,</span></span> <span class="line"><span style="color:#E1E4E8"> SplunkLoggingPlugin,</span></span> <span class="line"><span style="color:#E1E4E8"> environment,</span></span> <span class="line"><span style="color:#E1E4E8">} </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> &quot;@zuplo/runtime&quot;</span><span style="color:#E1E4E8">;</span></span> <span class="line"></span> <span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> runtimeInit</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">runtime</span><span style="color:#F97583">:</span><span style="color:#B392F0"> RuntimeExtensions</span><span style="color:#E1E4E8">) {</span></span> <span class="line"><span style="color:#E1E4E8"> runtime.</span><span style="color:#B392F0">addPlugin</span><span style="color:#E1E4E8">(</span></span> <span class="line"><span style="color:#F97583"> new</span><span style="color:#B392F0"> SplunkLoggingPlugin</span><span style="color:#E1E4E8">({</span></span> <span class="line"><span style="color:#6A737D"> // For Splunk Cloud</span></span> <span class="line"><span style="color:#E1E4E8"> url: </span><span style="color:#9ECBFF">&quot;https://&lt;your-instance&gt;.splunkcloud.com:8088/services/collector&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> token: environment.</span><span style="color:#79B8FF">SPLUNK_TOKEN</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#6A737D"> // Channel ID for Splunk HEC with indexer acknowledgment</span></span> <span class="line"><span style="color:#E1E4E8"> channel: </span><span style="color:#9ECBFF">&quot;FE0ECFAD-13D5-401B-847D-77833BD77131&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#6A737D"> // Optional parameters with defaults</span></span> <span class="line"><span style="color:#E1E4E8"> index: </span><span style="color:#9ECBFF">&quot;main&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> sourcetype: </span><span style="color:#9ECBFF">&quot;json&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> host: </span><span style="color:#9ECBFF">&quot;zuplo-api&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> fields: {</span></span> <span class="line"><span style="color:#E1E4E8"> environment: </span><span style="color:#9ECBFF">&quot;production&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> application: </span><span style="color:#9ECBFF">&quot;my-api&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> }),</span></span> <span class="line"><span style="color:#E1E4E8"> );</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> <p>As with all our loggers, the Splunk Plugin supports custom fields via the <code>fields</code> object, in addition to the <a href="https://zuplo.com/docs/articles/log-plugin-new-relic#standard-fields">standard fields</a>.</p> <p>Full details can be found in the <a href="https://zuplo.com/docs/articles/log-plugin-splunk">documentation</a>.</p></div></div><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-28T00:00:00.000Z">March 28, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">Redirect Forwarding in URL Forward handler</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>We have added the ability to specify redirect behavior for the URL Forward handler using a new <code>forwardRedirects</code> option.</p> <p>You can implement this manually from <code>routes.oas.json</code> in your Zuplo project by adding it to the <code>options</code> object for <code>urlForwardHandler</code> on any route you want to use it on.</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#9ECBFF">&quot;paths&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;/v1/links&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;x-zuplo-path&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;pathMode&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;open-api&quot;</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> &quot;get&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;summary&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;Gets a list of links&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> &quot;x-zuplo-route&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;corsPolicy&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;none&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> &quot;handler&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;export&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;urlForwardHandler&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> &quot;module&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;$import(@zuplo/runtime)&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> &quot;options&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;baseUrl&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">&quot;${env.BASE_URL}&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> &quot;forwardRedirects&quot;</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">true</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> &quot;policies&quot;</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> &quot;inbound&quot;</span><span style="color:#E1E4E8">: []</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> <p>When set to false or not specified, redirects won&#x27;t be followed - the status and <code>location</code> header will be returned as received.</p></div></div><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-28T00:00:00.000Z">March 28, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">New Default Compatibility Date</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>We鈥檝e introduced a new default compatibility date for projects created after<br/> <strong>March 27, 2025</strong>, which includes some breaking changes that improve the overall behavior of Zuplo APIs.</p> <p>The new default compatibility date is <a href="https://zuplo.com/docs/articles/compatibility-dates#2025-02-06">2025-02-06</a>.</p> <p>Previously, special characters in <code>open-api</code> formatted URLs were not escaped. This led to unintended behavior where regex patterns could be included, even though OpenAPI format URLs don鈥檛 support regex. This has now been fixed鈥攁ll special characters are escaped.</p> <p>Additionally, some Zuplo log plugins could be enabled using undocumented environment variables and special properties on <code>context.custom</code> to set global log attributes.</p> <p>These legacy features, which predate the current plugin system, have now been removed.</p> <p>Log plugins should now be enabled using the <a href="https://zuplo.com/docs/articles/logging">documented plugin system</a>.</p> <p>For full details on compatibility dates and the changes they include, see our <a href="https://zuplo.com/docs/articles/compatibility-dates">documentation</a>.</p></div></div><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-21T00:00:00.000Z">March 21, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">New Relic Logging Plugin</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>We&#x27;ve expanded our range of third-party logging plugins yet again鈥攖his time with the addition of <a href="https://newrelic.com/">New Relic</a>.</p> <p>Full details can be found in the <a href="https://zuplo.com/docs/articles/log-plugin-new-relic">documentation</a>, but usage follows the same pattern as <a href="https://zuplo.com/docs/articles/log-plugin-gcp">all</a> <a href="https://zuplo.com/docs/articles/log-plugin-aws-cloudwatch">the</a> <a href="https://zuplo.com/docs/articles/log-plugin-datadog">other</a> <a href="https://zuplo.com/docs/articles/log-plugin-dynatrace">loggers</a>.</p> <p>Add the plugin to the Zuplo runtime and configure your options.</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#E1E4E8"> RuntimeExtensions,</span></span> <span class="line"><span style="color:#E1E4E8"> NewRelicLoggingPlugin,</span></span> <span class="line"><span style="color:#E1E4E8"> environment,</span></span> <span class="line"><span style="color:#E1E4E8">} </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> &quot;@zuplo/runtime&quot;</span><span style="color:#E1E4E8">;</span></span> <span class="line"></span> <span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> runtimeInit</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">runtime</span><span style="color:#F97583">:</span><span style="color:#B392F0"> RuntimeExtensions</span><span style="color:#E1E4E8">) {</span></span> <span class="line"><span style="color:#E1E4E8"> runtime.</span><span style="color:#B392F0">addPlugin</span><span style="color:#E1E4E8">(</span></span> <span class="line"><span style="color:#F97583"> new</span><span style="color:#B392F0"> NewRelicLoggingPlugin</span><span style="color:#E1E4E8">({</span></span> <span class="line"><span style="color:#6A737D"> // Optional, defaults to &quot;https://log-api.newrelic.com/log/v1&quot;</span></span> <span class="line"><span style="color:#E1E4E8"> url: </span><span style="color:#9ECBFF">&quot;https://log-api.newrelic.com/log/v1&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> apiKey: environment.</span><span style="color:#79B8FF">NEW_RELIC_API_KEY</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> service: </span><span style="color:#9ECBFF">&quot;MyAPI&quot;</span><span style="color:#E1E4E8">, </span><span style="color:#6A737D">// Optional, defaults to &quot;Zuplo&quot;</span></span> <span class="line"><span style="color:#E1E4E8"> fields: {</span></span> <span class="line"><span style="color:#E1E4E8"> field1: </span><span style="color:#9ECBFF">&quot;value1&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> field2: </span><span style="color:#9ECBFF">&quot;value2&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> }),</span></span> <span class="line"><span style="color:#E1E4E8"> );</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> <p>As with all our loggers, the New Relic Plugin supports custom fields in addition to the <a href="https://zuplo.com/docs/articles/log-plugin-new-relic#standard-fields">standard fields</a>.</p></div></div><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-14T00:00:00.000Z">March 14, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">New Pre-Routing Hook</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>The new Pre-Routing Hook allows you to manipulate an incoming request <em>before</em> it&#x27;s checked for routing. For example, if you want all routes to be case insensitive you could just lowercase the URL as it comes into the gateway, as shown below:</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#E1E4E8">runtime.</span><span style="color:#B392F0">addPreRoutingHook</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">async</span><span style="color:#E1E4E8"> (</span><span style="color:#FFAB70">request</span><span style="color:#E1E4E8">) </span><span style="color:#F97583">=&gt;</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> nr</span><span style="color:#F97583"> =</span><span style="color:#F97583"> new</span><span style="color:#B392F0"> Request</span><span style="color:#E1E4E8">(request.url.</span><span style="color:#B392F0">toLowerCase</span><span style="color:#E1E4E8">(), request);</span></span> <span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> nr;</span></span> <span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> <p>Another example would be URL path normalization to remove trailing slashes:</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#E1E4E8">runtime.</span><span style="color:#B392F0">addPreRoutingHook</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">async</span><span style="color:#E1E4E8"> (</span><span style="color:#FFAB70">request</span><span style="color:#E1E4E8">) </span><span style="color:#F97583">=&gt;</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> url</span><span style="color:#F97583"> =</span><span style="color:#F97583"> new</span><span style="color:#B392F0"> URL</span><span style="color:#E1E4E8">(request.url);</span></span> <span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (url.pathname.</span><span style="color:#79B8FF">length</span><span style="color:#F97583"> &gt;</span><span style="color:#79B8FF"> 1</span><span style="color:#F97583"> &amp;&amp;</span><span style="color:#E1E4E8"> url.pathname.</span><span style="color:#B392F0">endsWith</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">&quot;/&quot;</span><span style="color:#E1E4E8">)) {</span></span> <span class="line"><span style="color:#E1E4E8"> url.pathname </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> url.pathname.</span><span style="color:#B392F0">slice</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">0</span><span style="color:#E1E4E8">, </span><span style="color:#F97583">-</span><span style="color:#79B8FF">1</span><span style="color:#E1E4E8">);</span></span> <span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> nr</span><span style="color:#F97583"> =</span><span style="color:#F97583"> new</span><span style="color:#B392F0"> Request</span><span style="color:#E1E4E8">(url, request);</span></span> <span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> nr;</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> request;</span></span> <span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> <p>Keep in mind that this will run on <em>all</em> requests so the code you use here needs to be appropriately performant and aware it can generate weird downstream effects by changing URLs and headers.</p> <p>The method is async but reading and manipulating the request body is not recommended for performance reasons.</p></div></div><div class="text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg" data-testid="changelog-item"><div class="flex flex-col space-y-2 p-10"><div class="text-muted-foreground flex items-center gap-2 text-sm"><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-calendar-days h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path><path d="M8 14h.01"></path><path d="M12 14h.01"></path><path d="M16 14h.01"></path><path d="M8 18h.01"></path><path d="M12 18h.01"></path><path d="M16 18h.01"></path></svg><time dateTime="2025-03-14T00:00:00.000Z">March 14, 2025</time></div><div class="space-y-2"><h2 class="text-2xl font-bold leading-tight tracking-tight">Custom Fields Available on All Logging Policies</h2><div class="flex flex-wrap gap-2"><a href="?tag=runtime"><div class="focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20">RUNTIME</div></a></div></div></div><div class="prose-tight prose grid max-w-none gap-4 p-10 pt-0"><p>A new <code>fields</code> option is now available across all <a href="https://zuplo.com/docs/articles/logging">logging plugins</a>. This addition enables you to append arbitrary custom fields to each log entry, providing additional context and information in your logs.</p> <p>For example, using our Google Cloud Logging plugin:</p> <pre class="shiki github-dark" style="background-color:#24292e;color:#e1e4e8" tabindex="0"><code><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#E1E4E8"> RuntimeExtensions,</span></span> <span class="line"><span style="color:#E1E4E8"> GoogleCloudLoggingPlugin,</span></span> <span class="line"><span style="color:#E1E4E8"> environment,</span></span> <span class="line"><span style="color:#E1E4E8">} </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> &quot;@zuplo/runtime&quot;</span><span style="color:#E1E4E8">;</span></span> <span class="line"></span> <span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> runtimeInit</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">runtime</span><span style="color:#F97583">:</span><span style="color:#B392F0"> RuntimeExtensions</span><span style="color:#E1E4E8">) {</span></span> <span class="line"><span style="color:#E1E4E8"> runtime.</span><span style="color:#B392F0">addPlugin</span><span style="color:#E1E4E8">(</span></span> <span class="line"><span style="color:#F97583"> new</span><span style="color:#B392F0"> GoogleCloudLoggingPlugin</span><span style="color:#E1E4E8">({</span></span> <span class="line"><span style="color:#E1E4E8"> logName: </span><span style="color:#9ECBFF">&quot;projects/my-project/logs/my-api&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> serviceAccountJson: environment.</span><span style="color:#79B8FF">GCP_SERVICE_ACCOUNT</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> fields: {</span></span> <span class="line"><span style="color:#E1E4E8"> myCustomField: </span><span style="color:#9ECBFF">&quot;value&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> anotherCustomField: </span><span style="color:#9ECBFF">&quot;value2&quot;</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> }),</span></span> <span class="line"><span style="color:#E1E4E8"> );</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> <p>You can use this feature to include relevant metadata, application-specific details, or contextual information that may be useful for debugging or analysis purposes.</p></div></div></div><div data-testid="changelog-pagination" class="ml-auto pt-10"><div class="inline-flex items-center justify-center text-black"><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink rounded bg-pink !text-white text-black" href="/changelog?page=1">1</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=2">2</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=3">3</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=4">4</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=5">5</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=6">...</a><a class="cursor-pointer px-3 py-2 text-sm font-semibold outline-none hover:text-pink text-black" href="/changelog?page=9">9</a></div></div></div></div></section><section class="relative py-12 lg:py-24"><div class="container relative max-w-wide"><div class="px-4 py-8 md:p-12 lg:p-24 bg-white rounded-2xl flex flex-col items-center lg:flex-row"><h2 class="mb-6 justify-between text-left font-fancy text-2xl font-bold !leading-narrow md:text-center md:text-3xl lg:mb-0 lg:basis-3/4 lg:pr-6 lg:text-left lg:text-6xl">Designed for Developers, Made for the Edge</h2><div class="flex w-full flex-col justify-center md:flex-row lg:basis-1/4 lg:flex-col"><a class="btn inline-block btn-large mb-3 md:mb-0 md:mr-3 lg:mb-3 lg:mr-0 btn-primary-light" href="https://portal.zuplo.com/signup">Start for Free</a><a class="btn btn-large btn-secondary-light" href="https://zuplo.com/docs">Read docs</a></div><img alt="" role="presentation" loading="lazy" width="1155" height="1280" decoding="async" data-nimg="1" class="absolute z-[-1] max-w-[initial] -bottom-[130px] -left-[550px] z-0 hidden h-[825px] w-[853px] lg:flex" style="color:transparent" sizes="568px" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=96&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=128&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=256&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=384&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=576&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 576w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=640&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=760&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 760w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=828&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=992&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 992w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=1180&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1180w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG 1440w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fchangelog_4.31360263.png&amp;w=1440&amp;q=75&amp;dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG"/></div></div></section></main><footer class="relative z-[10] bg-transparent py-10 md:py-20"><div class="container relative"><div class="flex flex-col gap-10 font-fancy text-base font-semibold text-white lg:items-start lg:text-lg"><div class="flex w-full flex-col-reverse items-stretch gap-10 md:flex-row"><div class="flex flex-1 flex-col justify-between"><a class="transition-opacity hover:opacity-80 inline-block opacity-50 hover:opacity-40" aria-label="Navigate to home page" href="https://zuplo.com"><svg xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" viewBox="0 0 147 33" alt="Zuplo logo" class="w-auto h-6"><path fill="#FFF" d="M27.142 19.978H16.62L27.83 8.746a.758.758 0 0 0-.534-1.293H9.488V0h19.534a7.57 7.57 0 0 1 4.065 1.125 7.6 7.6 0 0 1 2.836 3.126 7.4 7.4 0 0 1-1.461 8.398l-7.32 7.328z"></path><path fill="#FFF" d="M9.489 11.042h10.524l-11.19 11.21a.772.772 0 0 0 .543 1.316h17.759v7.452H7.61a7.57 7.57 0 0 1-4.065-1.125A7.6 7.6 0 0 1 .71 26.768a7.4 7.4 0 0 1 1.462-8.397zm73.297 5.728c0 2.657-1.034 4.283-3.46 4.244-2.227-.04-3.38-1.666-3.38-4.283V6.696h-5.488v10.43c0 5.038 3.142 8.607 8.868 8.647 5.25.04 8.948-3.807 8.948-8.606V6.697h-5.488zm53.306-10.512c-5.925 0-10.098 4.204-10.098 9.757 0 5.552 4.175 9.756 10.098 9.756s10.099-4.204 10.099-9.756-4.173-9.757-10.099-9.757m0 14.794c-2.744 0-4.69-2.063-4.69-5.037 0-2.975 1.948-5.038 4.69-5.038s4.691 2.063 4.691 5.038-1.947 5.037-4.691 5.037M101.966 6.258c-5.926 0-10.099 4.204-10.099 9.757 0 .073.009.144.01.22h-.01v15.772h5.408V24.75a10.9 10.9 0 0 0 4.691 1.02c5.926 0 10.099-4.204 10.099-9.756s-4.173-9.756-10.099-9.756m0 14.794c-2.744 0-4.69-2.063-4.69-5.037 0-2.975 1.948-5.038 4.69-5.038s4.691 2.063 4.691 5.038-1.947 5.037-4.691 5.037M49.868 11.41h10.814l-10.814 8.452v5.473h17.514v-4.716h-10.84l10.84-8.473V6.694H49.868zm74.501 13.925h-1.831a7.46 7.46 0 0 1-5.262-2.177 7.42 7.42 0 0 1-2.183-5.248V.005h5.518V17.91a1.927 1.927 0 0 0 1.927 1.921h1.831z"></path></svg></a><div class="mt-2 text-sm text-white opacity-80">漏 <!-- -->2025<!-- --> zuplo. All right reserved.</div></div><div class="flex-1"><label for="email" class="mb-3.5 block">Join Our Newsletter</label><form class="relative"><div class="flex gap-2"><div class="relative w-full"><input class="input w-full rounded-xl border border-white/30 bg-transparent p-3.5 text-base transition-all placeholder:text-gray-600 hover:border-pink focus:border-pink focus:outline-0 focus:ring-transparent" id="email" type="email" placeholder="Your Email" name="email"/></div><button type="submit" class="btn btn-primary-dark" aria-label="Submit email address"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" class="mx-auto"><path stroke="currentColor" stroke-width="2" d="m8.111 13.556 1.063 2.125c.797 1.594 3.123 1.429 3.686-.262l3.875-11.624c.521-1.564-.966-3.051-2.53-2.53L2.581 5.14C.89 5.703.725 8.03 2.319 8.826l3.28 1.64a2 2 0 0 0 2.31-.374L12 6"></path></svg></button></div></form></div></div><div class="w-full border-b border-white/15"></div><div class="flex w-full flex-col gap-8 md:flex-row"><div class="flex flex-1 flex-col gap-10"><nav class="flex flex-col gap-4"><div class="text-sm font-bold uppercase tracking-wider text-white/50">Features</div><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/api-key-management">API Key Management</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/developer-portal">Developer Portal</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/api-monetization">Monetization</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/multi-cloud">Multi-cloud</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/open-api">OpenAPI Native</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/programmable">Programmable</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/rate-limiting">Rate Limiting</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/features/unlimited-environments">Unlimited Environments</a></nav></div><div class="flex flex-1 flex-col gap-10"><nav class="flex flex-col gap-4"><div class="text-sm font-bold uppercase tracking-wider text-white/50">Developers</div><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="https://zuplo.com/docs">Documentation</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/blog">Blog</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/changelog">Changelog</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/integrations">Integrations</a></nav><nav class="flex flex-col gap-4"><div class="text-sm font-bold uppercase tracking-wider text-white/50">Product</div><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/pricing">Pricing</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="https://zuplo.com/docs/articles/support">Support</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="https://portal.zuplo.com/">Sign In</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/resources">Customer Stories</a></nav></div><div class="flex flex-1 flex-col gap-10"><nav class="flex flex-col gap-4"><div class="text-sm font-bold uppercase tracking-wider text-white/50">Product Comparisons</div><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/apigee-alternative-zuplo">vs. Apigee</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/aws-api-gateway-alternative-zuplo">vs. AWS API Gateway</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/azure-api-management-alternative-zuplo">vs. Azure API Management</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/kong-alternative-zuplo">vs. Kong</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/solo-alternative-zuplo">vs. Solo.io</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/api-gateways/tyk-api-management-alternative-zuplo">vs. Tyk</a></nav></div><div class="flex flex-1 flex-col gap-10"><nav class="flex flex-col gap-4"><div class="text-sm font-bold uppercase tracking-wider text-white/50">Company</div><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/about">About Us</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/media-kit/about">Media Kit</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="/careers">Careers</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="https://status.zuplo.com">Status</a><a class="text-sm font-semibold text-gray-500 no-underline transition-colors hover:text-pink" href="https://trust.zuplo.com">Trust &amp; Compliance</a></nav></div></div></div><div class="mt-10 flex flex-col items-center justify-between gap-5 text-xs md:mt-20 lg:flex-row"><nav class="-mx-5 flex flex-wrap justify-center gap-y-10 text-white opacity-80 sm:flex-nowrap"><a class="flex-1 basis-1/2 px-5 no-underline transition-colors hover:text-pink sm:basis-auto" href="/legal/privacy-policy">Privacy Policy</a><a class="flex-1 basis-1/2 px-5 no-underline transition-colors hover:text-pink sm:basis-auto" href="/legal/security-policy">Security Policies</a><a class="flex-1 basis-1/2 px-5 no-underline transition-colors hover:text-pink sm:basis-auto" href="/legal/terms">Terms of Service</a><a class="flex-1 basis-1/2 px-5 no-underline transition-colors hover:text-pink sm:basis-auto" href="https://trust.zuplo.com">Trust &amp; Compliance</a></nav><div class="flex items-center"><a href="https://youtube.com/@zuplo" class="mr-5 transition-opacity last:mr-0 hover:opacity-50" aria-label="Learn on Youtube"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-35.2 -41.333 305.067 248" width="30" class="text-white"><path fill="#fff" d="M229.763 25.817c-2.699-10.162-10.65-18.165-20.747-20.881C190.716 0 117.333 0 117.333 0S43.951 0 25.651 4.936C15.554 7.652 7.602 15.655 4.904 25.817 0 44.237 0 82.667 0 82.667s0 38.43 4.904 56.85c2.698 10.162 10.65 18.164 20.747 20.881 18.3 4.935 91.682 4.935 91.682 4.935s73.383 0 91.683-4.935c10.097-2.717 18.048-10.72 20.747-20.88 4.904-18.422 4.904-56.851 4.904-56.851s0-38.43-4.904-56.85"></path><path d="m93.333 117.558 61.334-34.89-61.334-34.893z"></path></svg></a><a href="https://discord.zuplo.com" class="mr-5 transition-opacity last:mr-0 hover:opacity-50" aria-label="Join Zuplo on Discord"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 127.14 96.36" class="fill-current text-white"><path d="M107.7 8.07A105.2 105.2 0 0 0 81.47 0a72 72 0 0 0-3.36 6.83 97.7 97.7 0 0 0-29.11 0A72 72 0 0 0 45.64 0a106 106 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.7 105.7 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.4 68.4 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.7 68.7 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.3 105.3 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15M42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69m42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69"></path></svg></a><a href="https://github.com/zuplo" class="mr-5 transition-opacity last:mr-0 hover:opacity-50" aria-label="Navigate to Zuplo Github"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" class="fill-current text-white"><path fill="#fff" d="M22 12.008a10 10 0 0 1-6.84 9.48.52.52 0 0 1-.45-.07.51.51 0 0 1-.21-.41v-2.67a4 4 0 0 0-.5-2.06.25.25 0 0 1 0-.27.27.27 0 0 1 .2-.14c2.44-.25 3.8-1.22 3.8-3.86a4.7 4.7 0 0 0-1.19-3.36 4.3 4.3 0 0 0 .19-1.2 4.3 4.3 0 0 0-.15-1.08.49.49 0 0 0-.53-.36 4.45 4.45 0 0 0-2.44 1.18 9.9 9.9 0 0 0-3.76 0 4.45 4.45 0 0 0-2.44-1.18.49.49 0 0 0-.53.36A4.3 4.3 0 0 0 7 7.448a4.3 4.3 0 0 0 .19 1.2A4.7 4.7 0 0 0 6 12.008c0 2.78 1.51 3.71 4.28 3.94a3.7 3.7 0 0 0-.69 1.53v.12a.7.7 0 0 0 0 .14.59.59 0 0 1-.64.51 1 1 0 0 1-.43-.12 5.3 5.3 0 0 1-1.42-1.26 10 10 0 0 0-.8-.81 2.7 2.7 0 0 0-.59-.39.49.49 0 0 0-.48 0 .5.5 0 0 0-.23.42v.06a.5.5 0 0 0 .23.42c.358.3.669.655.92 1.05a6.6 6.6 0 0 0 1.59 1.72 2.5 2.5 0 0 0 1.4.42h.36v1.25a.51.51 0 0 1-.21.41.52.52 0 0 1-.45.07A10 10 0 1 1 22 12.008"></path></svg></a><a href="https://www.linkedin.com/company/zuplo/" class="mr-5 transition-opacity last:mr-0 hover:opacity-50" aria-label="Navigate to Zuplo LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="17" fill="none" class="fill-current text-white"><path fill="currentColor" fill-rule="evenodd" d="M0 1.981C0 .857.862 0 2.182 0s2.134.856 2.16 1.981c0 1.103-.838 1.983-2.183 1.983h-.026C.837 3.964 0 3.082 0 1.981M13.557 5.26c-2.049 0-2.965 1.114-3.478 1.895V5.53H6.22c.05 1.077 0 11.47 0 11.47h3.858v-6.405c0-.343.025-.685.127-.93.278-.684.913-1.394 1.98-1.394 1.397 0 1.955 1.052 1.955 2.594V17H18v-6.577C18 6.9 16.096 5.26 13.557 5.26m-9.471.271H.228V17h3.858z" clip-rule="evenodd"></path></svg></a><a href="https://twitter.com/zuplo" class="mr-5 transition-opacity last:mr-0 hover:opacity-50" aria-label="Navigate to Zuplo Twitter"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke-width="0" class="fill-current text-white"><path fill="currentColor" d="M17.176 3.875h2.76l-6.03 6.892L21 20.145h-5.554l-4.35-5.688-4.979 5.688H3.355l6.45-7.371L3 3.875h5.695l3.933 5.199zm-.969 14.618h1.53L7.864 5.44h-1.64z"></path></svg></a></div></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f573e34074d45acf.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/3478b6abef19b3b3-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/3534416bbfdcc9be-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/684e5662d94c69e1-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/media/a34f9d1faa5f3315-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:HL[\"/_next/static/css/25523e006f6d47ff.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"style\"]\n6:HL[\"/_next/static/css/5b72a068be09cde3.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"style\"]\n"])</script><script>self.__next_f.push([1,"7:I[12846,[],\"\"]\na:I[4707,[],\"\"]\nb:I[36423,[],\"\"]\ne:I[61060,[],\"\"]\nf:[]\n0:[\"$\",\"$L7\",null,{\"buildId\":\"O2VXTQiP0Uwx_E7ZHMSZ9\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"changelog\"],\"initialTree\":[\"\",{\"children\":[\"changelog\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"changelog\",{\"children\":[\"__PAGE__\",{},[[\"$L8\",\"$L9\",null],null],null]},[null,[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"changelog\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/25523e006f6d47ff.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/5b72a068be09cde3.css?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],\"$Lc\"],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$Ld\"],\"globalErrorComponent\":\"$e\",\"missingSlots\":\"$Wf\"}]\n"])</script><script>self.__next_f.push([1,"10:I[88003,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5878\",\"static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2339\",\"static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2364\",\"static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5141\",\"static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"\"]\n11:\"$Sreact.suspense\"\n12:I[49294,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9401\",\"static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9225\",\"static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"1673\",\"static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7654\",\"static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"3185\",\"static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"SuspendedProviders\"]\n13:I[49294,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9401\",\"static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9225\",\"static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"1673\",\"static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7654\",\"static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"3185\",\"static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy"])</script><script>self.__next_f.push([1,"3zQd17YBAHqMmYXeG\"],\"Providers\"]\n14:I[34853,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9401\",\"static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9225\",\"static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"1673\",\"static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7654\",\"static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"3185\",\"static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"default\"]\n15:I[72972,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5878\",\"static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2339\",\"static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2364\",\"static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5141\",\"static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"\"]\n16:I[85552,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9401\",\"static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9225\",\"static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"1673\",\"static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7654\",\"static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"3185\",\"static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy"])</script><script>self.__next_f.push([1,"3zQd17YBAHqMmYXeG\"],\"default\"]\n17:I[1952,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9401\",\"static/chunks/9401-1da5a15e17debf8b.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"9225\",\"static/chunks/9225-a3e3ccdc8bf5ad39.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"1673\",\"static/chunks/1673-3371928f5e637c63.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7654\",\"static/chunks/7654-46383470ca583f83.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"3185\",\"static/chunks/app/layout-3872bd41021ff9f8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"SpeedInsights\"]\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_29bbdb __variable_dbf9c5 __variable_64184a\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://cdn.zuplo.com\",\"crossOrigin\":\"\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/x-icon\",\"href\":\"https://cdn.zuplo.com/www/favicon.svg\"}],[[\"$\",\"$L10\",null,{\"id\":\"gtm\",\"async\":true,\"dangerouslySetInnerHTML\":{\"__html\":\"(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n'https://ta.zuplo.com/loader?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-WMKS78XZ');\"}}],[\"$\",\"$L10\",null,{\"id\":\"gtm2\",\"children\":\"window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'GTM-WMKS78XZ', {'allow_enhanced_conversions':true});\"}],[\"$\",\"$L10\",null,{\"id\":\"koala-analytics\",\"strategy\":\"afterInteractive\",\"async\":true,\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.koalaSettings = { host: 'https://kapi.zuplo.com' };\\n !function(t){if(window.ko)return;window.ko=[],[\\\"identify\\\",\\\"track\\\",\\\"removeListeners\\\",\\\"open\\\",\\\"on\\\",\\\"off\\\",\\\"qualify\\\",\\\"ready\\\"].forEach(function(t){ko[t]=function(){var n=[].slice.call(arguments);return n.unshift(t),ko.push(n),ko}});var n=document.createElement(\\\"script\\\");n.async=!0,n.setAttribute(\\\"src\\\",\\\"https://kcdn.zuplo.com/v1/pk_32d64a435a311ccc9462e3721dba58cb3e35/sdk.js\\\"),(document.body || document.head).appendChild(n)}();\"}}]]]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"$11\",null,{\"children\":[\"$\",\"$L12\",null,{}]}],[\"$\",\"$L13\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"overflow-x-hidden\",\"children\":[[\"$\",\"$L14\",null,{}],[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"main\",null,{\"className\":\"layout relative mt-24\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-xs py-36 text-center text-white\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl md:text-4xl lg:text-5xl\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"mb-6 text-base\",\"children\":\"The page you are looking for doesn't exist or has been moved\"}],[\"$\",\"$L15\",null,{\"href\":\"/\",\"className\":\"btn btn-primary-dark inline-block\",\"children\":\"Go Home\"}]]}]}],\"notFoundStyles\":[]}],[\"$\",\"$L16\",null,{}]]}]}],[\"$\",\"$L17\",null,{}]]}]]}]\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Zuplo Changelog - Latest platform updates and new features\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Read about the latest and greatest features and updates we've shipped for API developers like you.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://zuplo.com/changelog\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Zuplo Changelog - Latest platform updates and new features\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Read about the latest and greatest features and updates we've shipped for API developers like you.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:site_name\",\"content\":\"Zuplo\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image\",\"content\":\"https://zuplo.com/og?text=Zuplo%20Changelog\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:title\",\"content\":\"Zuplo Changelog - Latest platform updates and new features\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:description\",\"content\":\"Read about the latest and greatest features and updates we've shipped for API developers like you.\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"https://zuplo.com/og?text=Zuplo%20Changelog\"}],[\"$\",\"meta\",\"14\",{\"name\":\"next-size-adjust\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"18:I[65878,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5878\",\"static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2339\",\"static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2364\",\"static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5141\",\"static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"Image\"]\n1f:I[86117,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5878\",\"static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2339\",\"static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2364\",\"static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5141\",\"static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"URLPagination\"]\n20:I[71094,[\"2972\",\"static/chunks/2972-a0ef9a73d79c9f20.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5878\",\"static/chunks/5878-02e74ec6bb2d7469.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"4225\",\"static/chunks/4225-502b7faf717f5ac8.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"7881\",\"static/chunks/7881-e554ce6fa74737c1.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2339\",\"static/chunks/2339-ed0af83f1daa8375.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"2364\",\"static/chunks/2364-17bbb3d18d6b3231.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\",\"5141\",\"static/chunks/app/changelog/page-d57b455593f67f89.js?dpl=dpl_5Ybkhis1Gmy3zQd17YBAHqMmYXeG\"],\"DesignedForDevsCTA\"]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"main\",null,{\"className\":\"layout relative mt-24\",\"children\":[[\"$\",\"section\",null,{\"id\":\"$undefined\",\"className\":\"relative mt-[calc(-1*var(--page-pt))] pb-12 lg:mt-0 lg:pb-24\",\"data-testid\":\"$undefined\",\"children\":[\"$\",\"div\",null,{\"className\":\"container relative max-w-wide\",\"children\":[[\"$\",\"$L18\",null,{\"src\":{\"src\":\"/_next/static/media/changelog_3.8168ee8f.png\",\"height\":1036,\"width\":1280,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAADFBMVEW6iXS0pYa7n4m3qoH5karcAAAABHRSTlMBDx807J286QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAB5JREFUeJxjYEAARkYmRjDNxMwMZsEZDIyMjGAaCgADvgAiHAu+ZAAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":6},\"alt\":\"Changelog image 3\",\"role\":\"presentation\",\"className\":\"absolute z-[-1] max-w-[initial] -left-[350px] -top-[240px] z-0 hidden h-[calc(550px/0.8)] w-[calc(569px/0.8)] lg:-left-[380px] lg:-top-[160px] lg:flex\",\"sizes\":\"(min-width: 992px) 711px, 0px\",\"priority\":true}],[\"$\",\"$L18\",null,{\"src\":{\"src\":\"/_next/static/media/changelog_2.c4d4ff32.png\",\"height\":1194,\"width\":1280,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEXlnJfxmob5mIb0k4/4nYYiGwxAAAAABXRSTlMBDRwyRfObTKYAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAmSURBVHicRYhBDgAwDIJE/f+bl7VLxgWC9MGwTnyLtJnldI5g/TgGYwAzIzHr+wAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":7},\"alt\":\"Changelog image 2\",\"role\":\"presentation\",\"className\":\"absolute z-[-1] max-w-[initial] lgw-[853px] -right-[380px] bottom-[10%] z-0 hidden h-[calc(825px/1.5)] w-[calc(853px/1.5)] lg:-bottom-[340px] lg:-right-[350px] lg:flex lg:h-[825px]\",\"sizes\":\"568px\",\"priority\":\"$undefined\"}],[\"$\",\"div\",null,{\"className\":\"px-4 py-8 md:p-12 lg:p-24 bg-white mx-[calc(-1*var(--page-px))] lg:mx-0 lg:rounded-2xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"container relative max-w-wide\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-xl\",\"children\":[\"$\",\"section\",null,{\"className\":\"lg:pb-15 pb-10 md:pb-5 text-black [\u0026\u003ediv\u003eh1]:max-w-[120px] [\u0026\u003ediv\u003eh1]:text-4xl [\u0026\u003ediv\u003eh1]:!font-bold [\u0026\u003ediv\u003eh1]:!leading-narrow [\u0026\u003ediv\u003eh1]:md:!text-[76px] [\u0026\u003ediv\u003ep]:!font-normal [\u0026\u003ediv\u003ep]:!leading-[30px]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"\",\"children\":[[\"$\",\"div\",null,{\"className\":\"align-center mb-4 flex\",\"children\":[\"$\",\"h1\",null,{\"className\":\"text-3xl lg:text-5xl\",\"children\":\"Zuplo Changelog\"}]}],[\"$\",\"p\",null,{\"className\":\"text-xl\",\"children\":\"We release improvements, new features, and fixes daily. Follow along here to see the most important updates.\"}]]}],\"$undefined\"]}]}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",null,{\"href\":\"/changelog\",\"children\":[[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent bg-pink text-white hover:bg-pink\",\"children\":\"ALL\"}],\" \"]}],[[\"$\",\"$L15\",\"dev-experience\",{\"href\":\"?tag=dev-experience\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"DEV EXPERIENCE\"}]}],[\"$\",\"$L15\",\"dev-portal\",{\"href\":\"?tag=dev-portal\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"DEV PORTAL\"}]}],[\"$\",\"$L15\",\"docs\",{\"href\":\"?tag=docs\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"DOCS\"}]}],[\"$\",\"$L15\",\"monetization\",{\"href\":\"?tag=monetization\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"MONETIZATION\"}]}],[\"$\",\"$L15\",\"performance\",{\"href\":\"?tag=performance\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"PERFORMANCE\"}]}],[\"$\",\"$L15\",\"policy\",{\"href\":\"?tag=policy\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"POLICY\"}]}],[\"$\",\"$L15\",\"portal\",{\"href\":\"?tag=portal\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"PORTAL\"}]}],[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"RUNTIME\"}]}],[\"$\",\"$L15\",\"security\",{\"href\":\"?tag=security\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent\",\"children\":\"SECURITY\"}]}]]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-12 space-y-16\",\"data-testid\":\"changelog-grid\",\"children\":[\"$L19\",\"$L1a\",\"$L1b\",\"$L1c\",\"$L1d\",\"$L1e\"]}],[\"$\",\"div\",null,{\"data-testid\":\"changelog-pagination\",\"className\":\"ml-auto pt-10\",\"children\":[\"$\",\"$L1f\",null,{\"total\":9,\"theme\":\"dark\"}]}]]}]]}]}],[\"$\",\"$L20\",null,{\"eventData\":{\"placement\":\"changelog-end\"},\"type\":\"light\",\"children\":[\"$\",\"$L18\",null,{\"src\":{\"src\":\"/_next/static/media/changelog_4.31360263.png\",\"height\":1280,\"width\":1155,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAICAMAAAAC2hU0AAAAP1BMVEVMaXFvrpzEUbjzLI7NGcAb2tjIkXY6pN/phGpjqr/glmYZr+1OpNx87XLe9hKB9YDNbbG4hLFxybninZX/VX4ssU5sAAAAEnRSTlMAOYPrK9EcEAsqocnRu1/6pZRahnqpAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAM0lEQVR4nGNggAEOFg4wzcTMwsfLzsAgIMLFz8rOwCAoLMTKycDAwMnDzQhWwc4GUQgGACGmAQuQ9VcsAAAAAElFTkSuQmCC\",\"blurWidth\":7,\"blurHeight\":8},\"alt\":\"\",\"role\":\"presentation\",\"className\":\"absolute z-[-1] max-w-[initial] -bottom-[130px] -left-[550px] z-0 hidden h-[825px] w-[853px] lg:flex\",\"sizes\":\"568px\",\"priority\":\"$undefined\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-28T00:00:00.000Z\",\"children\":\"March 28, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"Redirect Forwarding in URL Forward handler\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"We have added the ability to specify redirect behavior for the URL Forward\\nhandler using a new \",[\"$\",\"code\",null,{\"children\":\"forwardRedirects\"}],\" option.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"You can implement this manually from \",[\"$\",\"code\",null,{\"children\":\"routes.oas.json\"}],\" in your Zuplo project by\\nadding it to the \",[\"$\",\"code\",null,{\"children\":\"options\"}],\" object for \",[\"$\",\"code\",null,{\"children\":\"urlForwardHandler\"}],\" on any route you want\\nto use it on.\"]}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"paths\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"/v1/links\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"x-zuplo-path\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"pathMode\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"open-api\\\"\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" },\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"get\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"summary\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"Gets a list of links\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"x-zuplo-route\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"corsPolicy\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"none\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"handler\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"export\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"urlForwardHandler\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"module\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"$import(@zuplo/runtime)\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"options\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"baseUrl\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"${env.BASE_URL}\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"forwardRedirects\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"true\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" },\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"policies\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" \\\"inbound\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\": []\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"}\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"When set to false or not specified, redirects won't be followed - the status and\\n\",[\"$\",\"code\",null,{\"children\":\"location\"}],\" header will be returned as received.\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1d:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-14T00:00:00.000Z\",\"children\":\"March 14, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"New Pre-Routing Hook\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"The new Pre-Routing Hook allows you to manipulate an incoming request \",[\"$\",\"em\",null,{\"children\":\"before\"}],\"\\nit's checked for routing. For example, if you want all routes to be case\\ninsensitive you could just lowercase the URL as it comes into the gateway, as\\nshown below:\"]}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"runtime.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"addPreRoutingHook\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"async\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" (\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#FFAB70\"},\"children\":\"request\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\") \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"=\u003e\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" const\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" nr\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" =\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" Request\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(request.url.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"toLowerCase\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(), request);\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" return\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" nr;\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"});\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"Another example would be URL path normalization to remove trailing slashes:\"}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"runtime.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"addPreRoutingHook\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"async\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" (\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#FFAB70\"},\"children\":\"request\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\") \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"=\u003e\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" const\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" url\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" =\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" URL\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(request.url);\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" if\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" (url.pathname.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"length\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" \u003e\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" 1\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" \u0026\u0026\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" url.pathname.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"endsWith\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"/\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\")) {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" url.pathname \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"=\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" url.pathname.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"slice\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"0\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\", \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"-\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"1\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\");\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" const\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\" nr\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" =\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" Request\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(url, request);\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" return\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" nr;\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" return\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" request;\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"});\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Keep in mind that this will run on \",[\"$\",\"em\",null,{\"children\":\"all\"}],\" requests so the code you use here needs\\nto be appropriately performant and aware it can generate weird downstream\\neffects by changing URLs and headers.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"The method is async but reading and manipulating the request body is not\\nrecommended for performance reasons.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-28T00:00:00.000Z\",\"children\":\"March 28, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"Splunk Logging Plugin\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":\"The wave of fresh logging plugins continues this week with the addition of\\nSplunk. Now available for use direct from your Zuplo API project.\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"To add the Splunk logging plugin to your Zuplo project, add the following code\\nto your zuplo.runtime.ts file. Set the url parameter to your Splunk HEC endpoint\\nand the token parameter to your Splunk HEC token.\"}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"import\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" RuntimeExtensions,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" SplunkLoggingPlugin,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" environment,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"} \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"from\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\" \\\"@zuplo/runtime\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\";\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\"}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"export\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" function\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" runtimeInit\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#FFAB70\"},\"children\":\"runtime\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\":\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" RuntimeExtensions\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\") {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" runtime.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"addPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" SplunkLoggingPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"({\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#6A737D\"},\"children\":\" // For Splunk Cloud\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" url: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"https://\u003cyour-instance\u003e.splunkcloud.com:8088/services/collector\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" token: environment.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"SPLUNK_TOKEN\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#6A737D\"},\"children\":\" // Channel ID for Splunk HEC with indexer acknowledgment\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" channel: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"FE0ECFAD-13D5-401B-847D-77833BD77131\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#6A737D\"},\"children\":\" // Optional parameters with defaults\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" index: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"main\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" sourcetype: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"json\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" host: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"zuplo-api\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" fields: {\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" environment: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"production\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" application: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"my-api\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" },\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }),\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" );\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"}\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"As with all our loggers, the Splunk Plugin supports custom fields via the\\n\",[\"$\",\"code\",null,{\"children\":\"fields\"}],\" object, in addition to the\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-new-relic#standard-fields\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"standard fields\"}],\".\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Full details can be found in the\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-splunk\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"documentation\"}],\".\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-28T00:00:00.000Z\",\"children\":\"March 28, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"New Default Compatibility Date\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"We鈥檝e introduced a new default compatibility date for projects created after\",[\"$\",\"br\",null,{}],\"\\n\",[\"$\",\"strong\",null,{\"children\":\"March 27, 2025\"}],\", which includes some breaking changes that improve the\\noverall behavior of Zuplo APIs.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"The new default compatibility date is\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/compatibility-dates#2025-02-06\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"2025-02-06\"}],\".\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Previously, special characters in \",[\"$\",\"code\",null,{\"children\":\"open-api\"}],\" formatted URLs were not escaped.\\nThis led to unintended behavior where regex patterns could be included, even\\nthough OpenAPI format URLs don鈥檛 support regex. This has now been fixed鈥攁ll\\nspecial characters are escaped.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Additionally, some Zuplo log plugins could be enabled using undocumented\\nenvironment variables and special properties on \",[\"$\",\"code\",null,{\"children\":\"context.custom\"}],\" to set global\\nlog attributes.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"These legacy features, which predate the current plugin system, have now been\\nremoved.\"}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Log plugins should now be enabled using the\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/logging\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"documented plugin system\"}],\".\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"For full details on compatibility dates and the changes they include, see our\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/compatibility-dates\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"documentation\"}],\".\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-21T00:00:00.000Z\",\"children\":\"March 21, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"New Relic Logging Plugin\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"We've expanded our range of third-party logging plugins yet again鈥攖his time with\\nthe addition of \",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://newrelic.com/\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"New Relic\"}],\".\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"Full details can be found in the\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-new-relic\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"documentation\"}],\", but usage\\nfollows the same pattern as\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-gcp\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"all\"}],\"\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-aws-cloudwatch\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"the\"}],\"\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-datadog\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"other\"}],\"\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-dynatrace\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"loggers\"}],\".\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"Add the plugin to the Zuplo runtime and configure your options.\"}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"import\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" RuntimeExtensions,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" NewRelicLoggingPlugin,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" environment,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"} \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"from\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\" \\\"@zuplo/runtime\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\";\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\"}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"export\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" function\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" runtimeInit\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#FFAB70\"},\"children\":\"runtime\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\":\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" RuntimeExtensions\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\") {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" runtime.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"addPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" NewRelicLoggingPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"({\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#6A737D\"},\"children\":\" // Optional, defaults to \\\"https://log-api.newrelic.com/log/v1\\\"\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" url: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"https://log-api.newrelic.com/log/v1\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" apiKey: environment.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"NEW_RELIC_API_KEY\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" service: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"MyAPI\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\", \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#6A737D\"},\"children\":\"// Optional, defaults to \\\"Zuplo\\\"\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" fields: {\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" field1: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"value1\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" field2: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"value2\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" },\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }),\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" );\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"}\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":[\"As with all our loggers, the New Relic Plugin supports custom fields in addition\\nto the\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/log-plugin-new-relic#standard-fields\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"standard fields\"}],\".\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"text-card-foreground rounded-lg shadow-sm bg-background group relative overflow-hidden border transition-all hover:shadow-lg\",\"data-testid\":\"changelog-item\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col space-y-2 p-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-muted-foreground flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar-days h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],[\"$\",\"path\",\"6423bh\",{\"d\":\"M8 14h.01\"}],[\"$\",\"path\",\"1etili\",{\"d\":\"M12 14h.01\"}],[\"$\",\"path\",\"1gbofw\",{\"d\":\"M16 14h.01\"}],[\"$\",\"path\",\"lrp35t\",{\"d\":\"M8 18h.01\"}],[\"$\",\"path\",\"mhygvu\",{\"d\":\"M12 18h.01\"}],[\"$\",\"path\",\"kzsmim\",{\"d\":\"M16 18h.01\"}],\"$undefined\"]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-03-14T00:00:00.000Z\",\"children\":\"March 14, 2025\"}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold leading-tight tracking-tight\",\"children\":\"Custom Fields Available on All Logging Policies\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"$L15\",\"runtime\",{\"href\":\"?tag=runtime\",\"children\":[\"$\",\"div\",null,{\"className\":\"focus:ring-ring inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border-transparent text-primary bg-pink/10 hover:bg-pink/20\",\"children\":\"RUNTIME\"}]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose-tight prose grid max-w-none gap-4 p-10 pt-0\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"A new \",[\"$\",\"code\",null,{\"children\":\"fields\"}],\" option is now available across all\\n\",[\"$\",\"$L15\",null,{\"className\":\"$undefined\",\"href\":\"https://zuplo.com/docs/articles/logging\",\"id\":\"$undefined\",\"onClick\":\"$undefined\",\"data-testid\":\"$undefined\",\"children\":\"logging plugins\"}],\". This addition\\nenables you to append arbitrary custom fields to each log entry, providing\\nadditional context and information in your logs.\"]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"For example, using our Google Cloud Logging plugin:\"}],\"\\n\",[\"$\",\"pre\",null,{\"className\":\"shiki github-dark\",\"style\":{\"backgroundColor\":\"#24292e\",\"color\":\"#e1e4e8\"},\"tabIndex\":\"0\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"import\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" RuntimeExtensions,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" GoogleCloudLoggingPlugin,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" environment,\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"} \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"from\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\" \\\"@zuplo/runtime\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\";\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\"}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\"export\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" function\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" runtimeInit\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#FFAB70\"},\"children\":\"runtime\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\":\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" RuntimeExtensions\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\") {\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" runtime.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\"addPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"(\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#F97583\"},\"children\":\" new\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#B392F0\"},\"children\":\" GoogleCloudLoggingPlugin\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"({\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" logName: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"projects/my-project/logs/my-api\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" serviceAccountJson: environment.\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#79B8FF\"},\"children\":\"GCP_SERVICE_ACCOUNT\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" fields: {\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" myCustomField: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"value\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" anotherCustomField: \"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#9ECBFF\"},\"children\":\"\\\"value2\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\",\"}]]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" },\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" }),\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\" );\"}]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"line\",\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#E1E4E8\"},\"children\":\"}\"}]}]]}]}],\"\\n\",[\"$\",\"p\",null,{\"children\":\"You can use this feature to include relevant metadata, application-specific\\ndetails, or contextual information that may be useful for debugging or analysis\\npurposes.\"}]]}]]}]\n"])</script></body></html>

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