CINXE.COM

Birthday Week

<!doctype html> <html lang="en-us" dir="ltr"> <head> <base href="https://blog.cloudflare.com/tag/birthday-week/"> <script async src="https://ot.www.cloudflare.com/public/vendor/onetrust/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" data-domain-script="b1e05d49-f072-4bae-9116-bdb78af15448"></script> <meta name="HandheldFriendly" content="True"> <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="baidu-site-verification" content="KeThzeyMOr"> <meta name="baidu-site-verification" content="code-NIlrS7gNhx"> <meta charset="UTF-8"> <meta name="description" content="Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet."> <title>Birthday Week</title> <meta name="title" content="Birthday Week"> <meta name="msvalidate.01" content="CF295E1604697F9CAD18B5A232E871F6"> <meta class="swiftype" name="language" data-type="string" content="en"> <script src="/static/z/i.js" type="text/javascript" referrerpolicy="origin"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-32x32.png"> <link rel="mask-icon" href="/images/favicon-32x32.png" color="#f78100"> <link rel="stylesheet" href="/themes/ashes.min.css"> <link rel="sitemap" href="/sitemap.xml"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="theme-color" content="#ffffff"> <link rel="canonical" href="https://blog.cloudflare.com/tag/birthday-week/"> <link rel="alternate" type="application/rss+xml" title="Cloudflare Birthday Week RSS Feed" href="/tag/birthday-week/rss"> <link rel="alternate" hreflang="en-us" href="https://blog.cloudflare.com/tag/birthday-week/"> <link rel="alternate" hreflang="de-de" href="https://blog.cloudflare.com/de-de/tag/birthday-week/"> <link rel="alternate" hreflang="es-es" href="https://blog.cloudflare.com/es-es/tag/birthday-week/"> <link rel="alternate" hreflang="fr-fr" href="https://blog.cloudflare.com/fr-fr/tag/birthday-week/"> <link rel="alternate" hreflang="it-it" href="https://blog.cloudflare.com/it-it/tag/birthday-week/"> <link rel="alternate" hreflang="ja-jp" href="https://blog.cloudflare.com/ja-jp/tag/birthday-week/"> <link rel="alternate" hreflang="ko-kr" href="https://blog.cloudflare.com/ko-kr/tag/birthday-week/"> <link rel="alternate" hreflang="zh-tw" href="https://blog.cloudflare.com/zh-tw/tag/birthday-week/"> <link rel="alternate" hreflang="zh-cn" href="https://blog.cloudflare.com/zh-cn/tag/birthday-week/"> <link rel="alternate" hreflang="pt-br" href="https://blog.cloudflare.com/pt-br/tag/birthday-week/"> <link rel="alternate" hreflang="ru-ru" href="https://blog.cloudflare.com/ru-ru/tag/birthday-week/"> <link rel="alternate" hreflang="pl-pl" href="https://blog.cloudflare.com/pl-pl/tag/birthday-week/"> <link rel="alternate" hreflang="he-il" href="https://blog.cloudflare.com/he-il/tag/birthday-week/"> <link rel="alternate" hreflang="nl-nl" href="https://blog.cloudflare.com/nl-nl/tag/birthday-week/"><!-- General Meta Tags --> <meta property="article:publisher" content="https://www.facebook.com/cloudflare"><!-- Facebook Meta Tags --> <meta property="og:site_name" content="The Cloudflare Blog"> <meta property="og:type" content="website"> <meta property="og:title" content="The Cloudflare Blog: Birthday Week"> <meta property="og:description" content="Collection of Cloudflare blog posts tagged 'Birthday Week'"> <meta property="og:url" content="https://blog.cloudflare.com/tag/birthday-week/"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="628"><!-- Twitter/X Meta Tags --> <meta name="twitter:title" content="The Cloudflare Blog: Birthday Week"> <meta name="twitter:description" content="Collection of Cloudflare blog posts tagged 'Birthday Week'"> <meta name="twitter:url" content="https://blog.cloudflare.com/tag/birthday-week/"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@cloudflare"> <meta property="og:image"> <meta name="twitter:image"> <link rel="stylesheet" href="/_astro/index.Bpd2cWaZ.css"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style> <script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();;(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script> <meta http-equiv="X-Translated-By" content="Google"> <meta http-equiv="X-Translated-To" content="de"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.tKc6KWkFf-8.O/am=gAE/d=1/rs=AN8SPfrf36LIV3DkhtRBGWFnLWWzaykPyw/m=corsproxy" data-sourceurl="https://blog.cloudflare.com/tag/birthday-week/"></script> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.tKc6KWkFf-8.O/am=gAE/d=1/exm=corsproxy/ed=1/rs=AN8SPfrf36LIV3DkhtRBGWFnLWWzaykPyw/m=phishing_protection" data-phishing-protection-enabled="false" data-forms-warning-enabled="true" data-source-url="https://blog.cloudflare.com/tag/birthday-week/"></script> <meta name="robots" content="none"> </head> <body> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.tKc6KWkFf-8.O/am=gAE/d=1/exm=corsproxy,phishing_protection/ed=1/rs=AN8SPfrf36LIV3DkhtRBGWFnLWWzaykPyw/m=navigationui" data-environment="prod" data-proxy-url="https://blog-cloudflare-com.translate.goog" data-proxy-full-url="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" data-source-url="https://blog.cloudflare.com/tag/birthday-week/" data-source-language="pl" data-target-language="de" data-display-language="en-GB" data-detected-source-language="" data-is-source-untranslated="false" data-source-untranslated-url="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://blog.cloudflare.com/tag/birthday-week/&amp;anno=2" data-client="tr"></script><astro-island uid="1KLtea" component-url="/_astro/GoogleAnalytics.DSjxwi8U.js" component-export="GoogleAnalytics" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;title&quot;:[0,&quot;Birthday Week&quot;],&quot;canonical&quot;:[0,&quot;https://blog.cloudflare.com/tag/birthday-week&quot;],&quot;info&quot;:[0],&quot;tagInfo&quot;:[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/birthday-week&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;visibility&quot;:[0,&quot;public&quot;],&quot;feature_image&quot;:[0,&quot;&quot;]}],&quot;authorInfo&quot;:[0],&quot;translatedPosts&quot;:[1,[]]}" ssr client="only" opts="{&quot;name&quot;:&quot;GoogleAnalytics&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> <script>(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value=="object"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};"requestIdleCallback"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event("astro:idle"));})();</script><astro-island uid="Z27099N" prefix="r8" component-url="/_astro/Navigation.CSu6dGvY.js" component-export="Navigation" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;logo&quot;:[0,&quot;//images.ctfassets.net/zkvhlag99gkb/69RwBidpiEHCDZ9rFVVk7T/092507edbed698420b89658e5a6d5105/CF_logo_stacked_blktype.png&quot;],&quot;pagesStore&quot;:[0,{&quot;page&quot;:[0,&quot;Tag&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;],&quot;translationsAvailable&quot;:[1,[[0,&quot;de-de&quot;],[0,&quot;es-es&quot;],[0,&quot;fr-fr&quot;],[0,&quot;it-it&quot;],[0,&quot;ja-jp&quot;],[0,&quot;ko-kr&quot;],[0,&quot;zh-tw&quot;],[0,&quot;zh-cn&quot;],[0,&quot;pt-br&quot;],[0,&quot;ru-ru&quot;],[0,&quot;pl-pl&quot;],[0,&quot;he-il&quot;],[0,&quot;nl-nl&quot;]]],&quot;navData&quot;:[1,[[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;6Mp7ouACN2rT3YjL1xaXJx&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:42:46.231Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-17T17:03:20.612Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,63],&quot;revision&quot;:[0,22],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Security&quot;],&quot;name&quot;:[0,&quot;Security&quot;],&quot;slug&quot;:[0,&quot;security&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;5kZtWqjqa7aOUoZr8NFGwI&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:43:26.040Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-11T11:03:11.949Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,103],&quot;revision&quot;:[0,32],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;name&quot;:[0,&quot;Radar&quot;],&quot;slug&quot;:[0,&quot;cloudflare-radar&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;6Foe3R8of95cWVnQwe5Toi&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T22:44:28.803Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-10T05:02:55.192Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,62],&quot;revision&quot;:[0,23],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;AI&quot;],&quot;name&quot;:[0,&quot;AI&quot;],&quot;slug&quot;:[0,&quot;ai&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:43:20.198Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:23:05.518Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,57],&quot;revision&quot;:[0,24],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Product News&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;J61Eszqn98amrYHq4IhTx&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:43:46.068Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:20:13.333Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,61],&quot;revision&quot;:[0,27],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Zero Trust&quot;],&quot;name&quot;:[0,&quot;Zero Trust&quot;],&quot;slug&quot;:[0,&quot;zero-trust&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:43:21.536Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:19:33.689Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,59],&quot;revision&quot;:[0,26],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Developers&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;48r7QV00gLMWOIcM1CSDRy&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:54:22.790Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:17:33.067Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,59],&quot;revision&quot;:[0,26],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Speed &amp; Reliability&quot;],&quot;name&quot;:[0,&quot;Speed &amp; Reliability&quot;],&quot;slug&quot;:[0,&quot;speed-and-reliability&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;V86khSc459Yi1AhTlvtY7&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:46:53.657Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:12:59.473Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,57],&quot;revision&quot;:[0,21],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Partners&quot;],&quot;name&quot;:[0,&quot;Partners&quot;],&quot;slug&quot;:[0,&quot;partners&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;4g8tPriKOAUwdUT4jNPebe&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:46:40.927Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-02-04T17:11:28.566Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,55],&quot;revision&quot;:[0,24],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Life at Cloudflare&quot;],&quot;name&quot;:[0,&quot;Life at Cloudflare&quot;],&quot;slug&quot;:[0,&quot;life-at-cloudflare&quot;],&quot;featured&quot;:[0,true]}]}],[0,{&quot;metadata&quot;:[0,{&quot;tags&quot;:[1,[]],&quot;concepts&quot;:[1,[]]}],&quot;sys&quot;:[0,{&quot;space&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Space&quot;],&quot;id&quot;:[0,&quot;zkvhlag99gkb&quot;]}]}],&quot;id&quot;:[0,&quot;16yk8DVbNNifxov5cWvAov&quot;],&quot;type&quot;:[0,&quot;Entry&quot;],&quot;createdAt&quot;:[0,&quot;2024-10-09T19:56:23.848Z&quot;],&quot;updatedAt&quot;:[0,&quot;2025-01-29T05:03:35.958Z&quot;],&quot;environment&quot;:[0,{&quot;sys&quot;:[0,{&quot;id&quot;:[0,&quot;master&quot;],&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;Environment&quot;]}]}],&quot;publishedVersion&quot;:[0,63],&quot;revision&quot;:[0,28],&quot;contentType&quot;:[0,{&quot;sys&quot;:[0,{&quot;type&quot;:[0,&quot;Link&quot;],&quot;linkType&quot;:[0,&quot;ContentType&quot;],&quot;id&quot;:[0,&quot;blogTag&quot;]}]}],&quot;locale&quot;:[0,&quot;en-US&quot;]}],&quot;fields&quot;:[0,{&quot;entryTitle&quot;:[0,&quot;Policy &amp; Legal&quot;],&quot;name&quot;:[0,&quot;Policy &amp; Legal&quot;],&quot;slug&quot;:[0,&quot;policy&quot;],&quot;featured&quot;:[0,true]}]}]]]}],&quot;locale&quot;:[0,&quot;en-us&quot;],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="idle" opts="{&quot;name&quot;:&quot;NavigationComponent&quot;,&quot;value&quot;:true}" await-children> <header class="flex flex-row flex-wrap justify-between items-flex-end mw8 center mv3 pl3 pr1"> <div class="w-100 flex items-flex-end justify-between justify-start-l"> <div class="w-100 tr flex justify-end"> <div class="flex justify-between items-center"> <span class="dn di-l pr1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://dash.cloudflare.com/sign-up" class="f1 blue1 dn di-l b no-underline underline-hover" target="_blank" rel="noreferrer">Get Started Free</a></span><span class="f1 gray4 dn di-l pr1">|</span><span class="dn di-l"><a target="_blank" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/plans/enterprise/contact/" class="f1 gray4 no-underline underline-hover pr1" rel="noreferrer">Contact Sales</a></span><span class="f1 gray4 dn di-l pr1">|</span> <div class="relative flex cf-dropdown"> <div class="flex items-center" dir="ltr"> <button type="button" class="f1 gray4 no-underline language-picker js-language-picker" style="background:transparent;border:none;padding:0"><span class="language-picker__globe-icon"></span><span class="language-picker__caret-icon ph1">▼</span></button> </div> </div> </div> </div> </div> <div class="w-100 w-50-l flex items-end nb5 nb1-l"> <a href="https://blog-cloudflare-com.translate.goog/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="header-logo mr4 dn db-l"><img class="header-logo" src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/69RwBidpiEHCDZ9rFVVk7T/092507edbed698420b89658e5a6d5105/CF_logo_stacked_blktype.png" alt="The Cloudflare Blog" width="170" height="57"></a> <h2 class="mt0 mb1 dn di-l"><a href="https://blog-cloudflare-com.translate.goog/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f5 gray3 no-underline"><span class="dn di-l">The Cloudflare Blog</span></a></h2> </div> <div class="w-100 w-50-l dn db-l"> <div class="w-100 tr mkto-sub-message"> <p class="f2">Subscribe to receive notifications of new posts:</p> </div> <div class="w-100 tr"> <div class="marketo-form-container"> <form id="mktoForm_1653"> <div class="top-subscribe-form-container"> <div class="top-subscribe-form-field"> <input placeholder="Email Address" class="top-subscribe-form-input" name="email" type="email" title="Must be valid email."> </div><button class="top-subscribe-form-button" type="button">Subscribe</button> </div> </form> </div> </div> </div> </header> <nav dir="ltr" class="bb b--black-10 db dn-l w-100 ph3 "> <div class=" flex justify-between items-center" style="height:44px"> <a href="https://blog-cloudflare-com.translate.goog/search/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB"><img class="h-6 w-6" src="/images/magnifier.svg" alt="magnifier icon"></a><button type="button" style="background:transparent;border:none"><img src="/images/hamburger.svg" alt="hamburger menu"></button> </div> <div class="js-mobile-nav-container dn"> <div class="flex flex-column flex-wrap bg-gray9 o-95 absolute w-90 ph3 z-1"> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/security/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Security</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-radar/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Radar</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/ai/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">AI</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/product-news/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Product News</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/zero-trust/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Zero Trust</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Developers</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/speed-and-reliability/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Speed &amp; Reliability</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/partners/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Partners</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/life-at-cloudflare/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Life at Cloudflare</a> </div> <div class="pv3 ph2 tl"> <a href="https://blog-cloudflare-com.translate.goog/tag/policy/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw7">Policy &amp; Legal</a> </div> </div> </div> </nav> <nav id="nav" class="w-100 bb-0 bb-l b--black-10 z-1"> <div id="desktop-nav-items-container" class="flex flex-wrap justify-between items-center mw8 center mv3 mv0-l"> <div data-tag="security" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/security/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Security</a> </div> <div data-tag="cloudflare-radar" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-radar/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Radar</a> </div> <div data-tag="ai" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/ai/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">AI</a> </div> <div data-tag="product-news" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/product-news/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Product News</a> </div> <div data-tag="zero-trust" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/zero-trust/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Zero Trust</a> </div> <div data-tag="developers" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Developers</a> </div> <div data-tag="speed-and-reliability" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/speed-and-reliability/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Speed &amp; Reliability</a> </div> <div data-tag="partners" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/partners/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Partners</a> </div> <div data-tag="life-at-cloudflare" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/life-at-cloudflare/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Life at Cloudflare</a> </div> <div data-tag="policy" class="nav-item nav-item-desktop ml3 mr2 dn db-l pv3"> <a href="https://blog-cloudflare-com.translate.goog/tag/policy/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f2 fw5 pv3">Policy &amp; Legal</a> </div> <div class="nav-item ml2 mr3 dn db-l pv3" data-tag="search icon"> <a href="https://blog-cloudflare-com.translate.goog/search/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB"><img id="search-icon" class="h-6 w-6" src="/images/magnifier.svg" alt="magnifier icon"></a> </div> </div> </nav><!--astro:end--> </astro-island> <script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script> <div class="flex flex-row flex-wrap mw8 center bb b--gray8 ph3"> <h1 class="site-title f7 fw4 mt4 mb3 mv4-l">Birthday Week</h1> </div> <main id="site-main" class="flex flex-row flex-wrap mw8 center pt0 pt3-l mt4-l"><astro-island uid="ZnR7oQ" prefix="r0" component-url="/_astro/PostCard.CG32ktie.js" component-export="PostCard" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;currentPage&quot;:[0,1],&quot;isFeaturedImageFirstPost&quot;:[0,true],&quot;post&quot;:[0,{&quot;id&quot;:[0,&quot;65JnLP0MYKVzwTyOsItRJk&quot;],&quot;title&quot;:[0,&quot;Wrapping up another Birthday Week celebration&quot;],&quot;slug&quot;:[0,&quot;birthday-week-2024-wrap-up&quot;],&quot;excerpt&quot;:[0,&quot;Recapping all the big announcements made during 2024’s Birthday Week.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>2024 marks Cloudflare’s 14th birthday. Birthday Week each year is packed with major announcements and the release of innovative new offerings, all focused on giving back to our customers and the broader Internet community. Birthday Week has become a proud tradition at Cloudflare and our culture, to not just stay true to our mission, but to always stay close to our customers. We begin planning for this week of celebration earlier in the year and invite everyone at Cloudflare to participate.</p><p>Months before Birthday Week, we invited teams to submit ideas for what to announce. We were flooded with submissions, from proposals for implementing new standards to creating new products for developers. Our biggest challenge is finding space for it all in just one week — there is still so much to build. Good thing we have a birthday to celebrate each year, but we might need an extra day in Birthday Week next year!</p><p>In case you missed it, here’s everything we announced during 2024’s Birthday Week:</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;monday\&quot;>Monday</h3>\n <a href=\&quot;#monday\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;margin-left:-42.75pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot; width=\&quot;254\&quot;>\n <col style=\&quot;width:50%;\&quot; width=\&quot;423\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:29.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>What</span></span></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>In a sentence…</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:65.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-left:9pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/cloudflare-ai-audit-control-ai-content-crawlers\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Start auditing and controlling the AI models accessing your content</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-left:9pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Understand which AI-related bots and crawlers can access your website, and which content you choose to allow them to consume.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:75.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/batched-dns-changes/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Making zone management more efficient with batch DNS record updates</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Customers using Cloudflare to manage DNS can create a whole batch of records, enable&amp;nbsp;</span></span><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://developers.cloudflare.com/dns/manage-dns-records/reference/proxied-dns-records/\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>proxying</span></span></a><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;> on many records, update many records to point to a new target at the same time, or even delete all of their records.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:60pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/turnstile-ephemeral-ids-for-fraud-detection\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Introducing Ephemeral IDs: a new tool for fraud detection</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Taking the next step in advancing security with Ephemeral IDs, a new feature that generates a unique short-lived ID, without relying on any network-level information.</span></span></p>\n <p>&amp;nbsp;</p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;tuesday\&quot;>Tuesday</h3>\n <a href=\&quot;#tuesday\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;margin-left:-39.75pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot; width=\&quot;255\&quot;>\n <col style=\&quot;width:50%;\&quot; width=\&quot;422\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:29.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>What</span></span></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>In a sentence…</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:61.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/safer-resolver/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Cloudflare partners to deliver safer browsing experience to homes</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Internet service, network, and hardware equipment providers can&amp;nbsp;</span></span><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://docs.google.com/spreadsheets/d/1ZIBbVz2gqPBsldhszk_Wo2eZeNwAZ5Mf9xSssxRrTuc/edit?resourcekey=&amp;amp;gid=386353769#gid=386353769\&quot;><span style=\&quot;background-color:#ffffff;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>sign up</u></span></span></a><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;> and partner with Cloudflare to deliver a safer browsing experience to homes.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:58.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/a-safer-internet-with-cloudflare/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>A safer Internet with Cloudflare: free threat intelligence, analytics, and new threat detections</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Free threat intelligence, analytics, new threat detections, and more.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:67.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/automatically-generating-cloudflares-terraform-provider/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Automatically generating Cloudflare’s Terraform provider</u></span></span></a></p>\n <p>&amp;nbsp;</p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>The last pieces of the OpenAPI schemas ecosystem to now be automatically generated — the Terraform provider and API reference documentation.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:63.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/key-transparency/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Cloudflare helps verify the security of end-to-end encrypted messages by auditing key transparency for WhatsApp</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Cloudflare helps verify the security of end-to-end encrypted messages by auditing key transparency for WhatsApp.</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;wednesday\&quot;>Wednesday</h3>\n <a href=\&quot;#wednesday\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;margin-left:-44.25pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot; width=\&quot;256\&quot;>\n <col style=\&quot;width:50%;\&quot; width=\&quot;421\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:29.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>What</span></span></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>In a sentence…</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:65.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/introducing-speed-brain/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Introducing Speed Brain: helping web pages load 45% faster</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#444746;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Speed Brain, our latest leap forward in speed, uses the Speculation Rules API to prefetch content for users' likely next navigations — downloading web pages before they navigate to them and making pages load 45% faster.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:50.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/instant-purge/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Instant Purge: invalidating cached content in under 150ms</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Instant Purge invalidates cached content in under 150ms, offering the industry's fastest cache purge with global latency for purges by tags, hostnames, and prefixes.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:50.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/new-standards/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>New standards for a faster and more private Internet</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Zstandard compression, Encrypted Client Hello, and more speed and privacy announcements all released for free.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:57.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/webrtc-turn-using-anycast/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>TURN and anycast: making peer connections work globally</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Starting today,&amp;nbsp;</span></span><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://developers.cloudflare.com/calls/turn/\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Cloudflare Calls’ TURN service</span></span></a><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;> is now generally available to all Cloudflare accounts.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:60.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/gen-12-servers\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Cloudflare’s 12th Generation servers — 145% more performant and 63% more efficient</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:#ffffff;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Next generation servers focused on exceptional performance and security, enhanced support for AI/ML workloads, and significant strides in power efficiency.</span></span></p>\n <p>&amp;nbsp;</p>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;nbsp;</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;thursday\&quot;>Thursday</h3>\n <a href=\&quot;#thursday\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;margin-left:-32.25pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot; width=\&quot;256\&quot;>\n <col style=\&quot;width:50%;\&quot; width=\&quot;422\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:29.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>What</span></span></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>In a sentence…</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:72pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;background-color:#ffffff;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/startup-program-250k-credits\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Startup Program revamped: build and grow on Cloudflare with up to $250,000 in credits</u></span></span></a></p>\n <p>&amp;nbsp;</p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Eligible startups can now apply to receive up to $250,000 in credits to build using Cloudflare's Developer Platform.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:45.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Cloudflare’s bigger, better, faster AI platform&amp;nbsp;</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>More powerful GPUs, expanded model support, enhanced logging and evaluations in AI Gateway, and Vectorize GA with larger index sizes and faster queries.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:46.845703125pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;background-color:#ffffff;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/builder-day-2024-announcements\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Builder Day 2024: 18 big updates to the Workers platform</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Persistent and queryable Workers logs, Node.js compatibility GA, improved Next.js support via OpenNext, built-in CI/CD for Workers, Gradual Deployments, Queues, and R2 Event Notifications GA, and more — making building on Cloudflare easier, faster, and more affordable.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:36.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/faster-workers-kv\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Faster Workers KV</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>A deep dive into how we made Workers KV up to 3x faster.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:45.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/sqlite-in-durable-objects\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Zero-latency SQLite storage in every Durable Object</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.3800000000000001;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Putting your application code into the storage layer, so your code runs where the data is stored.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:47.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/making-workers-ai-faster/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Making Workers AI faster and more efficient: Performance optimization with KV cache compression and speculative decoding</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Using new optimization techniques such as KV cache compression and speculative decoding, we’ve made large language model (LLM) inference lightning-fast on the Cloudflare Workers AI platform.</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;friday\&quot;>Friday</h3>\n <a href=\&quot;#friday\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;margin-left:-56.25pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot; width=\&quot;256\&quot;>\n <col style=\&quot;width:50%;\&quot; width=\&quot;422\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:29.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>What</span></span></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>In a sentence…</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:49.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/container-platform-preview\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Our container platform is in production. It has GPUs. Here’s an early look.</u></span></span></a></p>\n <p>&amp;nbsp;</p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.3800000000000001;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>We’ve been working on something new — a platform for running containers across Cloudflare’s network. We already use it in production, for AI inference and more.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:52.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/cisa-pledge-commitment-bug-bounty-vip\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Advancing cybersecurity: Cloudflare implements a new bug bounty VIP program as part of CISA Pledge commitment</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.3800000000000001;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>We implemented a new bug bounty VIP program this year as part of our CISA Pledge commitment.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:66.75pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/launchpad-cohort4-dev-starter-pack/\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Empowering builders: introducing the Dev Alliance and Workers Launchpad Cohort #4</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.3800000000000001;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Get free and discounted access to essential developer tools and meet the latest set of incredible startups building on Cloudflare.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:64.5pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/expanding-our-support-for-oss-projects-with-project-alexandria\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Expanding our support for open source projects with Project Alexandria</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.3800000000000001;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Expanding our open source program and helping projects have a sustainable and scalable future, providing tools and protection needed to thrive.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:58.94677734375pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/radar-data-explorer-ai-assistant\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Network trends and natural language: Cloudflare Radar’s new Data Explorer &amp;amp; AI Assistant</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>A simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:59.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/bringing-ai-to-cloudflare\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>AI Everywhere with the WAF Rule Builder Assistant, Cloudflare Radar AI Insights, and updated AI bot protection</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Extending our AI Assistant capabilities to help you build new WAF rules, added new AI bot and crawler traffic insights to Radar, and new AI bot blocking capabilities.</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:59.25pt;\&quot;>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><a style=\&quot;text-decoration:none;\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener noreferrer\&quot; href=\&quot;https://blog.cloudflare.com/cloudflares-commitment-to-free\&quot;><span style=\&quot;background-color:transparent;color:#1155cc;font-family:Arial,sans-serif;\&quot;><span style=\&quot;-webkit-text-decoration-skip:none;font-style:normal;font-variant:normal;font-weight:400;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><u>Reaffirming our commitment to Free</u></span></span></a></p>\n </td>\n <td style=\&quot;background-color:#ffffff;border-color:#36393a;border-width:0.5pt;overflow-wrap:break-word;overflow:hidden;padding:4pt 15pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Our free plan is here to stay, and we reaffirm that commitment this week with 15 releases that make the Free plan even better.</span></span></p>\n <p>&amp;nbsp;</p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;one-more-thing\&quot;>One more thing…</h2>\n <a href=\&quot;#one-more-thing\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5FReOqd5AHo8vTgSmY6qe6/1ae02d93ec9d9af2f60c0b6024017f58/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1125\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Cloudflare serves millions of customers and their millions of domains across nearly every country on Earth. However, as a global company, the payment landscape can be complex — especially in regions outside of North America. While credit cards are very popular for online purchases in the US, the global picture is quite different. <a href=\&quot;https://www.fisglobal.com/-/media/fisglobal/files/campaigns/global-payments%20report/FIS_TheGlobalPaymentsReport_2023.pdf\&quot;><u>60% of consumers across EMEA, APAC and LATAM choose alternative payment methods</u></a>. For instance, European consumers often opt for SEPA Direct Debit, a bank transfer mechanism, while Chinese consumers frequently use Alipay, a digital wallet.</p><p>At Cloudflare, we saw this as an opportunity to meet customers where they are. Today, we&amp;#39;re thrilled to announce that we are expanding our payment system and launching a closed beta for a new payment method called <a href=\&quot;https://www.cloudflare.com/lp/cloudflare-introduces-stripe-link/\&quot;><u>Stripe Link</u></a>. The checkout experience will be faster and more seamless, allowing our self-serve customers to pay using saved bank accounts or cards with Link. Customers who have saved their payment details at any business using Link can quickly check out without having to reenter their payment information.</p><p>These are the first steps in our efforts to expand our payment system to support global payment methods used by customers around the world.<b> </b>We&amp;#39;ll be rolling out new payment methods gradually, ensuring a smooth integration and gathering feedback from our customers every step of the way.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/v0v7QBRWeGSfArq6jE5eg/7d8d79cbfe3f63386db52469c4727d21/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;501\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;until-next-year\&quot;>Until next year</h2>\n <a href=\&quot;#until-next-year\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>That’s all for Birthday Week 2024. However, the innovation never stops at Cloudflare. Continue to follow the <a href=\&quot;https://blog.cloudflare.com/\&quot;><u>Cloudflare Blog</u></a> all year long as we launch more products and features that help build a better Internet.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-30T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-10T19:31:33.188Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZoZxTcwMPiUeV0oKNiMOe/2bdb63920affc0269035743f3aa01306/image1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;V86khSc459Yi1AhTlvtY7&quot;],&quot;name&quot;:[0,&quot;Partners&quot;],&quot;slug&quot;:[0,&quot;partners&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;5Ol0Sw9kBTwIstJ84njaO7&quot;],&quot;name&quot;:[0,&quot;Workers Launchpad&quot;],&quot;slug&quot;:[0,&quot;workers-launchpad&quot;]}],[0,{&quot;id&quot;:[0,&quot;1Wf1Dpb2AFicG44jpRT29y&quot;],&quot;name&quot;:[0,&quot;Workers AI&quot;],&quot;slug&quot;:[0,&quot;workers-ai&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}],[0,{&quot;id&quot;:[0,&quot;1mgoRLcodl1ettELWixzCH&quot;],&quot;name&quot;:[0,&quot;Turnstile&quot;],&quot;slug&quot;:[0,&quot;turnstile&quot;]}],[0,{&quot;id&quot;:[0,&quot;4gN0ARax0fHxjtZL07THOe&quot;],&quot;name&quot;:[0,&quot;Performance&quot;],&quot;slug&quot;:[0,&quot;performance&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Mp7ouACN2rT3YjL1xaXJx&quot;],&quot;name&quot;:[0,&quot;Security&quot;],&quot;slug&quot;:[0,&quot;security&quot;]}],[0,{&quot;id&quot;:[0,&quot;5RrjSR5vIOJAfRdT8966hf&quot;],&quot;name&quot;:[0,&quot;Cache&quot;],&quot;slug&quot;:[0,&quot;cache&quot;]}],[0,{&quot;id&quot;:[0,&quot;1OAcGRrbAS8T2hKb2tqB7N&quot;],&quot;name&quot;:[0,&quot;Speed&quot;],&quot;slug&quot;:[0,&quot;speed&quot;]}],[0,{&quot;id&quot;:[0,&quot;1q6r2yWvvqOfafxEeKdl8J&quot;],&quot;name&quot;:[0,&quot;Speed Brain&quot;],&quot;slug&quot;:[0,&quot;speed-brain&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Foe3R8of95cWVnQwe5Toi&quot;],&quot;name&quot;:[0,&quot;AI&quot;],&quot;slug&quot;:[0,&quot;ai&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Kelly May Johnston&quot;],&quot;slug&quot;:[0,&quot;kelly-may-johnston&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4eK0cG89UjCnoFFXEYUXS6/7d6db2b3cc7bde39e6ce5d7b987ccd18/_tmp_mini_magick20231208-2-wgu6p7.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Brendan Irvine-Broque&quot;],&quot;slug&quot;:[0,&quot;brendan-irvine-broque&quot;],&quot;bio&quot;:[0,&quot;Product Manager, Cloudflare Stream&quot;],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/lTJBFKfbqthKbJKPvulre/e8bf53afa7caf1dffeeb55a8c6884959/brendan-irvine-broque.JPG&quot;],&quot;location&quot;:[0,&quot;Oakland, CA&quot;],&quot;website&quot;:[0,&quot;https://www.cloudflare.com/products/cloudflare-stream/&quot;],&quot;twitter&quot;:[0,&quot;@irvinebroque&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Recapping all the big announcements made during 2024’s Birthday Week.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;LOC: Wrapping up another Birthday Week celebration&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;Translated for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/birthday-week-2024-wrap-up&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Wrapping up another Birthday Week celebration&quot;],&quot;description&quot;:[0,&quot;Recapping all the big announcements made during 2024’s Birthday Week.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6tcR5pudfdKf1cC0yRyKuy/c739db30e2e61b507eb9db267cc89d3c/Wrapping_up_another_Birthday_Week_celebration-OG.png&quot;]}]}],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children> <article class="w-100 featured-post flex flex-row flex-wrap mb4 items-center bb b--gray8 bn-l mt4 mt2-l mb4 ph3 bb b--gray8 bn-l"> <div class="w-50-l"> <a href="https://blog-cloudflare-com.translate.goog/birthday-week-2024-wrap-up/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 no-underline gray1" data-testid="post-title"><h2 class="fw5 mt2">Wrapping up another Birthday Week celebration</h2></a> <p class="f3 fw5 gray5 my" data-testid="post-date">2024-09-30</p> <p class="f4 fw3 lh-copy " data-testid="post-content">Recapping all the big announcements made during 2024’s Birthday Week.<!-- -->...</p><a href="https://blog-cloudflare-com.translate.goog/birthday-week-2024-wrap-up/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 lh-copy fw3 underline-hover" data-testid="post-continue-reading">Continue reading »</a> <ul class="author-lists flex pl0"> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/kelly-may-johnston/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4eK0cG89UjCnoFFXEYUXS6/7d6db2b3cc7bde39e6ce5d7b987ccd18/_tmp_mini_magick20231208-2-wgu6p7.jpg" alt="Kelly May Johnston" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/kelly-may-johnston/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f4 no-underline black">Kelly May Johnston</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/brendan-irvine-broque/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/lTJBFKfbqthKbJKPvulre/e8bf53afa7caf1dffeeb55a8c6884959/brendan-irvine-broque.JPG" alt="Brendan Irvine-Broque" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/brendan-irvine-broque/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f4 no-underline black">Brendan Irvine-Broque</a> </div></li> </ul> </div> <div class="w-50-l"> <img class="dn di-l " src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZoZxTcwMPiUeV0oKNiMOe/2bdb63920affc0269035743f3aa01306/image1.png" alt="Wrapping up another Birthday Week celebration"> </div> </article><!--astro:end--> </astro-island><astro-island uid="Z1Coen1" prefix="r1" component-url="/_astro/PostCard.CG32ktie.js" component-export="PostCard" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;currentPage&quot;:[0,1],&quot;isFeaturedImageFirstPost&quot;:[0,false],&quot;post&quot;:[0,{&quot;id&quot;:[0,&quot;P8TeQwTekaAHzlEGB8bLG&quot;],&quot;title&quot;:[0,&quot;Reaffirming our commitment to free&quot;],&quot;slug&quot;:[0,&quot;cloudflares-commitment-to-free&quot;],&quot;excerpt&quot;:[0,&quot;Today Cloudflare reaffirms its commitment to offering a robust Free service tier that continues to improve. We share why Free is a cornerstone of our business strategy, and how it contributes to building a better Internet.\n&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p></p><p>Cloudflare launched our free tier <a href=\&quot;https://www.cloudflare.com/press-releases/2010/cloudflare-launches-at-techcrunch-disrupt/\&quot;><u>at the same time our company launched</u></a> — fourteen years ago, on September 27, 2010. Of course, a bit has changed since then — there are now millions of Internet properties behind Cloudflare. As we’ve grown in size and amassed millions of free customers, one of the questions we often get asked is: how can Cloudflare afford to do this at such scale?</p><p>Cloudflare always has, and always will, offer a generous free version for public-facing applications (<a href=\&quot;https://www.cloudflare.com/application-services/products/\&quot;><u>Application Services</u></a>), internal private networks and people (<a href=\&quot;https://www.cloudflare.com/zero-trust/products/\&quot;><u>Cloudflare One</u></a>), and developer tools (<a href=\&quot;https://www.cloudflare.com/developer-platform/products/\&quot;><u>Developer Platform</u></a>). Counterintuitively: our free service actually helps us keep our costs lower. Not only is it mission-aligned, our free tier is business-aligned. We want to make abundantly clear: our free plan is here to stay, and we reaffirmed that commitment this week with 15 releases across our product portfolio that make the Free plan even better.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;understanding-our-cost-of-goods-sold\&quot;>Understanding our Cost of Goods Sold</h2>\n <a href=\&quot;#understanding-our-cost-of-goods-sold\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To understand the economics of Free, you need to understand our Cost of Goods Sold (COGS). Cloudflare hasn’t outsourced its <a href=\&quot;https://www.cloudflare.com/network\&quot;><u>network</u></a> — we built it ourselves, and it spans more than 330 cities. We design and ship our own <a href=\&quot;https://blog.cloudflare.com/gen-12-servers\&quot;><u>hardware</u></a> across the world, we <a href=\&quot;https://www.cloudflare.com/en-gb/partners/peering-portal/\&quot;><u>interconnect</u></a> with more than 12,500 networks, and we manage over 300 Tbps of network capacity. We even have a dedicated <a href=\&quot;https://blog.cloudflare.com/backbone2024/\&quot;><u>backbone</u></a> that spans the globe.</p><p>There are three major costs of running our network, which together comprise about 80% of our COGS. First and largest is bandwidth: the traffic that traverses our network. Then there is hardware: the servers that process traffic. And third are colocation costs: the power and space at the data centers where we house our servers. There are other parts of COGS, too, like our SRE team that keeps the network running, and our payment processor fees, without which we couldn’t collect revenue.</p><p>To get traffic across the Internet for a network of our scale, we need a lot of bandwidth. Typically, a network like ours would pay third-party transit networks and Internet Service Providers (ISPs) to transmit data anywhere on the Internet. But there are thousands of ISPs that we don’t have to pay at all, and hundreds that also offer us space in their data center at no cost. How did we manage that? The surprising answer: Free.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-our-free-services-keep-costs-low\&quot;>How our Free services keep costs low</h2>\n <a href=\&quot;#how-our-free-services-keep-costs-low\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Imagine you run an ISP serving your local community. Your job is to connect your customers to the Internet. You notice that your customers are often visiting sites behind Cloudflare, which sits in front of roughly <a href=\&quot;https://w3techs.com/technologies/history_overview/proxy/all/q\&quot;><u>20% of the web</u></a>. You need to deliver those webpages and facilitate connections to the applications behind Cloudflare, but right now you have to pay a transit provider to reach them. Instead, you could choose to <a href=\&quot;https://www.internetsociety.org/resources/doc/2020/explainer-what-is-internet-peering/\&quot;><u>peer</u></a> directly with Cloudflare and exchange traffic at no cost.</p><p>Cloudflare is one of the <a href=\&quot;https://bgp.tools/rankings/all?sort=peering\&quot;><u>most peered networks in the world</u></a>. We freely exchange traffic with thousands of ISPs, who in turn benefit because they can cut out a third-party transit provider to reach the millions of sites and applications behind Cloudflare.</p><p>Continuing with this hypothetical, if as an ISP, your customers pay for Internet connectivity based on data usage (a common model outside of Western Europe and the US), your revenue scales with data consumption. One simple way to increase data consumption? Make the Internet faster! Hosting Cloudflare’s servers in your facility, as close to your users as possible, reduces latency for millions of websites and apps. So it’s in your best interest to host Cloudflare’s servers in your data centers, too.</p><p>We have hundreds of ISP partnerships that look just like that. The value ISPs get from Cloudflare stems from the breadth of the web that sits behind Cloudflare, a number driven by our Free customers. This arrangement is a big part of why we have a free service, and is part of what enables us to continue to offer one. PS: If you really are an operator for a local ISP and don’t partner with us yet, please connect with us through our <a href=\&quot;https://www.cloudflare.com/partners/peering-portal/\&quot;><u>peering portal</u></a>!</p><p>These days, we are at such a scale that the traffic our customers generate requires much more capacity than can fit within our ISP partners. To reliably serve our enterprise customers, we operate in multiple facilities in every major Internet hub city. And yet, the traffic patterns of our enterprise customers are typically very predictable. They usually follow a diurnal cycle, with peaks and troughs throughout a day. Enterprise customer traffic is prioritized and served as close to end users as possible, regardless of the time of day. But our Free customers use off-cycle headroom. That’s why we’re able to continue to offer unmetered bandwidth on the Free plan: we serve the traffic from across our network, wherever there is spare room. It might not have quite the same performance as our enterprise traffic, but it’s still reliable and fast.</p><p>There do have to be some rules for this to continue to work, however. Free traffic needs to remain a manageable proportion of our total traffic. To ensure that remains true, and that we can continue to offer unmetered traffic to Free customers at no cost, we have to be opinionated about what kind of traffic we serve for free. Our <a href=\&quot;https://www.cloudflare.com/service-specific-terms-application-services/#content-delivery-network-terms\&quot;><u>terms of service</u></a> specify that large assets (like videos) are not supported on our Free plan. So we require that customers pushing large files and videos move onto one of our paid services, like <a href=\&quot;https://developers.cloudflare.com/images/\&quot;><u>Images</u></a> and <a href=\&quot;https://developers.cloudflare.com/stream/\&quot;><u>Stream</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;free-customers-help-us-build-better-products-and-grow-our-business\&quot;>Free customers help us build better products and grow our business</h2>\n <a href=\&quot;#free-customers-help-us-build-better-products-and-grow-our-business\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The benefits of our Free plan extend well beyond direct economics.</p><p>Our Free plan gives Cloudflare access to unique threat intelligence. A wide surface area exposes our network to diverse traffic and attacks that we wouldn’t otherwise see, often allowing us to identify potential security and reliability issues at the earliest stage. Like an immune system, we learn from these attacks and adapt to improve our products for all customers. This is a special competitive advantage. <a href=\&quot;https://radar.cloudflare.com/security-and-attacks\&quot;><u>Visibility into attacks</u></a> allows us to build products that no one else could.</p><p>Our Free customers help us do quality assurance (QA) quickly. Free customers are often the first to try new products and features. When we launch something new, we get signal immediately and at an incredible scale. We use that signal to swiftly address bugs and iterate on our products.&nbsp;</p><p>Offering a Free plan challenges us to build more intuitive products. Free customers represent a broad audience, from tech enthusiasts to those simply looking to secure their website or build an application. Building for a broad spectrum of users forces us to create more user-friendly tools for everyone.</p><p>Offering a Free service has other benefits, too. Some of our strongest customer advocates are folks that used our Free plan on their hobby projects before bringing Cloudflare with them to work. Some of them even end up working at Cloudflare!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;our-free-plan-will-keep-getting-better\&quot;>Our free plan will keep getting better</h2>\n <a href=\&quot;#our-free-plan-will-keep-getting-better\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Our Free offering is a flywheel that helps make Cloudflare’s products, team, and cost structure more efficient. We pay back these efficiencies by continuing to improve our free offerings. Just this week, we’ve announced 16 updates that make our Free plans even better:</p><ul><li><p>Free customers can <a href=\&quot;https://blog.cloudflare.com/cloudflare-ai-audit-control-ai-content-crawlers?/\&quot;><u>audit and control the AI models accessing their content</u></a>.</p></li><li><p><a href=\&quot;https://developers.cloudflare.com/turnstile/\&quot;><u>Turnstile</u></a>, our privacy-first CAPTCHA alternative available to everyone, gets more accurate with <a href=\&quot;https://blog.cloudflare.com/turnstile-ephemeral-ids-for-fraud-detection?\&quot;><u>granular, client-level identification</u></a>.</p></li><li><p>Free customers now have access to our <a href=\&quot;https://www.cloudflare.com/zero-trust/products/casb/\&quot;><u>Cloud Access Security Broker</u></a> (CASB), <a href=\&quot;https://www.cloudflare.com/zero-trust/products/dlp/\&quot;><u>Data Loss Prevention</u></a> (DLP), <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/\&quot;><u>Digital Experience Monitoring</u></a> (DEX), and <a href=\&quot;https://developers.cloudflare.com/magic-network-monitoring/\&quot;><u>Magic Network Monitoring</u></a> (MNM) tools, for up to 50 seats.</p></li><li><p>A new version of <a href=\&quot;https://developers.cloudflare.com/waf/managed-rules/check-for-exposed-credentials/\&quot;><u>Leaked Credential Checks</u></a> (LCC) is available to all customers to help mitigate account takeover (ATO) attacks.</p></li><li><p>All customers can now monitor third-party scripts with <a href=\&quot;https://developers.cloudflare.com/page-shield/detection/monitor-connections-scripts/\&quot;><u>Page Shield Script Monitor</u></a>.</p></li><li><p>Free customers can use <a href=\&quot;https://developers.cloudflare.com/api-shield/security/schema-validation/\&quot;><u>API Shield’s Schema Validation</u></a> to ensure only valid requests to their API make it through to the origin.</p></li><li><p>Free customers get more robust analytics, with versions of <a href=\&quot;https://developers.cloudflare.com/waf/analytics/security-analytics/\&quot;><u>Security Analytics</u></a> and <a href=\&quot;https://developers.cloudflare.com/dns/additional-options/analytics/\&quot;><u>DNS GraphQL</u></a> for everyone.</p></li><li><p>All customers can now log in to the Cloudflare Dashboard using <a href=\&quot;https://blog.cloudflare.com/a-safer-internet-with-cloudflare/?\&quot;><u>Sign in with Google</u></a>.</p></li><li><p>Free customers using our Terraform provider to configure their infrastructure will now benefit from <a href=\&quot;https://blog.cloudflare.com/automatically-generating-cloudflares-terraform-provider?\&quot;><u>autogenerated API SDKs</u></a>.</p></li><li><p><a href=\&quot;https://developers.cloudflare.com/calls/turn/overview/\&quot;><u>Cloudflare Calls managed TURN service</u></a> is now GA and free up to 1,000 GB per month.</p></li><li><p>All customers will benefit from the introduction of <a href=\&quot;https://blog.cloudflare.com/new-standards?\&quot;><u>Zstandard compression</u></a>, which improves web performance by compressing up to 42% faster than Brotli.</p></li><li><p>Free customer traffic is now more private as we roll out <a href=\&quot;https://developers.cloudflare.com/ssl/edge-certificates/ech/\&quot;><u>Encrypted Client Hello</u></a> (ECH) which obfuscates the Server Name Identifier (SNI) during a TLS handshake.</p></li><li><p>All customers can store and query 3 days of logs from their <a href=\&quot;https://workers.cloudflare.com/\&quot;><u>Cloudflare Worker</u></a>.</p></li><li><p>Requests made through <a href=\&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/\&quot;><u>Service Bindings</u></a> and to <a href=\&quot;https://developers.cloudflare.com/workers/observability/logging/tail-workers/\&quot;><u>Tail Workers</u></a> are now free.</p></li><li><p>Cloudflare <a href=\&quot;https://developers.cloudflare.com/images/\&quot;><u>Image Optimization</u></a> is now available for free to all Cloudflare customers.</p></li><li><p>Free domains just got 45% faster with<a href=\&quot;https://blog.cloudflare.com/introducing-speed-brain?_gl=1*1i8aixl*_gcl_aw*R0NMLjE3MjczMDQyMTIuQ2p3S0NBanc2YzYzQmhBaUVpd0FGMEVIMUQ3S1gzNVhCOTZXWWxhWU45UkNOYmJrZER5ZmxzemQybkVZVExvS3lfbU43SWp2SERhWGZob0NEVlFRQXZEX0J3RQ..*_gcl_dc*R0NMLjE3MjczMDQyMTIuQ2p3S0NBanc2YzYzQmhBaUVpd0FGMEVIMUQ3S1gzNVhCOTZXWWxhWU45UkNOYmJrZER5ZmxzemQybkVZVExvS3lfbU43SWp2SERhWGZob0NEVlFRQXZEX0J3RQ..*_gcl_au*MTgyNjIxMjU3MC4xNzIyMjMzNDc3*_ga*MjIyMTI3YmItOWQxNC00ZDcyLTljZjgtNTg2NmZiNWIyZjVh*_ga_SQCRB0TXZW*MTcyNzQ3OTM3Ni43NC4xLjE3Mjc0ODExNDYuMjkuMC4w/\&quot;> <u>Speed Brain</u></a> enabled.</p></li></ul><p>We offer a Free plan out of more than goodwill — it is a core business differentiator that helps us build better products, drive growth, and keep costs low. And it helps us advance our mission. Building a better Internet is a collective effort. Today, more than 30 million Internet properties, comprising some 20% of the web, sit behind Cloudflare. Our Free plan makes that portion of the web faster, more secure, and more efficient. Free is not just a commitment — it’s a cornerstone of our strategy.</p><p>Become part of a better Internet and <a href=\&quot;https://www.cloudflare.com/plans/free/\&quot;><u>sign up for Cloudflare’s Free plan</u></a>.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3pyDxxVAHg0jqcZTj2TVmw/9f484c51ab42c627b549b4ef7640680e/BLOG-2528_2.png\&quot; alt=\&quot;BLOG-2528 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1201\&quot; height=\&quot;330\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-11-18T16:09:40.709Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1QsuWo39pMfBJ9oc9nAF6v/a954ad1f610d5c6bf5b7420fc4b1c7cc/BLOG-2528_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;4oG9YT1nATKpmpwIzxSzat&quot;],&quot;name&quot;:[0,&quot;Network Protection&quot;],&quot;slug&quot;:[0,&quot;network-protection&quot;]}],[0,{&quot;id&quot;:[0,&quot;2s3r2BdfPas9oiGbGRXdmQ&quot;],&quot;name&quot;:[0,&quot;Network Services&quot;],&quot;slug&quot;:[0,&quot;network-services&quot;]}],[0,{&quot;id&quot;:[0,&quot;23wako2eVLT85fGBZPhu33&quot;],&quot;name&quot;:[0,&quot;Free&quot;],&quot;slug&quot;:[0,&quot;free&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Nitin Rao&quot;],&quot;slug&quot;:[0,&quot;nitin-rao&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/19DfiMNfYfSekVNwQA4otm/cb7905881411805a145ace4c9d29f7d4/nitin-rao.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@NitinBRao&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Liam Reese&quot;],&quot;slug&quot;:[0,&quot;liam-reese&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2SBvVmwa9l1L8HynnihQZI/65010645da2b0dfdcac3e331f1852f50/_tmp_mini_magick20230502-41-1r0i47j.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;James Allworth&quot;],&quot;slug&quot;:[0,&quot;james-allworth&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6TVvcEzcyGdmtu7htrKTBH/174c4c031c03cf08e722386736819fa3/james-allworth.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Today Cloudflare reaffirms its commitment to offering a robust Free service tier that continues to improve. We share why Free is a cornerstone of our business strategy, and how it contributes to building a better Internet.\n&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;LOC Blog: Reaffirming our commitment to Free&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;English for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;English for Locale&quot;],&quot;zhTW&quot;:[0,&quot;English for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;English for Locale&quot;],&quot;jaJP&quot;:[0,&quot;English for Locale&quot;],&quot;koKR&quot;:[0,&quot;English for Locale&quot;],&quot;ptBR&quot;:[0,&quot;English for Locale&quot;],&quot;esLA&quot;:[0,&quot;English for Locale&quot;],&quot;esES&quot;:[0,&quot;English for Locale&quot;],&quot;enAU&quot;:[0,&quot;English for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;Translated for Locale&quot;],&quot;thTH&quot;:[0,&quot;English for Locale&quot;],&quot;trTR&quot;:[0,&quot;English for Locale&quot;],&quot;heIL&quot;:[0,&quot;English for Locale&quot;],&quot;lvLV&quot;:[0,&quot;English for Locale&quot;],&quot;etEE&quot;:[0,&quot;English for Locale&quot;],&quot;ltLT&quot;:[0,&quot;English for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/cloudflares-commitment-to-free&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Reaffirming our commitment to free&quot;],&quot;description&quot;:[0,&quot;We want to make abundantly clear: our free plan is here to stay, and we reaffirmed that commitment this week with 15 releases across our product portfolio that make the Free plan even better.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6esIPx8JT2NLDlylV1cT7u/b2ac7534772c583c61e2967f7dc822c3/BLOG-2528_1.png&quot;]}]}],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children> <article class="w-50-l mt4 mt2-l mb4 ph3 bb b--gray8 bn-l"> <div class="w-100"> <a href="https://blog-cloudflare-com.translate.goog/cloudflares-commitment-to-free/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 no-underline gray1" data-testid="post-title"><h2 class="fw5 mt2">Reaffirming our commitment to free</h2></a> <p class="f3 fw5 gray5 my" data-testid="post-date">2024-09-27</p> <div class=""> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Birthday Week</a><a href="https://blog-cloudflare-com.translate.goog/tag/network-protection/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Network Protection</a><a href="https://blog-cloudflare-com.translate.goog/tag/network-services/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Network Services</a><a href="https://blog-cloudflare-com.translate.goog/tag/free/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Free</a> </div> <p class="f3 fw4 gray1 lh-copy " data-testid="post-content">Today Cloudflare reaffirms its commitment to offering a robust Free service tier that continues to improve. We share why Free is a cornerstone of our business strategy, and how it contributes to building a better Internet. <!-- -->...</p> <ul class="author-lists flex pl0"> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/nitin-rao/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/19DfiMNfYfSekVNwQA4otm/cb7905881411805a145ace4c9d29f7d4/nitin-rao.jpg" alt="Nitin Rao" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/nitin-rao/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Nitin Rao</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/liam-reese/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2SBvVmwa9l1L8HynnihQZI/65010645da2b0dfdcac3e331f1852f50/_tmp_mini_magick20230502-41-1r0i47j.jpg" alt="Liam Reese" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/liam-reese/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Liam Reese</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/james-allworth/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6TVvcEzcyGdmtu7htrKTBH/174c4c031c03cf08e722386736819fa3/james-allworth.jpg" alt="James Allworth" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/james-allworth/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">James Allworth</a> </div></li> </ul> </div> </article><!--astro:end--> </astro-island><astro-island uid="2afsxH" prefix="r2" component-url="/_astro/PostCard.CG32ktie.js" component-export="PostCard" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;currentPage&quot;:[0,1],&quot;isFeaturedImageFirstPost&quot;:[0,false],&quot;post&quot;:[0,{&quot;id&quot;:[0,&quot;4R2kUv9mZSgnAXmKOKTbLz&quot;],&quot;title&quot;:[0,&quot;Network trends and natural language: Cloudflare Radar’s new Data Explorer &amp; AI Assistant&quot;],&quot;slug&quot;:[0,&quot;radar-data-explorer-ai-assistant&quot;],&quot;excerpt&quot;:[0,&quot;The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p><b></b><a href=\&quot;https://radar.cloudflare.com/\&quot;><u>Cloudflare Radar</u></a> showcases global Internet traffic patterns, attack activity, and technology trends and insights. It is powered by data from Cloudflare&amp;#39;s global network, as well as aggregated and anonymized data from Cloudflare&amp;#39;s <a href=\&quot;https://1.1.1.1/dns\&quot;><u>1.1.1.1 public DNS Resolver</u></a>, and is built on top of a rich, publicly accessible <a href=\&quot;https://developers.cloudflare.com/radar/\&quot;><u>API</u></a>. This API allows users to explore Radar data beyond the default set of visualizations, for example filtering by protocol, comparing metrics across multiple locations or autonomous systems, or examining trends over two different periods of time. However, not every user has the technical know-how to make a raw API query or process the JSON-formatted response.</p><p>Today, we are launching the <a href=\&quot;https://radar.cloudflare.com/explorer\&quot;><u>Cloudflare Radar Data Explorer</u></a>, which provides a simple Web-based interface to enable users to easily build more complex API queries, including comparisons and filters, and visualize the results. And as a complement to the Data Explorer, we are also launching an AI Assistant, which uses <a href=\&quot;https://developers.cloudflare.com/workers-ai/\&quot;><u>Cloudflare Workers AI</u></a> to translate a user’s natural language statements or questions into the appropriate Radar API calls, the results of which are visualized in the Data Explorer. Below, we introduce the AI Assistant and Data Explorer, and also dig into how we used Cloudflare Developer Platform tools to build the AI Assistant.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;ask-the-ai-assistant\&quot;>Ask the AI Assistant</h2>\n <a href=\&quot;#ask-the-ai-assistant\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Sometimes, a user may know what they are looking for, but aren’t quite sure how to build the relevant API query by selecting from the available options and filters. (The sheer number may appear overwhelming.) In those cases, they can simply pose a question to the AI Assistant, like “Has there been an uptick in malicious email over the last week?” The AI Assistant makes a series of Workers AI and Radar API calls to retrieve the relevant data, which is visualized within seconds:</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3HRBy5Bm5aNQ1gUj1MBCj5/e0fcd717765a8f234996b9e98e43389a/image8.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1170\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The AI Assistant pane is found on the right side of the page in desktop browsers, and appears when the user taps the “AI Assistant” button on a mobile browser. To use the AI Assistant, users just need to type their question into the “Ask me something” area at the bottom of the pane and submit it. A few sample queries are also displayed by default to provide examples of how and what to ask, and clicking on one submits it.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/79srygHorwU84nyQg9KLSl/be609d62b0ebf4a708f6f523fed817f1/Screenshot_2024-09-26_at_20.32.43.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;2066\&quot; height=\&quot;1278\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The submitted question is evaluated by the AI Assistant (more <a href=\&quot;#AIAssistant\&quot;><u>below</u></a> on how that happens), and the resulting visualization is displayed in the <b>Results</b> section of the Data Explorer. In addition to the visualization of the results, the appropriate <b>Data</b>, <b>Filter</b>, and <b>Compare</b> options are selected in the <b>Query</b> section above the visualization, allowing the user to further tune or refine the results if necessary. The <i>Keep current filters</i> toggle within the AI Assistant pane allows users to build on the previous question. For example, with that toggle active, a user could ask “Traffic in the United States”, see the resultant graph, and then ask “Compare it with traffic in Mexico” to add Mexico’s data to the graph.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;building-a-query-directly\&quot;>Building a query directly</h2>\n <a href=\&quot;#building-a-query-directly\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>For users that prefer a more hands-on approach, a wide variety of Radar datasets are available to explore, including traffic metrics, attacks, Internet quality, email security, and more. Once the user selects a dataset, the <i>Breakdown By:</i> dropdown is automatically populated with relevant options (if any), and <b>Filter</b> options are also dynamically populated. As the user selects additional options, the visualization in the <b>Result</b> section is automatically updated.</p><p>In addition to building the query of interest, Data Explorer also enables the user to compare the results, both against a specific date range and/or another location or <a href=\&quot;https://www.cloudflare.com/en-gb/learning/network-layer/what-is-an-autonomous-system/\&quot;><u>autonomous system (AS)</u></a>. To compare results with the immediately previous period (the last seven days with the seven days before that, for instance), just toggle on the <i>Previous period</i> switch. Otherwise, clicking on the <i>Date Range</i> field brings up a calendar that enables the user to select a starting date — the corresponding date range is intelligently selected, based on the date range selected in the <b>Filter</b> section. To compare results across locations or ASNs, clicking on the “Location or ASN” field brings up a search box in which the user can enter a location (country/region) name, AS name, or AS number, with search results updating as the user types. Note that locations can be compared with other locations or ASes, and ASes can be compared with other ASes or locations. This enables a user, for example, to compare trends for their ISP with trends for their country.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1R9F5Cxe8gkJCUHzLitNH3/87225186868c22f4a3b17a19c1bddd8c/image7.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1598\&quot; height=\&quot;447\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;visualizing-the-results\&quot;>Visualizing the results</h2>\n <a href=\&quot;#visualizing-the-results\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Much of the value of Cloudflare Radar comes from its visualizations – the graphs, maps, and tables that illustrate the underlying data, and Data Explorer does not disappoint here. Depending on the dataset and filters selected, and the volume of data returned, results may be visualized in a time series graph, bar chart, <a href=\&quot;https://en.wikipedia.org/wiki/Treemapping\&quot;><u>treemap</u></a>, or global <a href=\&quot;https://en.wikipedia.org/wiki/Choropleth_map\&quot;><u>choropleth map</u></a>. The visualization type is determined automatically based on the contents of the API response. For example, the presence of countryalpha2 keys in the response means a choropleth map will be used, the presence of timestamps in the response means a line graph (“xychart”) should be shown, and more than 40 items in the response selects a treemap as the visualization type.</p><p>To illustrate the extended visualizations available in Data Explorer, the figure below is an expanded version of one that would normally be found on <a href=\&quot;https://radar.cloudflare.com/adoption-and-usage/us#http-1-x-vs-http-2-vs-http-3\&quot;><u>Radar’s </u><b><u>Adoption &amp;amp; Usage</u></b><u> page</u></a>. The “standard” version of the graph plots the shares of the HTTP versions over the last seven days for the United States, as well as the summary share values. In this <a href=\&quot;https://radar.cloudflare.com/explorer?dataSet=http&amp;groupBy=http_version&amp;loc=US&amp;filters=botClass%253DLikely_Human%252CdeviceType%253DMobile&amp;dt=7d&amp;timeCompare=1&amp;compareWith=701\&quot;><u>extended version of the graph generated in the Data Explorer</u></a>, we compare data for the United States with HTTP version share data for <a href=\&quot;https://radar.cloudflare.com/as701\&quot;><u>AS701 (Verizon)</u></a>, for both the past seven days and the previous seven-day period. In addition to the comparisons plotted on the time series graph, the associated summary values are also compared in an accompanying bar chart. This comprehensive visualization makes comparisons easy.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1Euh3n9A79zjXN05GQsTu0/e53fcfc5630beba215babd237875c610/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1559\&quot; height=\&quot;908\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>For some combinations of datasets/filters/comparisons, time series graphs can get quite busy, with a significant number of lines being plotted. To isolate just a single line on the graph, double-click on the item in the legend. To add/remove additional lines back to/from the graph, single-click on the relevant legend item.</p><p>Similar to other visualizations on Radar, the resulting graphs or maps can be downloaded, copied, or embedded into another website or application. Simply click on the “Share” button above the visualization card to bring up the <b>Share</b> modal dialog. We hope to see these graphs shared in articles, blog posts, and presentations, and to see embedded visualizations with real-time data in your portals and operations centers!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;still-want-to-use-the-api-no-problem\&quot;>Still want to use the API? No problem.</h2>\n <a href=\&quot;#still-want-to-use-the-api-no-problem\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Although Data Explorer was designed to simplify the process of building, and viewing the results of, more complex API queries, we recognize that some users may still want to retrieve data directly from the API. To enable that, Data Explorer’s <b>API</b> section provides copyable API calls as a direct request URL and a <a href=\&quot;https://curl.se\&quot;><u>cURL</u></a> command. The raw data returned by the query is also available to copy or download as a JSON blob, for those users that want to save it locally, or paste it into another application for additional manipulation or analysis.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1W3Zqrpfdtb0BgTnyV0bhu/e65e49260a67d0460b3e6e5d41fb7ae7/image6.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1291\&quot; loading=\&quot;lazy\&quot;/>\n </figure><h2 id=\&quot;AIAssistant\&quot;>How we built the AI Assistant</h2><p>Knowing all that AI is capable of these days, we thought that creating a system for an <a href=\&quot;https://www.cloudflare.com/en-gb/learning/ai/what-is-large-language-model/\&quot;><u>LLM</u></a> to answer questions didn’t seem like an overly complex task. While there were some challenges, Cloudflare’s developer platform tools thankfully made it fairly straightforward.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;llm-assisted-api-querying\&quot;>LLM-assisted API querying</h3>\n <a href=\&quot;#llm-assisted-api-querying\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The main challenge we encountered in building the API Assistant was the large number of combinations of datasets and parameters that can potentially be visualized in the Data Explorer. There are around 100 <a href=\&quot;https://developers.cloudflare.com/radar/\&quot;><u>API endpoints</u></a> from which the data can be fetched, with most able to take multiple parameters.</p><p>There were a few potential approaches to getting started. One was to take a previously trained LLM and further train it with the API endpoint descriptions in order to have it return the output in the required structured format which would then be used to execute the API query. However, for the first version, we decided against this approach of <a href=\&quot;https://developers.cloudflare.com/workers-ai/fine-tunes/\&quot;><u>fine-tuning</u></a>, as we wanted to quickly test a few different models supported by <a href=\&quot;https://developers.cloudflare.com/workers-ai/\&quot;><u>Workers AI</u></a>, and we wanted the flexibility to easily add or remove parameter combinations, as Data Explorer development was still under way. As such, we decided to start with prompt engineering, where all the endpoint-specific information is placed in the instructions sent to the LLM.</p><p>Putting the full detailed description of the API endpoints supported by the Data Explorer into the system prompt would be possible for an LLM with a larger context window (the number of tokens the model takes as input before generating output). Newer models are getting better with the <a href=\&quot;https://github.com/gkamradt/LLMTest_NeedleInAHaystack\&quot;><u>needle in a haystack problem</u></a>, which refers to the issue whereby LLMs do not retrieve information (the needle) equally well if it is placed in different positions within the long textual input (the haystack). However, <a href=\&quot;https://cs.stanford.edu/~nfliu/papers/lost-in-the-middle.arxiv2023.pdf\&quot;><u>it has been empirically shown</u></a> that the position of information within the large context still matters. Additionally, many of the Radar API endpoints have quite similar descriptions, and putting all the descriptions in a single instruction could be more confusing for the model, and the processing time also increases with larger contexts. Based on this, we adopted the approach of having multiple inference calls to an LLM.</p><p>First, when the user enters a question, a <a href=\&quot;https://workers.cloudflare.com/\&quot;><u>Worker</u></a> sends this question and a short general description of the available datasets to the LLM, asking it to determine the topic of the question. Then, based on the topic returned by the model, a system prompt is generated with the endpoint descriptions, including only those related to the topic. This prompt, along with the original question, is sent to the LLM asking it to select the appropriate endpoint and its specific parameters. At the same time, two parallel inference calls to the model are also made, one with the question and the system prompt related to the description of location parameters, and another with the description of time range parameters. Then, all three model outputs are put together and validated.</p><p>If the final output is a valid dataset and parameter combination, it is sent back to the Data Explorer, which executes the API query and displays the resulting visualization for the user. Different LLMs were tested for this task, and at the end, <a href=\&quot;https://developers.cloudflare.com/workers-ai/models/openhermes-2.5-mistral-7b-awq/\&quot;><u>openhermes-2.5-mistral-7b</u></a>, trained on code datasets, was selected as the best option. To give the model more context, not only is the user’s current question sent to the model, but the previous one and its response are as well, in case the next question asked by the user is related to the previous one. In addition, calls to the model are sent through Cloudflare’s <a href=\&quot;https://developers.cloudflare.com/ai-gateway/\&quot;><u>AI Gateway</u></a>, to allow for caching, rate limiting, and logging.</p><p>After the user is shown the result, they can indicate whether what was shown to them was useful or not by clicking the “thumbs up” or “thumbs down” icons in the response. This rating information is saved with the original question in <a href=\&quot;https://developers.cloudflare.com/d1/\&quot;><u>D1</u></a>, our serverless SQL database, so the results can be analyzed and applied to future AI Assistant improvements.</p><p>The full end-to-end data flow for the Cloudflare Radar AI Assistant is illustrated in the diagram below.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1EMv28isng00dvxUwmVKWE/958791d319985a3441cbce7234fa1588/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1405\&quot; height=\&quot;1081\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;when-the-llm-doesnt-know-the-answer\&quot;>When the LLM doesn’t know the answer</h3>\n <a href=\&quot;#when-the-llm-doesnt-know-the-answer\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In some cases, however, the LLM may not “know” the answer to the question posed by the user. If the model does not generate a valid final response, then the user is shown three alternative questions. The intent here is to guide the user into asking an answerable question — that is, a question that is answerable with data from Radar.</p><p>This is achieved using a previously compiled (static) list of various questions related to different Radar datasets. For each of these questions, their <a href=\&quot;https://www.cloudflare.com/en-gb/learning/ai/what-are-embeddings/\&quot;><u>embedding</u></a> is calculated using an <a href=\&quot;https://developers.cloudflare.com/workers-ai/models/bge-small-en-v1.5\&quot;><u>embeddings model</u></a>, and stored in our <a href=\&quot;https://developers.cloudflare.com/vectorize/\&quot;><u>Vectorize</u></a> <a href=\&quot;https://www.cloudflare.com/en-gb/learning/ai/what-is-vector-database/\&quot;><u>vector database</u></a>. “Embeddings” are&nbsp; numerical representations of textual data (vectors) capturing their semantic meaning and relationships, with similar text having vectors that are closer. When a user’s question does not generate a valid model response, the embedding of that question is calculated, and its vector is compared against all the stored vectors from the vector database, and the three most similar ones are selected. These three questions, determined to be similar to the user&amp;#39;s original question, are then shown to the user.</p><p>There are also cases when the LLM gives answers which do not correspond to what the user asked, as hallucinations <a href=\&quot;https://arxiv.org/pdf/2401.11817\&quot;><u>are currently inevitable</u></a> in LLMs, or when time durations are calculated inaccurately, as LLMs sometimes struggle with mathematical calculations. To help guard against this, AI Assistant responses are first validated against the API schema to confirm that the dataset and the parameter combination is valid. Additionally, Data Explorer dropdown options are automatically populated based on the AI Assistant’s response, and the chart titles are also automatically generated, so the user always knows exactly what data is shown in the visualization, even if it might not answer their actual question.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;looking-ahead\&quot;>Looking ahead</h2>\n <a href=\&quot;#looking-ahead\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We’re excited to enable more granular access to the rich datasets that currently power Cloudflare Radar. As we add new datasets in the future, such as DNS metrics, these will be available through Data Explorer and AI Assistant as well.</p><p>As noted above, Radar offers a predefined set of visualizations, and these serve as an excellent starting point for further exploration. We are adding links from each Radar visualization into Data Explorer, enabling users to further analyze the associated data to answer more specific questions. Clicking the “pie chart” icon next to a graph’s description brings up a Data Explorer page with the relevant metrics, options, and filters selected.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3O1sG7QnjASEX81lu6ooBy/d81664234dfc8024121eedba75aaef6d/image5.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;908\&quot; height=\&quot;118\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Correlating observations across two different metrics is another capability that we are also working on adding to Data Explorer. For example, if you are investigating an Internet disruption, you will be able to plot traffic trends and announced IP address space for a given country or autonomous system on the same graph to determine if both dropped concurrently.</p><p>But for now, use the Data Explorer and AI Assistant to go beyond what Cloudflare Radar offers, finding answers to your questions about what’s happening on the Internet.&nbsp; If you share Data Explorer visualizations on social media, be sure to tag us: <a href=\&quot;https://x.com/CloudflareRadar\&quot;><u>@CloudflareRadar</u></a> (X), <a href=\&quot;https://noc.social/@cloudflareradar\&quot;><u>noc.social/@cloudflareradar</u></a> (Mastodon), and <a href=\&quot;https://bsky.app/profile/radar.cloudflare.com\&quot;><u>radar.cloudflare.com</u></a> (Bluesky). You can also reach out on social media, or contact us via email, with suggestions for future Data Explorer and AI Assistant functionality.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6LCKQEfkvBhOQFugqOGhy2/239db21c6fc18a830b8643171534372f/image4.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;401\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:04:56.079Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/BFOT0I7ZKBwIVWNYAH3YX/39e86ee8075bfde2ab13f6406efe4886/image9.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;5DD7GZ0oxjP3NGOaJMwyWq&quot;],&quot;name&quot;:[0,&quot;Internet Quality&quot;],&quot;slug&quot;:[0,&quot;internet-quality&quot;]}],[0,{&quot;id&quot;:[0,&quot;5kIxDMJCg3PXQxVINDL0Cw&quot;],&quot;name&quot;:[0,&quot;Attacks&quot;],&quot;slug&quot;:[0,&quot;attacks&quot;]}],[0,{&quot;id&quot;:[0,&quot;0kgHdg1ytbdWl5BNo6bEa&quot;],&quot;name&quot;:[0,&quot;Internet Traffic&quot;],&quot;slug&quot;:[0,&quot;internet-traffic&quot;]}],[0,{&quot;id&quot;:[0,&quot;65uH0g2pnGqJljdGuryZLD&quot;],&quot;name&quot;:[0,&quot;Insights&quot;],&quot;slug&quot;:[0,&quot;insights&quot;]}],[0,{&quot;id&quot;:[0,&quot;5kZtWqjqa7aOUoZr8NFGwI&quot;],&quot;name&quot;:[0,&quot;Radar&quot;],&quot;slug&quot;:[0,&quot;cloudflare-radar&quot;]}],[0,{&quot;id&quot;:[0,&quot;3yArjf0gLKZy8ObEDxbNNi&quot;],&quot;name&quot;:[0,&quot;Trends&quot;],&quot;slug&quot;:[0,&quot;trends&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;David Belson&quot;],&quot;slug&quot;:[0,&quot;david-belson&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/en7vkXf6rLBm4F8IcNHXT/645022bf841fabff7732aa3be3949808/david-belson.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@dbelson&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Sabina Zejnilovic&quot;],&quot;slug&quot;:[0,&quot;sabina&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/TsYW8cvR78gk1niJXS2fK/5a846f3185e65a03aaf774fb6c8b07c9/sabina.JPG&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/radar-data-explorer-ai-assistant&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Network trends and natural language: Cloudflare Radar’s new Data Explorer &amp; AI Assistant&quot;],&quot;description&quot;:[0,&quot;The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3xfhE19w0eSc8urF6mbIgm/71f349b297076a6db3c32da5c0f005f4/Network_trends_and_natural_language-_Cloudflare_Radar_s_new_Data_Explorer___AI_Assistant-OG.png&quot;]}]}],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children> <article class="w-50-l mt4 mt2-l mb4 ph3 bb b--gray8 bn-l"> <div class="w-100"> <a href="https://blog-cloudflare-com.translate.goog/radar-data-explorer-ai-assistant/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 no-underline gray1" data-testid="post-title"><h2 class="fw5 mt2">Network trends and natural language: Cloudflare Radar’s new Data Explorer &amp; AI Assistant</h2></a> <p class="f3 fw5 gray5 my" data-testid="post-date">2024-09-27</p> <div class=""> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Birthday Week</a><a href="https://blog-cloudflare-com.translate.goog/tag/internet-quality/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Internet Quality</a><a href="https://blog-cloudflare-com.translate.goog/tag/attacks/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Attacks</a><a href="https://blog-cloudflare-com.translate.goog/tag/internet-traffic/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Internet Traffic</a><a href="https://blog-cloudflare-com.translate.goog/tag/insights/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Insights</a><a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-radar/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Radar</a><a href="https://blog-cloudflare-com.translate.goog/tag/trends/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Trends</a> </div> <p class="f3 fw4 gray1 lh-copy " data-testid="post-content">The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls.<!-- -->...</p> <ul class="author-lists flex pl0"> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/david-belson/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/en7vkXf6rLBm4F8IcNHXT/645022bf841fabff7732aa3be3949808/david-belson.jpeg" alt="David Belson" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/david-belson/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">David Belson</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/sabina/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/TsYW8cvR78gk1niJXS2fK/5a846f3185e65a03aaf774fb6c8b07c9/sabina.JPG" alt="Sabina Zejnilovic" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/sabina/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Sabina Zejnilovic</a> </div></li> </ul> </div> </article><!--astro:end--> </astro-island><astro-island uid="Z1sGFS6" prefix="r3" component-url="/_astro/PostCard.CG32ktie.js" component-export="PostCard" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;currentPage&quot;:[0,1],&quot;isFeaturedImageFirstPost&quot;:[0,false],&quot;post&quot;:[0,{&quot;id&quot;:[0,&quot;2Q277uIpNI04K4kTcUXLkf&quot;],&quot;title&quot;:[0,&quot;Empowering builders: introducing the Dev Alliance and Workers Launchpad Cohort #4&quot;],&quot;slug&quot;:[0,&quot;launchpad-cohort4-dev-starter-pack&quot;],&quot;excerpt&quot;:[0,&quot;Empowering developers with the Dev Starter Pack and Workers Cohort #4: get free or discounted access to essential developer tools and meet the latest set of incredible startups building on Cloudflare.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Today we’re announcing the Dev Starter Pack, an alliance of innovative tools for developers to get started with discounts and free services. We’re also excited to share an update on our <a href=\&quot;https://www.cloudflare.com/lp/workers-launchpad/\&quot;><u>Workers Launchpad Program</u></a>.</p><p>Creating from the ground up often means spending countless hours piecing together the right development stack, navigating different pricing models, and managing growing costs — all of which can take your focus away from what truly matters: building your product and growing your business.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;introducing-dev-starter-pack-the-tools-you-need-to-start-building-your-startup\&quot;>Introducing Dev Starter Pack: the tools you need to start building your startup</h3>\n <a href=\&quot;#introducing-dev-starter-pack-the-tools-you-need-to-start-building-your-startup\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Hey! <a href=\&quot;https://x.com/thedanigrant\&quot;><u>Dani Grant</u></a> here, one of the first PMs at Cloudflare and co-founder of <a href=\&quot;https://jam.dev\&quot;><u>Jam.dev</u></a>. Ten years ago (during 2014’s Birthday Week), Cloudflare <a href=\&quot;https://blog.cloudflare.com/introducing-universal-ssl\&quot;><u>launched Universal SSL</u></a>, making SSL free on the Internet for the first time, and in one night <a href=\&quot;https://blog.cloudflare.com/introducing-universal-ssl\&quot;><u>doubling</u></a> the size of the encrypted web.</p><p>I was a college student back then, and I immediately became enraptured by Cloudflare’s mission: helping build a better Internet. As part of this mission, Cloudflare has developed powerful tools typically accessible only to Internet giants, oftentimes offering them for free to developers and individuals alike. Heck yeah! I joined Cloudflare in January 2015, and 5 years after that, co-founded a developer tool company called Jam, inspired by the impact that I saw building tools for developers could have while at Cloudflare.</p><p>It’s now 10 years later, and a lot has changed –– “software ate the world” and it’s now powering all aspects of our lives, from health to finances to how we work. It’s more important than ever to empower every developer with the best tools available, because the faster we build software, the sooner people’s experiences improve.</p><p>Today we’re thrilled to announce the Dev Starter Pack, an alliance of like-minded dev tool companies giving away their services for free, or heavily discounting them for developers who want to start companies and build the future.</p><p>Not only does this stack include all the tools you need to build a startup, it also includes all the tools you need to build AI-powered features. We believe that the next wave of startups will be AI-native, as AI becomes as ubiquitous as the electricity that powers the servers.</p><p>We haven’t even scratched the surface of what’s possible with AI, and we hope this launch gets developers closer to solving the challenges of building non-deterministic software.</p><p>If you’re a software engineer, and you want to build a project or a company and need an off the shelf stack of dev tools to get started, go to <a href=\&quot;http://devstarterpack.io\&quot;><u>devstarterpack.io</u></a> to start using all of these tools.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4YVrWHCfk96YagkSw2uK5l/71053eb95a2d434c93ad1464a41bac6a/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1600\&quot; height=\&quot;900\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>Each provider is offering developers a heavily discounted or even free plan to get started building. You can redeem these services by either using the special code “devstarterpack” or selecting “Dev Starter Pack” while applying to relevant programs.</p><p>We welcome more tools to join the alliance — this is just the beginning. If you are building a developer tool and would like to include your product in the Dev Starter Pack, let us know <a href=\&quot;https://www.cloudflare.com/lp/workers-launchpad/\&quot;><u>here</u></a>, so we can include you.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;what-will-you-build\&quot;>What will you build?</h3>\n <a href=\&quot;#what-will-you-build\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We are very excited to see what you will build. Please share with us in <a href=\&quot;https://discord.com/invite/cloudflaredev\&quot;><u>Cloudflare’s Discord</u></a> and <a href=\&quot;https://community.cloudflare.com/c/developers/39\&quot;><u>community forum</u></a>, so we can support you however it makes sense.</p><p>Software developers are changing the world, and we believe in providing support to help you make an even greater impact. If you’re looking for additional funding or support, check out <a href=\&quot;https://blog.cloudflare.com/tag/workers-launchpad\&quot;><u>Cloudflare’s Launchpad</u></a> for developers turned founders building startups.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Vk47oye4jwsFn5DxffQkw/07b78fdd06ef24c09f3b0afe8ed585b5/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1200\&quot; height=\&quot;675\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;introducing-workers-launchpad-cohort-4\&quot;>Introducing Workers Launchpad Cohort #4</h3>\n <a href=\&quot;#introducing-workers-launchpad-cohort-4\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Melissa and Chris from the <a href=\&quot;http://www.cloudflare.com/forstartups\&quot;><u>Cloudflare for Startups</u></a> team here. Our team is blown away by what customers are demonstrating on the Developer Platform. Just a few weeks ago, our Workers Launchpad Cohort #3 wrapped up. On <a href=\&quot;https://cloudflare.tv/shows/workers-launchpad-demo-day/workers-launchpad-demo-day-cohort-3/pgx2jLal\&quot;><u>Demo Day</u></a>, customers demoed their applications built on Cloudflare, spanning AI, dev tools, IaaS, observability, SaaS, media, and beyond. We’re incredibly proud of Cohort #3 participants, and we look forward to their continued success with Cloudflare.</p><p>Following Demo Day of Workers Launchpad Cohort #3, we’ve been excited to receive a surge of new applications from startups around the world. These startups are pushing the boundaries of innovation, particularly in areas like observability, PaaS, AI, automation, e-commerce, and other industries. Many startups that applied this go-around demonstrated that they’ve built some great applications on Cloudflare, and today, we’re excited to announce the accepted participants for our upcoming Workers Launchpad Cohort #4.</p><p>Let’s take a look at what Cohort #4 participants are building in their own words:</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3WpVBXMoY8W2yzMpwh5keq/90be94945d04b122ec4dd090414ea014/image4.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1600\&quot; height=\&quot;666\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><table><tr><td><p><a href=\&quot;https://adster.tech\&quot;><b>Adster</b></a></p></td><td><p>Hyperscale revenue powered by real-time data intelligence and AI</p></td></tr><tr><td><p><a href=\&quot;http://www.almeta.cloud\&quot;><b>Almeta</b></a></p></td><td><p>Predict customer behavior on your website</p></td></tr><tr><td><p><a href=\&quot;http://www.bestparents.com\&quot;><b>Best Parents</b></a></p></td><td><p>Disruptive educational travel marketplace for Gen Z under 18</p></td></tr><tr><td><p><a href=\&quot;http://www.comigo.ai\&quot;><b>Comigo</b></a></p></td><td><p>Companion app to make therapy an engaging daily practice</p></td></tr><tr><td><p><a href=\&quot;http://www.datastrato.com\&quot;><b>Datastrato</b></a></p></td><td><p>A unified data catalog for generative AI infrastructure</p></td></tr><tr><td><p><a href=\&quot;https://equimake.com/\&quot;><b>Equimake</b></a></p></td><td><p>Create professional 3D projects without technical experience</p></td></tr><tr><td><p><a href=\&quot;http://www.evefan.com\&quot;><b>Evefan</b></a></p></td><td><p>Your own Internet scale events infrastructure</p></td></tr><tr><td><p><a href=\&quot;https://www.eventuall.live/\&quot;><b>Eventuall</b></a></p></td><td><p>Connecting stars with their fans in paid meet &amp;amp; greets and virtual experiences</p></td></tr><tr><td><p><a href=\&quot;http://www.fermat.app\&quot;><b>Fermat</b></a></p></td><td><p>No-code solution to deploy AI models as internal tools</p></td></tr><tr><td><p><a href=\&quot;https://fiberplane.com\&quot;><b>Fiberplane</b></a></p></td><td><p>Development tool that uses observability data to help test and debug APIs</p></td></tr><tr><td><p><a href=\&quot;http://www.firetiger.com\&quot;><b>Firetiger</b></a></p></td><td><p>An engineering observability tool that operates at scale inside customer infrastructure</p></td></tr><tr><td><p><a href=\&quot;https://flightcast.com/\&quot;><b>Flightcast</b></a></p></td><td><p>Video-first podcast hosting &amp;amp; distribution</p></td></tr><tr><td><p><a href=\&quot;http://www.runway-vision.com\&quot;><b>FlightLevel Technologies</b></a></p></td><td><p>AI Analytics and Footage in the aviation industry.</p></td></tr><tr><td><p><a href=\&quot;https://gitlip.com/\&quot;><b>Gitlip</b></a></p></td><td><p>Powerful, collaborative and lightweight computing platform based on Git</p></td></tr><tr><td><p><a href=\&quot;http://www.gracker.ai\&quot;><b>GrackerAI</b></a></p></td><td><p>AI-powered organic growth engine for cybersecurity B2B SaaS</p></td></tr><tr><td><p><a href=\&quot;https://hackernoon.com/\&quot;><b>Hackernoon</b></a></p></td><td><p>Community-driven blogging network read by millions of technologists</p></td></tr><tr><td><p><a href=\&quot;https://hanabi.rest/\&quot;><b>Hanabi.REST</b></a></p></td><td><p>Prompt to REST API with AI-driven building, testing, and deployment</p></td></tr><tr><td><p><a href=\&quot;http://www.infrastack.ai\&quot;><b>Infrastack</b></a></p></td><td><p>Next-gen application intelligence and observability platform for developers</p></td></tr><tr><td><p><a href=\&quot;https://www.june.technology/\&quot;><b>June</b></a></p></td><td><p>AI productivity companion</p></td></tr><tr><td><p><a href=\&quot;https://leed.ai/\&quot;><b>Leed AI</b></a></p></td><td><p>Combined marketing workflows, website, and customer journey for a seamless, AI-accelerated experience</p></td></tr><tr><td><p><b></b><a href=\&quot;http://www.lookbk.com\&quot;><b>lookbk</b></a></p></td><td><p>Make the Internet more shoppable, starting with fashion on socials</p></td></tr><tr><td><p><a href=\&quot;https://materialized.dev/\&quot;><b>Materialized Intelligence</b></a></p></td><td><p>Data-intensive inference solutions</p></td></tr><tr><td><p><a href=\&quot;https://maxint.com/\&quot;><b>Maxint</b></a></p></td><td><p>Multi-platform money management powered by AI</p></td></tr><tr><td><p><a href=\&quot;http://www.midio.com\&quot;><b>Midio</b></a></p></td><td><p>Visual tool to build software and AI agents</p></td></tr><tr><td><p><a href=\&quot;http://www.nika.eco\&quot;><b>NikaPlanet</b></a></p></td><td><p>Transformative geospatial analytics experience with Google Colab, QGIS, ChatGPT, and Miro in one solution</p></td></tr><tr><td><p><a href=\&quot;http://www.nothotdog.dev\&quot;><b>NotHotDog</b></a></p></td><td><p>AI-Powered API Testing Tool</p></td></tr><tr><td><p><a href=\&quot;https://www.outerbase.com/\&quot;><b>Outerbase</b></a></p></td><td><p>View, edit, query, and visualize your data with AI</p></td></tr><tr><td><p><a href=\&quot;http://www.procureezy.com\&quot;><b>Procureezy</b></a></p></td><td><p>AI procurement platform to empower hardware engineers to source smarter and launch sooner</p></td></tr><tr><td><p><a href=\&quot;http://www.proma.ai\&quot;><b>Proma</b></a></p></td><td><p>Process management and automation platform to get work done fast</p></td></tr><tr><td><p><a href=\&quot;https://www.renderbetter.com/\&quot;><b>Render Better</b></a></p></td><td><p>Increase e-commerce revenue by optimizing your site speed, automatically</p></td></tr><tr><td><p><a href=\&quot;http://www.sherpo.io\&quot;><b>Sherpo</b></a></p></td><td><p>AI-first no-code platform to build and sell digital content</p></td></tr><tr><td><p><a href=\&quot;https://speak.careers/\&quot;><b>Speak_</b></a></p></td><td><p>AI platform to surface top talent by evaluating candidates against custom criteria</p></td></tr><tr><td><p><a href=\&quot;https://tightknit.ai/\&quot;><b>Tightknit</b></a></p></td><td><p>Embedded community engagement platform built for SaaS</p></td></tr><tr><td><p><a href=\&quot;https://www.tinfoil.sh/\&quot;><b>Tinfoil</b></a></p></td><td><p>Powerful analytics with cryptographic privacy guarantees</p></td></tr><tr><td><p><a href=\&quot;https://www.usevelvet.com/\&quot;><b>Velvet</b></a></p></td><td><p>AI gateway to monitor, evaluate, and optimize features</p></td></tr><tr><td><p><a href=\&quot;https://webstudio.is/\&quot;><b>Webstudio</b></a></p></td><td><p>An advanced visual site builder that connects to any headless CMS</p></td></tr><tr><td><p><a href=\&quot;https://ziprlinks.com/\&quot;><b>Zipr</b></a></p></td><td><p>Streamlined visitor management</p></td></tr></table><p>The Cloudflare team is ecstatic to work with the amazing participants of Cohort #4. If you want to follow along on Cohort #4’s journey, be sure to follow <a href=\&quot;https://x.com/CloudflareDev\&quot;><u>@CloudflareDev</u></a> on X and join our <a href=\&quot;https://discord.com/invite/cloudflaredev?cf_target_id=4874A68FFE682C2DFA5CB8063B4025ED\&quot;><u>Developer Discord</u></a> server.</p><p>Are you a startup building on Cloudflare? <a href=\&quot;https://www.cloudflare.com/lp/workers-launchpad/\&quot;><u>Apply for Cohort #5!</u></a></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-28T19:52:57.749Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1c60YvQaPSdMYfxzjtGDLw/44b18878f6883351f8e25497f016a4ec/image2.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;5Ol0Sw9kBTwIstJ84njaO7&quot;],&quot;name&quot;:[0,&quot;Workers Launchpad&quot;],&quot;slug&quot;:[0,&quot;workers-launchpad&quot;]}],[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;5cye1Bh5KxFh3pKSnX8Dsy&quot;],&quot;name&quot;:[0,&quot;Serverless&quot;],&quot;slug&quot;:[0,&quot;serverless&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Melissa Kargiannakis&quot;],&quot;slug&quot;:[0,&quot;melissa-kargiannakis&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3SBfCoKJH5IovCRltyryoh/597646a09632eb0507c3d47b7f40ce61/_tmp_mini_magick20230216-39-1fov7v0.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Christopher Rotas&quot;],&quot;slug&quot;:[0,&quot;christopher-rotas&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/eO2N5vG0MxTmzo94wGNAf/c201a8c4ebb28f873e0c4c1524e52b62/christopher-rotas.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Veronica Marin&quot;],&quot;slug&quot;:[0,&quot;veronica-marin&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3IDGPzZgmO090QJb7RP1By/d26846f1c5e42543d8c1c8a5108fda8b/veronica-marin.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Empowering developers with the Dev Starter Pack and Workers Cohort #4: get free or discounted access to essential developer tools and meet the latest set of incredible startups building on Cloudflare.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;BLOG-2524 LOC List - ja-JP&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;English for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;English for Locale&quot;],&quot;zhTW&quot;:[0,&quot;English for Locale&quot;],&quot;frFR&quot;:[0,&quot;English for Locale&quot;],&quot;deDE&quot;:[0,&quot;English for Locale&quot;],&quot;itIT&quot;:[0,&quot;English for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;English for Locale&quot;],&quot;ptBR&quot;:[0,&quot;English for Locale&quot;],&quot;esLA&quot;:[0,&quot;English for Locale&quot;],&quot;esES&quot;:[0,&quot;English for Locale&quot;],&quot;enAU&quot;:[0,&quot;English for Locale&quot;],&quot;enCA&quot;:[0,&quot;English for Locale&quot;],&quot;enIN&quot;:[0,&quot;English for Locale&quot;],&quot;enGB&quot;:[0,&quot;English for Locale&quot;],&quot;idID&quot;:[0,&quot;English for Locale&quot;],&quot;ruRU&quot;:[0,&quot;English for Locale&quot;],&quot;svSE&quot;:[0,&quot;English for Locale&quot;],&quot;viVN&quot;:[0,&quot;English for Locale&quot;],&quot;plPL&quot;:[0,&quot;English for Locale&quot;],&quot;arAR&quot;:[0,&quot;English for Locale&quot;],&quot;nlNL&quot;:[0,&quot;English for Locale&quot;],&quot;thTH&quot;:[0,&quot;English for Locale&quot;],&quot;trTR&quot;:[0,&quot;English for Locale&quot;],&quot;heIL&quot;:[0,&quot;English for Locale&quot;],&quot;lvLV&quot;:[0,&quot;English for Locale&quot;],&quot;etEE&quot;:[0,&quot;English for Locale&quot;],&quot;ltLT&quot;:[0,&quot;English for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/launchpad-cohort4-dev-starter-pack&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Empowering builders: introducing the Dev Alliance and Workers Launchpad Cohort #4&quot;],&quot;description&quot;:[0,&quot;Empowering developers with the Dev Starter Pack and Workers Cohort #4: get free or discounted access to essential developer tools and meet the latest set of incredible startups building on Cloudflare.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ELK9sYzobsd7QllPCvzya/c9e9a0a967713f8e1b12e2b9c0b31d38/Empowering_builders-_introducing_the_Dev_Alliance_and_Workers_Launchpad_Cohort_-4-OG.png&quot;]}]}],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children> <article class="w-50-l mt4 mt2-l mb4 ph3 bb b--gray8 bn-l"> <div class="w-100"> <a href="https://blog-cloudflare-com.translate.goog/launchpad-cohort4-dev-starter-pack/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 no-underline gray1" data-testid="post-title"><h2 class="fw5 mt2">Empowering builders: introducing the Dev Alliance and Workers Launchpad Cohort #4</h2></a> <p class="f3 fw5 gray5 my" data-testid="post-date">2024-09-27</p> <div class=""> <a href="https://blog-cloudflare-com.translate.goog/tag/workers-launchpad/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Workers Launchpad</a><a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Birthday Week</a><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Developers</a><a href="https://blog-cloudflare-com.translate.goog/tag/developer-platform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Developer Platform</a><a href="https://blog-cloudflare-com.translate.goog/tag/serverless/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Serverless</a><a href="https://blog-cloudflare-com.translate.goog/tag/workers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Cloudflare Workers</a> </div> <p class="f3 fw4 gray1 lh-copy " data-testid="post-content">Empowering developers with the Dev Starter Pack and Workers Cohort #4: get free or discounted access to essential developer tools and meet the latest set of incredible startups building on Cloudflare.<!-- -->...</p> <ul class="author-lists flex pl0"> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/melissa-kargiannakis/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3SBfCoKJH5IovCRltyryoh/597646a09632eb0507c3d47b7f40ce61/_tmp_mini_magick20230216-39-1fov7v0.jpg" alt="Melissa Kargiannakis" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/melissa-kargiannakis/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Melissa Kargiannakis</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/christopher-rotas/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/eO2N5vG0MxTmzo94wGNAf/c201a8c4ebb28f873e0c4c1524e52b62/christopher-rotas.jpg" alt="Christopher Rotas" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/christopher-rotas/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Christopher Rotas</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/veronica-marin/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3IDGPzZgmO090QJb7RP1By/d26846f1c5e42543d8c1c8a5108fda8b/veronica-marin.png" alt="Veronica Marin" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/veronica-marin/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Veronica Marin</a> </div></li> </ul> </div> </article><!--astro:end--> </astro-island><astro-island uid="Z26QTvb" prefix="r4" component-url="/_astro/PostCard.CG32ktie.js" component-export="PostCard" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;currentPage&quot;:[0,1],&quot;isFeaturedImageFirstPost&quot;:[0,false],&quot;post&quot;:[0,{&quot;id&quot;:[0,&quot;6PcliMGa9hJMvd9HafSMwe&quot;],&quot;title&quot;:[0,&quot;Advancing cybersecurity: Cloudflare implements a new bug bounty VIP program as part of CISA Pledge commitment&quot;],&quot;slug&quot;:[0,&quot;cisa-pledge-commitment-bug-bounty-vip&quot;],&quot;excerpt&quot;:[0,&quot;Cloudflare strengthens its commitment to cybersecurity by joining CISA's \&quot;Secure by Design\&quot; pledge. In line with this commitment, we're enhancing our vulnerability disclosure policy by launching a VIP bug bounty program, giving top researchers early access to our products. Keep an eye out for future updates regarding Cloudflare's CISA pledge as we work together to shape a safer digital future.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>As our digital world becomes increasingly more complex, the importance of cybersecurity grows ever more critical. As a result, Cloudflare is proud to promote our commitment to the <a href=\&quot;https://cisa.gov/\&quot;><u>Cybersecurity and Infrastructure Security Agency (CISA)</u></a> <a href=\&quot;https://www.cisa.gov/securebydesign\&quot;><u>‘Secure by Design’</u></a> <a href=\&quot;https://www.cisa.gov/securebydesign/pledge\&quot;><u>pledge</u></a>. The commitment is built around seven security goals, aimed at enhancing the safety of our products and delivering the most secure solutions to our customers.</p><p>Cloudflare’s commitment to the CISA pledge reflects our dedication to transparency and accountability to our customers, and to cybersecurity best practices. Furthermore, Cloudflare is committed to being a trusted partner by sharing our strategies to ensure the highest priority is placed on safeguarding our customers’ security.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;bug-bounty-vip-program\&quot;>Bug bounty VIP program</h2>\n <a href=\&quot;#bug-bounty-vip-program\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare has successfully managed a <a href=\&quot;https://blog.cloudflare.com/cloudflare-bug-bounty-program/\&quot;><u>public Vulnerability Disclosure Program (VDP)</u></a> for years; our belief is that collaboration is the cornerstone of effective cybersecurity. We are excited to announce a major milestone in our journey to meet <a href=\&quot;https://www.cisa.gov/securebydesign/pledge#:~:text=READ%20MORE-,Vulnerability%20disclosure%20policy,-Goal%3A%20Within%20one\&quot;><u>Goal #5 of the pledge</u></a>: our program will now include a bug bounty VIP program in conjunction with our bug bounty public program.</p><p>Continuous investment in maturing our bug bounty program is a vital tool for the success of any security organization. By encouraging broader participation in vulnerability testing, we open the door to more diverse perspectives and expertise, ultimately leading to stronger, more resilient security measures. Additionally, the new VIP program will allow us greater flexibility in engaging security researchers on upcoming betas for Cloudflare products, and will allow us to award higher bounty payouts.</p><p>Our commitment to this effort underscores our belief that a safer Internet is achievable through shared responsibility and proactive engagement. The security team at Cloudflare is looking forward to implementing a more proactive approach to securing our products with the launch of the new bug bounty VIP program!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-is-in-scope-for-the-new-vip-program\&quot;>What is in scope for the new VIP program?&nbsp;</h2>\n <a href=\&quot;#what-is-in-scope-for-the-new-vip-program\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The new bug bounty VIP program is an exclusive hub for select security researchers who either have the specialized technical expertise in the niche areas Cloudflare is building products in (such as Cloudflare Workers) or have demonstrated a deep understanding of our products and platform by actively participating in the public program with meaningful security findings. As a VIP member, security researchers will have access to beta testing environments for Cloudflare products<b>.</b> This includes early access to our newest features and unannounced products before they go live.</p><p>The VIP program’s scope will be carefully modeled from Cloudflare&amp;#39;s product release roadmap. Security researchers will have the opportunity to influence Cloudflare’s product and security development before release. VIP program participants also have the option to participate in external/gray box penetration testing activities (<a href=\&quot;https://docs.hackerone.com/en/articles/9064940-spot-checks\&quot;><u>Spot Checks</u></a>) for higher bounties related to security findings for upcoming product releases or critical infrastructure and services.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gAwO2RQgbNJch1omgazkx/0562c67e91daa0998eeb41672fe3b564/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;354\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;the-vip-programs-new-enhanced-reward-structure\&quot;>The VIP program’s new &amp; enhanced reward structure</h2>\n <a href=\&quot;#the-vip-programs-new-enhanced-reward-structure\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We believe that exceptional contributions deserve exceptional rewards. As a result, we’ve restructured our bounty offerings for the VIP program with higher payouts<b>.</b> Recognizing the specialized skills and expertise required, VIP researchers will be eligible for significantly higher rewards.<b> </b>We have also introduced bonus rewards for high-impact findings, particularly those that address critical vulnerabilities in our beta projects through the aforementioned Spot Checks. To further incentivize meaningful contributions, security researchers in our public program will receive milestone bonuses and be invited to our VIP program based on the number and quality of their submissions over time.</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;center\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:25%;\&quot; width=\&quot;177\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;177\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;177\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;177\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; colspan=\&quot;4\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>VIP Program (Private)</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Critical</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>High</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Medium</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Low</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$10,000-15,000</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$4,000-7,000</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$1,000-3,000</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$250-750</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-outcomes-are-we-driving-with-the-new-vip-program\&quot;>What outcomes are we driving with the new VIP program?</h2>\n <a href=\&quot;#what-outcomes-are-we-driving-with-the-new-vip-program\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The VIP bug bounty program’s focus is not only finding and fixing bugs, but it’s also aimed at fostering a deeper, more impactful relationship with our security researchers. Moreover, these outcomes align well with the <a href=\&quot;https://www.cisa.gov/securebydesign/pledge#:~:text=READ%20MORE-,Vulnerability%20disclosure%20policy,-Goal%3A%20Within%20one\&quot;><u>CISA Vulnerability Disclosure Policy (VDP) goal</u></a>. By offering exclusive access to beta software and enhanced rewards, our goals are as follows:</p><ol><li><p><b>Elevate security standards</b>: VIP researchers focusing on the most critical assets allows for further hardening of the overall security posture of Cloudflare’s products and services.&nbsp;</p></li><li><p><b>Accelerate product development</b>: Early identification of vulnerabilities allows the remediation of potential issues before they reach production, yielding faster, more secure, and more stable releases.</p></li><li><p><b>Foster innovation</b>: Involving researchers in the development process creates an additional feedback loop that encourages innovative approaches to security challenges.&nbsp;</p></li><li><p><b>Encourage collaboration</b>: The bug bounty team will encourage collaborative blog posts for select reports as a way to disseminate security learnings and build partnerships with researchers.</p></li></ol><p>This is a great professional growth opportunity for anyone in the technical research space as it gives participants the ability to work on cutting-edge technology with complex challenges, and can provide future opportunities for career/skill development.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-does-cloudflare-benefit-from-it\&quot;>How does Cloudflare benefit from it?</h2>\n <a href=\&quot;#how-does-cloudflare-benefit-from-it\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The launch of the VIP program marks a new chapter in Cloudflare’s security journey. We are excited about the opportunity to partner more closely with our top security researchers to build safer products for customers. Together, we can achieve new heights in security excellence:</p><ol><li><p><b>Stronger security</b>: Security researchers with expertise in niche topics can help enhance Cloudflare&amp;#39;s defenses against emerging and novel threats.</p></li><li><p><b>Proactive risk management</b>: The new VIP program provides Cloudflare an additional avenue to identify and mitigate risks early in the product release cycle, reducing the likelihood of future security incidents.</p></li><li><p><b>Reinforced trust</b>: Our commitment to security is central to our customer relationships and the trust they place in Cloudflare; by continuously improving our security posture, we seek to preserve that trust.</p></li></ol>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-can-you-help\&quot;>How can you help?</h2>\n <a href=\&quot;#how-can-you-help\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>If you are a software manufacturer, we encourage you to familiarize yourself with CISA’s <a href=\&quot;https://www.cisa.gov/securebydesign\&quot;><u>‘Secure by Design’</u></a> principles and create a plan to implement them in your company.</p><p>As an individual, we encourage you to participate in the <a href=\&quot;https://hackerone.com/cloudflare\&quot;><u>Cloudflare bug bounty program</u></a> and promote cybersecurity awareness in your community.</p><p>Stay tuned for more updates, and if you’re part of our public program, keep submitting those reports — you might just earn an invitation to join the VIP ranks! You can also find more updates on our blog, as we build our roadmap to meet all seven CISA Secure by Design pledge goals by May 2025!</p><p>Let’s help build a better Internet together.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:04:57.431Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4eHoGDg925085ZRIKIgwqs/3e31a06d083aa7542b9a7d053bd329b6/image2.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Mp7ouACN2rT3YjL1xaXJx&quot;],&quot;name&quot;:[0,&quot;Security&quot;],&quot;slug&quot;:[0,&quot;security&quot;]}],[0,{&quot;id&quot;:[0,&quot;2GdRQIOWsB1PBHEX7DUETr&quot;],&quot;name&quot;:[0,&quot;Bug Bounty&quot;],&quot;slug&quot;:[0,&quot;bug-bounty&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Sri Pulla&quot;],&quot;slug&quot;:[0,&quot;sri-pulla&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6cKPZaeRNPlluNFkxGsLjM/992cdee3e4948bbb2e23e2f9fc6f5610/unnamed.webp&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Trishna&quot;],&quot;slug&quot;:[0,&quot;trishna&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4wonOgoxwHRvqvB9bqZG40/3d7cbfc1b9415ee4f5f149eb65771435/unnamed__1_.webp&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;David Haynes&quot;],&quot;slug&quot;:[0,&quot;dhaynes&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4q1D3h1TNHkhejK2KkqxkB/6b04d10b52631f2ebfc69ab75d456ad1/dhaynes.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,&quot;http://dhaynes.io&quot;],&quot;twitter&quot;:[0,&quot;@dhaynesplz&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Cloudflare strengthens its commitment to cybersecurity by joining CISA's \&quot;Secure by Design\&quot; pledge. In line with this commitment, we're enhancing our vulnerability disclosure policy by launching a VIP bug bounty program, giving top researchers early access to our products. Keep an eye out for future updates regarding Cloudflare's CISA pledge as we work together to shape a safer digital future.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/cisa-pledge-commitment-bug-bounty-vip&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Advancing cybersecurity: Cloudflare implements a new bug bounty VIP program as part of CISA Pledge commitment&quot;],&quot;description&quot;:[0,&quot;Cloudflare strengthens its commitment to cybersecurity by joining CISA's \&quot;Secure by Design\&quot; pledge. In line with this commitment, we're enhancing our vulnerability disclosure policy by launching a VIP bug bounty program, giving top researchers early access to our products.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/38UiDqMKYIrSjbAF5hcW4a/6a6bc9f17c922c72444ee6355c5a2b7f/Advancing_cybersecurity-_Cloudflare_implements_a_new_bug_bounty_VIP_program_as_part_of_CISA_Pledge_commitment-OG.png&quot;]}]}],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children> <article class="w-50-l mt4 mt2-l mb4 ph3 bb b--gray8 bn-l"> <div class="w-100"> <a href="https://blog-cloudflare-com.translate.goog/cisa-pledge-commitment-bug-bounty-vip/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 no-underline gray1" data-testid="post-title"><h2 class="fw5 mt2">Advancing cybersecurity: Cloudflare implements a new bug bounty VIP program as part of CISA Pledge commitment</h2></a> <p class="f3 fw5 gray5 my" data-testid="post-date">2024-09-27</p> <div class=""> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Birthday Week</a><a href="https://blog-cloudflare-com.translate.goog/tag/security/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Security</a><a href="https://blog-cloudflare-com.translate.goog/tag/bug-bounty/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="dib pl2 pr2 pt1 pb1 mb2 bg-gray8 no-underline blue3 f2 mr1" data-testid="post-tag">Bug Bounty</a> </div> <p class="f3 fw4 gray1 lh-copy " data-testid="post-content">Cloudflare strengthens its commitment to cybersecurity by joining CISA's "Secure by Design" pledge. In line with this commitment, we're enhancing our vulnerability disclosure policy by launching a VIP bug bounty program, giving top researchers early access to our products. Keep an eye out for future updates regarding Cloudflare's CISA pledge as we work together to shape a safer digital future.<!-- -->...</p> <ul class="author-lists flex pl0"> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/sri-pulla/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6cKPZaeRNPlluNFkxGsLjM/992cdee3e4948bbb2e23e2f9fc6f5610/unnamed.webp" alt="Sri Pulla" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/sri-pulla/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Sri Pulla</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/trishna/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4wonOgoxwHRvqvB9bqZG40/3d7cbfc1b9415ee4f5f149eb65771435/unnamed__1_.webp" alt="Trishna" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/trishna/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">Trishna</a> </div></li> <li class="list flex items-center pr2 mb3"><a href="https://blog-cloudflare-com.translate.goog/author/dhaynes/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="static-avatar pr1"><img class="author-profile-image br-100 mr2" src="https://blog.cloudflare.com/cdn-cgi/image/format=auto,dpr=3,width=64,height=64,gravity=face,fit=crop,zoom=0.5/https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4q1D3h1TNHkhejK2KkqxkB/6b04d10b52631f2ebfc69ab75d456ad1/dhaynes.jpg" alt="David Haynes" width="62" height="62"></a> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/dhaynes/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw4 f3 no-underline black">David Haynes</a> </div></li> </ul> </div> </article><!--astro:end--> </astro-island> <astro-island uid="mogle" prefix="r5" component-url="/_astro/MorePosts.DyRVOquy.js" component-export="default" renderer-url="/_astro/client.DLO1yDVm.js" props="{&quot;locale&quot;:[0,&quot;en-us&quot;],&quot;posts&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;6HqKUMoXg0wFIQg9howLMX&quot;],&quot;title&quot;:[0,&quot;AI Everywhere with the WAF Rule Builder Assistant, Cloudflare Radar AI Insights, and updated AI bot protection&quot;],&quot;slug&quot;:[0,&quot;bringing-ai-to-cloudflare&quot;],&quot;excerpt&quot;:[0,&quot;This year for Cloudflare’s birthday, we’ve extended our AI Assistant capabilities to help you build new WAF rules, added new AI bot &amp; crawler traffic insights to Radar, and given customers new AI bot &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>The continued growth of AI has fundamentally changed the Internet over the past 24 months. AI is increasingly ubiquitous, and Cloudflare is leaning into the new opportunities and challenges it presents in a big way. This year for Cloudflare’s birthday, we’ve extended our AI Assistant capabilities to help you build new WAF rules, added AI bot traffic insights on Cloudflare Radar, and given customers new AI bot blocking capabilities.&nbsp;&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;ai-assistant-for-waf-rule-builder\&quot;>AI Assistant for WAF Rule Builder</h2>\n <a href=\&quot;#ai-assistant-for-waf-rule-builder\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5RYC4wmCDbs0axY92FfkFk/a728906cb6a902dd1c78ec93a0f650c2/BLOG-2564_1.png\&quot; alt=\&quot;BLOG-2564 1\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;501\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>At Cloudflare, we’re always listening to your feedback and striving to make our products as user-friendly and powerful as possible. One area where we&amp;#39;ve heard your feedback loud and clear is in the complexity of creating custom and rate-limiting rules for our Web Application Firewall (WAF). With this in mind, we’re excited to introduce a new feature that will make rule creation easier and more intuitive: the AI Assistant for WAF Rule Builder.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7avSjubqlfg7L8ymKEztgk/7c3c31e50879ec64bccc384bdfcd5524/BLOG-2564_2.png\&quot; alt=\&quot;BLOG-2564 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1056\&quot; height=\&quot;1460\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>By simply entering a natural language prompt, you can generate a custom or rate-limiting rule tailored to your needs. For example, instead of manually configuring a complex rule matching criteria, you can now type something like, &amp;quot;Match requests with low bot score,&amp;quot; and the assistant will generate the rule for you. It’s not about creating the perfect rule in one step, but giving you a strong foundation that you can build on.&nbsp;</p><p>The assistant will be available in the Custom and Rate Limit Rule Builder for all WAF users. We’re launching this feature in Beta for all customers, and we encourage you to give it a try. We’re looking forward to hearing your feedback (via the UI itself) as we continue to refine and enhance this tool to meet your needs.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;ai-bot-traffic-insights-on-cloudflare-radar\&quot;>AI bot traffic insights on Cloudflare Radar</h2>\n <a href=\&quot;#ai-bot-traffic-insights-on-cloudflare-radar\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>AI platform providers use bots to crawl and scrape websites, vacuuming up data to use for model training. This is frequently done without the permission of, or a business relationship with, the content owners and providers. In July, Cloudflare urged content owners and providers to <a href=\&quot;https://blog.cloudflare.com/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click/\&quot;><u>“declare their AIndependence”</u></a>, providing them with a way to block AI bots, scrapers, and crawlers with a single click. In addition to this so-called “easy button” approach, sites can provide more specific guidance to these bots about what they are and are not allowed to access through directives in a <a href=\&quot;https://www.cloudflare.com/en-gb/learning/bots/what-is-robots-txt/\&quot;><u>robots.txt</u></a> file. Regardless of whether a customer chooses to block or allow requests from AI-related bots, Cloudflare has insight into request activity from these bots, and associated traffic trends over time.</p><p>Tracking traffic trends for AI bots can help us better understand their activity over time — which are the most aggressive and have the highest volume of requests, which launch crawls on a regular basis, etc. The new <a href=\&quot;https://radar.cloudflare.com/traffic#ai-bot-crawler-traffic\&quot;><b><u>AI bot &amp;amp; crawler traffic </u></b><u>graph on Radar’s Traffic page</u></a> provides insight into these traffic trends gathered over the selected time period for the top known AI bots. The associated list of bots tracked here is based on the <a href=\&quot;https://github.com/ai-robots-txt/ai.robots.txt\&quot;><u>ai.robots.txt list</u></a>, and will be updated with new bots as they are identified. <a href=\&quot;https://developers.cloudflare.com/api/operations/radar-get-ai-bots-timeseries-group-by-user-agent\&quot;><u>Time series</u></a> and <a href=\&quot;https://developers.cloudflare.com/api/operations/radar-get-ai-bots-summary-by-user-agent\&quot;><u>summary</u></a> data is available from the Radar API as well. (Traffic trends for the full set of AI bots &amp;amp; crawlers <a href=\&quot;https://radar.cloudflare.com/explorer?dataSet=ai.bots\&quot;><u>can be viewed in the new Data Explorer</u></a>.)</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5tYefQaBhTPYpqZPtE6KPu/f60694d0b24de2acba13fe0944589885/BLOG-2564_3.png\&quot; alt=\&quot;BLOG-2564 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;631\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;blocking-more-ai-bots\&quot;>Blocking more AI bots</h2>\n <a href=\&quot;#blocking-more-ai-bots\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/UiFu8l6K4Pm3ulxTK3XU0/541d109e29a9ae94e4792fdf94f7e4aa/BLOG-2564_4.png\&quot; alt=\&quot;BLOG-2564 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;501\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>For Cloudflare’s birthday, we’re following up on our previous blog post, <a href=\&quot;https://blog.cloudflare.com/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click/\&quot;><i><u>Declaring Your AIndependence</u></i></a>, with an update on the new detections we’ve added to stop AI bots. Customers who haven’t already done so can simply <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/security/bots/configure\&quot;><u>click the button</u></a> to block AI bots to gain more protection for their website.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;enabling-dynamic-updates-for-the-ai-bot-rule\&quot;>Enabling dynamic updates for the AI bot rule</h3>\n <a href=\&quot;#enabling-dynamic-updates-for-the-ai-bot-rule\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The old button allowed customers to block <i>verified</i> AI crawlers, those that respect robots.txt and crawl rate, and don’t try to hide their behavior. We’ve added new crawlers to that list, but we’ve also expanded the previous rule to include 27 signatures (and counting) of AI bots that <i>don’t </i>follow the rules. We want to take time to say “thank you” to everyone who took the time to use our “<a href=\&quot;https://docs.google.com/forms/d/14bX0RJH_0w17_cAUiihff5b3WLKzfieDO4upRlo5wj8\&quot;><u>tip line</u></a>” to point us towards new AI bots. These tips have been extremely helpful in finding some bots that would not have been on our radar so quickly.&nbsp;</p><p>For each bot we’ve added, we’re also adding them to our “Definitely automated” definition as well. So, if you’re a self-service plan customer using <a href=\&quot;https://blog.cloudflare.com/super-bot-fight-mode/\&quot;><u>Super Bot Fight Mode</u></a>, you’re already protected. Enterprise Bot Management customers will see more requests shift from the “Likely Bot” range to the “Definitely automated” range, which we’ll discuss more below.</p><p>Under the hood, we’ve converted this rule logic to a <a href=\&quot;https://developers.cloudflare.com/waf/managed-rules/\&quot;><u>Cloudflare managed rule</u></a> (the same framework that powers our WAF). This enables our security analysts and engineers to safely push updates to the rule in real-time, similar to how new WAF rule changes are rapidly delivered to ensure our customers are protected against the latest CVEs. If you haven’t logged back into the Bots dashboard since the previous version of our AI bot protection was announced, click the button again to update to the latest protection.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2tI8Yqxt1S0UPapImb32J4/6cb9e9bf423c370383edb820e5722929/BLOG-2564_5.png\&quot; alt=\&quot;BLOG-2564 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;522\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;the-impact-of-new-fingerprints-on-the-model\&quot;>The impact of new fingerprints on the model&nbsp;</h3>\n <a href=\&quot;#the-impact-of-new-fingerprints-on-the-model\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>One hidden beneficiary of fingerprinting new AI bots is our ML model. <a href=\&quot;https://blog.cloudflare.com/cloudflare-bot-management-machine-learning-and-more/\&quot;><u>As we’ve discussed before</u></a>, our global ML model uses supervised machine learning and greatly benefits from more sources of labeled bot data. Below, you can see how well our ML model recognized these requests as automated, before and after we updated the button, adding new rules. To keep things simple, we have shown only the top 5 bots by the volume of requests on the chart. With the introduction of our new managed rule, we have observed an improvement in our detection capabilities for the majority of these AI bots. Button v1 represents the old option that let customers block only verified AI crawlers, while Button v2 is the newly introduced feature that includes managed rule detections.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2CZVGyDCp9ZtMrZdIi49fE/aacd04d240e9348b5a9b65bad4b470e2/BLOG-2564_6.jpg\&quot; alt=\&quot;BLOG-2564 6\&quot; class=\&quot;kg-image\&quot; width=\&quot;1887\&quot; height=\&quot;1406\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>So how did we make our detections more robust? As we have mentioned before, sometimes <a href=\&quot;https://blog.cloudflare.com/cloudflare-bot-management-machine-learning-and-more/\&quot;><i><u>a single attribute can give a bot away</u></i></a>. We developed a sophisticated set of heuristics tailored to these AI bots, enabling us to effortlessly and accurately classify them as such. Although our ML model was already detecting the vast majority of these requests, the integration of additional heuristics has resulted in a noticeable increase in detection rates for each bot, and ensuring we score every request correctly 100% of the time. Transitioning from a purely machine learning approach to incorporating heuristics offers several advantages, including faster detection times and greater certainty in classification. While deploying a machine learning model is complex and time-consuming, new heuristics can be created in minutes.&nbsp;</p><p>The initial launch of the AI bots block button was well-received and is now used by over 133,000 websites, with significant adoption even among our Free tier customers. The newly updated button, launched on August 20, 2024, is rapidly gaining traction. Over 90,000 zones have already adopted the new rule, with approximately 240 new sites integrating it every hour. Overall, we are now helping to protect the intellectual property of more than 146,000 sites from AI bots, and we are currently blocking 66 million requests daily with this new rule. Additionally, we’re excited to announce that support for configuring AI bots protection via Terraform will be available by the end of this year, providing even more flexibility and control for managing your bot protection settings.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;bot-behavior\&quot;>Bot behavior</h3>\n <a href=\&quot;#bot-behavior\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With the enhancements to our detection capabilities, it is essential to assess the impact of these changes to bot activity on the Internet. Since the launch of the updated AI bots block button, we have been closely monitoring for any shifts in bot activity and adaptation strategies. The most basic fingerprinting technique we use to identify AI bot looking for simple user-agent matches. User-agent matches are important to monitor because they indicate the bot is transparently announcing who they are when they’re crawling a website.&nbsp;</p><p>The graph below shows a volume of traffic we label as AI bot over the past two months. The blue line indicates the daily request count, while the red line represents the monthly average number of requests. In the past two months, we have seen an average reduction of nearly 30 million requests, with a decrease of 40 million in the most recent month.This decline coincides with the release of Button v1 and Button v2. Our hypothesis is that with the new AI bots blocking feature, Cloudflare is blocking a majority of these bots, which is discouraging them from crawling.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/23ULxmxBIRskEONlWVIvlA/1dbd3d03239047492c2d4f7307217d97/BLOG-2564_7.jpg\&quot; alt=\&quot;BLOG-2564 7\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1048\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>This hypothesis is supported by the observed decline in requests from several top AI crawlers. Specifically, the Bytespider bot reduced its daily requests from approximately 100 million to just 50 million between the end of June and the end of August (see graph below). This reduction could be attributed to several factors, including our new AI bots block button and changes in the crawler&amp;#39;s strategy.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5UwtyZSXULrVzIqLcICGKd/fdf02c15d17e1d7ed248ba5f8a97eb54/BLOG-2564_8.jpg\&quot; alt=\&quot;BLOG-2564 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;993\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>We have also observed an increase in the accountability of some AI crawlers. The most basic fingerprinting technique we use to identify AI bot looking for simple user-agent matches. User-agent matches are important to monitor because they indicate the bot is transparently announcing who they are when they’re crawling a website. These crawlers are now more frequently using their agents, reflecting a shift towards more transparent and responsible behavior. Notably, there has been a dramatic surge in the number of requests from the Perplexity user agent. This increase might be linked to <a href=\&quot;https://rknight.me/blog/perplexity-ai-is-lying-about-its-user-agent/\&quot;>previous accusations<u> </u></a>that Perplexity did not properly present its user agent, which could have prompted a shift in their approach to ensure better identification and compliance. </p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7Hq2vUMqqdNCyaxNTCg3JD/610ad53d57203203c5176229245c8086/BLOG-2564_9.jpg\&quot; alt=\&quot;BLOG-2564 9\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;991\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>These trends suggest that our updates are likely affecting how AI crawlers interact with content. We will continue to monitor AI bot activity to help users control who accesses their content and how. By keeping a close watch on emerging patterns, we aim to provide users with the tools and insights needed to make informed decisions about managing their traffic.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;wrap-up\&quot;>Wrap up</h2>\n <a href=\&quot;#wrap-up\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We’re excited to continue to explore the AI landscape, whether we’re finding more ways to make the Cloudflare dashboard usable or new threats to guard against. Our AI insights on Radar update in near real-time, so please join us in watching as new trends emerge and discussing them in the <a href=\&quot;https://community.cloudflare.com/\&quot;><u>Cloudflare Community</u></a>.&nbsp;</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:04:47.650Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/32vnNHpfRqiOypOggowFgw/d075a178424e42324b9b7cb586a401f1/image3.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;267TTPMscUWABgYgHSH4ye&quot;],&quot;name&quot;:[0,&quot;Bot Management&quot;],&quot;slug&quot;:[0,&quot;bot-management&quot;]}],[0,{&quot;id&quot;:[0,&quot;4l3WDYLk6bXCyaRc9pRzXa&quot;],&quot;name&quot;:[0,&quot;Bots&quot;],&quot;slug&quot;:[0,&quot;bots&quot;]}],[0,{&quot;id&quot;:[0,&quot;3404RT2rd0b1M4ZCCIceXx&quot;],&quot;name&quot;:[0,&quot;AI Bots&quot;],&quot;slug&quot;:[0,&quot;ai-bots&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Foe3R8of95cWVnQwe5Toi&quot;],&quot;name&quot;:[0,&quot;AI&quot;],&quot;slug&quot;:[0,&quot;ai&quot;]}],[0,{&quot;id&quot;:[0,&quot;1HAYmR545ufVxM2rQzz0SE&quot;],&quot;name&quot;:[0,&quot;Machine Learning&quot;],&quot;slug&quot;:[0,&quot;machine-learning&quot;]}],[0,{&quot;id&quot;:[0,&quot;6pD9OvooldcqcJ8z8Y6QQ1&quot;],&quot;name&quot;:[0,&quot;Generative AI&quot;],&quot;slug&quot;:[0,&quot;generative-ai&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Mp7ouACN2rT3YjL1xaXJx&quot;],&quot;name&quot;:[0,&quot;Security&quot;],&quot;slug&quot;:[0,&quot;security&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;36Dg2NwTgUHhrlE0FRpSdJ&quot;],&quot;name&quot;:[0,&quot;Application Services&quot;],&quot;slug&quot;:[0,&quot;application-services&quot;]}],[0,{&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Adam Martinetti&quot;],&quot;slug&quot;:[0,&quot;adam-martinetti&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3sL65Jw7yfClw41pjnBfKp/75bfcc0615d0f01e0631ab0139900cd2/adam-martinetti.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@adamemcf&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Harsh Saxena&quot;],&quot;slug&quot;:[0,&quot;harsh-saxena&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1eEVnuAy0vFvqrA4DuCOyI/56dcd6d40b152672d6a5a3bedae2f623/Harsh_S.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Gauri Baraskar&quot;],&quot;slug&quot;:[0,&quot;gauri-baraskar&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1x0TXREl9zWwQIqwIEeLIK/0eaa91581ceae8a561596e2f29257250/Gauri_B.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Carlos Azevedo&quot;],&quot;slug&quot;:[0,&quot;carlos&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2xzs8tkcfue8Y8BHqsqwIV/f3210160c003f0a7da3baa3c51f90511/carlos.png&quot;],&quot;location&quot;:[0,&quot;Lisbon&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;David Belson&quot;],&quot;slug&quot;:[0,&quot;david-belson&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/en7vkXf6rLBm4F8IcNHXT/645022bf841fabff7732aa3be3949808/david-belson.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@dbelson&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;This year for Cloudflare’s birthday, we’ve extended our AI Assistant capabilities to help you build new WAF rules, added new AI bot &amp; crawler traffic insights to Radar, and given customers new AI bot blocking capabilities&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;AI Everywhere with the WAF Rule Builder Assistant, Cloudflare Radar AI Insights, and updated AI bot protection LOC&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/bringing-ai-to-cloudflare&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;AI Everywhere with the WAF Rule Builder Assistant, Cloudflare Radar AI Insights, and updated AI bot protection&quot;],&quot;description&quot;:[0,&quot;This year for Cloudflare’s birthday, we’ve extended our AI Assistant capabilities to help you build new WAF rules, added new AI bot &amp; crawler traffic insights to Radar, and given customers new AI bot blocking capabilities. &quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4wipGwjeGhBdS8jXcC3KTh/d0c08a22b6e93718e0b2d171adb845cb/AI_Everywhere_with_the_WAF_Rule_Builder_Assistant__Cloudflare_Radar_AI_Insights__and_updated_AI_bot_protection-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;5LrF3eCtonOcP2Sf5BSVpe&quot;],&quot;title&quot;:[0,&quot;Expanding Cloudflare's support for open source projects with Project Alexandria&quot;],&quot;slug&quot;:[0,&quot;expanding-our-support-for-oss-projects-with-project-alexandria&quot;],&quot;excerpt&quot;:[0,&quot;At Cloudflare, we believe in the power of open source. With Project Alexandria, our expanded open source program, we’re helping open source projects have a sustainable and scalable future, providing them with the tools and protection needed to thrive.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>At Cloudflare, we believe in the power of open source. It’s more than just code, it’s the spirit of collaboration, innovation, and shared knowledge that drives the Internet forward. Open source is the foundation upon which the Internet thrives, allowing developers and creators from around the world to contribute to a greater whole.</p><p>But oftentimes, open source maintainers struggle with the costs associated with running their projects and providing access to users all over the world. We’ve had the privilege of supporting incredible open source projects such as <a href=\&quot;https://git-scm.com/\&quot;><u>Git</u></a> and the <a href=\&quot;https://www.linuxfoundation.org/\&quot;><u>Linux Foundation</u></a> through our <a href=\&quot;https://blog.cloudflare.com/cloudflare-new-oss-sponsorships-program/\&quot;><u>open source program</u></a> and learned first-hand about the places where Cloudflare can help the most.</p><p>Today, we&amp;#39;re introducing a streamlined and expanded open source program: Project Alexandria. The ancient city of Alexandria is known for hosting a prolific library and a lighthouse that was one of the Seven Wonders of the Ancient World. The Lighthouse of Alexandria served as a beacon of culture and community, welcoming people from afar into the city. We think Alexandria is a great metaphor for the role open source projects play as a beacon for developers around the world and a source of knowledge that is core to making a better Internet.&nbsp;</p><p>This project offers recurring annual credits to even more open source projects to provide our products for free. In the past, we offered an upgrade to our Pro plan, but now we’re offering upgrades tailored to the size and needs of each project, along with access to a broader range of products like <a href=\&quot;https://workers.cloudflare.com/\&quot;><u>Workers</u></a>, <a href=\&quot;https://pages.cloudflare.com/\&quot;><u>Pages</u></a>, and more. Our goal with Project Alexandria is to ensure every OSS project not only survives but thrives, with access to Cloudflare’s enhanced security, performance optimization, and developer tools — all at no cost.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;building-a-program-based-on-your-needs\&quot;>Building a program based on your needs</h2>\n <a href=\&quot;#building-a-program-based-on-your-needs\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We realize that open source projects have different needs. Some projects, like package repositories, may be most concerned about storage and transfer costs. Other projects need help protecting them from DDoS attacks. And some projects need a robust developer platform to enable them to quickly build and deploy scalable and secure applications.</p><p>With our new program we’ll work with your project to help unlock the following based on your needs:</p><ul><li><p>An upgrade to a Cloudflare Pro, Business, or Enterprise plan, which will give you more flexibility with more <a href=\&quot;https://developers.cloudflare.com/rules/\&quot;><u>Cloudflare Rules</u></a> to manage traffic with, Image Optimization with <a href=\&quot;https://developers.cloudflare.com/images/polish/\&quot;><u>Polish</u></a> to accelerate the speed of image downloads, and enhanced security with <a href=\&quot;https://www.cloudflare.com/en-gb/application-services/products/waf/\&quot;><u>Web Application Firewall (WAF)</u></a>, <a href=\&quot;https://developers.cloudflare.com/waf/analytics/security-analytics/\&quot;><u>Security Analytics</u></a>, and <a href=\&quot;https://developers.cloudflare.com/page-shield/\&quot;><u>Page Shield</u></a>, to protect projects from potential threats and vulnerabilities.</p></li><li><p>Increased requests to Cloudflare <a href=\&quot;https://workers.cloudflare.com/\&quot;><u>Workers</u></a> and <a href=\&quot;https://pages.cloudflare.com/\&quot;><u>Pages</u></a>, allowing you to handle more traffic and scale your applications globally.</p></li><li><p>Increased <a href=\&quot;https://developers.cloudflare.com/r2/\&quot;><u>R2</u></a> storage for builds and artifacts, ensuring you have the space needed to store and access your project’s assets efficiently.</p></li><li><p>Enhanced <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/\&quot;><u>Zero Trust</u></a> access, including <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/policies/browser-isolation/\&quot;><u>Remote Browser Isolation</u></a>, no user limits, and extended activity log retention to give you deeper insights and more control over your project’s security.</p></li></ul><p>Every open source project in the program will receive additional resources and support through a dedicated <a href=\&quot;https://discord.com/channels/595317990191398933/1284158129474506802\&quot;><u>channel</u></a> on our <a href=\&quot;https://discord.cloudflare.com\&quot;><u>Discord server</u></a>. And if there’s something you think we can do to help that we don’t currently offer, we’re here to figure out how to make it happen.</p><p>Many open source projects run within the limits of Cloudflare’s generous <a href=\&quot;https://www.cloudflare.com/en-gb/plans/\&quot;><u>free tiers</u></a>. Our mission to help build a better Internet means that cost should not be a barrier to creating, securing, and distributing your open source packages globally, no matter the size of the project. Indie or niche open source projects can still run for free without the need for credits. For larger open source projects, the annual recurring credits are available to you, so your money can continue to be reinvested into innovation, instead of paying for infrastructure to store, secure, and deliver your packages and websites.&nbsp;</p><p>We’re dedicated to supporting projects that are not only innovative but also crucial to the continued growth and health of the internet. The criteria for the program remain the same:</p><ul><li><p>Operate solely on a non-profit basis and/or otherwise align with the project mission.</p></li><li><p>Be an open source project with a <a href=\&quot;https://opensource.org/licenses/\&quot;><u>recognized OSS license</u></a>.</p></li></ul><p>If you’re an open source project that meets these requirements, you can <a href=\&quot;https://www.cloudflare.com/lp/project-alexandria/\&quot;><u>apply for the program here</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;empowering-the-open-source-community\&quot;>Empowering the Open Source community</h2>\n <a href=\&quot;#empowering-the-open-source-community\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We’re incredibly lucky to have open source projects that we admire, and the incredible people behind those <a href=\&quot;https://developers.cloudflare.com/sponsorships/\&quot;><u>projects</u></a>, as part of our program — including the <a href=\&quot;https://openjsf.org/\&quot;><u>OpenJS Foundation</u></a>, <a href=\&quot;https://opentofu.org/\&quot;><u>OpenTofu</u></a>, and <a href=\&quot;https://julialang.org/\&quot;><u>JuliaLang</u></a>.</p><p><b>OpenJS Foundation</b></p><p><a href=\&quot;https://github.com/nodejs\&quot;><u>Node.js</u></a> has been part of our OSS Program since 2019, and we’ve recently partnered with the <a href=\&quot;https://openjsf.org/\&quot;><u>OpenJS Foundation</u></a> to provide technical support and infrastructure improvements to other critical JavaScript projects hosted at the foundation, including <a href=\&quot;https://github.com/fastify/fastify\&quot;><u>Fastify</u></a>, <a href=\&quot;https://github.com/jquery/jquery\&quot;><u>jQuery</u></a>, <a href=\&quot;https://github.com/electron/electron\&quot;><u>Electron</u></a>, and <a href=\&quot;https://github.com/NativeScript/NativeScript\&quot;><u>NativeScript</u></a>.</p><p>One prominent example of the<a href=\&quot;https://openjsf.org/\&quot;><u> OpenJS Foundation</u></a> using Cloudflare is the Node.js CDN Worker.&nbsp; It’s currently in active development by the Node.js Web Infrastructure and Build teams and aims to serve all Node.js release assets (binaries, documentations, etc.) provided on their website.&nbsp;</p><p><a href=\&quot;https://x.com/NodeConfEU/status/1823676122648715581\&quot;><u>Aaron Snell</u></a> explained that these release assets are currently being served by a single static origin file server fronted by Cloudflare. This worked fine up until a few years ago when issues began to pop up with new releases. With a new release came a cache purge, meaning that all the requests for the release assets were cache misses, causing Cloudflare to go forward directly to the static file server, overloading it. Because Node.js releases nightly builds, this issue occurs every day.</p><p>The CDN Worker plans to fix this by using Cloudflare Workers and R2 to serve requests for the release assets, taking all the load off the static file server, resulting in improved availability for Node.js downloads and documentation, and ultimately making the process more sustainable in the long run.</p><p><b>OpenTofu</b></p><p><a href=\&quot;https://github.com/opentofu/opentofu\&quot;><u>OpenTofu</u></a> has been focused on building a free and open alternative to proprietary infrastructure-as-code platforms. One of their major challenges has been ensuring the reliability and scalability of their registry while keeping costs low. Cloudflare&amp;#39;s <a href=\&quot;https://developers.cloudflare.com/r2/\&quot;><u>R2</u></a> storage and caching services provided the perfect fit, allowing <a href=\&quot;https://github.com/opentofu/opentofu\&quot;><u>OpenTofu</u></a> to serve static files at scale without worrying about bandwidth or performance bottlenecks.</p><p>The OpenTofu team noted that it was paramount for OpenTofu to keep the costs of running the registry as low as possible both in terms of bandwidth and also in human cost. However, they also needed to make sure that the registry had an uptime close to 100% since thousands upon thousands of developers would be left without a means to update their infrastructure if it went down.</p><p>The registry codebase (written in Go) pre-generates all possible answers of the OpenTofu Registry API and uploads the static files to an R2 bucket. With R2, OpenTofu has been able to run the registry essentially for free with no servers and scaling issues to worry about.</p><p><b>JuliaLang</b></p><p><a href=\&quot;https://github.com/JuliaLang/julia\&quot;><u>JuliaLang</u></a> has recently joined our OSS Sponsorship Program, and we’re excited to support their critical infrastructure to ensure the smooth operation of their ecosystem. A key aspect of this support is enabling the use of Cloudflare’s services to help <a href=\&quot;https://github.com/JuliaLang/julia\&quot;><u>JuliaLang</u></a> deliver packages to its user base.</p><p>According to <a href=\&quot;https://staticfloat.github.io/\&quot;><u>Elliot Saba</u></a>, JuliaLang had been using Amazon Lightsail as a cost-effective global CDN to serve packages to their user base. However, as their user base grew they would occasionally exceed their bandwidth limits and rack up serious cloud costs, not to mention experiencing degraded performance due to load balancer VMs getting overloaded by traffic spikes. Now JuliaLang is using Cloudflare <a href=\&quot;https://developers.cloudflare.com/r2/\&quot;><u>R2</u></a>, and the speed and reliability of R2 object storage has so far exceeded that of their own within-datacenter solutions, and the lack of bandwidth charges means JuliaLang is now getting faster, more reliable service for less than a tenth of their previous spend.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-can-we-help\&quot;>How can we help?</h2>\n <a href=\&quot;#how-can-we-help\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>If your project fits our criteria, and you’re looking to reduce costs and eliminate surprise bills, we invite you to apply! We’re eager to help the next generation of open source projects make their mark on the internet.</p><p>For more details and to apply, visit our new <a href=\&quot;https://www.cloudflare.com/lp/project-alexandria/\&quot;><u>Project Alexandria page</u></a>. And if you know other projects that could benefit from this program, please spread the word!</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-27T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-10T14:29:41.413Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6wgIGPJ07w9SfXaZTHQe4v/e553f2244b5726901b3eae72bb28ef5c/image1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;3txfsA7N73yBL9g3VPBLL0&quot;],&quot;name&quot;:[0,&quot;Open Source&quot;],&quot;slug&quot;:[0,&quot;open-source&quot;]}],[0,{&quot;id&quot;:[0,&quot;3Fo5JgRZ6Fh2HHzhEr7AKn&quot;],&quot;name&quot;:[0,&quot;Better Internet&quot;],&quot;slug&quot;:[0,&quot;better-internet&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Veronica Marin&quot;],&quot;slug&quot;:[0,&quot;veronica-marin&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3IDGPzZgmO090QJb7RP1By/d26846f1c5e42543d8c1c8a5108fda8b/veronica-marin.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Gabby Shires&quot;],&quot;slug&quot;:[0,&quot;gabby-shires&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/lP5NuQZrbE96SNIEn2OOm/5c4da49e489bdb048a46f1f022bb8cb2/unnamed.webp&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}]]],&quot;meta_description&quot;:[0,&quot;At Cloudflare, we believe in the power of open source. With Project Alexandria, our expanded open source program, we’re helping open source projects have a sustainable and scalable future, providing them with the tools and protection needed to thrive.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;BLOG-2515 LOC List - deDE frFR esES zhCN jaJP zhTW koKR&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;English for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;English for Locale&quot;],&quot;esLA&quot;:[0,&quot;English for Locale&quot;],&quot;esES&quot;:[0,&quot;Translated for Locale&quot;],&quot;enAU&quot;:[0,&quot;English for Locale&quot;],&quot;enCA&quot;:[0,&quot;English for Locale&quot;],&quot;enIN&quot;:[0,&quot;English for Locale&quot;],&quot;enGB&quot;:[0,&quot;English for Locale&quot;],&quot;idID&quot;:[0,&quot;English for Locale&quot;],&quot;ruRU&quot;:[0,&quot;English for Locale&quot;],&quot;svSE&quot;:[0,&quot;English for Locale&quot;],&quot;viVN&quot;:[0,&quot;English for Locale&quot;],&quot;plPL&quot;:[0,&quot;English for Locale&quot;],&quot;arAR&quot;:[0,&quot;English for Locale&quot;],&quot;nlNL&quot;:[0,&quot;English for Locale&quot;],&quot;thTH&quot;:[0,&quot;English for Locale&quot;],&quot;trTR&quot;:[0,&quot;English for Locale&quot;],&quot;heIL&quot;:[0,&quot;English for Locale&quot;],&quot;lvLV&quot;:[0,&quot;English for Locale&quot;],&quot;etEE&quot;:[0,&quot;English for Locale&quot;],&quot;ltLT&quot;:[0,&quot;English for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/expanding-our-support-for-oss-projects-with-project-alexandria&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Expanding Cloudflare’s support for open source projects with Project Alexandria&quot;],&quot;description&quot;:[0,&quot;At Cloudflare, we believe in the power of open source. With Project Alexandria, our expanded open source program, we’re helping open source projects have a sustainable and scalable future, providing them with the tools and protection needed to thrive.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5mVMH3mYUna1qsN8V8qdbD/b1e6696341523849480961404e109a22/Expanding_Cloudflare_s_support_for_open_source_projects_with_Project_Alexandria_-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;6ct91ZmJYzPu9n9pt8sNBm&quot;],&quot;title&quot;:[0,&quot;Builder Day 2024: 18 big updates to the Workers platform&quot;],&quot;slug&quot;:[0,&quot;builder-day-2024-announcements&quot;],&quot;excerpt&quot;:[0,&quot;To celebrate Builder Day 2024, we’re shipping 18 updates inspired by direct feedback from developers building on Cloudflare. This includes new capabilities, like running evals with AI Gateway, beta &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>To celebrate <a href=\&quot;https://builderday.pages.dev/\&quot;><u>Builder Day 2024</u></a>, we’re shipping 18 updates inspired by direct feedback from developers building on Cloudflare. Choosing a platform isn&amp;#39;t just about current technologies and services — it&amp;#39;s about betting on a partner that will evolve with your needs as your project grows and the tech landscape shifts. We’re in it for the long haul with you.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;watch-on-cloudflare-tv\&quot;>Watch on Cloudflare TV</h3>\n <a href=\&quot;#watch-on-cloudflare-tv\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;position: relative; padding-top: 56.25%;\&quot;>\n <iframe\n src=\&quot;https://customer-rhnwzxvb3mg4wz3v.cloudflarestream.com/f37bfe2e21799996f84c7ff4e498893d/iframe?preload=true&amp;poster=https%3A%2F%2Fcustomer-rhnwzxvb3mg4wz3v.cloudflarestream.com%2Ff37bfe2e21799996f84c7ff4e498893d%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D8s%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div><p><b>Starting today, you can:</b></p><ul><li><p><a href=\&quot;#logs-for-every-worker\&quot;>Persist logs from your Worker and query them directly on the Cloudflare dashboard</a></p></li><li><p><a href=\&quot;#connect-to-private-databases-from-workers\&quot;>Connect your Worker to private databases (isolated in VPCs) using Hyperdrive</a></p></li><li><p><a href=\&quot;#improved-node.js-compatibility-is-now-ga\&quot;>Use a wider set of NPM packages on Cloudflare Workers, via improved Node.js compatibility</a></p></li><li><p><a href=\&quot;#cloudflare-joins-opennext\&quot;>Deploy Next.js apps that use the Node.js runtime to Cloudflare, via OpenNext</a></p></li><li><p><a href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster/\&quot;>Run Evals with AI Gateway, now in Open Beta</a></p></li><li><p><a href=\&quot;https://blog.cloudflare.com/sqlite-in-durable-objects\&quot;>Read from and write to SQLite with zero-latency from every Durable Object</a></p></li></ul><p><b>We’ve brought key features from </b><a href=\&quot;https://blog.cloudflare.com/pages-and-workers-are-converging-into-one-experience/\&quot;><b><u>Pages to Workers</u></b></a><b>, allowing you to:&nbsp;</b></p><ul><li><p><a href=\&quot;#static-asset-hosting\&quot;>Upload and serve static assets as part of your Worker, and use popular frameworks with Workers</a></p></li><li><p><a href=\&quot;#continuous-integration-and-delivery\&quot;>Automatically build and deploy each pull request to your Worker’s git repository</a></p></li><li><p><a href=\&quot;#workers-preview-urls\&quot;>Get back a preview deployment URL for each version of your Worker</a></p></li></ul><p><b>Four things are going GA and are officially production-ready:</b></p><ul><li><p><a href=\&quot;#gradual-deployments\&quot;>Gradual Deployments</a>: Deploy changes to your Worker gradually, on a percentage basis of traffic</p></li><li><p><a href=\&quot;#queues-is-ga\&quot;>Cloudflare Queues</a><b>:</b> Now with much higher throughput and concurrency limits</p></li><li><p><a href=\&quot;#event-notifications-for-r2-is-now-ga\&quot;>R2 Event Notifications</a><b>:</b> Tightly integrated with Queues for event-driven applications</p></li><li><p><a href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster/\&quot;>Vectorize</a>: Globally distributed vector database, now faster, with larger indexes, and new pricing</p></li></ul><p><b>The Workers platform is getting faster:</b></p><ul><li><p><a href=\&quot;https://blog.cloudflare.com/faster-workers-kv\&quot;>We made Workers KV up to 3x faster.</a> Which makes serving static assets from Workers and Pages faster!</p></li><li><p><a href=\&quot;https://blog.cloudflare.com/making-workers-ai-faster/ \&quot;>Workers AI now has much faster Time-to-First-Token (TTFT)</a>, backed by more powerful GPUs</p></li></ul><p><b>And we’re lowering the cost of building on Cloudflare:</b></p><ul><li><p><a href=\&quot;#removing-serverless-microservices-tax\&quot;>Requests made through Service Bindings and to Tail Workers are now free</a></p></li><li><p><a href=\&quot;#image-optimization-free-for-everyone\&quot;>Cloudflare Images is introducing a free tier for everyone with a Cloudflare account</a></p></li><li><p>We’ve <a href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster\&quot;>simplified Workers AI pricing</a> to use industry standard units of measure</p></li></ul><p>Everything in this post is available for you to use today. Keep reading to learn more, and watch the <a href=\&quot;https://cloudflare.tv/event/builder-day-live-stream/xvm4qdgm\&quot;><u>Builder Day Live Stream</u></a> for demos and more.</p><h2 id=\&quot;logs-for-every-worker\&quot;>Persistent Logs for every Worker</h2><p>Starting today in open beta, you can automatically retain logs from your Worker, with full search, query, and filtering capabilities available directly within the Cloudflare dashboard. All newly created Workers will have this setting automatically enabled. This marks the first step in the development of our observability platform, following <a href=\&quot;https://blog.cloudflare.com/cloudflare-acquires-baselime-expands-observability-capabilities/\&quot;><u>Cloudflare’s acquisition of Baselime</u></a>.</p><p>Getting started is easy – just add two lines to your Worker’s wrangler.toml and redeploy:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>[observability]\nenabled = true\n</pre></code>\n <p>Workers Logs allow you to view all logs emitted from your Worker. When enabled, each <code>console.log</code> message, error, and exception is published as a separate event. Every Worker invocation (i.e. requests, alarms, rpc, etc.) also publishes an enriched execution log that contains invocation metadata. You can view logs in the <code>Logs</code> tab of your Worker in the dashboard, where you can filter on any event field, such as time, error code, message, or your own custom field.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3rPKtYlXEgN1u8utUuXxJR/c2fc4dcff2a7574d8ad9f92edbe867fe/image2.png\&quot; alt=\&quot;BLOG-2517 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1146\&quot; height=\&quot;681\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>If you’ve ever had to piece together the puzzle of unusual metrics, such as a spike in errors or latency, you know how frustrating it is to connect metrics to traces and logs that often live in independent data silos. Workers Logs is the first piece of a new observability platform we are building that helps you easily correlate telemetry data, and surfaces insights to help you <i>understand</i>. We’ll structure your telemetry data so you have the full context to ask the right questions, and can quickly and easily analyze the behavior of your applications. This is just the beginning for observability tools for Workers. We are already working on automatically emitting distributed traces from Workers, with real time errors and wide, high dimensionality events coming soon as well.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/XiRuQjqzVEld2eCIVVHPh/7c8938479e1f254699487dfe23caade4/Screenshot_2024-09-25_at_3.06.00_PM.png\&quot; alt=\&quot;BLOG-2517 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;661\&quot; height=\&quot;248\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Starting November 1, 2024, Workers Logs will cost $0.60 per million log lines written after the included volume, as shown in the table below. Querying your logs is free. This makes it easy to estimate and forecast your costs —&nbsp;we think you shouldn’t have to calculate the number of ‘Gigabytes Ingested’ to understand what you’ll pay.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-zuqc{background-color:#073763;text-align:left;vertical-align:top}\n.tg .tg-j6nv{background-color:#073763;color:#FFF;font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-zuqc\&quot;></th>\n <th class=\&quot;tg-j6nv\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#FFF;background-color:transparent\&quot;>Workers Free</span></th>\n <th class=\&quot;tg-j6nv\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#FFF;background-color:transparent\&quot;>Workers Paid</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Included Volume</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>200,000 logs per day</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>20,000,000 logs per month</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Additional Events</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>N/A</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>$0.60 per million logs</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Retention</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3 days</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>7 days</span></td>\n </tr>\n</tbody></table></div><p>Try out Workers Logs today. You can learn more from our <a href=\&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs/\&quot;><u>developer documentation</u></a>, and give us feedback directly in the #workers-observability channel on <a href=\&quot;https://discord.cloudflare.com/\&quot;><u>Discord</u></a>.</p><h2 id=\&quot;connect-to-private-databases-from-workers\&quot;>Connect to private databases from Workers</h2><p>Starting today, you can now use <a href=\&quot;https://developers.cloudflare.com/hyperdrive/\&quot;><u>Hyperdrive</u></a>, <a href=\&quot;https://www.cloudflare.com/en-ca/products/tunnel/\&quot;><u>Cloudflare Tunnels</u></a> and <a href=\&quot;https://www.cloudflare.com/zero-trust/products/access/\&quot;><u>Access</u></a> together to securely connect to databases that are isolated in a private network.&nbsp;</p><p><a href=\&quot;https://developers.cloudflare.com/hyperdrive/\&quot;><u>Hyperdrive</u></a> enables you to build on Workers with your existing regional databases. It accelerates database queries using Cloudflare’s network, caching data close to end users and pooling connections close to the database. But there’s been a major blocker preventing you from building with Hyperdrive: network isolation.</p><p>The majority of databases today aren’t publicly accessible on the Internet. Data is highly sensitive and placing databases within private networks like a <a href=\&quot;https://www.cloudflare.com/learning/cloud/what-is-a-virtual-private-cloud/\&quot;><u>virtual private cloud (VPC)</u></a> keeps data secure. But to date, that has also meant that your data is held captive within your cloud provider, preventing you from building on Workers.&nbsp;</p><p>Today, we’re enabling Hyperdrive to <a href=\&quot;https://developers.cloudflare.com/hyperdrive/configuration/connect-to-private-database/\&quot;><u>securely connect to private databases</u></a> using <a href=\&quot;https://www.cloudflare.com/en-ca/products/tunnel/\&quot;><u>Cloudflare Tunnels</u></a> and <a href=\&quot;https://www.cloudflare.com/zero-trust/products/access/\&quot;><u>Cloudflare Access</u></a>. With a Cloudflare Tunnel running in your private network, Hyperdrive can securely connect to your database and start speeding up your queries.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ozsfXdsWFJlfRhhulMClT/61ec772a843880370e81eeec190000fa/BLOG-2517_4.png\&quot; alt=\&quot;BLOG-2517 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;1924\&quot; height=\&quot;1040\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>With this update, Hyperdrive makes it possible for you to build full-stack applications on Workers with your existing databases, network-isolated or not. Whether you’re using <a href=\&quot;https://developers.cloudflare.com/hyperdrive/examples/aws-rds-aurora/\&quot;><u>Amazon RDS</u></a>, <a href=\&quot;https://developers.cloudflare.com/hyperdrive/examples/aws-rds-aurora/\&quot;><u>Amazon Aurora</u></a>, <a href=\&quot;https://developers.cloudflare.com/hyperdrive/examples/google-cloud-sql/\&quot;><u>Google Cloud SQL</u></a>, <a href=\&quot;https://azure.microsoft.com/en-gb/products/category/databases\&quot;><u>Azure Database</u></a>, or any other provider, Hyperdrive can connect to your databases and optimize your database connections to provide the fast performance you’ve come to expect with building on Workers.</p><h2 id=\&quot;improved-node.js-compatibility-is-now-ga\&quot;>Improved Node.js compatibility is now GA</h2><p>Earlier this month, we <a href=\&quot;https://blog.cloudflare.com/more-npm-packages-on-cloudflare-workers-combining-polyfills-and-native-code/\&quot;><u>overhauled our support for Node.js APIs in the Workers runtime</u></a>. With <a href=\&quot;https://workers-nodejs-compat-matrix.pages.dev/\&quot;><u>twice as many Node APIs</u></a> now supported on Workers, you can now use a wider set of NPM packages to build a broader range of applications. Today, we’re happy to announce that improved Node.js compatibility is GA.</p><p>To give it a try, enable the nodejs_compat compatibility flag, and set your compatibility date to on or after 2024-09-23:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>compatibility_flags = [&amp;quot;nodejs_compat&amp;quot;]\ncompatibility_date = &amp;quot;2024-09-23&amp;quot;\n</pre></code>\n <p>Read the <a href=\&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/\&quot;><u>developer documentation</u></a> to learn more about how to opt-in your Workers to try it today. If you encounter any bugs or want to report feedback, <a href=\&quot;https://github.com/cloudflare/workers-sdk/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug-template.yaml&amp;title=%F0%9F%90%9B+BUG%3A\&quot;><u>open an issue</u></a>.</p><h2 id=\&quot;static-asset-hosting\&quot;>Build frontend applications on Workers with Static Asset Hosting</h2><p>Starting today in open beta, you now can upload and serve HTML, CSS, and client-side JavaScript directly as part of your Worker. This means you can build dynamic, server-side rendered applications on Workers using popular frameworks such as Astro, Remix, Next.js and Svelte (full list <a href=\&quot;https://developers.cloudflare.com/workers/frameworks\&quot;><u>here</u></a>), with more coming soon.</p><p>You can now deploy applications to Workers that previously could only be deployed to Cloudflare Pages and use features that are not yet supported in Pages, including <a href=\&quot;https://developers.cloudflare.com/workers/observability/logging/logpush/\&quot;><u>Logpush</u></a>, <a href=\&quot;https://developers.cloudflare.com/hyperdrive/#_top\&quot;><u>Hyperdrive</u></a>, <a href=\&quot;https://developers.cloudflare.com/workers/configuration/cron-triggers/\&quot;><u>Cron Triggers</u></a>, <a href=\&quot;https://developers.cloudflare.com/queues/configuration/configure-queues/#consumer\&quot;><u>Queue Consumers</u></a>, and <a href=\&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/\&quot;><u>Gradual Deployments</u></a>.&nbsp;</p><p>To get started, create a new project with <a href=\&quot;https://developers.cloudflare.com/workers/frameworks\&quot;><u>create-cloudflare</u></a>. For example, to create a new Astro project: &nbsp;</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>npm create cloudflare@latest -- my-astro-app --framework=astro --experimental\n</pre></code>\n <p>Visit our <a href=\&quot;https://developers.cloudflare.com/workers/static-assets/\&quot;><u>developer documentation</u></a> to learn more about setting up a new front-end application on Workers and watch a <a href=\&quot;https://youtu.be/W45MIi_t_go\&quot;><u>quick demo</u></a> to learn about how you can deploy an existing application to Workers. Static assets aren’t just for Workers written in JavaScript! You can serve static assets from <a href=\&quot;https://developers.cloudflare.com/workers/languages/python/\&quot;><u>Workers written in Python</u></a> or even <a href=\&quot;https://github.com/cloudflare/workers-rs/tree/main/templates/leptos/README.md\&quot;><u>deploy a Leptos app using workers-rs</u></a>.</p><p>If you’re wondering “<i>What about Pages?” </i>— rest assured, Pages will remain fully supported. We’ve heard from developers that as we’ve added new features to Workers and Pages, the choice of which product to use has become challenging. We’re closing this gap by bringing asset hosting, CI/CD and Preview URLs to Workers this Birthday Week.</p><p>To make the upfront choice Cloudflare Workers and Pages more transparent, we’ve created a <a href=\&quot;https://developers.cloudflare.com/workers/static-assets/compatibility-matrix/\&quot;><u>compatibility matrix</u></a>. Looking ahead, we plan to bridge the remaining gaps between Workers and Pages and provide ways to migrate your Pages projects to Workers.</p><h2 id=\&quot;cloudflare-joins-opennext\&quot;>Cloudflare joins OpenNext to deploy Next.js apps to Workers</h2><p>Starting today, as an early developer preview, you can use <a href=\&quot;https://opennext.js.org//cloudflare\&quot;><u>OpenNext</u></a> to deploy Next.js apps to Cloudflare Workers via <a href=\&quot;https://npmjs.org/@opennextjs/cloudflare\&quot;><u>@opennextjs/cloudflare</u></a>, a new npm package that lets you use the <a href=\&quot;https://nextjs.org/docs/app/building-your-application/rendering/edge-and-nodejs-runtimes\&quot;><u>Node.js “runtime” in Next.js</u></a> on Workers.</p><p>This new adapter is powered by our <a href=\&quot;https://blog.cloudflare.com/more-npm-packages-on-cloudflare-workers-combining-polyfills-and-native-code/\&quot;><u>new Node.js compatibility layer</u></a>, newly introduced <a href=\&quot;#static-asset-hosting\&quot;><u>Static Assets for Workers</u></a>, and Workers KV, which is <a href=\&quot;https://blog.cloudflare.com/faster-workers-kv\&quot;><u>now up to 3x faster</u></a>. It unlocks support for <a href=\&quot;https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration\&quot;><u>Incremental Static Regeneration (ISR)</u></a>, <a href=\&quot;https://nextjs.org/docs/pages/building-your-application/routing/custom-error\&quot;><u>custom error pages</u></a>, and other Next.js features that our previous adapter, <a href=\&quot;https://developers.cloudflare.com/pages/framework-guides/nextjs/ssr/get-started/\&quot;><u>@cloudflare/next-on-pages</u></a>, could not support, as it was only compatible with the Edge “runtime” in Next.js.</p><p><a href=\&quot;https://blog.cloudflare.com/aws-egregious-egress/\&quot;><u>Cloud providers shouldn’t lock you in</u></a>. Like cloud compute and storage, open source frameworks should be portable —&nbsp;you should be able to deploy them to different cloud providers. The goal of the OpenNext project is to make sure you can deploy Next.js apps to any cloud platform, originally to AWS, and now Cloudflare. We’re excited to contribute to the OpenNext community, and give developers the freedom to run on the cloud that fits their applications needs (and <a href=\&quot;https://blog.cloudflare.com/workers-pricing-scale-to-zero/\&quot;><u>budget</u></a>) best.</p><p>To get started by reading the <a href=\&quot;https://opennext.js.org//cloudflare/get-started\&quot;><u>OpenNext docs</u></a>, which provide examples and a guide on how to add <a href=\&quot;https://npmjs.org/@opennextjs/cloudflare\&quot;><u>@opennextjs/cloudflare</u></a> to your Next.js app.</p><p>We want your feedback! Report issues and contribute code at <a href=\&quot;https://github.com/opennextjs/opennextjs-cloudflare/\&quot;><u>opennextjs/opennextjs-cloudflare on GitHub</u></a>, and join the discussion on the <a href=\&quot;https://discord.gg/WUNsBM69\&quot;><u>OpenNext Discord</u></a>.</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>npm create cloudflare@latest -- my-next-app --framework=next --experimental\n</pre></code>\n <h2 id=\&quot;continuous-integration-and-delivery\&quot;>Continuous Integration &amp; Delivery (CI/CD) with Workers Builds</h2><p>Now in open beta, you can connect a GitHub or GitLab repository to a Worker, and Cloudflare will automatically build and deploy your changes each time you push a commit. Workers Builds provides an integrated CI/CD workflow you can use to build and deploy everything from full-stack applications built with the most popular frameworks to simple static websites. Just add your build command and let Workers Builds take care of the rest.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1K9izEbBxIlA0nXbNKJ1Od/55ecf9e56ecbc33aeb88df7ede1afddc/BLOG-2517_5.png\&quot; alt=\&quot;BLOG-2517 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;923\&quot; height=\&quot;203\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>While in open beta, Workers Builds is free to use, with a limit of one concurrent build per account, and unlimited build minutes per month. Once Workers Builds is Generally Available in early 2025, you will be billed based on the number of build minutes you use each month, and have a higher number of concurrent builds.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top}\n.tg .tg-39zh{background-color:#010066;text-align:left;vertical-align:top}\n.tg .tg-dmxg{background-color:#010066;color:#FFF;font-weight:bold;text-align:left;vertical-align:top}\n.tg .tg-0lax{text-align:left;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-39zh\&quot;></th>\n <th class=\&quot;tg-dmxg\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#FFF\&quot;>Workers Free</span></th>\n <th class=\&quot;tg-dmxg\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#FFF\&quot;>Workers Paid</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Build minutes, </span><span style=\&quot;font-weight:700;font-style:italic;text-decoration:none;color:#F90;background-color:transparent\&quot;>open beta</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Unlimited</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Unlimited</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Concurrent builds, </span><span style=\&quot;font-weight:700;font-style:italic;text-decoration:none;color:#F90;background-color:transparent\&quot;>open beta</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Build minutes, </span><span style=\&quot;font-weight:700;font-style:italic;text-decoration:none;color:#F90;background-color:transparent\&quot;>general availability</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3,000 minutes included per month</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>6,000 minutes included per month </span><br><span style=\&quot;font-weight:400;font-style:italic;text-decoration:none;color:#6AA84F;background-color:transparent\&quot;>+$0.005 per additional build minute</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Concurrent builds, </span><span style=\&quot;font-weight:700;font-style:italic;text-decoration:none;color:#F90;background-color:transparent\&quot;>general availability</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>6</span></td>\n </tr>\n</tbody></table></div><p><a href=\&quot;https://developers.cloudflare.com/workers/ci-cd/builds/\&quot;><u>Read the docs</u></a> to learn more about how to deploy your first project with Workers Builds.</p><h2 id=\&quot;workers-preview-urls\&quot;>Workers preview URLs</h2><p>Each newly uploaded version of a Worker now automatically generates a preview URL. Preview URLs make it easier for you to collaborate with your team during development, and can be used to test and identify issues in a preview environment before they are deployed to production.</p><p>When you upload a version of your Worker via the Wrangler CLI, Wrangler will display the preview URL once your upload succeeds. You can also find preview URLs for each version of your Worker in the Cloudflare dashboard:</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/29iDm0x8QQex5ryatk23e1/ecfdba5b98b6e0c22350087a6035442d/BLOG-2517_6.png\&quot; alt=\&quot;BLOG-2517 6\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;477\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Preview URLs for Workers are similar to Pages <a href=\&quot;https://developers.cloudflare.com/pages/configuration/preview-deployments/\&quot;><u>preview deployments</u></a> — they run on your Worker’s <code>workers.dev</code> subdomain and allow you to view changes applied on a new version of your application before the changes are deployed.</p><p>Learn more about preview URLs by visiting our <a href=\&quot;https://developers.cloudflare.com/workers/configuration/previews\&quot;><u>developer documentation</u></a>.&nbsp;</p><h2 id=\&quot;gradual-deployments\&quot;>Safely release to production with Gradual Deployments</h2><p>At Developer Week, we launched <a href=\&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/gradual-deployments/#_top\&quot;><u>Gradual Deployments</u></a> for Workers and Durable Objects to make it safer and easier to deploy changes to your applications. Gradual Deployments is now GA —&nbsp;we have been using it ourselves at Cloudflare for mission-critical services built on Workers since early 2024.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2FOHnaYqTyhuJRZVdERWdh/52df3d29622ccca9118d1cb49de19ae8/BLOG-2517_7.png\&quot; alt=\&quot;BLOG-2517 7\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;997\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Gradual deployments can help you stay on top of availability SLAs and minimize application downtime by surfacing issues early. Internally at Cloudflare, every single service built on Workers uses gradual deployments to roll out new changes. Each new version gets released in stages —– 0.05%, 0.5%, 3%, 10%, 25%, 50%, 75% and 100% with time to soak between each stage. Throughout the roll-out, we keep an eye on metrics (which are often instrumented with <a href=\&quot;https://developers.cloudflare.com/analytics/analytics-engine/\&quot;><u>Workers Analytics Engine</u></a>!) and we <a href=\&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/rollbacks/\&quot;><u>roll back</u></a> if we encounter issues.&nbsp;</p><p>Using gradual deployments is as simple as swapping out the <a href=\&quot;https://developers.cloudflare.com/workers/wrangler/commands/#versions\&quot;><u>wrangler commands</u></a>, <a href=\&quot;https://developers.cloudflare.com/api/operations/worker-versions-upload-version\&quot;><u>API endpoints</u></a>, and/or using “Save version” in the code editor that is built into the Workers dashboard. Read the <a href=\&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/\&quot;><u>developer documentation</u></a> to learn more and get started.&nbsp;</p><h2 id=\&quot;queues-is-ga\&quot;>Queues is GA, with higher throughput and concurrency limits</h2><p><a href=\&quot;https://developers.cloudflare.com/queues/\&quot;><u>Cloudflare Queues</u></a> is now generally available with higher limits.&nbsp;</p><p>Queues let a developer decouple their Workers into event driven services. <i>Producer </i>Workers write events to a Queue, and <i>consumer </i>Workers are invoked to take actions on the events. For example, you can use a Queue to decouple an e-commerce website from a service which sends purchase confirmation emails to users.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3cpkxgIQSYLrwbfhDSL2A5/97818131c1f4f7d2e8b8d76dcc8c7f9a/BLOG-2517_8.png\&quot; alt=\&quot;BLOG-2517 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1200\&quot; height=\&quot;429\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Throughput and concurrency limits for Queues are now significantly higher, which means you can push more messages through a Queue, and consume them faster.</p><ul><li><p><b>Throughput:</b> Each queue can now process 5000 messages per second (previously 400 per second).</p></li><li><p><b>Concurrency:</b> Each queue can now have up to 250 <a href=\&quot;https://developers.cloudflare.com/queues/configuration/consumer-concurrency/\&quot;><u>concurrent consumers</u></a> (previously 20 concurrent consumers).&nbsp;</p></li></ul><p>Since we <a href=\&quot;https://blog.cloudflare.com/introducing-cloudflare-queues/\&quot;><u>announced Queues in beta</u></a>, we’ve added the following functionality:</p><ul><li><p><a href=\&quot;https://developers.cloudflare.com/queues/configuration/batching-retries/#batching\&quot;><u>Batch sizes can be customized</u></a>, to reduce the number of consumer Worker invocations and thus reduce cost.</p></li><li><p><a href=\&quot;https://developers.cloudflare.com/queues/configuration/batching-retries/#delay-messages\&quot;><u>Individual messages can be delayed</u></a>, so you can back off due to external API rate limits.</p></li><li><p><a href=\&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers/\&quot;><u>HTTP Pull consumers</u></a> allow messages to be consumed outside Workers, with zero data egress costs.</p></li></ul><p>Queues can be used by any developer on a Workers Paid plan. Head over to our <a href=\&quot;https://developers.cloudflare.com/queues/get-started/\&quot;><u>getting started</u><i><u> </u></i><u>guide</u></a> to start building with Queues.</p><h2 id=\&quot;event-notifications-for-r2-is-now-ga\&quot;>Event notifications for R2 is now GA</h2><p>We’re excited to announce that event notifications for R2 is now generally available. Whether it’s kicking off image processing after a user uploads a file or triggering a sync to an external data warehouse when new analytics data is generated, many applications need to be able to reliably respond when events happen. <a href=\&quot;https://blog.cloudflare.com/r2-events-gcs-migration-infrequent-access/#event-notifications-open-beta\&quot;><u>Event notifications</u></a> for <a href=\&quot;https://developers.cloudflare.com/r2/\&quot;><u>Cloudflare R2</u></a> give you the ability to build event-driven applications and workflows that react to changes in your data.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/73t1PtQg576iv7m95HHjGL/26cd028004f5b669e41a89a7265c5a14/BLOG-2517_9.png\&quot; alt=\&quot;BLOG-2517 9\&quot; class=\&quot;kg-image\&quot; width=\&quot;1200\&quot; height=\&quot;384\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Here’s how it works: When data in your R2 bucket changes, event notifications are sent to your queue. You can consume these notifications with a <a href=\&quot;https://developers.cloudflare.com/queues/reference/how-queues-works/#create-a-consumer-worker\&quot;><u>consumer Worker </u></a>or <a href=\&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers/\&quot;><u>pull them over HTTP</u></a> from outside of Cloudflare Workers.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4NSN5r40rmXy0FMGOKvdAd/7d0c0637ccc478881528339304942948/BLOG-2517_10.png\&quot; alt=\&quot;BLOG-2517 10\&quot; class=\&quot;kg-image\&quot; width=\&quot;1756\&quot; height=\&quot;1378\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Since we introduced event notifications in <a href=\&quot;https://blog.cloudflare.com/r2-events-gcs-migration-infrequent-access/#event-notifications-open-beta\&quot;><u>open beta</u></a> earlier this year, we’ve made significant improvements based on your feedback:</p><ul><li><p>We increased reliability of event notifications with throughput improvements from Queues. R2 event notifications can now scale to thousands of writes per second.</p></li><li><p>You can now configure event notifications directly from the Cloudflare dashboard (in addition to <a href=\&quot;https://developers.cloudflare.com/workers/wrangler/commands/#notification-create\&quot;><u>Wrangler</u></a>).</p></li><li><p>There is now support for receiving notifications triggered by <a href=\&quot;https://developers.cloudflare.com/r2/buckets/object-lifecycles/\&quot;><u>object lifecycle deletes</u></a>.</p></li><li><p>You can now set up multiple notification rules for a single queue on a bucket.</p></li></ul><p>Visit <a href=\&quot;https://developers.cloudflare.com/r2/buckets/event-notifications/\&quot;><u>our documentation</u></a> to learn about how to set up event notifications for your R2 buckets.</p><h2 id=\&quot;removing-serverless-microservices-tax\&quot;>Removing the serverless microservices tax: No more request fees for Service Bindings and Tail Workers</h2><p>Earlier this year, we quietly changed Workers pricing to lower your costs. As of July 2024, you are no longer charged for requests between Workers on your account made via <a href=\&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/\&quot;><u>Service Bindings</u></a>, or for invocations of <a href=\&quot;https://developers.cloudflare.com/workers/observability/logging/tail-workers/\&quot;><u>Tail Workers.</u></a> For example, let’s say you have the following chain of Workers: </p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1PTgWu9XiGJNoWrHTduQdB/84e1f6ee0788f99684440a9db7b4e6c1/BLOG-2517_11.png\&quot; alt=\&quot;Diagram of Workers using Service Bindings and a Tail Worker\&quot; class=\&quot;kg-image\&quot; width=\&quot;1402\&quot; height=\&quot;628\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Each request from a client results in three Workers invocations. Previously, we charged you for each of these invocations, plus the CPU time for each of these Workers. With this change, we only charge you for the first request from the client, plus the CPU time used by each Worker.</p><p>This eliminates the additional cost of breaking a monolithic serverless app into microservices. In 2023, we introduced new <a href=\&quot;https://blog.cloudflare.com/workers-pricing-scale-to-zero/\&quot;><u>pricing based on CPU time</u></a>, rather than duration, so you don’t have to worry about being billed for time spent waiting on I/O. This includes I/O to other Workers. With this change, you’re only billed for the first request in the chain, eliminating the other additional cost of using multiple Workers.</p><p>When you build microservices on Workers, you face fewer trade offs than on other compute platforms. Service bindings have <a href=\&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/\&quot;><u>zero network overhead</u></a> by default, a built-in <a href=\&quot;https://blog.cloudflare.com/javascript-native-rpc/\&quot;><u>JavaScript RPC system</u></a>, and a security model with <a href=\&quot;https://blog.cloudflare.com/workers-environment-live-object-bindings/\&quot;><u>fewer footguns and simpler configuration</u></a>. We’re excited to improve this further with this pricing change.</p><h2 id=\&quot;image-optimization-free-for-everyone\&quot;>Image optimization is available to everyone for free — no subscription needed</h2><p>Starting today, you can use <a href=\&quot;https://developers.cloudflare.com/images/transform-images/transform-via-url/\&quot;><u>Cloudflare Images</u></a> for free to optimize your images with up to 5,000 transformations per month.</p><p>Large, oversized images can throttle your application speed and page load times. We built <a href=\&quot;https://developers.cloudflare.com/images/\&quot;><u>Cloudflare Images</u></a> to let you dynamically optimize images in the correct dimensions and formats for each use case, all while storing only the original image.</p><p>In the spirit of Birthday Week, we’re making image optimization available to everyone with a Cloudflare account, no subscription needed. You’ll be able to use Images to transform images that are stored outside of Images, such as in R2.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/49UPZRpeAp79qugqstqbT7/5e23fb4c7a458f5d00b401383bd6e777/BLOG-2517_12.png\&quot; alt=\&quot;BLOG-2517 12\&quot; class=\&quot;kg-image\&quot; width=\&quot;1200\&quot; height=\&quot;370\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Transformations are served from your zone through a specially formatted URL with parameters that specify how an image should be optimized. For example, the transformation URL below uses the <code>format</code> parameter to automatically serve the image in the most optimal format for the requesting browser:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>https://example.com/cdn-cgi/image/format=auto/thumbnail.png</pre></code>\n <p>This means that the original PNG image may be served as AVIF to one user and WebP to another. Without a subscription, transforming images from remote sources is free up to 5,000 unique transformations per month. Once you exceed this limit, any already cached transformations will continue to be served, but you’ll need a <a href=\&quot;https://dash.cloudflare.com/?to=/:account/images\&quot;><u>paid Images plan</u></a> to request new transformations or to purchase storage within Images.</p><p>To get started, navigate to <a href=\&quot;https://dash.cloudflare.com/?to=/:account/images\&quot;><u>Images in the dashboard</u></a> to enable transformations on your zone.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;dive-deep-into-more-announcements-from-builder-day\&quot;>Dive deep into more announcements from Builder Day</h2>\n <a href=\&quot;#dive-deep-into-more-announcements-from-builder-day\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We shipped so much that we couldn’t possibly fit it all in one blog post. These posts dive into the technical details of what we’re announcing at Builder Day:</p><ul><li><p><a href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster\&quot;><u>Cloudflare’s Bigger, Better, Faster AI platform</u></a></p></li><li><p><a href=\&quot;https://blog.cloudflare.com/making-workers-ai-faster\&quot;><u>Making Workers AI faster with KV cache compression, speculative decoding, and upgraded hardware</u></a></p></li><li><p><a href=\&quot;https://blog.cloudflare.com/faster-workers-kv\&quot;><u>We made Workers KV up to 3x faster — here’s the data</u></a></p></li><li><p><a href=\&quot;https://blog.cloudflare.com/sqlite-in-durable-objects\&quot;><u>Zero-latency SQLite storage in every Durable Object</u></a></p></li></ul>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;build-the-next-big-thing-on-cloudflare\&quot;>Build the next big thing on Cloudflare</h2>\n <a href=\&quot;#build-the-next-big-thing-on-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare is for builders,&nbsp;and everything we’re announcing at Builder Day, you can start building with right away. We’re now offering <a href=\&quot;http://blog.cloudflare.com/startup-program-250k-credits\&quot;><u>$250,000 in credits to use on our Developer Platform to qualified startups</u></a>, so that you can get going even faster, and become the next company to reach hypergrowth scale with a small team, and not waste time provisioning infrastructure and doing undifferentiated heavy lifting. Focus on shipping, and we’ll take care of the rest.</p><p>Apply to the startup program <a href=\&quot;https://www.cloudflare.com/forstartups/\&quot;><u>here</u></a>, or stop by and say hello in the <a href=\&quot;https://discord.cloudflare.com/\&quot;><u>Cloudflare Developers Discord</u></a>.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00-07:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:05:25.673Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ykhqWHB5a5uSWg1MqRXxQ/0338bdc893389962ca7d56d7620db31b/BLOG-2517_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}],[0,{&quot;id&quot;:[0,&quot;7JpaihvGGjNhG2v4nTxeFV&quot;],&quot;name&quot;:[0,&quot;R2 Storage&quot;],&quot;slug&quot;:[0,&quot;cloudflare-r2&quot;]}],[0,{&quot;id&quot;:[0,&quot;5LsABrpgAC1MKuVeegqTvS&quot;],&quot;name&quot;:[0,&quot;Queues&quot;],&quot;slug&quot;:[0,&quot;queues&quot;]}],[0,{&quot;id&quot;:[0,&quot;5rBdsRv4kKPXGL1ECAZu9a&quot;],&quot;name&quot;:[0,&quot;Cloudflare Images&quot;],&quot;slug&quot;:[0,&quot;cloudflare-images&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Tanushree Sharma&quot;],&quot;slug&quot;:[0,&quot;tanushree&quot;],&quot;bio&quot;:[0,&quot;Product Manager, Cloudflare Workers&quot;],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/77c5gQJtSO9WoLGws7OZef/e429d24838ca9eaa433be9015e69d938/tanushree.jpg&quot;],&quot;location&quot;:[0,&quot;Austin&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@_tanushreeeee&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Rohin Lohe&quot;],&quot;slug&quot;:[0,&quot;rohin&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4vCBepc4EU7EHnLJW3oIUq/c5fff23d4de1d78b58f16c4679c0f333/rohin.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Anni Wang&quot;],&quot;slug&quot;:[0,&quot;anni&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3RnKI54hxLOIRs0QBSZgxa/e71b8f7a5ccadb45dd553c69f8ffe539/anni.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,&quot;https://www.linkedin.com/in/a248wang/&quot;],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Nevi Shah&quot;],&quot;slug&quot;:[0,&quot;nevi&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2WVp9J8BoRJaBMR7crkqWH/f7814ed0df05b50babb47c6ff5b936e5/nevi.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@nevikashah&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;To celebrate Builder Day 2024, we’re shipping 18 updates inspired by direct feedback from developers building on Cloudflare. This includes new capabilities, like running evals with AI Gateway, beta products like Queues and Vectorize graduating to GA, massive speed improvements to KV and Workers AI, pricing simplifications, and bringing key features from Pages into Workers.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/builder-day-2024-announcements&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Builder Day 2024: 18 big updates to the Workers platform&quot;],&quot;description&quot;:[0,&quot;To celebrate Builder Day 2024, we’re shipping 18 updates inspired by direct feedback from developers building on Cloudflare. This includes new capabilities, like running evals with AI Gateway, beta products like Queues and Vectorize graduating to GA, massive speed improvements to KV and Workers AI, pricing simplifications, and bringing key features from Pages into Workers.\n&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3iSS8tIBJ0kxNe8Spg7Qbc/27df74c976e1669e2171782b6b08dc4f/BLOG-2517_OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;2lS9TcgZHa1fubO371mYiv&quot;],&quot;title&quot;:[0,&quot;Cloudflare’s bigger, better, faster AI platform&quot;],&quot;slug&quot;:[0,&quot;workers-ai-bigger-better-faster&quot;],&quot;excerpt&quot;:[0,&quot;Whether you want the fastest inference at the edge, optimized AI workflows, or vector database-powered RAG, we’re excited to help you harness the full potential of AI and get started on building with Cloudflare.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Birthday Week 2024 marks our first anniversary of Cloudflare’s AI developer products — <a href=\&quot;https://blog.cloudflare.com/workers-ai/\&quot;><u>Workers AI</u></a>, <a href=\&quot;https://blog.cloudflare.com/announcing-ai-gateway/\&quot;><u>AI Gateway</u></a>, and <a href=\&quot;https://blog.cloudflare.com/vectorize-vector-database-open-beta/\&quot;><u>Vectorize</u></a>. For our first birthday this year, we’re excited to announce powerful new features to elevate the way you build with AI on Cloudflare.</p><p>Workers AI is getting a big upgrade, with more powerful GPUs that enable faster inference and bigger models. We’re also expanding our model catalog to be able to dynamically support models that you want to run on us. Finally, we’re saying goodbye to neurons and revamping our pricing model to be simpler and cheaper. On AI Gateway, we’re moving forward on our vision of becoming an ML Ops platform by introducing more powerful logs and human evaluations. Lastly, Vectorize is going GA, with expanded index sizes and faster queries.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;watch-on-cloudflare-tv\&quot;>Watch on Cloudflare TV</h3>\n <a href=\&quot;#watch-on-cloudflare-tv\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;position: relative; padding-top: 56.25%;\&quot;>\n <iframe\n src=\&quot;https://customer-rhnwzxvb3mg4wz3v.cloudflarestream.com/f37bfe2e21799996f84c7ff4e498893d/iframe?preload=true&amp;poster=https%3A%2F%2Fcustomer-rhnwzxvb3mg4wz3v.cloudflarestream.com%2Ff37bfe2e21799996f84c7ff4e498893d%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D8s%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div><p>Whether you want the fastest inference at the edge, optimized AI workflows, or vector database-powered <a href=\&quot;https://blogs.nvidia.com/blog/what-is-retrieval-augmented-generation/\&quot;><u>RAG</u></a>, we’re excited to help you harness the full potential of AI and get started on building with Cloudflare.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;the-fast-global-ai-platform\&quot;>The fast, global AI platform</h3>\n <a href=\&quot;#the-fast-global-ai-platform\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/56ofEZRtFHhkrfMaGC4RUb/3f69a2fc3722f67218297c65bd510941/image9.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;1098\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The first thing that you notice about an application is how fast, or in many cases, how slow it is. This is especially true of AI applications, where the standard today is to wait for a response to be generated.</p><p>At Cloudflare, we’re obsessed with improving the performance of applications, and have been doubling down on our commitment to make AI fast. To live up to that commitment, we’re excited to announce that we’ve added even more powerful GPUs across our network to accelerate LLM performance.</p><p>In addition to more powerful GPUs, we’ve continued to expand our GPU footprint to get as close to the user as possible, reducing latency even further. Today, we have GPUs in over 180 cities, having doubled our capacity in a year.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;bigger-better-faster\&quot;>Bigger, better, faster</h3>\n <a href=\&quot;#bigger-better-faster\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With the introduction of our new, more powerful GPUs, you can now run inference on significantly larger models, including Meta Llama 3.1 70B. Previously, our model catalog was limited to 8B parameter LLMs, but we can now support larger models, faster response times, and larger context windows. This means your applications can handle more complex tasks with greater efficiency.</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;center\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:100%;\&quot; width=\&quot;288\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Model</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/meta/llama-3.2-11b-vision-instruct</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/meta/llama-3.2-1b-instruct</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/meta/llama-3.2-3b-instruct</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/meta/llama-3.1-8b-instruct-fast</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/meta/Llama-3.1-70b-instruct</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>@cf/black-forest-labs/flux-1-schnell</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><p>The set of models above are available on our new GPUs at faster speeds. In general, you can expect throughput of 80+ Tokens per Second (TPS) for 8b models and a Time To First Token of 300 ms (depending on where you are in the world).</p><p>Our model instances now support larger context windows, like the full 128K context window for Llama 3.1 and 3.2. To give you full visibility into performance, we’ll also be publishing metrics like TTFT, TPS, Context Window, and pricing on models in our <a href=\&quot;https://developers.cloudflare.com/workers-ai/models/\&quot;><u>catalog</u></a>, so you know exactly what to expect.</p><p>We’re committed to bringing the best of open-source models to our platform, and that includes Meta’s release of the new Llama 3.2 collection of models. As a Meta launch partner, we were excited to have Day 0 support for the 11B vision model, as well as the 1B and 3B text-only model on Workers AI.</p><p>For more details on how we made Workers AI fast, take a look at our <a href=\&quot;https://blog.cloudflare.com/making-workers-ai-faster\&quot;><u>technical blog post</u></a>, where we share a novel method for KV cache compression (it’s open-source!), as well as details on speculative decoding, our new hardware design, and more.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;greater-model-flexibility\&quot;>Greater model flexibility</h3>\n <a href=\&quot;#greater-model-flexibility\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With our commitment to helping you run more powerful models faster, we are also expanding the breadth of models you can run on Workers AI with our Run Any* Model feature. Until now, we have manually curated and added only the most popular open source models to Workers AI. Now, we are opening up our catalog to the public, giving you the flexibility to choose from a broader selection of models. We will support models that are compatible with our GPUs and inference stack at the start (hence the asterisk on Run Any* Model). We’re launching this feature in closed beta and if you’d like to try it out, please fill out the <a href=\&quot;https://forms.gle/h7FcaTF4Zo5dzNb68\&quot;><u>form</u></a>, so we can grant you access to this new feature.</p><p>The Workers AI model catalog will now be split into two parts: a static catalog and a dynamic catalog. Models in the static catalog will remain curated by Cloudflare and will include the most popular open source models with guarantees on availability and speed (the models listed above). These models will always be kept warm in our network, ensuring you don’t experience cold starts. The usage and pricing model remains serverless, where you will only be charged for the requests to the model and not the cold start times.</p><p>Models that are launched via Run Any* Model will make up the dynamic catalog. If the model is public, users can share an instance of that model. In the future, we will allow users to launch private instances of models as well.</p><p>This is just the first step towards running your own custom or private models on Workers AI. While we have already been supporting private models for select customers, we are working on making this capacity available to everyone in the near future.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;new-workers-ai-pricing\&quot;>New Workers AI pricing</h3>\n <a href=\&quot;#new-workers-ai-pricing\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We launched Workers AI during Birthday Week 2023 with the concept of “neurons” for pricing. Neurons were intended to simplify the unit of measure across various models on our platform, including text, image, audio, and more. However, over the past year, we have listened to your feedback and heard that neurons were difficult to grasp and challenging to compare with other providers. Additionally, the industry has matured, and new pricing standards have materialized. As such, we’re excited to announce that we will be moving towards unit-based pricing and saying goodbye to neurons.</p><p>Moving forward, Workers AI will be priced based on model task, size, and units. LLMs will be priced based on the model size (parameters) and input/output tokens. Image generation models will be priced based on the output image resolution and the number of steps. Embeddings models will be priced based on input tokens. Speech-to-text models will be priced on seconds of audio input.&nbsp;</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;center\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:25%;\&quot; width=\&quot;121\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;127\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;113\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;233\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Model Task</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Units</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Model Size</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Pricing</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;5\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>LLMs (incl. Vision models)</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;5\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Tokens in/out (blended)</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;= 3B parameters</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.10 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:22.39892578125pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>3.1B - 8B</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.15 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>8.1B - 20B</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.20 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>20.1B - 40B</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.50 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>40.1B+</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.75 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Embeddings</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Tokens in</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;= 150M parameters</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.008 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>151M+ parameters</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.015 per Million Tokens</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Speech-to-text</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Audio seconds in</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>N/A</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.0039 per minute of audio input</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:25%;\&quot; width=\&quot;134\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;126\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;95\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;177\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Image Size</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Model Type</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Steps</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Price</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;=256x256</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Standard</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>25</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.00125 per 25 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Fast</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>5</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.00025 per 5 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;=512x512</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Standard</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>25</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.0025 per 25 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:23.89892578125pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Fast</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>5</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.0005 per 5 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:22.39892578125pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;=1024x1024</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Standard</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>25</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.005 per 25 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Fast</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>5</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.001 per 5 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; rowspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>&amp;lt;=2048x2048</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Standard</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>25</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.01 per 25 steps</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Fast</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>5</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.002 per 5 steps</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><p>We paused graduating models and announcing pricing for beta models over the past few months as we prepared for this new pricing change. We’ll be graduating all models to this new pricing, and billing will take effect on October 1, 2024.</p><p>Our free tier has been redone to fit these new metrics, and will include a monthly allotment of usage across all the task types.</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot; style=\&quot;width:468pt;\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;table-layout:fixed;\&quot;>\n <colgroup>\n <col style=\&quot;width:50%;\&quot;>\n <col style=\&quot;width:50%;\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Model</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Free tier size</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Text Generation - LLM</span></span></p>\n </td>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>10,000 tokens a day across any model size</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Embeddings</span></span></p>\n </td>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>10,000 tokens a day across any model size</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Images</span></span></p>\n </td>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Sum of 250 steps, up to 1024x1024 resolution</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Whisper</span></span></p>\n </td>\n <td style=\&quot;border-color:#cccccc;border-width:0.75pt;overflow-wrap:break-word;overflow:hidden;padding:2pt;vertical-align:bottom;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>10 minutes of audio a day</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;optimizing-ai-workflows-with-ai-gateway\&quot;>Optimizing AI workflows with AI Gateway</h3>\n <a href=\&quot;#optimizing-ai-workflows-with-ai-gateway\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6sLY6zUP6vDdnk1FNJfBBe/9a9e8df1f608b1540175302300ae9bc0/image7.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;601\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><a href=\&quot;https://developers.cloudflare.com/ai-gateway/\&quot;><u>AI Gateway</u></a> is designed to help developers and organizations building AI applications better monitor, control, and optimize their AI usage, and thanks to our users, AI Gateway has reached an incredible milestone — over 2 billion requests proxied by September 2024, less than a year after its inception. But we are not stopping there.</p><p><b>Persistent logs (open beta)</b></p><p><a href=\&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/\&quot;><u>Persistent logs</u></a> allow developers to store and analyze user prompts and model responses for extended periods, up to 10 million logs per gateway. Each request made through AI Gateway will create a log. With a log, you can see details of a request, including timestamp, request status, model, and provider.</p><p>We have revamped our logging interface to offer more detailed insights, including cost and duration. Users can now annotate logs with human feedback using thumbs up and thumbs down. Lastly, you can now filter, search, and tag logs with <a href=\&quot;https://developers.cloudflare.com/ai-gateway/configuration/custom-metadata/\&quot;><u>custom metadata</u></a> to further streamline analysis directly within AI Gateway.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/18OovOZzlAkoKvMIgFJ1kR/dbb6b809fb063b2d918b2355cbf11ea3/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1936\&quot; height=\&quot;1608\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Persistent logs are available to use on <a href=\&quot;https://developers.cloudflare.com/ai-gateway/pricing/\&quot;><u>all plans</u></a>, with a free allocation for both free and paid plans. On the Workers Free plan, users can store up to 100,000 logs total across all gateways at no charge. For those needing more storage, upgrading to the Workers Paid plan will give you a higher free allocation — 200,000 logs stored total. Any additional logs beyond those limits will be available at $8 per 100,000 logs stored per month, giving you the flexibility to store logs for your preferred duration and do more with valuable data. Billing for this feature will be implemented when the feature reaches General Availability, and we’ll provide plenty of advance notice.</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;left\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:25%;\&quot; width=\&quot;156\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;172\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;156\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;175\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;background-color:#efefef;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>&amp;nbsp;</td>\n <td style=\&quot;background-color:#efefef;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Workers Free</strong></span></span></p>\n </td>\n <td style=\&quot;background-color:#efefef;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Workers Paid</strong></span></span></p>\n </td>\n <td style=\&quot;background-color:#efefef;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Enterprise</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Included Volume</span></span></p>\n </td>\n <td style=\&quot;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>100,000 logs stored (total)</span></span></p>\n </td>\n <td style=\&quot;border-bottom-color:#1c4587;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; colspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>200,000 logs stored (total)</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:21pt;\&quot;>\n <td style=\&quot;border-bottom-color:#000000;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Additional Logs</span></span></p>\n </td>\n <td style=\&quot;border-bottom-color:#000000;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>N/A</span></span></p>\n </td>\n <td style=\&quot;border-bottom-color:#000000;border-left-color:#000000;border-right-color:#000000;border-top-color:#1c4587;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot; colspan=\&quot;2\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;text-align:center;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;font-size:11pt;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$8 per 100,000 logs stored per month</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><p><b>Export logs with Logpush</b></p><p>For users looking to export their logs, AI Gateway now supports log export via <a href=\&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush\&quot;><u>Logpush</u></a>. With Logpush, you can automatically push logs out of AI Gateway into your preferred storage provider, including Cloudflare R2, Amazon S3, Google Cloud Storage, and more. This can be especially useful for compliance or advanced analysis outside the platform. Logpush follows its <a href=\&quot;https://developers.cloudflare.com/workers/observability/logging/logpush/\&quot;><u>existing pricing model</u></a> and will be available to all users on a paid plan.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6uazGQNezknc5P9kVyr9gr/1da3b3897c9f6376ea4983b2d267b405/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1930\&quot; height=\&quot;254\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><b>AI evaluations</b></p><p>We are also taking our first step towards comprehensive <a href=\&quot;https://developers.cloudflare.com/ai-gateway/evaluations/\&quot;><u>AI evaluations</u></a>, starting with evaluation using human in the loop feedback (this is now in open beta). Users can create datasets from logs to score and evaluate model performance, speed, and cost, initially focused on LLMs. Evaluations will allow developers to gain a better understanding of how their application is performing, ensuring better accuracy, reliability, and customer satisfaction. We’ve added support for <a href=\&quot;https://developers.cloudflare.com/ai-gateway/observability/costs/\&quot;><u>cost analysis</u></a> across many new models and providers to enable developers to make informed decisions, including the ability to add <a href=\&quot;https://developers.cloudflare.com/ai-gateway/configuration/custom-costs/\&quot;><u>custom costs</u></a>. Future enhancements will include automated scoring using LLMs, comparing performance of multiple models, and prompt evaluations, helping developers make decisions on what is best for their use case and ensuring their applications are both efficient and cost-effective.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5dyhxoR6KEsM8uh371XnDN/5eab93923157fd59112ffdea14b3bb2f/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;710\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/21DCTbhFEh7u4m1d0Tfgmn/2839e2ae7d226fdcc4086f108f5c9612/image6.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1376\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;vectorize-ga\&quot;>Vectorize GA</h3>\n <a href=\&quot;#vectorize-ga\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/DjhP2xqOhPMP7oQK5Mdpa/c216167d0a204f344afd2ff7393d97f9/image4.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;600\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>We&amp;#39;ve completely redesigned Vectorize since our <a href=\&quot;https://blog.cloudflare.com/vectorize-vector-database-open-beta/\&quot;><u>initial announcement </u></a>in 2023 to better serve customer needs. Vectorize (v2) now supports<b> indexes of up to 5 million vectors</b> (up from 200,000), <b>delivers faster queries</b> (median latency is down 95% from 500 ms to 30 ms), and <b>returns up to 100 results per query</b> (increased from 20). These improvements significantly enhance Vectorize&amp;#39;s capacity, speed, and depth of results.</p><p>Note: if you got started on Vectorize before GA, to ease the move from v1 to v2, a migration solution will be available in early Q4 — stay tuned!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;new-vectorize-pricing\&quot;>New Vectorize pricing</h3>\n <a href=\&quot;#new-vectorize-pricing\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Not only have we improved performance and scalability, but we&amp;#39;ve also made Vectorize one of the most cost-effective options on the market. We&amp;#39;ve reduced query prices by 75% and storage costs by 98%.</p><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;center\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:25%;\&quot; width=\&quot;93\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;232\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;247\&quot;>\n <col style=\&quot;width:25%;\&quot; width=\&quot;124\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>&amp;nbsp;</td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>New Vectorize pricing</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Old Vectorize pricing</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Price reduction</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Writes</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Free</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Free</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>n/a</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Query</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$.01 per 1 million vector dimensions</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.04 per 1 million vector dimensions</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>75%</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Storage</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$0.05 per 100 million vector dimensions</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>$4.00 per 100 million vector dimensions</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>98%</strong></span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><p>You can learn more about our pricing in the <a href=\&quot;https://developers.cloudflare.com/vectorize/platform/pricing/\&quot;><u>Vectorize docs</u></a>.</p><p><b>Vectorize free tier</b></p><p>There’s more good news: we’re introducing a free tier to Vectorize to make it easy to experiment with our full AI stack.</p><p>The free tier includes:</p><ul><li><p>30 million <b>queried</b> vector dimensions / month</p></li><li><p>5 million <b>stored</b> vector dimensions / month</p></li></ul>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;how-fast-is-vectorize\&quot;>How fast is Vectorize?</h3>\n <a href=\&quot;#how-fast-is-vectorize\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To measure performance, we conducted benchmarking tests by executing a large number of vector similarity queries as quickly as possible. We measured both request latency and result precision. In this context, precision refers to the proportion of query results that match the known true-closest results for all benchmarked queries. This approach allows us to assess both the speed and accuracy of our vector similarity search capabilities. Here are the following datasets we benchmarked on:</p><ul><li><p><a href=\&quot;https://github.com/qdrant/vector-db-benchmark\&quot;><b><u>dbpedia-openai-1M-1536-angular</u></b></a>: 1 million vectors, 1536 dimensions, queried with cosine similarity at a top K of 10</p></li><li><p><a href=\&quot;https://myscale.github.io/benchmark\&quot;><b><u>Laion-768-5m-ip</u></b></a>: 5 million vectors, 768 dimensions, queried with cosine similarity at a top K of 10</p><ul><li><p>We ran this again skipping the result-refinement pass to return approximate results faster</p></li></ul></li></ul><div style=\&quot;margin-left:0pt;\&quot; dir=\&quot;ltr\&quot; align=\&quot;center\&quot;>\n <figure class=\&quot;table\&quot;>\n <table class=\&quot;ck-table-resized\&quot; style=\&quot;border-collapse:collapse;border-style:none;\&quot;>\n <colgroup>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;233\&quot;>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;86\&quot;>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;79\&quot;>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;78\&quot;>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;86\&quot;>\n <col style=\&quot;width:14.29%;\&quot; width=\&quot;144\&quot;>\n <col style=\&quot;width:14.26%;\&quot; width=\&quot;144\&quot;>\n </colgroup>\n <tbody>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Benchmark dataset</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>P50 (ms)</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>P75 (ms)</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>P90 (ms)</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>P95 (ms)</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Throughput (RPS)</strong></span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;><strong>Precision</strong></span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>dbpedia-openai-1M-1536-angular</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>31</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>56</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>159</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>380</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>343</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>95.4%</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Laion-768-5m-ip&amp;nbsp;</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>81.5</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>91.7</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>105</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>123</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>623</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>95.5%</span></span></p>\n </td>\n </tr>\n <tr style=\&quot;height:0pt;\&quot;>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>Laion-768-5m-ip w/o refinement</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>14.7</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>19.3</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>24.3</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.2;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>27.3</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>698</span></span></p>\n </td>\n <td style=\&quot;border-color:#000000;border-width:1pt;overflow-wrap:break-word;overflow:hidden;padding:5pt;vertical-align:top;\&quot;>\n <p style=\&quot;line-height:1.38;margin-bottom:0pt;margin-top:0pt;\&quot; dir=\&quot;ltr\&quot;><span style=\&quot;background-color:transparent;color:#000000;font-family:Arial,sans-serif;\&quot;><span style=\&quot;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;\&quot;>78.9%</span></span></p>\n </td>\n </tr>\n </tbody>\n </table>\n </figure>\n</div><p>These benchmarks were conducted using a standard Vectorize v2 index, queried with a concurrency of 300 via a Cloudflare Worker binding. The reported latencies reflect those observed by the Worker binding querying the Vectorize index on warm caches, simulating the performance of an existing application with sustained usage.</p><p>Beyond Vectorize&amp;#39;s fast query speeds, we believe the combination of Vectorize and Workers AI offers an unbeatable solution for delivering optimal AI application experiences. By running Vectorize close to the source of inference and user interaction, rather than combining AI and vector database solutions across providers, we can significantly minimize end-to-end latency.</p><p>With these improvements, we&amp;#39;re excited to announce the general availability of the new Vectorize, which is more powerful, faster, and more cost-effective than ever before.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;tying-it-all-together-the-ai-platform-for-all-your-inference-needs\&quot;>Tying it all together: the AI platform for all your inference needs</h3>\n <a href=\&quot;#tying-it-all-together-the-ai-platform-for-all-your-inference-needs\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Over the past year, we’ve been committed to building powerful AI products that enable users to build on us. While we are making advancements on each of these individual products, our larger vision is to provide a seamless, integrated experience across our portfolio.</p><p>With Workers AI and AI Gateway, users can easily enable analytics, logging, caching, and rate limiting to their AI application by connecting to AI Gateway directly through a binding in the Workers AI request. We imagine a future where AI Gateway can not only help you create and save datasets to use for fine-tuning your own models with Workers AI, but also seamlessly redeploy them on the same platform. A great AI experience is not just about speed, but also accuracy. While Workers AI ensures fast performance, using it in combination with AI Gateway allows you to evaluate and optimize that performance by monitoring model accuracy and catching issues, like hallucinations or incorrect formats. With AI Gateway, users can test out whether switching to new models in the Workers AI model catalog will deliver more accurate performance and a better user experience.</p><p>In the future, we’ll also be working on tighter integrations between Vectorize and Workers AI, where you can automatically supply context or remember past conversations in an inference call. This cuts down on the orchestration needed to run a RAG application, where we can automatically help you make queries to vector databases.</p><p>If we put the three products together, we imagine a world where you can build AI apps with full observability (traces with AI Gateway) and see how the retrieval (Vectorize) and generation (Workers AI) components are working together, enabling you to diagnose issues and improve performance.</p><p>This Birthday Week, we’ve been focused on making sure our individual products are best-in-class, but we’re continuing to invest in building a holistic AI platform within our AI portfolio, but also with the larger Developer Platform Products. Our goal is to make sure that Cloudflare is the simplest, fastest, more powerful place for you to build full-stack AI experiences with all the batteries included.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6nXZn8qwK1tCVVMFbYFf7n/fe538bed97b00ef1b74a05dfd86eb496/image5.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;716\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>We’re excited for you to try out all these new features! Take a look at our <a href=\&quot;https://developers.cloudflare.com/products/?product-group=AI\&quot;><u>updated developer docs </u></a>on how to get started and the Cloudflare dashboard to interact with your account.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:04:58.021Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6LonPfY9LQx1R82foR7fnk/82a2f9bab7e67caa1d479778cd35935a/image8.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;1m3cvXsB5FqjKbhyk8OjzD&quot;],&quot;name&quot;:[0,&quot;Vectorize&quot;],&quot;slug&quot;:[0,&quot;vectorize&quot;]}],[0,{&quot;id&quot;:[0,&quot;1GyUhE8o287lrdNSpdRUIe&quot;],&quot;name&quot;:[0,&quot;AI Gateway&quot;],&quot;slug&quot;:[0,&quot;ai-gateway&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Foe3R8of95cWVnQwe5Toi&quot;],&quot;name&quot;:[0,&quot;AI&quot;],&quot;slug&quot;:[0,&quot;ai&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;1Wf1Dpb2AFicG44jpRT29y&quot;],&quot;name&quot;:[0,&quot;Workers AI&quot;],&quot;slug&quot;:[0,&quot;workers-ai&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Michelle Chen&quot;],&quot;slug&quot;:[0,&quot;michelle&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1hrcl3aVtUbBuCMeuXETWy/93dbfbc7d41c09ba35d863312dbde89d/michelle.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@_mchenco&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Kathy Liao&quot;],&quot;slug&quot;:[0,&quot;kathy&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2XeJHmfHmhCUmRwC7aeCWR/fb2194fd1e4bed0667242d081354f5f2/kathy.png&quot;],&quot;location&quot;:[0,&quot;Seattle&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@kathyyliao&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Phil Wittig&quot;],&quot;slug&quot;:[0,&quot;phil&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2FbDE6kgoEtV8l8hu6W85e/f31d42ea6b3cf65cfb08fb9fca5d0010/phil.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@pdwittig&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Whether you want the fastest inference at the edge, optimized AI workflows, or vector database-powered RAG, we’re excited to help you harness the full potential of AI and get started on building with Cloudflare.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Cloudflare’s bigger, better, faster AI platform&quot;],&quot;description&quot;:[0,&quot;Whether you want the fastest inference at the edge, optimized AI workflows, or vector database-powered RAG, we’re excited to help you harness the full potential of AI and get started on building with Cloudflare.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ulk9RqlQAEwprMduAUPy9/27f19052048ab6f00f3fb3cd40b0d8b2/Cloudflare_s_bigger__better__faster_AI_platform-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;76i5gcdv0wbMNnwa7E17MR&quot;],&quot;title&quot;:[0,&quot;We made Workers KV up to 3x faster — here’s the data&quot;],&quot;slug&quot;:[0,&quot;faster-workers-kv&quot;],&quot;excerpt&quot;:[0,&quot;Speed is a critical factor that dictates Internet behavior. Every additional millisecond a user spends waiting for your web page to load results in them abandoning your website. &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Speed is a critical factor that dictates Internet behavior. Every additional millisecond a user spends waiting for your web page to load results in them abandoning your website. The old adage remains as true as ever: <a href=\&quot;https://www.cloudflare.com/learning/performance/more/website-performance-conversion-rates/\&quot;><u>faster websites result in higher conversion rates</u></a>. And with such outcomes tied to Internet speed, we believe a faster Internet is a better Internet.</p><p>Customers often use <a href=\&quot;https://developers.cloudflare.com/kv/\&quot;><u>Workers KV</u></a> to provide <a href=\&quot;https://developers.cloudflare.com/workers/\&quot;><u>Workers</u></a> with key-value data for configuration, routing, personalization, experimentation, or serving assets. Many of Cloudflare’s own products rely on KV for just this purpose: <a href=\&quot;https://developers.cloudflare.com/pages\&quot;><u>Pages</u></a> stores static assets, <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/policies/access/\&quot;><u>Access</u></a> stores authentication credentials, <a href=\&quot;https://developers.cloudflare.com/ai-gateway/\&quot;><u>AI Gateway</u></a> stores routing configuration, and <a href=\&quot;https://developers.cloudflare.com/images/\&quot;><u>Images</u></a> stores configuration and assets, among others. So KV’s speed affects the latency of every request to an application, throughout the entire lifecycle of a user session.&nbsp;</p><p>Today, we’re announcing up to 3x faster KV hot reads, with all KV operations faster by up to 20ms. And we want to pull back the curtain and show you how we did it.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/67VzWOTRpMd9Dbc6ZM7M4M/cefb1d856344d9c963d4adfbe1b32fba/BLOG-2518_2.png\&quot; alt=\&quot;BLOG-2518 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1683\&quot; height=\&quot;966\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Workers KV read latency (ms) by percentile measured from Pages</i></sup></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;optimizing-workers-kvs-architecture-to-minimize-latency\&quot;>Optimizing Workers KV’s architecture to minimize latency</h2>\n <a href=\&quot;#optimizing-workers-kvs-architecture-to-minimize-latency\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>At a high level, Workers KV is itself a Worker that makes requests to central storage backends, with many layers in between to properly cache and route requests across Cloudflare’s network. You can rely on Workers KV to support operations made by your Workers at any scale, and KV’s architecture will seamlessly handle your required throughput.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3pcw5pO2eeGJ1RriESJFSB/651fe26718f981eb741ad2ffb2f288c9/BLOG-2518_3.png\&quot; alt=\&quot;BLOG-2518 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;437\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Sequence diagram of a Workers KV operation</i></sup></p><p>When your Worker makes a read operation to Workers KV, your Worker establishes a network connection within its Cloudflare region to KV’s Worker. The KV Worker then accesses the <a href=\&quot;https://developers.cloudflare.com/workers/runtime-apis/cache/\&quot;><u>Cache API</u></a>, and in the event of a cache miss, retrieves the value from the storage backends.&nbsp;</p><p>Let’s look one level deeper at a simplified trace:&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7mCpF8NRgSg70p8VNTFXu8/4cabdae18285575891f49a5cd34c9ab8/BLOG-2518_4.png\&quot; alt=\&quot;BLOG-2518 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;986\&quot; height=\&quot;476\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Simplified trace of a Workers KV operation</i></sup></p><p>From the top, here are the operations completed for a KV read operation from your Worker:</p><ol><li><p>Your Worker makes a connection to Cloudflare’s network in the same data center. This incurs ~5 ms of network latency.</p></li><li><p>Upon entering Cloudflare’s network, a service called <a href=\&quot;https://blog.cloudflare.com/upgrading-one-of-the-oldest-components-in-cloudflare-software-stack/\&quot;><u>Front Line (FL)</u></a> is used to process the request. This incurs ~10 ms of operational latency.</p></li><li><p>FL proxies the request to the KV Worker. The KV Worker does a cache lookup for the key being accessed. This, once again, passes through the Front Line layer, incurring an additional ~10 ms of operational latency.</p></li><li><p>Cache is stored in various backends within each region of Cloudflare’s network. A service built upon <a href=\&quot;https://blog.cloudflare.com/pingora-open-source/\&quot;><u>Pingora</u></a>, our open-sourced Rust framework for proxying HTTP requests, routes the cache lookup to the proper cache backend.</p></li><li><p>Finally, if the cache lookup is successful, the KV read operation is resolved. Otherwise, the request reaches our storage backends, where it gets its value.</p></li></ol><p>Looking at these flame graphs, it became apparent that a major opportunity presented itself to us: reducing the FL overhead (or eliminating it altogether) and reducing the cache misses across the Cloudflare network would reduce the latency for KV operations.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;bypassing-fl-layers-between-workers-and-services-to-save-20ms\&quot;>Bypassing FL layers between Workers and services to save ~20ms</h3>\n <a href=\&quot;#bypassing-fl-layers-between-workers-and-services-to-save-20ms\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>A request from your Worker to KV doesn’t need to go through FL. Much of FL’s responsibility is to process and route requests from outside of Cloudflare — that’s more than is needed to handle a request from the KV binding to the KV Worker. So we skipped the Front Line altogether in both layers.</p><div style=\&quot;position: relative; padding-top: 44.41056910569105%;\&quot;>\n <iframe\n src=\&quot;https://customer-eq7kiuol0tk9chox.cloudflarestream.com/b6c7da4a7f6d88c1d53e45988a1b7cac/iframe?loop=true&amp;autoplay=true&amp;poster=https%3A%2F%2Fcustomer-eq7kiuol0tk9chox.cloudflarestream.com%2Fb6c7da4a7f6d88c1d53e45988a1b7cac%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div>\n<p><sup><i>Reducing latency in a Workers KV operation by removing FL layers</i></sup></p><p>To bypass the FL layer from the KV binding in your Worker, we modified the KV binding to connect directly to the KV Worker within the same Cloudflare location. Within the Workers host, we configured a C++ subpipeline to allow code from bindings to establish a direct connection with the proper routing configuration and authorization loaded.&nbsp;</p><p>The KV Worker also passes through the FL layer on its way to our internal <a href=\&quot;https://blog.cloudflare.com/pingora-open-source/\&quot;><u>Pingora</u></a> service. In this case, we were able to use an internal Worker binding that allows Workers for Cloudflare services to bind directly to non-Worker services within Cloudflare’s network. With this fix, the KV Worker sets the proper cache control headers and establishes its connection to Pingora without leaving the network.&nbsp;</p><p>Together, both of these changes reduced latency by ~20 ms for every KV operation.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;implementing-tiered-cache-to-minimize-requests-to-storage-backends\&quot;>Implementing tiered cache to minimize requests to storage backends</h3>\n <a href=\&quot;#implementing-tiered-cache-to-minimize-requests-to-storage-backends\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We also optimized KV’s architecture to reduce the amount of requests that need to reach our centralized storage backends. These storage backends are further away and incur network latency, so improving the cache hit rate in regions close to your Workers significantly improves read latency.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1791aSxXPH1lgOIr3RQrLz/1685f6a57d627194e76cb657cd22ddd8/BLOG-2518_5.png\&quot; alt=\&quot;BLOG-2518 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1527\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Workers KV uses Tiered Cache to resolve operations closer to your users</i></sup></p><p>To accomplish this, we used <a href=\&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/#custom-tiered-cache\&quot;><u>Tiered Cache</u></a>, and implemented a cache topology that is fine-tuned to the usage patterns of KV. With a tiered cache, requests to KV’s storage backends are cached in regional tiers in addition to local (lower) tiers. With this architecture, KV operations that may be cache misses locally may be resolved regionally, which is especially significant if you have traffic across an entire region spanning multiple Cloudflare data centers.&nbsp;</p><p>This significantly reduced the amount of requests that needed to hit the storage backends, with ~30% of requests resolved in tiered cache instead of storage backends.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;kvs-new-architecture\&quot;>KV’s new architecture</h2>\n <a href=\&quot;#kvs-new-architecture\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>As a result of these optimizations, KV operations are now simplified:</p><ol><li><p>When you read from KV in your Worker, the <a href=\&quot;https://developers.cloudflare.com/kv/concepts/kv-bindings/\&quot;><u>KV binding</u></a> binds directly to KV’s Worker, saving 10 ms.&nbsp;</p></li><li><p>The KV Worker binds directly to the Tiered Cache service, saving another 10 ms.&nbsp;</p></li><li><p>Tiered Cache is used in front of storage backends, to resolve local cache misses regionally, closer to your users.</p></li></ol>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2cW0MsOH120GKUAlIUvDR4/7f574632ee81d3b955ed99bf87d86fa2/BLOG-2518_6.png\&quot; alt=\&quot;BLOG-2518 6\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;437\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Sequence diagram of KV operations with new architecture</i></sup></p><p>In aggregate, these changes significantly reduced KV’s latency. \n\nThe impact of the direct binding to cache is clearly seen in the wall time of the KV Worker, given this value measures the duration of a retrieval of a key-value pair from cache. The 90th percentile of all KV Worker invocations now resolve in less than 12 ms — before the direct binding to cache, that was 22 ms. That’s a 10 ms decrease in latency.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1UmcRB0Afk8mHig2DrThsh/d913cd33a28c1c2b093379238a90551c/BLOG-2518_7.png\&quot; alt=\&quot;BLOG-2518 7\&quot; class=\&quot;kg-image\&quot; width=\&quot;1683\&quot; height=\&quot;970\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Wall time (ms) within the KV Worker by percentile</i></sup></p><p>These KV read operations resolve quickly because the data is cached locally in the same Cloudflare location. But what about reads that aren’t resolved locally? ~30% of these resolve regionally within the tiered cache. Reads from tiered cache are up to 100 ms faster than when resolved at central storage backends, once again contributing to making KV reads faster in aggregate.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1Gz2IxlcNuDDRp3MhC4m40/ee364b710cec4332a5c307a784f34fa4/BLOG-2518_8.png\&quot; alt=\&quot;BLOG-2518 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1747\&quot; height=\&quot;966\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Wall time (ms) within the KV Worker for tiered cache vs. storage backends reads</i></sup></p><p>These graphs demonstrate the impact of direct binding from the KV binding to cache, and tiered cache. To see the impact of the direct binding from a Worker to the KV Worker, we need to look at the latencies reported by Cloudflare products that use KV.</p><p><a href=\&quot;https://developers.cloudflare.com/pages/\&quot;><u>Cloudflare Pages</u></a>, which serves static assets like HTML, CSS, and scripts from KV, saw load times for fetching assets improve by up to 68%. Workers asset hosting, which we also announced as part of today’s <a href=\&quot;http://blog.cloudflare.com/builder-day-2024-announcements\&quot;><u>Builder Day announcements</u></a>, gets this improved performance from day 1.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/67VzWOTRpMd9Dbc6ZM7M4M/cefb1d856344d9c963d4adfbe1b32fba/BLOG-2518_2.png\&quot; alt=\&quot;BLOG-2518 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1683\&quot; height=\&quot;966\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Workers KV read operation latency measured within Cloudflare Pages by percentile</i></sup></p><p><a href=\&quot;https://developers.cloudflare.com/queues/\&quot;><u>Queues</u></a> and <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/applications/\&quot;><u>Access</u></a> also saw their latencies for KV operations drop, with their KV read operations now 2-5x faster. These services rely on Workers KV data for configuration and routing data, so KV’s performance improvement directly contributes to making them faster on each request.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1Gz2IxlcNuDDRp3MhC4m40/ee364b710cec4332a5c307a784f34fa4/BLOG-2518_8.png\&quot; alt=\&quot;BLOG-2518 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1747\&quot; height=\&quot;966\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Workers KV read operation latency measured within Cloudflare Queues by percentile</i></sup></p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1HFapaO1Gv09g9VlODrLAu/56d39207fb3dfefe258fa5e8cb8bd67b/BLOG-2518_10.png\&quot; alt=\&quot;BLOG-2518 10\&quot; class=\&quot;kg-image\&quot; width=\&quot;1681\&quot; height=\&quot;926\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Workers KV read operation latency measured within Cloudflare Access by percentile</i></sup></p><p>These are just some of the direct effects that a faster KV has had on other services. Across the board, requests are resolving faster thanks to KV’s faster response times.&nbsp;</p><p>And we have one more thing to make KV lightning fast.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;optimizing-kvs-hottest-keys-with-an-in-memory-cache\&quot;>Optimizing KV’s hottest keys with an in-memory cache&nbsp;</h3>\n <a href=\&quot;#optimizing-kvs-hottest-keys-with-an-in-memory-cache\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Less than 0.03% of keys account for nearly half of requests to the Workers KV service across all namespaces. These keys are read thousands of times per second, so making these faster has a disproportionate impact. Could these keys be resolved within the KV Worker without needing additional network hops?</p><p>Almost all of these keys are under 100 KB. At this size, it becomes possible to use the in-memory cache of the KV Worker — a limited amount of memory within the <a href=\&quot;https://developers.cloudflare.com/workers/reference/how-workers-works/#isolates\&quot;><u>main runtime process</u></a> of a Worker sandbox. And that’s exactly what we did. For the highest throughput keys across Workers KV, reads resolve without even needing to leave the Worker runtime process.</p><div style=\&quot;position: relative; padding-top: 39.63414634146341%;\&quot;>\n <iframe\n src=\&quot;https://customer-eq7kiuol0tk9chox.cloudflarestream.com/5f01e90f833019a5c87a098f6508f1ae/iframe?loop=true&amp;autoplay=true&amp;poster=https%3A%2F%2Fcustomer-eq7kiuol0tk9chox.cloudflarestream.com%2F5f01e90f833019a5c87a098f6508f1ae%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div>\n<p><sup><i>Sequence diagram of KV operations with the hottest keys resolved within an in-memory cache</i></sup></p><p>As a result of these changes, KV reads for these keys, which represent over 40% of Workers KV requests globally, resolve in under a millisecond. We’re actively testing these changes internally and expect to roll this out during October to speed up the hottest key-value pairs on Workers KV.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;a-faster-kv-for-all\&quot;>A faster KV for all</h2>\n <a href=\&quot;#a-faster-kv-for-all\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Most of these speed gains are already enabled with no additional action needed from customers. Your websites that are using KV are already responding to requests faster for your users, as are the other Cloudflare services using KV under the hood and the countless websites that depend upon them.&nbsp;</p><p>And we’re not done: we’ll continue to chase performance throughout our stack to make your websites faster. That’s how we’re going to move the needle towards a faster Internet.&nbsp;</p><p>To see Workers KV’s recent speed gains for your own KV namespaces, head over to your dashboard and check out the <a href=\&quot;https://developers.cloudflare.com/kv/observability/metrics-analytics/\&quot;><u>new KV analytics</u></a>, with latency and cache status detailed per namespace.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:05:54.007Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4bRdCswtLjBJq8kr1Z2jzK/0da3542bd0d598974de1cf9ab09d9c77/BLOG-2518_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;q88b6J14cYlPx98w6u1If&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers KV&quot;],&quot;slug&quot;:[0,&quot;cloudflare-workers-kv&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;4gN0ARax0fHxjtZL07THOe&quot;],&quot;name&quot;:[0,&quot;Performance&quot;],&quot;slug&quot;:[0,&quot;performance&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Thomas Gauvin&quot;],&quot;slug&quot;:[0,&quot;thomas-gauvin&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2niktUqyQO5YzVIBCwrBGl/9474ec9faff3b27f7ec9013a066b9b54/Thomas_Gauvin.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Rob Sutter&quot;],&quot;slug&quot;:[0,&quot;rob&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1r2dvD4G1iSv7nFKgpPkM8/8761e00579d18a125c994bb6fb93625b/rob.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@rts_rob&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Andrew Plunk&quot;],&quot;slug&quot;:[0,&quot;andrew-plunk&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1RmZZfcaULvDAQMZUQfHEf/bac0e120c0e8ab5d9944bd970d0b4223/Andrew_Plunk.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}]]],&quot;meta_description&quot;:[0,&quot;Speed is a critical factor that dictates Internet behavior. Every additional millisecond a user spends waiting for your web page to load results in them abandoning your website. &quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/faster-workers-kv&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;We made Workers KV up to 3x faster — here’s the data&quot;],&quot;description&quot;:[0,&quot;Today, we’re announcing up to 3x faster KV hot reads, with all KV operations faster by up to 20ms. And we want to pull back the curtain and show you how we did it.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2UHkSFT2lmnCkowZyD3wdn/0ffed60bd27cb051fd8d8a0cc1191293/We_made_Workers_KV_up_to_3x_faster___here_s_the_data-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;29PAMer5L0do12OtNa557I&quot;],&quot;title&quot;:[0,&quot;Making Workers AI faster and more efficient: Performance optimization with KV cache compression and speculative decoding&quot;],&quot;slug&quot;:[0,&quot;making-workers-ai-faster&quot;],&quot;excerpt&quot;:[0,&quot;With a new generation of data center accelerator hardware and using optimization techniques such as KV cache compression and speculative decoding, we’ve made large language model (LLM)&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>During Birthday Week 2023, <a href=\&quot;https://blog.cloudflare.com/workers-ai/\&quot;><u>we launched Workers AI</u></a>. Since then, we have been listening to your feedback, and one thing we’ve heard consistently is that our customers want Workers AI to be faster. In particular, we hear that large language model (LLM) generation needs to be faster. Users want their interactive chat and agents to go faster, developers want faster help, and users do not want to wait for applications and generated website content to load. Today, we’re announcing three upgrades we’ve made to Workers AI to bring faster and more efficient inference to our customers: upgraded hardware, KV cache compression, and speculative decoding.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;watch-on-cloudflare-tv\&quot;>Watch on Cloudflare TV</h3>\n <a href=\&quot;#watch-on-cloudflare-tv\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;position: relative; padding-top: 56.25%;\&quot;>\n <iframe\n src=\&quot;https://customer-rhnwzxvb3mg4wz3v.cloudflarestream.com/f37bfe2e21799996f84c7ff4e498893d/iframe?preload=true&amp;poster=https%3A%2F%2Fcustomer-rhnwzxvb3mg4wz3v.cloudflarestream.com%2Ff37bfe2e21799996f84c7ff4e498893d%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D8s%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div><p>Thanks to Cloudflare’s <a href=\&quot;https://blog.cloudflare.com/gen-12-servers/\&quot;><u>12th generation compute servers</u></a>, our network now supports a newer generation of GPUs capable of supporting larger models and faster inference. Customers can now use <a href=\&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.2-11b-vision-instruct\&quot;><u>Meta Llama 3.2 11B</u></a>, Meta’s <a href=\&quot;https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/\&quot;><u>newly released</u></a> multi-modal model with vision support, as well as Meta Llama 3.1 70B on Workers AI. Depending on load and time of day, customers can expect to see two to three times the throughput for Llama 3.1 and 3.2 compared to our previous generation Workers AI hardware. More performance information for these models can be found in today’s post: <a href=\&quot;https://blog.cloudflare.com/workers-ai-bigger-better-faster\&quot;><i><u>Cloudflare’s Bigger, Better, Faster AI platform</u></i></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;new-kv-cache-compression-methods-now-open-source\&quot;>New KV cache compression methods, now open source</h2>\n <a href=\&quot;#new-kv-cache-compression-methods-now-open-source\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In our effort to deliver low-cost low-latency inference to the world, Workers AI has been developing novel methods to boost efficiency of LLM inference. Today, we’re excited to announce a technique for KV cache compression that can help increase throughput of an inference platform. And we’ve made it open source too, so that everyone can benefit from our research.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;its-all-about-memory\&quot;>It’s all about memory</h3>\n <a href=\&quot;#its-all-about-memory\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>One of the main bottlenecks when running LLM inference is the amount of vRAM (memory) available. Every word that an LLM processes generates a set of vectors that encode the meaning of that word in the context of any earlier words in the input that are used to generate new tokens in the future. These vectors are stored in the <i>KV cache</i>, causing the memory required for inference to scale linearly with the total number of tokens of all sequences being processed. This makes memory a bottleneck for a lot of transformer-based models. Because of this, the amount of memory an instance has available limits the number of sequences it can generate concurrently, as well as the maximum token length of sequences it can generate.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;so-what-is-the-kv-cache-anyway\&quot;>So what is the KV cache anyway?</h3>\n <a href=\&quot;#so-what-is-the-kv-cache-anyway\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>LLMs are made up of layers, with an <a href=\&quot;https://en.wikipedia.org/wiki/Attention_(machine_learning)\&quot;><u>attention</u></a> operation occurring in each layer. Within each layer’s attention operation, information is collected from the representations of all previous tokens that are stored in cache. This means that vectors in the KV cache are organized into layers, so that the active layer’s attention operation can only query vectors from the corresponding layer of KV cache. Furthermore, since attention within each layer is parallelized across multiple attention “heads”, the KV cache vectors of a specific layer are further subdivided into groups corresponding to each attention head of that layer.</p><p>The diagram below shows the structure of an LLM’s KV cache for a single sequence being generated. Each cell represents a KV and the model’s representation for a token consists of all KV vectors for that token across all attention heads and layers. As you can see, the KV cache for a single layer is allocated as an M x N matrix of KV vectors where M is the number of attention heads and N is the sequence length. This will be important later!</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ZagFp9yy3E55SR8GKRBvh/9e37f5890165e758ccaebf77464be483/BLOG-2571_2.png\&quot; alt=\&quot;BLOG-2571 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1528\&quot; height=\&quot;876\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>For a deeper look at attention, see the original “<a href=\&quot;https://arxiv.org/abs/1706.03762\&quot;><u>Attention is All You Need</u></a>” paper.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;kv-cache-compression-use-it-or-lose-it\&quot;>KV-cache compression — “use it or lose it”</h3>\n <a href=\&quot;#kv-cache-compression-use-it-or-lose-it\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Now that we know what the KV cache looks like, let’s dive into how we can shrink it!</p><p>The most common approach to compressing the KV cache involves identifying vectors within it that are unlikely to be queried by future attention operations and can therefore be removed without impacting the model’s outputs. This is commonly done by looking at the past attention weights for each pair of key and value vectors (a measure of the degree with which that KV’s representation has been queried during past attention operations) and selecting the KVs that have received the lowest total attention for eviction. This approach is conceptually similar to a LFU (least frequently used) cache management policy: the less a particular vector is queried, the more likely it is to be evicted in the future.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;different-attention-heads-need-different-compression-rates\&quot;>Different attention heads need different compression rates</h3>\n <a href=\&quot;#different-attention-heads-need-different-compression-rates\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>As we saw earlier, the KV cache for each sequence in a particular layer is allocated on the GPU as a <i># attention heads X sequence length</i> tensor. This means that the total memory allocation scales with the <i>maximum</i> sequence length for all attention heads of the KV cache. Usually this is not a problem, since each sequence generates the same number of KVs per attention head.</p><p>When we consider the problem of eviction-based KV cache compression, however, this forces us to remove an equal number of KVs from each attention head when doing the compression. If we remove more KVs from one attention head alone, those removed KVs won’t actually contribute to lowering the memory footprint of the KV cache on GPU, but will just add more empty “padding” to the corresponding rows of the tensor. You can see this in the diagram below (note the empty cells in the second row below):</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/68Q5hVbfRF1vhqyeGNzB1Q/91056db8208c5e74be00e0add147b3e9/BLOG-2571_3.png\&quot; alt=\&quot;BLOG-2571 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;1452\&quot; height=\&quot;808\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The extra compression along the second head frees slots for two KVs, but the cache’s shape (and memory footprint) remains the same.</p><p>This forces us to use a fixed compression rate for all attention heads of KV cache, which is very limiting on the compression rates we can achieve before compromising performance.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;enter-pagedattention\&quot;>Enter PagedAttention</h3>\n <a href=\&quot;#enter-pagedattention\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The solution to this problem is to change how our KV cache is represented in physical memory. <a href=\&quot;https://arxiv.org/abs/2309.06180\&quot;><u>PagedAttention</u></a> can represent N x M tensors with padding efficiently by using an N x M block table to index into a series of “blocks”.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1Sia3ZKKzBaHEfI8qLYr8o/57edb68d61ff916d322502aeb406c88c/BLOG-2571_4.png\&quot; alt=\&quot;BLOG-2571 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;1512\&quot; height=\&quot;722\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>This lets us retrieve the i<sup>th</sup> element of a row by taking the i<sup>th</sup> block number from that row in the block table and using the block number to lookup the corresponding block, so we avoid allocating space to padding elements in our physical memory representation. In our case, the elements in physical memory are the KV cache vectors, and the <i>M </i>and <i>N</i> that define the shape of our block table are the number of attention heads and sequence length, respectively. Since the block table is only storing integer indices (rather than high-dimensional KV vectors), its memory footprint is negligible in most cases.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;results\&quot;>Results</h3>\n <a href=\&quot;#results\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Using paged attention lets us apply different rates of compression to different heads in our KV cache, giving our compression strategy more flexibility than other methods. We tested our compression algorithm on <a href=\&quot;https://arxiv.org/abs/2308.14508\&quot;><u>LongBench</u></a> (a collection of long-context LLM benchmarks) with Llama-3.1-8B and found that for most tasks we can retain over 95% task performance while reducing cache size by up to 8x (left figure below). Over 90% task performance can be retained while further compressing up to 64x. That means you have room in memory for 64 times as many tokens!</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/pdz5rPhYdfnMmn6cxhczo/29b69bb65aea8989fc1f50283e8ecbc5/BLOG-2571_5.png\&quot; alt=\&quot;BLOG-2571 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;1758\&quot; height=\&quot;652\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>This lets us increase the number of requests we can process in parallel, increasing the total throughput (total tokens generated per second) by 3.44x and 5.18x for compression rates of 8x and 64x, respectively (right figure above).</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;try-it-yourself\&quot;>Try it yourself!</h3>\n <a href=\&quot;#try-it-yourself\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>If you’re interested in taking a deeper dive check out our <a href=\&quot;https://github.com/IsaacRe/vllm-kvcompress\&quot;><u>vLLM fork</u></a> and get compressing!!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;speculative-decoding-for-faster-throughput\&quot;>Speculative decoding for faster throughput</h2>\n <a href=\&quot;#speculative-decoding-for-faster-throughput\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>A new inference strategy that we implemented is speculative decoding, which is a very popular way to get faster throughput (measured in tokens per second). LLMs work by predicting the next expected token (a token can be a word, word fragment or single character) in the sequence with each call to the model, based on everything that the model has seen before. For the first token generated, this means just the initial prompt, but after that each subsequent token is generated based on the prompt plus all other tokens that have been generated. Typically, this happens one token at a time, generating a single word, or even a single letter, depending on what comes next.</p><p>But what about this prompt:</p><blockquote><p><i>Knock, knock!</i></p></blockquote><p>If you are familiar with knock-knock jokes, you could very accurately predict more than one token ahead. For an English language speaker, what comes next is a very specific sequence that is four to five tokens long: “Who’s there?” or “Who is there?” Human language is full of these types of phrases where the next word has only one, or a few, high probability choices. Idioms, common expressions, and even basic grammar are all examples of this. So for each prediction the model makes, we can take it a step further with speculative decoding to predict the next <i>n</i> tokens. This allows us to speed up inference, as we’re not limited to predicting one token at a time.</p><p>There are several different implementations of speculative decoding, but each in some way uses a smaller, faster-to-run model to generate more than one token at a time. For Workers AI, we have applied <a href=\&quot;https://github.com/apoorvumang/prompt-lookup-decoding\&quot;><u>prompt-lookup decoding</u></a> to some of the LLMs we offer. This simple method matches the last <i>n </i>tokens of generated text against text in the prompt/output and predicts candidate tokens that continue these identified patterns as candidates for continuing the output. In the case of knock-knock jokes, it can predict all the tokens for <i>“Who’s there</i>” at once after seeing “<i>Knock, knock!</i>”, as long as this setup occurs somewhere in the prompt or previous dialogue already. Once these candidate tokens have been predicted, the model can verify them all with a single forward-pass and choose to either accept or reject them. This increases the generation speed of llama-3.1-8b-instruct by up to 40% and the 70B model by up to 70%.</p><p>Speculative decoding has tradeoffs, however. Typically, the results of a model using speculative decoding have a lower quality, both when measured using benchmarks like <a href=\&quot;https://paperswithcode.com/dataset/mmlu\&quot;><u>MMLU</u></a> as well as when compared by humans. More aggressive speculation can speed up sequence generation, but generally comes with a greater impact to the quality of the result. Prompt lookup decoding offers one of the smallest overall quality impacts while still providing performance improvements, and we will be adding it to some language models on Workers AI including <a href=\&quot;https://developers.cloudflare.com/workers-ai/models/llama-3-8b-instruct\&quot;><u>@cf/meta/llama-3.1-8b-instruct</u></a>.</p><p>And, by the way, here is one of our favorite knock-knock jokes, can you guess the punchline?</p><blockquote><p><i>Knock, knock!</i></p><p><i>Who’s there?</i></p><p><i>Figs!</i></p><p><i>Figs who?</i></p><p><i>Figs the doorbell, it’s broken!</i></p></blockquote>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;keep-accelerating\&quot;>Keep accelerating</h2>\n <a href=\&quot;#keep-accelerating\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>As the AI industry continues to evolve, there will be new hardware and software that allows customers to get faster inference responses. Workers AI is committed to researching, implementing, and making upgrades to our services to help you get fast inference. As an Inference-as-a-Service platform, you’ll be able to benefit from all the optimizations we apply, without having to hire your own team of ML researchers and SREs to manage inference software and hardware deployments.\n\nWe’re excited for you to try out some of these new releases we have and let us know what you think! Check out our full-suite of AI announcements <a href=\&quot;https://blog.cloudflare.com/tag/ai/\&quot;><u>here</u></a> and check out the <a href=\&quot;https://developers.cloudflare.com/workers-ai/\&quot;><u>developer docs</u></a> to get started.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:06:43.607Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4dfJo73P9gUCVLL1TxXoH7/b74d6a660d72b28803806c736ca0e084/BLOG-2571_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;6gMpGK5HugYKaxJbvTMOHp&quot;],&quot;name&quot;:[0,&quot;LLM&quot;],&quot;slug&quot;:[0,&quot;llm&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Isaac Rehg&quot;],&quot;slug&quot;:[0,&quot;isaac-rehg&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1UL9SXrwwlSZ91njGDCyzD/89b2b5136f0d3c44c56903420c0ef650/isaac-rehg.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Jesse Kipp&quot;],&quot;slug&quot;:[0,&quot;jesse&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/8yRqemLc8lLhE9Uwzd7G4/a303cca84c1840cc961831f1ea6b4213/jesse.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;With a new generation of data center accelerator hardware and using optimization techniques such as KV cache compression and speculative decoding, we’ve made large language model (LLM) inference lightning-fast on the Cloudflare Workers AI platform.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/making-workers-ai-faster&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Making Workers AI faster and more efficient: Performance optimization with KV cache compression and speculative decoding&quot;],&quot;description&quot;:[0,&quot;With a new generation of data center accelerator hardware and using optimization techniques such as KV cache compression and speculative decoding, we’ve made large language model (LLM) inference lightning-fast on the Cloudflare Workers AI platform.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5k8fRyeI3NnIxjvP1AMDn/3fa4bc17fda66cf87d4da06fecca9ac2/Making_Workers_AI_faster_and_more_efficient-_Performance_optimization_with_KV_cache_compression_and_speculative_decoding-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;44R2ywetTc9l1c6D7oWTsz&quot;],&quot;title&quot;:[0,&quot;Zero-latency SQLite storage in every Durable Object&quot;],&quot;slug&quot;:[0,&quot;sqlite-in-durable-objects&quot;],&quot;excerpt&quot;:[0,&quot;Traditional cloud storage is inherently slow because it is accessed over a network and must synchronize many clients. But what if we could instead put your application code deep into the storage layer&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Traditional cloud storage is inherently slow, because it is normally accessed over a network and must carefully synchronize across many clients that could be accessing the same data. But what if we could instead put your application code deep into the storage layer, such that your code runs directly on the machine where the data is stored, and the database itself executes as a local library embedded inside your application?</p><p><a href=\&quot;https://developers.cloudflare.com/durable-objects/\&quot;><u>Durable Objects (DO)</u></a> are a novel approach to cloud computing which accomplishes just that: Your application code runs exactly where the data is stored. Not just on the same machine: your storage lives in the same thread as the application, requiring not even a context switch to access. With proper use of caching, storage latency is essentially zero, while nevertheless being durable and consistent.</p><p>Until today, DOs only offered key/value oriented storage. But now, they support a full SQL query interface with tables and indexes, through the power of SQLite.</p><p><a href=\&quot;https://www.sqlite.org/\&quot;><u>SQLite</u></a> is the most-used SQL database implementation in the world, with billions of installations. It’s on practically every phone and desktop computer, and many embedded devices use it as well. It&amp;#39;s known to be blazingly fast and rock solid. But it&amp;#39;s been less common on the server. This is because traditional cloud architecture favors large distributed databases that live separately from application servers, while SQLite is designed to run as an embedded library. In this post, we&amp;#39;ll show you how Durable Objects turn this architecture on its head and unlock the full power of SQLite in the cloud.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3epYvfKAWLT38mjUPsnMCj/d6566573e999ea874fc713cf31c65d62/BLOG-2536_2.png\&quot; alt=\&quot;BLOG-2536 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;900\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7c3of8FUDi3R4HC18qo2iP/9a372797b67d1e33075b9c1ef0780762/BLOG-2536_3.png\&quot; alt=\&quot;BLOG-2536 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1000\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;refresher-what-are-durable-objects\&quot;>Refresher: what are Durable Objects?</h2>\n <a href=\&quot;#refresher-what-are-durable-objects\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p><a href=\&quot;https://developers.cloudflare.com/durable-objects/\&quot;><u>Durable Objects</u></a> (DOs) are a part of the Cloudflare <a href=\&quot;https://developers.cloudflare.com/workers/\&quot;><u>Workers</u></a> serverless platform. A DO is essentially a small server that can be addressed by a unique name and can keep state both in-memory and on-disk. Workers running anywhere on Cloudflare&amp;#39;s network can send messages to a DO by its name, and all messages addressed to the same name — from anywhere in the world — will find their way to the same DO instance.</p><p>DOs are intended to be small and numerous. A single application can create billions of DOs distributed across our global network. Cloudflare automatically decides where a DO should live based on where it is accessed, automatically starts it up as needed when requests arrive, and shuts it down when idle. A DO has in-memory state while running and can also optionally store long-lived durable state. Since there is exactly one DO for each name, a DO can be used to coordinate between operations on the same logical object.</p><p>For example, imagine a real-time collaborative document editor application. Many users may be editing the same document at the same time. Each user&amp;#39;s changes must be broadcast to other users in real time, and conflicts must be resolved. An application built on DOs would typically create one DO for each document. The DO would receive edits from users, resolve conflicts, broadcast the changes back out to other users, and keep the document content updated in its local storage.</p><p>DOs are especially good at real-time collaboration, but are by no means limited to this use case. They are general-purpose servers that can implement any logic you desire to serve requests. Even more generally, <b>DOs are a basic building block for distributed systems</b>.</p><p>When using Durable Objects, it&amp;#39;s important to remember that they are intended to scale <i>out</i>, not <i>up</i>. A single object is inherently limited in throughput since it runs on a single thread of a single machine. To handle more traffic, you create more objects. This is easiest when different objects can handle different logical units of state (like different documents, different users, or different &amp;quot;shards&amp;quot; of a database), where each unit of state has low enough traffic to be handled by a single object. But sometimes, a lot of traffic needs to modify the same state: consider a vote counter with a million users all trying to cast votes at once. To handle such cases with Durable Objects, you would need to create a set of objects that each handle a subset of traffic and then replicate state to each other. Perhaps they use <a href=\&quot;https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type\&quot;><u>CRDTs</u></a> in a <a href=\&quot;https://en.wikipedia.org/wiki/Gossip_protocol\&quot;><u>gossip network</u></a>, or perhaps they implement a fan-in/fan-out approach to a single primary object. Whatever approach you take, Durable Objects make it fast and easy to create more stateful nodes as needed.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;why-is-sqlite-in-do-so-fast\&quot;>Why is SQLite-in-DO so fast?</h2>\n <a href=\&quot;#why-is-sqlite-in-do-so-fast\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In traditional cloud architecture, stateless application servers run business logic and communicate over the network to a database. Even if the network is local, database requests still incur latency, typically measured in milliseconds.</p><p>When a Durable Object uses SQLite, SQLite is invoked as a library. This means the database code runs not just on the same machine as the DO, not just in the same process, but in the very same thread. Latency is effectively zero, because there is no communication barrier between the application and SQLite. A query can complete in microseconds.</p><h4>Reads and writes are synchronous</h4><p>The SQL query API in DOs does not require you to await results — they are returned synchronously:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>// No awaits!\nlet cursor = sql.exec(&amp;quot;SELECT name, email FROM users&amp;quot;);\nfor (let user of cursor) {\n console.log(user.name, user.email);\n}\n</pre></code>\n <p>This may come as a surprise to some. Querying a database is I/O, right? I/O should always be asynchronous, right? Isn&amp;#39;t this a violation of the natural order of JavaScript?</p><p>It&amp;#39;s OK! The database content is probably cached in memory already, and SQLite is being called as a library in the same thread as the application, so the query often actually won&amp;#39;t spend any time at all waiting for I/O. Even if it does have to go to disk, it&amp;#39;s a local SSD. You might as well consider the local disk as just another layer in the memory cache hierarchy: L5 cache, if you will. In any case, it will respond quickly.</p><p>Meanwhile, synchronous queries provide some big benefits. First, the logistics of asynchronous event loops have a cost, so in the common case where the data is already in memory, a synchronous query will actually complete faster than an async one.</p><p>More importantly, though, synchronous queries help you avoid subtle bugs. Any time your application awaits a promise, it&amp;#39;s possible that some other code executes while you wait. The state of the world may have changed by the time your await completes. Maybe even other SQL queries were executed. This can lead to subtle bugs that are hard to reproduce because they require events to happen at just the wrong time. With a synchronous API, though, none of that can happen. Your code always executes in the order you wrote it, uninterrupted.</p><h4>Fast writes with Output Gates</h4><p>Database experts might have a deeper objection to synchronous queries: Yes, caching may mean we can perform reads and writes very fast. However, in the case of a write, just writing to cache isn&amp;#39;t good enough. Before we return success to our client, we must <i>confirm</i> that the write is actually <i>durable</i>, that is, it has actually made it onto disk or network storage such that it cannot be lost if the power suddenly goes out.</p><p>Normally, a database would confirm all writes before returning to the application. So if the query is successful, it is confirmed. But confirming writes can be slow, because it requires waiting for the underlying storage medium to respond. Normally, this is OK because the write is performed asynchronously, so the program can go on and work on other things while it waits for the write to finish. It looks kind of like this:</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1vuBOUXdFxUKM5gTyhKvx5/4e55fa2d8fb5a68af8a84453cf2b5d14/BLOG-2536_4.png\&quot; alt=\&quot;BLOG-2536 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;817\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>But I just told you that in Durable Objects, writes are synchronous. While a synchronous call is running, no other code in the program can run (because JavaScript does not have threads). This is convenient, as mentioned above, because it means you don&amp;#39;t need to worry that the state of the world may have changed while you were waiting. However, if write queries have to wait a while, and the whole program must pause and wait for them, then throughput will suffer.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/35QfJmRKIo763Sv3EU0tAv/96e6819df3504d9d893557f43cc30fab/BLOG-2536_5.png\&quot; alt=\&quot;BLOG-2536 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;817\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Luckily, in Durable Objects, writes do not have to wait, due to a little trick we call &amp;quot;Output Gates&amp;quot;.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2UhnMY6J6QrjWAAYH1rgTq/39532506841293c1a5c41d9843df1037/BLOG-2536_6.png\&quot; alt=\&quot;BLOG-2536 6\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;482\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>In DOs, when the application issues a write, it continues executing without waiting for confirmation. However, when the DO then responds to the client, the response is blocked by the &amp;quot;Output Gate&amp;quot;. This system holds the response until all storage writes relevant to the response have been confirmed, then sends the response on its way. In the rare case that the write fails, the response will be replaced with an error and the Durable Object itself will restart. So, even though the application constructed a &amp;quot;success&amp;quot; response, nobody can ever see that this happened, and thus nobody can be misled into believing that the data was stored.</p><p>Let&amp;#39;s see what this looks like with multiple requests:</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5nwypzObwvZ73JJ4Ho2VkS/5bd72d9c80944eb47c43b0b202cb3f86/BLOG-2536_7.png\&quot; alt=\&quot;BLOG-2536 7\&quot; class=\&quot;kg-image\&quot; width=\&quot;732\&quot; height=\&quot;734\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>If you compare this against the first diagram above, you should notice a few things:</p><ul><li><p>The timing of requests and confirmations are the same.</p></li><li><p>But, all responses were sent to the client <i>sooner</i> than in the first diagram. Latency was reduced! This is because the application is able to work on constructing the response in parallel with the storage layer confirming the write.</p></li><li><p>Request handling is no longer interleaved between the three requests. Instead, each request runs to completion before the next begins. The application does not need to worry, during the handling of one request, that its state might change unexpectedly due to a concurrent request.</p></li></ul><p>With Output Gates, we get the ease-of-use of synchronous writes, while also getting lower latency and no loss of throughput.</p><h4>N+1 selects? No problem.</h4><p>Zero-latency queries aren&amp;#39;t just faster, they allow you to structure your code differently, often making it simpler. A classic example is the &amp;quot;N+1 selects&amp;quot; or &amp;quot;N+1 queries&amp;quot; problem. Let&amp;#39;s illustrate this problem with an example:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>// N+1 SELECTs example\n\n// Get the 100 most-recently-modified docs.\nlet docs = sql.exec(`\n SELECT title, authorId FROM documents\n ORDER BY lastModified DESC\n LIMIT 100\n`).toArray();\n\n// For each returned document, get the author name from the users table.\nfor (let doc of docs) {\n doc.authorName = sql.exec(\n &amp;quot;SELECT name FROM users WHERE id = ?&amp;quot;, doc.authorId).one().name;\n}\n</pre></code>\n <p>If you are an experienced SQL user, you are probably cringing at this code, and for good reason: this code does 101 queries! If the application is talking to the database across a network with 5ms latency, this will take 505ms to run, which is slow enough for humans to notice.</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>// Do it all in one query with a join?\nlet docs = sql.exec(`\n SELECT documents.title, users.name\n FROM documents JOIN users ON documents.authorId = users.id\n ORDER BY documents.lastModified DESC\n LIMIT 100\n`).toArray();\n</pre></code>\n <p>Here we&amp;#39;ve used SQL features to turn our 101 queries into one query. Great! Except, what does it mean? We used an inner join, which is not to be confused with a left, right, or cross join. What&amp;#39;s the difference? Honestly, I have no idea! I had to look up joins just to write this example and I&amp;#39;m already confused.</p><p>Well, good news: You don&amp;#39;t need to figure it out. Because <b>when using SQLite as a library, the first example above </b><b><i>works just fine</i></b><b>.</b> It&amp;#39;ll perform about the same as the second fancy version.</p><p>More generally, when using SQLite as a library, you don&amp;#39;t have to learn how to do fancy things in SQL syntax. Your logic can be in regular old application code in your programming language of choice, orchestrating the most basic SQL queries that are easy to learn. It&amp;#39;s fine. <a href=\&quot;https://www.sqlite.org/np1queryprob.html\&quot;><u>The creators of SQLite have made this point themselves.</u></a></p><h4>Point-in-Time Recovery</h4><p>While not necessarily related to speed, SQLite-backed Durable Objects offer another feature: any object can be reverted to the state it had at any point in time in the last 30 days. So if you accidentally execute a buggy query that corrupts all your data, don&amp;#39;t worry: you can recover. There&amp;#39;s no need to opt into this feature in advance; it&amp;#39;s on by default for all SQLite-backed DOs. See the <a href=\&quot;https://developers.cloudflare.com/durable-objects/api/storage-api/#point-in-time-recovery\&quot;><u>docs</u></a> for details.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-do-i-use-it\&quot;>How do I use it?</h2>\n <a href=\&quot;#how-do-i-use-it\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Let&amp;#39;s say we&amp;#39;re an airline, and we are implementing a way for users to choose their seats on a flight. We will create a new Durable Object for each flight. Within that DO, we will use a SQL table to track the assignments of seats to passengers. The code might look something like this:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>import {DurableObject} from &amp;quot;cloudflare:workers&amp;quot;;\n\n// Manages seat assignment for a flight.\n//\n// This is an RPC interface. The methods can be called remotely by other Workers\n// running anywhere in the world. All Workers that specify same object ID\n// (probably based on the flight number and date) will reach the same instance of\n// FlightSeating.\nexport class FlightSeating extends DurableObject {\n sql = this.ctx.storage.sql;\n\n // Application calls this when the flight is first created to set up the seat map.\n initializeFlight(seatList) {\n this.sql.exec(`\n CREATE TABLE seats (\n seatId TEXT PRIMARY KEY, -- e.g. &amp;quot;3B&amp;quot;\n occupant TEXT -- null if available\n )\n `);\n\n for (let seat of seatList) {\n this.sql.exec(`INSERT INTO seats VALUES (?, null)`, seat);\n }\n }\n\n // Get a list of available seats.\n getAvailable() {\n let results = [];\n\n // Query returns a cursor.\n let cursor = this.sql.exec(`SELECT seatId FROM seats WHERE occupant IS NULL`);\n\n // Cursors are iterable.\n for (let row of cursor) {\n // Each row is an object with a property for each column.\n results.push(row.seatId);\n }\n\n return results;\n }\n\n // Assign passenger to a seat.\n assignSeat(seatId, occupant) {\n // Check that seat isn&amp;#039;t occupied.\n let cursor = this.sql.exec(`SELECT occupant FROM seats WHERE seatId = ?`, seatId);\n let result = [...cursor][0]; // Get the first result from the cursor.\n if (!result) {\n throw new Error(&amp;quot;No such seat: &amp;quot; + seatId);\n }\n if (result.occupant !== null) {\n throw new Error(&amp;quot;Seat is occupied: &amp;quot; + seatId);\n }\n\n // If the occupant is already in a different seat, remove them.\n this.sql.exec(`UPDATE seats SET occupant = null WHERE occupant = ?`, occupant);\n\n // Assign the seat. Note: We don&amp;#039;t have to worry that a concurrent request may\n // have grabbed the seat between the two queries, because the code is synchronous\n // (no `await`s) and the database is private to this Durable Object. Nothing else\n // could have changed since we checked that the seat was available earlier!\n this.sql.exec(`UPDATE seats SET occupant = ? WHERE seatId = ?`, occupant, seatId);\n }\n}\n</pre></code>\n <p>(With just a little more code, we could extend this example to allow clients to subscribe to seat changes with <a href=\&quot;https://developers.cloudflare.com/durable-objects/reference/websockets/#_top\&quot;><u>WebSockets</u></a>, so that if multiple people are choosing their seats at the same time, they can see in real time as seats become unavailable. But, that&amp;#39;s outside the scope of this blog post, which is just about SQL storage.)</p><p>Then in wrangler.toml, <a href=\&quot;https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/\&quot;><u>define a migration</u></a> setting up your DO class like usual, but instead of using new_classes, use new_sqlite_classes:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>[[migrations]]\ntag = &amp;quot;v1&amp;quot;\nnew_sqlite_classes = [&amp;quot;FlightSeating&amp;quot;]\n</pre></code>\n <p>SQLite-backed objects also support the existing <a href=\&quot;https://developers.cloudflare.com/durable-objects/api/transactional-storage-api/\&quot;><u>key/value-based storage API</u></a>: KV data is stored into a hidden table in the SQLite database. So, existing applications built on DOs will work when deployed using SQLite-backed objects.</p><p>However, because SQLite-backed objects are based on an all-new storage backend, it is currently not possible to switch an existing deployed DO class to use SQLite. You must ask for SQLite when initially deploying the new DO class; you cannot change it later. We plan to begin migrating existing DOs to the new storage backend in 2025.</p><h4>Pricing</h4><p>We’ve kept <a href=\&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/#sql-storage-billing\&quot;><u>pricing</u></a> for SQLite-in-DO similar to D1, Cloudflare’s serverless SQL database, by billing for SQL queries (based on rows) and SQL storage. SQL storage per object is limited to 1 GB during the beta period, and will be increased to 10 GB on general availability. DO <a href=\&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/#billing-metrics\&quot;><u>requests and duration billing</u></a> are unchanged and apply to all DOs regardless of storage backend.&nbsp;</p><p>During the initial beta, billing is not enabled for SQL queries (rows read and rows written) and SQL storage. SQLite-backed objects will incur charges for requests and duration. We plan to enable SQL billing in the first half of 2025 with advance notice.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-4qtd{background-color:#f8a102;font-weight:bold;text-align:left;vertical-align:top}\n.tg .tg-y0nj{background-color:#f8a102;font-weight:bold;text-align:center;vertical-align:top}\n.tg .tg-0lax{text-align:left;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-4qtd\&quot;></th>\n <th class=\&quot;tg-y0nj\&quot;><span style=\&quot;font-style:normal;text-decoration:none;color:#000\&quot;>Workers Paid</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Rows read</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>First 25 billion / month included + $0.001 / million rows</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Rows written</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>First 50 million / month included + $1.00 / million rows</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>SQL storage</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>5 GB-month + $0.20/ GB-month</span></td>\n </tr>\n</tbody></table></div><p>For more on how to use SQLite-in-Durable Objects, check out the <a href=\&quot;https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/\&quot;><u>documentation</u></a>.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-about-d1\&quot;>What about D1?</h2>\n <a href=\&quot;#what-about-d1\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare Workers already offers another SQLite-backed database product: <a href=\&quot;https://developers.cloudflare.com/d1/\&quot;><u>D1</u></a>. In fact, D1 is itself built on SQLite-in-DO. So, what&amp;#39;s the difference? Why use one or the other?</p><p>In short, you should think of D1 as a more &amp;quot;managed&amp;quot; database product, while SQLite-in-DO is more of a lower-level “compute with storage” building block.</p><p>D1 fits into a more traditional cloud architecture, where stateless application servers talk to a separate database over the network. Those application servers are typically Workers, but could also be clients running outside of Cloudflare. D1 also comes with a pre-built HTTP API and managed observability features like query insights. With D1, where your application code and SQL database queries are not colocated like in SQLite-in-DO, Workers has <a href=\&quot;https://developers.cloudflare.com/workers/configuration/smart-placement\&quot;><u>Smart Placement</u></a> to dynamically run your Worker in the best location to reduce total request latency, considering everything your Worker talks to, including D1. By the end of 2024, D1 will support automatic read replication for scalability and low-latency access around the world. If this managed model appeals to you, use D1.</p><p>Durable Objects require a bit more effort, but in return, give you more power. With DO, you have two pieces of code that run in different places: a front-end Worker which routes incoming requests from the Internet to the correct DO, and the DO itself, which runs on the same machine as the SQLite database. You may need to think carefully about which code to run where, and you may need to build some of your own tooling that exists out-of-the-box with D1. But because you are in full control, you can tailor the solution to your application&amp;#39;s needs and potentially achieve more.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;under-the-hood-storage-relay-service\&quot;>Under the hood: Storage Relay Service</h2>\n <a href=\&quot;#under-the-hood-storage-relay-service\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p><a href=\&quot;https://blog.cloudflare.com/introducing-workers-durable-objects/\&quot;><u>When Durable Objects first launched in 2020</u></a>, it offered only a simple key/value-based interface for durable storage. Under the hood, these keys and values were stored in a well-known off-the-shelf database, with regional instances of this database deployed to locations in our data centers around the world. Durable Objects in each region would store their data to the regional database.</p><p>For SQLite-backed Durable Objects, we have completely replaced the persistence layer with a new system built from scratch, called Storage Relay Service, or SRS. SRS has already been powering D1 for over a year, and can now be used more directly by applications through Durable Objects.</p><p>SRS is based on a simple idea:</p><blockquote><p><i>Local disk is fast and randomly-accessible, but expensive and prone to disk failures. Object storage (like </i><a href=\&quot;https://developers.cloudflare.com/r2/\&quot;><i><u>R2</u></i></a><i>) is cheap and durable, but much slower than local disk and not designed for database-like access patterns. Can we get the best of both worlds by using a local disk as a cache on top of object storage?</i></p></blockquote><p>So, how does it work?</p><h4>The mismatch in functionality between local disk and object storage</h4><p>A SQLite database on disk tends to undergo many small changes in rapid succession. Any row of the database might be updated by any particular query, but the database is designed to avoid rewriting parts that didn&amp;#39;t change. Read queries may randomly access any part of the database. Assuming the right indexes exist to support the query, they should not require reading parts of the database that aren&amp;#39;t relevant to the results, and should complete in microseconds.</p><p>Object storage, on the other hand, is designed for an entirely different usage model: you upload an entire &amp;quot;object&amp;quot; (blob of bytes) at a time, and download an entire blob at a time. Each blob has a different name. For maximum efficiency, blobs should be fairly large, from hundreds of kilobytes to gigabytes in size. Latency is relatively high, measured in tens or hundreds of milliseconds.</p><p>So how do we back up our SQLite database to object storage? An obviously naive strategy would be to simply make a copy of the database files from time to time and upload it as a new &amp;quot;object&amp;quot;. But, uploading the database on every change — and making the application wait for the upload to complete — would obviously be way too slow. We could choose to upload the database only occasionally — say, every 10 minutes — but this means in the case of a disk failure, we could lose up to 10 minutes of changes. Data loss is, uh, bad! And even then, for most databases, it&amp;#39;s likely that most of the data doesn&amp;#39;t change every 10 minutes, so we&amp;#39;d be uploading the same data over and over again.</p><h4>Trick one: Upload a log of changes</h4><p>Instead of uploading the entire database, SRS records a log of <i>changes</i>, and uploads those.</p><p>Conveniently, SQLite itself already has a concept of a change log: the <a href=\&quot;https://www.sqlite.org/wal.html\&quot;><u>Write-Ahead Log, or WAL</u></a>. SRS always configures SQLite to use WAL mode. In this mode, any changes made to the database are first written to a separate log file. From time to time, the database is &amp;quot;checkpointed&amp;quot;, merging the changes back into the main database file. The WAL format is <a href=\&quot;https://www.sqlite.org/fileformat2.html#the_write_ahead_log\&quot;><u>well-documented</u></a> and easy to understand: it&amp;#39;s just a sequence of &amp;quot;frames&amp;quot;, where each frame is an instruction to write some bytes to a particular offset in the database file.</p><p>SRS monitors changes to the WAL file (by hooking <a href=\&quot;https://www.sqlite.org/vfs.html\&quot;><u>SQLite&amp;#39;s VFS</u></a> to intercept file writes) to discover the changes being made to the database, and uploads those to object storage.</p><p>Unfortunately, SRS cannot simply upload every single change as a separate &amp;quot;object&amp;quot;, as this would result in too many objects, each of which would be inefficiently small. Instead, SRS batches changes over a period of up to 10 seconds, or up to 16 MB worth, whichever happens first, then uploads the whole batch as a single object.</p><p>When reconstructing a database from object storage, we must download the series of change batches and replay them in order. Of course, if the database has undergone many changes over a long period of time, this can get expensive. In order to limit how far back it needs to look, SRS also occasionally uploads a snapshot of the entire content of the database. SRS will decide to upload a snapshot any time that the total size of logs since the last snapshot exceeds the size of the database itself. This heuristic implies that the total amount of data that SRS must download to reconstruct a database is limited to no more than twice the size of the database. Since we can delete data from object storage that is older than the latest snapshot, this also means that our total stored data is capped to 2x the database size.</p><p>Credit where credit is due: This idea — uploading WAL batches and snapshots to object storage — was inspired by <a href=\&quot;https://litestream.io/\&quot;><u>Litestream</u></a>, although our implementation is different.</p><h4>Trick two: Relay through other servers in our global network</h4>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/D6uKAW3oEkzgAMKwYmQwr/453ce6d752339fb73022eb32e0e7b792/BLOG-2536_8.png\&quot; alt=\&quot;BLOG-2536 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1200\&quot; height=\&quot;452\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Batches are only uploaded to object storage every 10 seconds. But obviously, we cannot make the application wait for 10 whole seconds just to confirm a write. So what happens if the application writes some data, returns a success message to the user, and then the machine fails 9 seconds later, losing the data?</p><p>To solve this problem, we take advantage of our global network. Every time SQLite commits a transaction, SRS will immediately forward the change log to five &amp;quot;follower&amp;quot; machines across our network. Once at least three of these followers respond that they have received the change, SRS informs the application that the write is confirmed. (As discussed earlier, the write confirmation opens the Durable Object&amp;#39;s &amp;quot;output gate&amp;quot;, unblocking network communications to the rest of the world.)</p><p>When a follower receives a change, it temporarily stores it in a buffer on local disk, and then awaits further instructions. Later on, once SRS has successfully uploaded the change to object storage as part of a batch, it informs each follower that the change has been persisted. At that point, the follower can simply delete the change from its buffer.</p><p>However, if the follower never receives the persisted notification, then, after some timeout, the follower itself will upload the change to object storage. Thus, if the machine running the database suddenly fails, as long as at least one follower is still running, it will ensure that all confirmed writes are safely persisted.</p><p>Each of a database&amp;#39;s five followers is located in a different physical data center. Cloudflare&amp;#39;s network consists of hundreds of data centers around the world, which means it is always easy for us to find four other data centers nearby any Durable Object (in addition to the one it is running in). In order for a confirmed write to be lost, then, at least four different machines in at least three different physical buildings would have to fail simultaneously (three of the five followers, plus the Durable Object&amp;#39;s host machine). Of course, anything can happen, but this is exceedingly unlikely.</p><p>Followers also come in handy when a Durable Object&amp;#39;s host machine is unresponsive. We may not know for sure if the machine has died completely, or if it is still running and responding to some clients but not others. We cannot start up a new instance of the DO until we know for sure that the previous instance is dead – or, at least, that it can no longer confirm writes, since the old and new instances could then confirm contradictory writes. To deal with this situation, if we can&amp;#39;t reach the DO&amp;#39;s host, we can instead try to contact its followers. If we can contact at least three of the five followers, and tell them to stop confirming writes for the unreachable DO instance, then we know that instance is unable to confirm any more writes going forward. We can then safely start up a new instance to replace the unreachable one.</p><h4>Bonus feature: Point-in-Time Recovery</h4><p>I mentioned earlier that SQLite-backed Durable Objects can be asked to revert their state to any time in the last 30 days. How does this work?</p><p>This was actually an accidental feature that fell out of SRS&amp;#39;s design. Since SRS stores a complete log of changes made to the database, we can restore to any point in time by replaying the change log from the last snapshot. The only thing we have to do is make sure we don&amp;#39;t delete those logs too soon.</p><p>Normally, whenever a snapshot is uploaded, all previous logs and snapshots can then be deleted. But instead of deleting them immediately, SRS merely marks them for deletion 30 days later. In the meantime, if a point-in-time recovery is requested, the data is still there to work from.</p><p>For a database with a high volume of writes, this may mean we store a lot of data for a lot longer than needed. As it turns out, though, once data has been written at all, keeping it around for an extra month is pretty cheap — typically cheaper, even, than writing it in the first place. It&amp;#39;s a small price to pay for always-on disaster recovery.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;get-started-with-sqlite-in-do\&quot;>Get started with SQLite-in-DO</h2>\n <a href=\&quot;#get-started-with-sqlite-in-do\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>SQLite-backed DOs are available in beta starting today. You can start building with SQLite-in-DO by visiting <a href=\&quot;https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/\&quot;><u>developer documentation</u></a> and provide beta feedback via the <a href=\&quot;https://discord.com/channels/595317990191398933/773219443911819284\&quot;><u>#durable-objects channel</u></a> on our Developer Discord.</p><p>Do distributed systems like SRS excite you? Would you like to be part of building them at Cloudflare? <a href=\&quot;https://boards.greenhouse.io/embed/job_app?token=5390243\&quot;><u>We&amp;#39;re hiring!</u></a></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:07:19.134Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Nrfj970STQQqJd9TFBTfX/5c9f2098d8cae3a17244f5772bcac9f4/BLOG-2536_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}],[0,{&quot;id&quot;:[0,&quot;5v2UZdTRX1Rw9akmhexnxs&quot;],&quot;name&quot;:[0,&quot;Durable Objects&quot;],&quot;slug&quot;:[0,&quot;durable-objects&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Kenton Varda&quot;],&quot;slug&quot;:[0,&quot;kenton-varda&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1FFs4T2j1RyvxasKOkkdtP/e7bd05ce89c560a545853000a25da9bc/kenton-varda.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@kentonvarda&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Traditional cloud storage is inherently slow because it is accessed over a network and must synchronize many clients. But what if we could instead put your application code deep into the storage layer, such that your code runs where the data is stored? Durable Objects with SQLite do just that.\n&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/sqlite-in-durable-objects&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Zero-latency SQLite storage in every Durable Object&quot;],&quot;description&quot;:[0,&quot;Traditional cloud storage is inherently slow because it is accessed over a network and must synchronize many clients. But what if we could instead put your application code deep into the storage layer, such that your code runs where the data is stored? Durable Objects with SQLite do just that.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1EuNamTw8x3H3XRzBaobmS/927b290c7637aa32e7d0f4edce38dae3/Zero-latency_SQLite_storage_in_every_Durable_Object-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;4ZEcwzAEh1rg9IxDqC3UyM&quot;],&quot;title&quot;:[0,&quot;Startup Program revamped: build and grow on Cloudflare with up to $250,000 in credits&quot;],&quot;slug&quot;:[0,&quot;startup-program-250k-credits&quot;],&quot;excerpt&quot;:[0,&quot;Cloudflare’s Startup Program now offers up to $250,000 in credits for companies building on our Developer Platform. The program relaunch uses clear and predictable credits so that you can easily see how usage impacts future pricing. &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Today, we’re pleased to offer startups up to $250,000 in credits to use on Cloudflare’s <a href=\&quot;https://www.cloudflare.com/developer-platform/products/\&quot;><u>Developer Platform</u></a>. This new credits system will allow you to clearly see usage and associated fees to plan for a predictable future after the $250,000 in credits have been used up or after one year, whichever happens first.</p><p>You can see eligibility criteria and apply to the start-up program <a href=\&quot;https://www.cloudflare.com/forstartups/\&quot;><u>here</u></a>.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-can-you-use-the-credits-for\&quot;>What can you use the credits for?</h2>\n <a href=\&quot;#what-can-you-use-the-credits-for\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Credits can be applied to all Developer Platform products, as well as <a href=\&quot;https://developers.cloudflare.com/argo-smart-routing/\&quot;><u>Argo</u></a> and <a href=\&quot;https://developers.cloudflare.com/cache/advanced-configuration/cache-reserve/\&quot;><u>Cache Reserve</u></a>. Moreover, we provide participants with up to three <a href=\&quot;https://www.cloudflare.com/plans/\&quot;><u>Enterprise-level domains</u></a>, which includes CDN, DDoS, DNS, WAF, Zero Trust, and other <a href=\&quot;https://www.cloudflare.com/application-services/products/\&quot;><u>security and performance products</u></a> that a participant can enable for their website.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;developer-tools-and-building-on-cloudflare\&quot;>Developer tools and building on Cloudflare</h3>\n <a href=\&quot;#developer-tools-and-building-on-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>You can use credits for Cloudflare Developer Platform products, including those listed in the table below.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/QXGJp4eBt8AQTXleACTnI/a4b0dda0167733d9e04a8bf1ed5bc611/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1498\&quot; height=\&quot;572\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Note: credits for the Cloudflare Startup Program apply to Cloudflare products only, this table is illustrative of similar products in the market.</i></sup></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;speed-and-performance-with-cloudflare\&quot;>Speed and performance with Cloudflare</h3>\n <a href=\&quot;#speed-and-performance-with-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We know that founders need all the help they can get when starting their businesses. Beyond the Developer Platform, you can also use the Startup Program for our speed and performance products. Getting customers where they need to go within <a href=\&quot;https://developers.cloudflare.com/speed/\&quot;><u>milliseconds</u></a> on your website or application is the difference between closing a sale or not. You can test your speed <a href=\&quot;https://developers.cloudflare.com/fundamentals/basic-tasks/test-speed/\&quot;><u>here</u></a> and learn how to optimize your speed and performance <a href=\&quot;https://developers.cloudflare.com/learning-paths/get-started/performance/optimize-speed/\&quot;><u>here</u></a> with solutions like: <a href=\&quot;https://developers.cloudflare.com/images/\&quot;><u>Images</u></a>, <a href=\&quot;https://developers.cloudflare.com/argo-smart-routing/\&quot;><u>Argo</u></a>, and <a href=\&quot;https://developers.cloudflare.com/cache/advanced-configuration/early-hints/\&quot;><u>Early Hints</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;security-from-cloudflare\&quot;>Security from Cloudflare</h3>\n <a href=\&quot;#security-from-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>But, wait, there’s more: beyond the Developer Platform products and speed tools, you can also use Cloudflare’s many security features through the Startup Program as well. These include <a href=\&quot;https://developers.cloudflare.com/waf/\&quot;><u>Web Application Firewall</u></a> (<a href=\&quot;https://www.google.com/aclk?sa=l&amp;ai=DChcSEwj6jt32op2IAxXk1cIEHQVsCf8YABAAGgJwdg&amp;co=1&amp;ase=2&amp;gclid=Cj0KCQjw28W2BhC7ARIsAPerrcIntApH-BAsWuajq8owh4eTi3Z1hH6S3xeg51-QEKIIuOYtfAxN7TUaAvSvEALw_wcB&amp;sig=AOD64_2mwuQ5V4e7y1VboIJtoTEiFHnEkg&amp;q&amp;nis=4&amp;adurl&amp;ved=2ahUKEwjOpdj2op2IAxU5LEQIHf_dDqIQ0Qx6BAgYEAE\&quot;><u>WAF</u></a>), <a href=\&quot;https://developers.cloudflare.com/ddos-protection/reference/alerts/\&quot;><u>DDoS Alerts</u></a>, bundled <a href=\&quot;https://www.cloudflare.com/plans/\&quot;><u>protection plans</u></a>, and more. The Startup Program also includes <a href=\&quot;https://www.cloudflare.com/plans/zero-trust-services/\&quot;><u>Zero Trust</u></a> solutions. Learn how others are <a href=\&quot;https://www.cloudflare.com/case-studies/?usecase=Enable+zero+trust+security+for+workforce\&quot;><u>securing their technology and tools</u></a> with Cloudflare Zero Trust.</p><p>For more inspiration, check out our <a href=\&quot;https://workers.cloudflare.com/built-with/\&quot;><u>Built with Cloudflare site</u></a>, which highlights what other startups are building.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;who-can-use-the-credits\&quot;>Who can use the credits?</h2>\n <a href=\&quot;#who-can-use-the-credits\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Eligibility criteria can be found <a href=\&quot;https://www.cloudflare.com/forstartups/\&quot;><u>here</u></a> and include:</p><ul><li><p><code><i>Companies building a software-based product or service</i></code></p></li><li><p><code><i>Founded within the last 5 years (2019-2024)</i></code></p></li><li><p><code><i>Have between $50,000 - $5,000,000 in funding</i></code></p><ul><li><p><code><i>Note that for startups who have not yet raised at least $50,000, there may be other opportunities for lower credit amounts. Please apply with the promo code “BOOTSTRAPPED” if you haven’t raised $50,000 yet, but are interested in the Cloudflare Startup Program</i></code></p></li></ul></li><li><p><code><i>Have a LinkedIn profile, valid website, and email address</i></code></p></li><li><p><code><i>Bonus criteria that adds to your application: being part of an approved accelerator</i></code></p></li></ul>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-will-you-build\&quot;>What will you build?</h2>\n <a href=\&quot;#what-will-you-build\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We’re excited to see what you will build. Please <a href=\&quot;https://discord.com/invite/cloudflaredev\&quot;><u>share what you’re up to with us</u></a> so that we can help you however it makes sense. If you’re actively using Cloudflare’s Developer Platform, we’d love to hear more about what you’re building and share it on our <a href=\&quot;https://workers.cloudflare.com/built-with/\&quot;><u>Built with Cloudflare site</u></a>.</p><p>Are you a startup looking for additional support, resources, or access to funding? Apply for our <a href=\&quot;https://blog.cloudflare.com/tag/workers-launchpad\&quot;><u>Workers Launchpad Program</u></a>! The program runs for a few months, and in addition to the Startup Program, participants get access to hands-on bootcamp sessions, Solutions Architect office hours, introductions to VCs, and the opportunity to present at Demo Day.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;why-does-cloudflare-support-founders-and-startups\&quot;>Why does Cloudflare support founders and startups?&nbsp;</h2>\n <a href=\&quot;#why-does-cloudflare-support-founders-and-startups\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Founders and developers face enough challenges without having to worry about incurring egregious costs to test technology and start building in the earliest days. You have the world at your fingertips and should be empowered to build and create without limitations. Invest money in your innovation, not in the infrastructure and technology that supports it.</p><p>The Startup Program understands this founder experience deeply, as the team is made up of former founders. Cloudflare is committed to programs like this to empower founders building the <i>next big thing</i>. Offering up to $250,000 in credits will allow folks to leverage even more of what we have to offer: a developer experience that removes friction, saves money, and gets applications spun up in hours, not days.&nbsp;</p><p>We want to support founders from everywhere on earth.</p><p>Be bold and keep building! Follow <a href=\&quot;https://x.com/cloudflaredev\&quot;><u>@CloudflareDev</u></a> and join our <a href=\&quot;https://discord.com/invite/cloudflaredev\&quot;><u>Developer Discord</u></a> server.</p><p>Are you a startup building on Cloudflare? <a href=\&quot;https://www.cloudflare.com/forstartups\&quot;><u>Apply here!</u></a></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-26T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-10T14:29:53.889Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/FjHQVQuubKkVKLJ0QStNV/674a701865f65d0c7cc0aae99995d9de/image2.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;6hbkItfupogJP3aRDAq6v8&quot;],&quot;name&quot;:[0,&quot;Cloudflare Workers&quot;],&quot;slug&quot;:[0,&quot;workers&quot;]}],[0,{&quot;id&quot;:[0,&quot;5cye1Bh5KxFh3pKSnX8Dsy&quot;],&quot;name&quot;:[0,&quot;Serverless&quot;],&quot;slug&quot;:[0,&quot;serverless&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;5tk59ZFOQlw6hnNzbDnhZJ&quot;],&quot;name&quot;:[0,&quot;Cloudflare for Startups&quot;],&quot;slug&quot;:[0,&quot;cloudflare-for-startups&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Christopher Rotas&quot;],&quot;slug&quot;:[0,&quot;christopher-rotas&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/eO2N5vG0MxTmzo94wGNAf/c201a8c4ebb28f873e0c4c1524e52b62/christopher-rotas.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Melissa Kargiannakis&quot;],&quot;slug&quot;:[0,&quot;melissa-kargiannakis&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3SBfCoKJH5IovCRltyryoh/597646a09632eb0507c3d47b7f40ce61/_tmp_mini_magick20230216-39-1fov7v0.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}]]],&quot;meta_description&quot;:[0,&quot;Cloudflare’s Startup Program now offers up to $250,000 in credits for companies building on our Developer Platform. The program relaunch uses clear and predictable credits so that you can easily see how usage impacts future pricing. &quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;Startup Program revamped: build and grow on Cloudflare with up to $250,000 in credits - LL - (KO, DE, FR, JP, TW, CN, ES)&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;Translated for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/startup-program-250k-credits&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Startup Program revamped: build and grow on Cloudflare with up to $250,000 in credits&quot;],&quot;description&quot;:[0,&quot;Cloudflare’s Startup Program now offers up to $250,000 in credits for companies building on our Developer Platform. The program relaunch uses clear and predictable credits so that you can easily see how usage impacts future pricing. &quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6JY9nWh0ZbV5uhxCyu0xLY/ee490b01b9d99350289c123d048fd45f/Startup_Program_revamped-_build_and_grow_on_Cloudflare_with_up_to__250_000_in_credits-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;sC3G9YR2M9IIoRMg8slDl&quot;],&quot;title&quot;:[0,&quot;Introducing Speed Brain: helping web pages load 45% faster&quot;],&quot;slug&quot;:[0,&quot;introducing-speed-brain&quot;],&quot;excerpt&quot;:[0,&quot;We are excited to announce the latest leap forward in speed – Speed Brain. Speed Brain uses the Speculation Rules API to prefetch content for the user's likely next navigations. The goal is to download a web page to the browser before a user navigates to it, allowing pages to load instantly. \n&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Each time a user visits your web page, they are initiating a race to receive content as quickly as possible. Performance is a critical <a href=\&quot;https://www.speedcurve.com/blog/psychology-site-speed/\&quot;><u>factor</u></a> that influences how visitors interact with your site. Some might think that moving content across the globe introduces significant latency, but for a while, network transmission speeds have approached their <a href=\&quot;https://blog.cloudflare.com/fastest-internet/\&quot;><u>theoretical limits</u></a>. To put this into perspective, data on Cloudflare can traverse the 11,000 kilometer round trip between New York and London in about 76 milliseconds – faster than the <a href=\&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4043155/#:~:text=one%20blink%20lasts%20about%201/3%20s\&quot;><u>blink of an eye</u></a>.</p><p>However, delays in loading web pages persist due to the complexities of processing requests, responses, and configurations. In addition to pushing advancements in <a href=\&quot;https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/\&quot;><u>connection establishment</u></a>, <a href=\&quot;https://blog.cloudflare.com/this-is-brotli-from-origin/\&quot;><u>compression</u></a>, <a href=\&quot;https://blog.cloudflare.com/cloudflare-gen-12-server-bigger-better-cooler-in-a-2u1n-form-factor/\&quot;><u>hardware</u></a>, and <a href=\&quot;https://blog.cloudflare.com/pingora-open-source/\&quot;><u>software</u></a>, we have built a new way to reduce page load latency by anticipating how visitors will interact with a given web page.&nbsp;</p><p>Today we are very excited to share the latest leap forward in speed: <b>Speed Brain</b>. It relies on the <a href=\&quot;https://developer.chrome.com/docs/web-platform/prerender-pages\&quot;><u>Speculation Rules API </u></a>to <a href=\&quot;https://developer.mozilla.org/en-US/docs/Glossary/Prefetch\&quot;><u>prefetch</u></a> the content of the user&amp;#39;s likely next navigations. The main goal of Speed Brain is to download a web page to the browser cache before a user navigates to it, allowing pages to load almost instantly when the actual navigation takes place.&nbsp;</p><p>Our initial approach uses a <a href=\&quot;https://developer.chrome.com/blog/speculation-rules-improvements#eagerness\&quot;><u>conservative</u></a> model that prefetches static content for the next page when a user starts a touch or <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event\&quot;><u>click event</u></a>. Through the fourth quarter of 2024 and into 2025, we will offer more aggressive speculation models, such as speculatively <a href=\&quot;https://developer.mozilla.org/en-US/docs/Glossary/Prerender\&quot;><u>prerendering</u></a> (not just fetching the page before the navigation happens but rendering it completely) for an even faster experience. Eventually, Speed Brain will learn how to eliminate latency for your static website, without any configuration, and work with browsers to make sure that it loads as fast as possible.&nbsp;&nbsp;</p><p>To illustrate, imagine an ecommerce website selling clothing. Using the insights from our global request logs, we can predict with high accuracy that a typical visitor is likely to click on ‘Shirts’ when viewing the parent page ‘Mens &amp;gt; Clothes’. Based on this, we can start delivering static content, like images, before the shopper even clicks the ‘Shirts’ link. As a result, when they inevitably click, the page loads instantly. <b>Recent lab testing of our aggressive loading model implementation has shown up to a 75% reduction in </b><a href=\&quot;https://developer.mozilla.org/en-US/docs/Glossary/Largest_contentful_paint\&quot;><b><u>Largest Contentful Paint (LCP)</u></b></a>, the time it takes for the largest visible element (like an image, video, or text block) to load and render in the browser.</p><p>The best part? We are making Speed Brain available to all plan types immediately and at no cost. Simply toggle on the Speed Brain feature for your website from the <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/speed/optimization/content\&quot;><u>dashboard</u></a> or the <a href=\&quot;https://developers.cloudflare.com/api/operations/zone-settings-get-speed-brain-setting\&quot;><u>API</u></a>. It’ll feel like magic, but behind the scenes it&amp;#39;s a lot of clever engineering.&nbsp;</p><p>We have already enabled Speed Brain by default on <u>all</u> free domains and are seeing a <b>reduction in LCP of 45% on successful prefetches.</b> Pro, Business, and Enterprise domains need to enable Speed Brain manually. If you have not done so already, we <b>strongly</b> recommend also <a href=\&quot;https://developers.cloudflare.com/web-analytics/get-started/#sites-proxied-through-cloudflare\&quot;><u>enabling Real User Measurements (RUM)</u></a> via your dashboard so you can see your new and improved web page performance. As a bonus, enabling RUM for your domain will help us provide <b>improved</b> and <b>customized</b> prefetching and prerendering rules for your website in the near future!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-browsers-work-at-a-glance\&quot;>How browsers work at a glance</h2>\n <a href=\&quot;#how-browsers-work-at-a-glance\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Before discussing how Speed Brain can help load content exceptionally fast, we need to take a step back to review the complexity of loading content on browsers. Every time a user navigates to your web page, a series of request and response cycles must be completed.&nbsp;</p><p>After the browser <a href=\&quot;https://www.debugbear.com/blog/http-server-connections\&quot;><u>establishes a secure connection</u></a> with a server, it sends an HTTP request to retrieve the base document of the web page. The server processes the request, constructs the necessary HTML document and sends it back to the browser in the response. </p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6hxlOWcShKyU4y6sqNYQs1/5717e4ebc130887376d629f9926d7a98/BLOG-2422_2.png\&quot; alt=\&quot;BLOG-2422 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1371\&quot; height=\&quot;1821\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>When the browser receives an HTML document, it immediately begins <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work#parsing\&quot;><u>parsing</u></a> the content. During this process, it may encounter references to external resources such as CSS files, JavaScript, images, and fonts. These subresources are essential for rendering the page correctly, so the browser issues additional HTTP requests to fetch them. However, if these resources are available in the browser’s cache, the browser can retrieve them locally, significantly reducing <a href=\&quot;https://www.cloudflare.com/learning/performance/glossary/what-is-latency/\&quot;><u>network latency</u></a> and improving page load times.</p><p>As the browser processes HTML, CSS, and JavaScript, the rendering engine begins to display content on the screen. Once the page’s visual elements are displayed, user interactions — like clicking a link — prompt the browser to restart much of this process to fetch new content for the next page. This workflow is typical of every browsing session: as users navigate, the browser continually fetches and renders new or uncached resources, introducing a delay before the new page fully loads.</p><p>Take the example of a user navigating the shopping site described above. As the shopper moves from the homepage to the ‘men&amp;#39;s’ section of the site to the ‘clothing’ section to the ‘shirts’ section, the time spent on retrieving each of those subsequent pages can add up and contribute to the shopper leaving the site before they complete the transaction.&nbsp;&nbsp;</p><p>Ideally, having prefetched and prerendered pages present in the browser at the time each of those links are clicked would eliminate much of the network latency impact, allowing the browser to load content instantly and providing a smoother user experience.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;wait-ive-heard-this-story-before-how-did-we-get-to-speed-brain\&quot;>Wait, I’ve heard this story before (how did we get to Speed Brain?)</h2>\n <a href=\&quot;#wait-ive-heard-this-story-before-how-did-we-get-to-speed-brain\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We know what you’re thinking. We’ve had prefetching for years. There have even been several speculative prefetching efforts in the past. You’ve heard this all before. How is this different now?</p><p>You’re right, of course. Over the years, there has been a constant effort by developers and browser vendors to optimize page load times and enhance user experience across the web. Numerous techniques have been developed, spanning various layers of the Internet stack — from optimizing network layer connectivity to preloading application content closer to the client.</p><h4>Early prefetching: lack of data and flexibility</h4><p>Web prefetching has been one such technique that has existed for more than a decade. It is based on the assumption that certain subresources are likely to be needed in the near future, so why not fetch them proactively? This could include anything from HTML pages to images, stylesheets, or scripts that the user might need as they navigate through a website. In fact, the core concept of speculative execution is not new, as it&amp;#39;s a general technique that&amp;#39;s been employed in various areas of computer science for years, with <a href=\&quot;https://en.wikipedia.org/wiki/Branch_predictor\&quot;><u>branch prediction</u></a> in CPUs as a prime example.</p><p>In the early days of the web, several custom prefetching solutions emerged to enhance performance. For example, in 2005, Google introduced the <a href=\&quot;https://google.fandom.com/wiki/Google_Web_Accelerator\&quot;><u>Google Web Accelerator</u></a>, a client-side application aimed at speeding up browsing for broadband users. Though innovative, the project was short-lived due to privacy and compatibility issues (we will describe how Speed Brain is different below). Predictive prefetching at that time lacked the data insights and API support for capturing user behavior, especially those handling sensitive actions like deletions or purchases.</p><h4>Static lists and manual effort</h4><p>Traditionally, prefetching has been accomplished through the use of the <code>&amp;lt;link rel=&amp;quot;prefetch&amp;quot;&amp;gt;</code> attribute as one of the <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/prefetch\&quot;><u>Resource Hints</u></a>. Developers had to manually specify the attribute on each page for each resource they wanted the browser to preemptively fetch and cache in memory. This manual effort has not only been laborious but developers often lacked insight into what resources should be prefetched, which reduced the quality of their specified hints.</p><p>In a similar vein, <a href=\&quot;https://developers.cloudflare.com/speed/optimization/content/prefetch-urls/\&quot;><u>Cloudflare has offered a URL prefetching feature since 2015</u></a>. Instead of prefetching in browser cache, Cloudflare allows customers to prefetch a static list of resources into the CDN cache. The feature allows prefetching resources in advance of when they are actually needed, usually during idle time or when network conditions are favorable. However, similar concerns apply for CDN prefetching, since customers have to manually decide on what resources are good candidates for prefetching for each page they own. If misconfigured, static link prefetching can be a <a href=\&quot;https://en.wiktionary.org/wiki/footgun\&quot;><u>footgun</u></a>, causing the web page load time to actually slow down.</p><h4>Server Push and its struggles</h4><p><a href=\&quot;https://datatracker.ietf.org/doc/html/rfc9113#name-server-push\&quot;><u>HTTP/2’s &amp;quot;server push&amp;quot;</u></a> was another attempt to improve web performance by pushing resources to the client before they were requested. In theory, this would reduce latency by eliminating the need for additional round trips for future assets. However, the server-centric dictatorial nature of &amp;quot;pushing&amp;quot; resources to the client raised significant challenges, primarily due to lack of context about what was already cached in the browser. This not only wasted bandwidth but had the potential to slow down the delivery of critical resources, like base HTML and CSS, due to race conditions on browser fetches when rendering the page. The <a href=\&quot;https://datatracker.ietf.org/doc/html/draft-kazuho-h2-cache-digest-01\&quot;><u>proposed solution of cache digests</u></a>, which would have informed servers about client cache contents, never gained widespread implementation, leaving servers to push resources blindly. <a href=\&quot;https://developer.chrome.com/blog/removing-push\&quot;><u>In October 2022, Google Chrome removed Server Push support</u></a>, and in September 2024, <a href=\&quot;https://groups.google.com/a/mozilla.org/g/dev-platform/c/vU9hJg343U8/m/4cZsHz7TAQAJ\&quot;><u>Firefox followed suit</u></a>.</p><h4>A step forward with Early Hints</h4><p>As a successor, <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc8297\&quot;><u>Early Hints</u></a> was specified in 2017 but not widely adopted until 2022, when <a href=\&quot;https://blog.cloudflare.com/early-hints\&quot;><u>we partnered with browsers and key customers to deploy it</u></a>. It offers a more efficient alternative by &amp;quot;hinting&amp;quot; to clients which resources to load, allowing better prioritization based on what the browser needs. Specifically, the server sends a 103 Early Hints HTTP status code with a list of key page assets that the browser should start loading while the main response is still being prepared. This gives the browser a head start in fetching essential resources and avoids redundant preloading if assets are already cached. Although Early Hints doesn&amp;#39;t adapt to user behaviors or dynamic page conditions (yet), its use is primarily limited to preloading specific assets rather than full web pages — in particular, cases where there is a long server “think time” to produce HTML.</p><p>As the web evolves, tools that can handle complex, dynamic user interactions will become increasingly important to balance the performance gains of speculative execution with its potential drawbacks for end-users. For years Cloudflare has offered performance-based solutions that adapt to user behavior and work to balance the speed and correctness decisions across the Internet like <a href=\&quot;https://www.cloudflare.com/application-services/products/argo-smart-routing/\&quot;><u>Argo Smart Routing</u></a>, <a href=\&quot;https://blog.cloudflare.com/introducing-smarter-tiered-cache-topology-generation/\&quot;><u>Smart Tiered Cache</u></a>, and <a href=\&quot;https://developers.cloudflare.com/workers/configuration/smart-placement/\&quot;><u>Smart Placement</u></a>. Today we take another step forward toward an adaptable framework for serving content lightning-fast.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;enter-speed-brain-what-makes-it-different\&quot;>Enter Speed Brain: what makes it different?</h2>\n <a href=\&quot;#enter-speed-brain-what-makes-it-different\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Speed Brain offers a robust approach for implementing predictive prefetching strategies directly within the browser based on the ruleset returned by our servers. By building on lessons from previous attempts, it shifts the responsibility for resource prediction to the client, enabling more dynamic and personalized optimizations based on user interaction – like hovering over a link, for example – and their device capabilities. Instead of the browser sitting idly waiting for the next web page to be requested by the user, it takes cues from how a user is interacting with a page and begins asking for the next web page before the user finishes clicking on a link.</p><p>Behind the scenes, all of this magic is made possible by the <a href=\&quot;https://developer.chrome.com/docs/web-platform/prerender-pages#speculation-rules-api\&quot;><u>Speculation Rules API</u></a>, which is an emerging standard in the web performance space from Google. When Cloudflare’s Speed Brain feature is enabled, an HTTP header called Speculation-Rules is added to web page responses. The value for this header is a URL that hosts an opinionated Rules configuration. This configuration instructs the browser to initiate prefetch requests for future navigations. Speed Brain does not improve page load time for the first page that is visited on a website, but it can improve it for subsequent web pages that are visited on the same site.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Fu2ADDum0Pp9e5kq94Jd4/3eba0ffc4d94c42af67d4e9c1c708a29/BLOG-2422_3.png\&quot; alt=\&quot;BLOG-2422 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;756\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The idea seems simple enough, but <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API#unsafe_prefetching\&quot;><u>prefetching comes with challenges</u></a>, as some prefetched content may never end up being used. With the initial release of Speed Brain, we have designed a solution with guardrails that addresses two important but distinct issues that limited previous speculation efforts — <i>stale prefetch configuration</i> and <i>incorrect prefetching. </i>The Speculation Rules API configuration we have chosen for this initial release has been carefully designed to balance safety of prefetching while still maintaining broad applicability of rules for the entire site.</p><h4>Stale prefetch configuration</h4><p>As websites inevitably change over time, static prefetch configurations often become outdated, leading to inefficient or ineffective prefetching. This has been especially true for techniques like the rel=prefetch attribute or static CDN prefetching URL sets, which have required developers to manually maintain relevant prefetchable URL lists for each page of their website. Most static prefetch lists are based on developer intuition rather than real user navigation data, potentially missing important prefetch opportunities or wasting resources on unnecessary prefetches.&nbsp;</p><h4>Incorrect prefetching</h4><p>Since prefetch requests are just like normal requests except with a `sec-purpose` HTTP request header, they incur the same overhead on the client, network, and server. However, the crucial difference is that prefetch requests anticipate user behavior and the response might not end up being used, <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API#unsafe_prefetching\&quot;><u>so all that overhead might be wasted</u></a>. This makes prefetch accuracy extremely important — that is, maximizing the percentage of prefetched pages that end up being viewed by the user. Incorrect prefetching can lead to inefficiencies and unneeded costs, such as caching resources that aren&amp;#39;t requested, or wasting bandwidth and network resources, which is especially critical on metered mobile networks or in low-bandwidth environments.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;guardrails\&quot;>Guardrails</h3>\n <a href=\&quot;#guardrails\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With the initial release of Speed Brain, we have designed a solution with important side effect prevention guardrails that completely removes the chance of <i>stale prefetch configuration</i>, and minimizes the risk of<i> incorrect prefetching</i>. This opinionated configuration is achieved by leveraging the <a href=\&quot;https://developer.chrome.com/blog/speculation-rules-improvements\&quot;><u>document rules</u></a> and <a href=\&quot;https://developer.chrome.com/blog/speculation-rules-improvements#eagerness\&quot;><u>eagerness</u></a> settings from the <a href=\&quot;https://developer.chrome.com/docs/web-platform/prerender-pages#speculation-rules-api\&quot;><u>Speculation Rules API</u></a>. Our chosen configuration looks like the following:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>{\n &amp;quot;prefetch&amp;quot;: [{\n &amp;quot;source&amp;quot;: &amp;quot;document&amp;quot;,\n &amp;quot;where&amp;quot;: {\n &amp;quot;and&amp;quot;: [\n { &amp;quot;href_matches&amp;quot;: &amp;quot;/*&amp;quot;, &amp;quot;relative_to&amp;quot;: &amp;quot;document&amp;quot; },\n ]\n },\n &amp;quot;eagerness&amp;quot;: &amp;quot;conservative&amp;quot;\n }]\n}\n</pre></code>\n <h5>\nDocument Rules</h5><p><a href=\&quot;https://developer.chrome.com/blog/speculation-rules-improvements\&quot;><u>Document Rules</u></a>, indicated by &amp;quot;source&amp;quot;: &amp;quot;document&amp;quot; and the &amp;quot;where&amp;quot; key in the configuration, allows prefetching to be applied dynamically over the entire web page. This eliminates the need for a predefined static URL list for prefetching. Hence, we remove the problem of <i>stale prefetch configuration</i> as prefetch candidate links are determined based on the active page structure.</p><p>Our use of &amp;quot;relative_to&amp;quot;: &amp;quot;document&amp;quot; in the where clause instructs the browser to limit prefetching to same-site links. This has the added bonus of allowing our implementation to avoid cross-origin prefetches to avoid any privacy implications for users, as it doesn’t follow them around the web.&nbsp;</p><h5>Eagerness</h5><p><a href=\&quot;https://developer.chrome.com/docs/web-platform/prerender-pages#eagerness\&quot;><u>Eagerness</u></a> controls how aggressively the browser prefetches content. There are four possible settings:</p><ul><li><p><b><i>immediate</i></b><i>: Used as soon as possible on page load — generally as soon as the rule value is seen by the browser, it starts prefetching the next page.</i></p></li><li><p><b><i>eager</i></b><i>: Identical to immediate setting above, but the prefetch trigger additionally relies on slight user interaction events, such as moving the cursor towards the link (coming soon).</i></p></li><li><p><b><i>moderate</i></b><i>: Prefetches if you hold the pointer over a link for more than 200 milliseconds (or on the </i><a href=\&quot;https://developer.mozilla.org/docs/Web/API/Element/pointerdown_event\&quot;><i><u>pointerdown</u></i></a><i> event if that is sooner, and on mobile where there is no hover event).</i></p></li><li><p><b><i>conservative</i></b><i>: Prefetches on pointer or touch down on the link.</i></p></li></ul><p>Our initial release of Speed Brain makes use of the <b><u>conservative</u></b> eagerness value to minimize the risk of incorrect prefetching, which can lead to unintended resource waste while making your websites noticeably faster. While we lose out on the potential performance improvements that the more aggressive eagerness settings offer, we chose this cautious approach to prioritize safety for our users. Looking ahead, we plan to explore more dynamic eagerness settings for sites that could benefit from a more liberal setting, and we&amp;#39;ll also expand our rules to include <a href=\&quot;https://developer.mozilla.org/en-US/docs/Glossary/Prerender\&quot;><u>prerendering</u></a>.</p><p>Another important safeguard we implement is to only accept prefetch requests for static content that is already stored in our CDN cache. If the content isn&amp;#39;t in the cache, we reject the prefetch request. Retrieving content directly from our CDN cache for prefetching requests lets us bypass concerns about their cache eligibility. The rationale for this is straightforward: if a page is not eligible for caching, we don&amp;#39;t want it to be prefetched in the browser cache, as it could lead to unintended consequences and increased origin load. For instance, prefetching a logout page might log the user out prematurely before the user actually finishes their action. Stateful prefetching or prerendering requests can have unpredictable effects, potentially altering the server&amp;#39;s state for actions the client has not confirmed. By only allowing prefetching for pages already in our CDN cache, we have confidence those pages will not negatively impact the user experience.</p><p>These guardrails were implemented to work in performance-sensitive environments. We measured the impact of our baseline conservative deployment model on all pages across <a href=\&quot;https://developers.cloudflare.com/\&quot;><u>Cloudflare’s developer documentation</u></a> in early July 2024. We found that we were able to prefetch the correct content, content that would in fact be navigated to by the users, <b>94</b>% of the time. We did this while improving the performance of the navigation by reducing LCP at p75 quantile by <b>40</b>% without inducing any unintended side effects. The results were amazing!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;explaining-cloudflares-implementation\&quot;>Explaining Cloudflare’s implementation&nbsp;</h2>\n <a href=\&quot;#explaining-cloudflares-implementation\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Our global <a href=\&quot;https://www.cloudflare.com/network\&quot;><u>network</u></a> spans over 330 cities and operates within 50 milliseconds of 95% of the Internet-connected population. This extensive reach allows us to significantly improve the performance of cacheable assets for our customers. By leveraging this network for smart prefetching with Speed Brain, Cloudflare can serve prefetched content directly from the CDN cache, reducing network latency to practically instant.</p><p>Our unique position on the network provides us the leverage to automatically enable Speed Brain without requiring any changes from our customers to their origin server configurations. It&amp;#39;s as simple as flipping a switch! Our first version of Speed Brain is now live.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/O3RwzUlOj1GlJuMSrq5TW/55d9ef31a2de21034eb036b8c029d5b6/BLOG-2422_4.png\&quot; alt=\&quot;BLOG-2422 4\&quot; class=\&quot;kg-image\&quot; width=\&quot;1370\&quot; height=\&quot;1540\&quot; loading=\&quot;lazy\&quot;/>\n </figure><ul><li><p>Upon receiving a request for a web page with Speed Brain enabled, the Cloudflare server returns an additional &amp;quot;Speculation-Rules&amp;quot; HTTP response header. The value for this header is a URL that hosts an opinionated Rules configuration (as mentioned above).</p></li><li><p>When the browser begins parsing the response header, it fetches our Speculation-Rules configuration, and loads it as part of the web page.</p></li><li><p>The configuration guides the browser on when to prefetch the next likely page from Cloudflare that the visitor may navigate to, based on how the visitor is engaging with the page.</p></li><li><p>When a user action (such as mouse down event on the next page link) triggers the Rules application, the browser sends a prefetch request for that page with the &amp;quot;sec-purpose: prefetch&amp;quot; HTTP request header.</p></li><li><p>Our server parses the request header to identify the prefetch request. If the requested content is present in our cache, we return it; otherwise,<b> we return a 503 HTTP status </b>code and deny the prefetch request. This removes the risk of unsafe side-effects of sending requests to origins or Cloudflare Workers that are unaware of prefetching. Only content present exclusively in the cache is returned.</p></li><li><p>On a success response, the browser successfully prefetches the content in memory, and when the visitor navigates to that page, the browser directly loads the web page from the browser cache for immediate rendering.</p></li></ul>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;common-troubleshooting-patterns\&quot;>Common troubleshooting patterns&nbsp;</h2>\n <a href=\&quot;#common-troubleshooting-patterns\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Support for Speed Brain relies on the <a href=\&quot;https://developer.chrome.com/docs/web-platform/prerender-pages\&quot;><u>Speculation Rules API</u></a>, an emerging web standard. As of September 2024, <a href=\&quot;https://caniuse.com/mdn-http_headers_speculation-rules\&quot;><u>support for this emerging standard</u></a> is limited to <b>Chromium-based browsers (version 121 or later)</b>, such as Google Chrome and Microsoft Edge. As the web community reaches consensus on API standardization, we hope to see wider adoption across other browser vendors.</p><p>Prefetching by nature does not apply to dynamic content, as the state of such content can change, potentially leading to stale or outdated data being delivered to the end user as well as increased origin load. Therefore, Speed Brain will only work for non-dynamic pages of your website that are cached on our network. It has no impact on the loading of dynamic pages. To get the most benefit out of Speed Brain, we suggest making use of <a href=\&quot;https://developers.cloudflare.com/cache/how-to/cache-rules/\&quot;><u>cache rules</u></a> to ensure that all static content (<b>especially HTML content</b>) on your site is eligible for caching.</p><p>When the browser receives a 503 HTTP status code in response to a speculative prefetch request (marked by the sec-purpose: prefetch header), it cancels the prefetch attempt. Although a 503 error appearing in the browser&amp;#39;s console may seem alarming, it is completely harmless for prefetch request cancellation. In our early tests, the 503 response code has caused some site owners concern. We are working with our partners to iterate on this to improve the client experience, but for now follow the specification guidance, <a href=\&quot;https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API#:~:text=Using%20a%20non%2Dsuccess%20code%20(for%20example%20a%20503)%20is%20the%20easiest%20way%20to%20prevent%20speculative%20loading\&quot;><u>which suggests a 503 response</u></a> for the browser to safely discard the speculative request. We&amp;#39;re in active discussions with Chrome, based on feedback from early beta testers, and believe a new non-error dedicated response code would be more appropriate, and cause less confusion. In the meantime, 503 response logs for prefetch requests related to Speed Brain are harmless. If your tooling makes ignoring these requests difficult, you can temporarily disable Speed Brain until we work out something better with the Chrome Team.</p><p>Additionally, when a website uses both its own custom Speculation Rules and Cloudflare&amp;#39;s Speed Brain feature, both rule sets can operate simultaneously. Cloudflare’s guardrails will limit speculation rules to cacheable pages, which may be an unexpected limitation for those with existing implementations. If you observe such behavior, consider disabling one of the implementations for your site to ensure consistency in behavior. Note that if your origin server responses include the Speculation-Rules header, it will not be overridden. Therefore, the potential for ruleset conflicts primarily applies to predefined in-line speculation rules.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-can-i-see-the-impact-of-speed-brain\&quot;>How can I see the impact of Speed Brain?</h2>\n <a href=\&quot;#how-can-i-see-the-impact-of-speed-brain\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In general, we suggest that you use Speed Brain and most other Cloudflare performance <a href=\&quot;https://developers.cloudflare.com/speed/\&quot;><u>features</u></a> with our <a href=\&quot;https://developers.cloudflare.com/web-analytics/get-started/#sites-proxied-through-cloudflare\&quot;><u>RUM performance measurement tool</u></a> enabled. Our RUM feature helps developers and website operators understand how their end users are experiencing the performance of their application, providing visibility into:</p><ul><li><p><b>Loading</b>: How long did it take for content to become available?</p></li><li><p><b>Interactivity</b>: How responsive is the website when users interact with it?</p></li><li><p><b>Visual stability</b>: How much does the page move around while loading?</p></li></ul><p>With RUM enabled, you can navigate to the Web Analytics section in the dashboard to see important information about how Speed Brain is helping reduce latency in your <a href=\&quot;https://www.cloudflare.com/learning/performance/what-are-core-web-vitals/\&quot;><u>core web vitals</u></a> metrics like Largest Contentful Paint (LCP) and load time. </p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6zv2kRvsot12PSNwwaWCad/25e9e56d6f3769b04a8752f99c656f3b/BLOG-2422_5.png\&quot; alt=\&quot;BLOG-2422 5\&quot; class=\&quot;kg-image\&quot; width=\&quot;1128\&quot; height=\&quot;730\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sub><i>Example RUM dashboard for a website with a high amount of prefetchable content that enabled Speed Brain around September 16.</i></sub></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;what-have-we-seen-in-our-rollout-so-far\&quot;>What have we seen in our rollout so far?&nbsp;</h2>\n <a href=\&quot;#what-have-we-seen-in-our-rollout-so-far\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We have enabled this feature by default on all free plans and have observed the following:</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;domains\&quot;>Domains</h3>\n <a href=\&quot;#domains\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare currently has tens of millions of domains using Speed Brain. We have measured the LCP at the 75th quantile (p75) for these sites and found an improvement for these sites between 40% and 50% (average around 45%).&nbsp;</p><p>We found this improvement by comparing navigational prefetches to normal (non-prefetched) page loads for the same set of domains. </p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/fNrRh84I3iZpHiEieNPg8/a789d9d9a736a8eb76fa6120a84cdf10/BLOG-2422_6.png\&quot; alt=\&quot;BLOG-2422 6\&quot; class=\&quot;kg-image\&quot; width=\&quot;682\&quot; height=\&quot;334\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;requests\&quot;>Requests</h3>\n <a href=\&quot;#requests\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Before Speed Brain is enabled, the p75 of free websites on Cloudflare experience an LCP around 2.2 seconds. With Speed Brain enabled, these sites see significant latency savings on LCP. In aggregate, Speed Brain saves about 0.88 seconds on the low end and up to 1.1 seconds on each successful prefetch!&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;applicable-browsers\&quot;>Applicable browsers</h3>\n <a href=\&quot;#applicable-browsers\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Currently, the Speculation Rules API is only available in Chromium browsers. From Cloudflare Radar, we can see that approximately <a href=\&quot;https://radar.cloudflare.com/adoption-and-usage\&quot;><u>70% of requests</u></a> from visitors are from <a href=\&quot;https://en.wikipedia.org/wiki/Chromium_(web_browser)\&quot;><u>Chromium</u></a> (Chrome, Edge, etc) browsers.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;across-the-network\&quot;>Across the network</h3>\n <a href=\&quot;#across-the-network\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare sees hundreds of billions of requests for HTML content each day. Of these requests, about half are cached (make sure your HTML is cacheable!). Around 1% of those requests are for navigational prefetching made by the visitors. This represents significant savings every day for visitors to websites with Speed Brain enabled. Every 24 hours, <b>Speed Brain can save more than 82 years worth of latency!</b></p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5CIpcdPC17LY2EGjNxCjNo/cf1a915d16384e32d88951a48febed47/BLOG-2422_7.png\&quot; alt=\&quot;BLOG-2422 7\&quot; class=\&quot;kg-image\&quot; width=\&quot;1210\&quot; height=\&quot;1246\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;whats-next\&quot;>What’s next?&nbsp;</h2>\n <a href=\&quot;#whats-next\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>What we’re offering today for Speed Brain is only the beginning. Heading into 2025, we have a number of exciting additions to explore and ship.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;leveraging-machine-learning\&quot;>Leveraging Machine Learning</h3>\n <a href=\&quot;#leveraging-machine-learning\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Our unique position on the Internet provides us valuable insights into web browsing patterns, which we can leverage for improving web performance while maintaining individual user privacy. By employing a generalized data-driven machine learning approach, we can define more accurate and site-specific prefetch predictors for users’ pages.&nbsp;</p><p>We are in the process of developing an adaptive speculative model that significantly improves upon our current conservative offering. This model uses a privacy-preserving method to generate a user traversal graph for each site based on same-site Referrer headers. For any two pages connected by a navigational hop, our model predicts the likelihood of a typical user moving between them, using insights extracted from our aggregated traffic data.</p><p>This model enables us to tailor rule sets with custom eagerness values to each relevant next page link on your site. For pages where the model predicts high confidence in user navigation, the system will aggressively prefetch or prerender them. If the model does not provide a rule for a page, it defaults to our existing conservative approach, maintaining the benefits of baseline Speed Brain model. These signals guide browsers in prefetching and prerendering the appropriate pages, which helps speed up navigation for users, while maintaining our current safety guardrails.</p><p>In lab tests, our ML model improved LCP latency by 75% and predicted visitor navigation with ~98% accuracy, ensuring the correct pages were being prefetched to prevent resource waste for users. As we move toward scaling this solution, we are focused on periodic training of the model to adapt to varying user behaviors and evolving websites. Using an online machine learning approach will drastically reduce the need for any manual update, and content drifts, while maintaining high accuracy — the Speed Brain load solution that gets smarter over time!</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;finer-observability-via-rum\&quot;>Finer observability via RUM</h3>\n <a href=\&quot;#finer-observability-via-rum\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>As we’ve mentioned, we believe that our RUM tools offer the best insights for how Speed Brain is helping the performance of your website. In the future, we plan on offering the ability to filter RUM tooling by navigation type so that you can compare the browser rendering of prefetched content versus non-prefetched content.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;prerendering\&quot;>Prerendering</h3>\n <a href=\&quot;#prerendering\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We are currently offering the ability for prefetching on cacheable content. Prefetching downloads the main document resource of the page before the user’s navigation, but it does not instruct the browser to prerender the page or download any additional subresources.</p><p>In the future, Cloudflare’s Speed Brain offering will prefetch content into our CDN cache and then work with browsers to know what are the best prospects for prerendering. This will help get static content even closer to instant rendering.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;argo-smart-browsing-speed-brain-smart-routing\&quot;>Argo Smart Browsing: Speed Brain &amp; Smart Routing</h3>\n <a href=\&quot;#argo-smart-browsing-speed-brain-smart-routing\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Speed Brain, in its initial implementation, provides an incredible performance boost whilst still remaining conservative in its implementation; both from an eagerness, and a resource consumption perspective.</p><p>As was outlined earlier in the post, lab testing of a more aggressive model, powered by machine-learning and a higher eagerness, yielded a <b>75% reduction in LCP.</b> We are investigating bundling this more aggressive, additional implementation of Speed Brain with Argo Smart Routing into a product called <b>“Argo Smart Browsing”.&nbsp;</b></p><p>Cloudflare customers will be free to continue using Speed Brain, however those who want even more performance improvement will be able to enable Argo Smart Browsing with a single button click.&nbsp; With Argo Smart Browsing, not only will cacheable static content load up to 75% faster in the browser, thanks to the more aggressive models, however in times when content can’t be cached, and the request must go forward to an origin server, it will be sent over the most performant network path resulting in an average <b>33% performance increase.</b> Performance optimizations are being applied to almost every segment of the request lifecycle regardless if the content is static or dynamic, cached or not.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;conclusion\&quot;>Conclusion</h2>\n <a href=\&quot;#conclusion\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To get started with Speed Brain, navigate to <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/speed/optimization/content\&quot;><b><u>Speed</u></b><u> &amp;gt; Optimization &amp;gt; Content Optimization &amp;gt; </u><b><u>Speed Brain</u></b></a> in the Cloudflare Dashboard and enable it. That&amp;#39;s all! The feature can also be enabled via <a href=\&quot;https://developers.cloudflare.com/api/operations/zone-settings-get-speed-brain-setting\&quot;><u>API</u></a>.&nbsp; Free plan domains have had Speed Brain enabled by default.</p><p>We strongly recommend that customers also <a href=\&quot;https://developers.cloudflare.com/web-analytics/get-started/#sites-proxied-through-cloudflare\&quot;><b><u>enable RUM</u></b></a>, found in the same section of the dashboard, to give visibility into the performance improvements provided by Speed Brain and other Cloudflare features and products.&nbsp;</p><p>We’re excited to continue to build products and features that make web performance reliably fast. If you’re an engineer interested in improving the performance of the web for all, <a href=\&quot;http://cloudflare.com/jobs\&quot;>come join us</a>!</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/OaN8mrrAKAatOUCqGAsqu/15ac363626180a0f0ed1a0cdb8146e5f/BLOG-2422_8.png\&quot; alt=\&quot;BLOG-2422 8\&quot; class=\&quot;kg-image\&quot; width=\&quot;1800\&quot; height=\&quot;552\&quot; loading=\&quot;lazy\&quot;/>\n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;watch-on-cloudflare-tv\&quot;>Watch on Cloudflare TV</h3>\n <a href=\&quot;#watch-on-cloudflare-tv\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;position: relative; padding-top: 56.25%;\&quot;>\n <iframe\n src=\&quot;https://customer-rhnwzxvb3mg4wz3v.cloudflarestream.com/6446ed524ea74cfb11e2325107f37113/iframe?preload=true&amp;poster=https%3A%2F%2Fcustomer-rhnwzxvb3mg4wz3v.cloudflarestream.com%2F6446ed524ea74cfb11e2325107f37113%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D2s%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div><p></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-25T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:02.341Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6pwJnviaM9hXlQcCbb4uXe/deedbd33b4e0df917e700a29b0f4724b/BLOG-2422_1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;48r7QV00gLMWOIcM1CSDRy&quot;],&quot;name&quot;:[0,&quot;Speed &amp; Reliability&quot;],&quot;slug&quot;:[0,&quot;speed-and-reliability&quot;]}],[0,{&quot;id&quot;:[0,&quot;1x7tpPmKIUCt19EDgM1Tsl&quot;],&quot;name&quot;:[0,&quot;Research&quot;],&quot;slug&quot;:[0,&quot;research&quot;]}],[0,{&quot;id&quot;:[0,&quot;5RrjSR5vIOJAfRdT8966hf&quot;],&quot;name&quot;:[0,&quot;Cache&quot;],&quot;slug&quot;:[0,&quot;cache&quot;]}],[0,{&quot;id&quot;:[0,&quot;1q6r2yWvvqOfafxEeKdl8J&quot;],&quot;name&quot;:[0,&quot;Speed Brain&quot;],&quot;slug&quot;:[0,&quot;speed-brain&quot;]}],[0,{&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Alex Krivit&quot;],&quot;slug&quot;:[0,&quot;alex&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1e9gtWsffhoAWG0rTN45cR/35204e3d77d1a90feeb57a32e388daca/alex.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@ackriv&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Suleman Ahmad&quot;],&quot;slug&quot;:[0,&quot;suleman&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1WnbvI0pMk4oVLXHdvpIqH/51084688ace222ec1c1aafbb3bf0fc8b/suleman.png&quot;],&quot;location&quot;:[0,&quot;Austin, TX&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@sulemanahmadd&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;William Woodhead&quot;],&quot;slug&quot;:[0,&quot;william&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5dOjEvIFAlo8aibHNxah1w/7bb1c36947686c4b3eda4839ba2e85c3/william.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;We are excited to announce the latest leap forward in speed – Speed Brain. Speed Brain uses the Speculation Rules API to prefetch content for the user's likely next navigations. The goal is to download a web page to the browser before a user navigates to it, allowing pages to load instantly. \n&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;Loc: Introducing Speed Brain: helping web pages load 45% faster &quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;Translated for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/introducing-speed-brain&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Introducing Speed Brain: helping web pages load 45% faster &quot;],&quot;description&quot;:[0,&quot;We are excited to announce the latest leap forward in speed – Speed Brain. Speed Brain uses the Speculation Rules API to prefetch content for the user's likely next navigations. The goal is to download a web page to the browser before a user navigates to it, allowing pages to load instantly. &quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2VHvuIVSAEUvuWpfCFPNDu/3c99d9b6fac2add7f36ccbf34e784562/BLOG-2422_OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;sdvPBDBwhcEcrODVeOE7A&quot;],&quot;title&quot;:[0,&quot;Cloudflare’s 12th Generation servers — 145% more performant and 63% more efficient&quot;],&quot;slug&quot;:[0,&quot;gen-12-servers&quot;],&quot;excerpt&quot;:[0,&quot;Cloudflare is thrilled to announce the general deployment of our next generation of server — Gen 12 powered by AMD Genoa-X processors. This new generation of server focuses on delivering exceptional performance across all Cloudflare services, enhanced support for AI/ML workloads, significant strides in power efficiency, and improved security features.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Cloudflare is thrilled to announce the general deployment of our next generation of servers — Gen 12 powered by AMD EPYC 9684X (code name “Genoa-X”) processors. This next generation focuses on delivering exceptional performance across all Cloudflare services, enhanced support for AI/ML workloads, significant strides in power efficiency, and improved security features.</p><p>Here are some key performance indicators and feature improvements that this generation delivers as compared to the <a href=\&quot;https://blog.cloudflare.com/the-epyc-journey-continues-to-milan-in-cloudflares-11th-generation-edge-server/\&quot;><u>prior generation</u></a>:&nbsp;</p><p>Beginning with performance, with close engineering collaboration between Cloudflare and AMD on optimization, Gen 12 servers can serve more than twice as many requests per second (RPS) as Gen 11 servers, resulting in lower Cloudflare infrastructure build-out costs.</p><p>Next, our power efficiency has improved significantly, by more than 60% in RPS per watt as compared to the prior generation. As Cloudflare continues to expand our infrastructure footprint, the improved efficiency helps reduce Cloudflare’s operational expenditure and carbon footprint as a percentage of our fleet size.</p><p>Third, in response to the growing demand for AI capabilities, we&amp;#39;ve updated the thermal-mechanical design of our Gen 12 server to support more powerful GPUs. This aligns with the <a href=\&quot;https://www.cloudflare.com/lp/pg-ai/?utm_medium=cpc&amp;utm_source=google&amp;utm_campaign=2023-q4-acq-gbl-developers-wo-ge-general-paygo_mlt_all_g_search_bg_exp__dev&amp;utm_content=workers-ai&amp;gad_source=1&amp;gclid=CjwKCAjwl6-3BhBWEiwApN6_kjigJdDvEYqHPYi8tdXuTe4APbqX923v-CBjpGiAVwITNhp8GrW3ARoCyJ4QAvD_BwE&amp;gclsrc=aw.ds\&quot;><u>Workers AI</u></a> objective to support larger large language models and increase throughput for smaller models. This enhancement underscores our ongoing commitment to advancing AI inference capabilities</p><p>Fourth, to underscore our security-first position as a company, we&amp;#39;ve integrated hardware <a href=\&quot;https://trustedcomputinggroup.org/about/what-is-a-root-of-trust-rot/\&quot;><u>root of trust</u></a> (HRoT) capabilities to ensure the integrity of boot firmware and board management controller firmware. Continuing to embrace open standards, the baseboard management and security controller (Data Center Secure Control Module or <a href=\&quot;https://drive.google.com/file/d/13BxuseSrKo647hjIXjp087ei8l5QQVb0/view\&quot;><u>OCP DC-SCM</u></a>) that we’ve designed into our systems is modular and vendor-agnostic, enabling a unified <a href=\&quot;https://www.openbmc.org/\&quot;><u>openBMC</u></a> image, quicker prototyping, and allowing for reuse.</p><p>Finally, given the increasing importance of supply assurance and reliability in infrastructure deployments, our approach includes a robust multi-vendor strategy to mitigate supply chain risks, ensuring continuity and resiliency of our infrastructure deployment.</p><p>Cloudflare is dedicated to constantly improving our server fleet, empowering businesses worldwide with enhanced performance, efficiency, and security.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;gen-12-servers\&quot;>Gen 12 Servers&nbsp;</h2>\n <a href=\&quot;#gen-12-servers\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Let&amp;#39;s take a closer look at our Gen 12 server. The server is powered by a 4th generation AMD EPYC Processor, paired with 384 GB of DDR5 RAM, 16 TB of NVMe storage, a dual-port 25 GbE NIC, and two 800 watt power supply units.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Generation</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Gen 12 Compute</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Previous Gen 11 Compute</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Form Factor</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2U1N - Single socket</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1U1N - Single socket</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Processor</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>AMD EPYC 9684X Genoa-X 96-Core Processor</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>AMD EPYC 7713 Milan 64-Core Processor</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Memory</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>384GB of DDR5-4800</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>x12 memory channel</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>384GB of DDR4-3200</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>x8 memory channel</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Storage</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>x2 E1.S NVMe</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Samsung PM9A3 7.68TB / Micron 7450 Pro 7.68TB</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>x2 M.2 NVMe</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2x Samsung PM9A3 x 1.92TB</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Network</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Dual 25 Gbe OCP 3.0 </span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel Ethernet Network Adapter E810-XXVDA2 / NVIDIA Mellanox ConnectX-6 Lx</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Dual 25 Gbe OCP 2.0</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Mellanox ConnectX-4 dual-port 25G</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>System Management</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>DC-SCM 2.0</span><br><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>ASPEED AST2600 (BMC) + AST1060 (HRoT)</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>ASPEED AST2500 (BMC)</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Power Supply</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>800W - Titanium Grade</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>650W - Titanium Grade</span></td>\n </tr>\n</tbody></table></div>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/ywinOgSFpevEcQSZLhESv/b61d70a1504b4d873d0bbf2e83221bf6/BLOG-2116_2.png\&quot; alt=\&quot;BLOG-2116 2\&quot; class=\&quot;kg-image\&quot; width=\&quot;1912\&quot; height=\&quot;1999\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>Cloudflare Gen 12 server</i></sup></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;cpu\&quot;>CPU</h3>\n <a href=\&quot;#cpu\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>During the design phase, we conducted an extensive survey of the CPU landscape. These options offer valuable choices as we consider how to shape the future of Cloudflare&amp;#39;s server technology to match the needs of our customers. We evaluated many candidates in the lab, and short-listed three standout CPU candidates from the 4th generation AMD EPYC Processor lineup: Genoa 9654, Bergamo 9754, and Genoa-X 9684X for production evaluation. The table below summarizes the differences in <a href=\&quot;https://www.amd.com/content/dam/amd/en/documents/products/epyc/epyc-9004-series-processors-data-sheet.pdf\&quot;><u>specifications</u></a> of the short-listed candidates for Gen 12 servers against the AMD EPYC 7713 used in our Gen 11 servers. Notably, all three candidates offer significant increase in core count and marked increase in all core boost clock frequency.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-nnk9{background-color:#F6821F;color:#15C;font-weight:bold;text-align:center;text-decoration:underline;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}\n.tg .tg-7yig{background-color:#FFF;text-align:center;vertical-align:top}\n.tg .tg-9hzb{background-color:#FFF;font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>CPU Model</span></th>\n <th class=\&quot;tg-nnk9\&quot;><a href=\&quot;https://www.amd.com/en/products/specifications/server-processor.html\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:underline;color:#15C;background-color:transparent\&quot;>AMD EPYC 7713</span></a></th>\n <th class=\&quot;tg-nnk9\&quot;><a href=\&quot;https://www.amd.com/en/products/specifications/server-processor.html\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:underline;color:#15C;background-color:transparent\&quot;>AMD EPYC 9654</span></a></th>\n <th class=\&quot;tg-nnk9\&quot;><a href=\&quot;https://www.amd.com/en/products/specifications/server-processor.html\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:underline;color:#15C;background-color:transparent\&quot;>AMD EPYC 9754</span></a></th>\n <th class=\&quot;tg-nnk9\&quot;><a href=\&quot;https://www.amd.com/en/products/specifications/server-processor.html\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:underline;color:#15C;background-color:transparent\&quot;>AMD EPYC 9684X</span></a></th>\n </tr>\n</thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Series</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Milan</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Genoa</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Bergamo</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Genoa-X</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;># of CPU Cores</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>64</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>96</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>128</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>96</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;># of Threads</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>128</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>192</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>256</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>192</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Base Clock</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.0 GHz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.4 GHz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.25 GHz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.4 GHz</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Max Boost Clock</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.67 GHz</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.7 Ghz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.1 Ghz</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.7 Ghz</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>All Core Boost Clock</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.7 GHz *</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.55 GHz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.1GHz</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>3.42 GHz</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Total L3 Cache</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>256 MB</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>384 MB</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>256 MB</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1152 MB</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>L3 cache per core</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>4MB / core</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>4MB / core</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2MB / core</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>12MB / core</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Maximum configurable TDP</span></td>\n <td class=\&quot;tg-7yig\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>240W</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>400W</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>400W</span></td>\n <td class=\&quot;tg-9hzb\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>400W</span></td>\n </tr>\n</tbody></table></div><p><sub>*Note: AMD EPYC 7713 all core boost clock frequency of 2.7 GHz is not an official specification of the CPU but based on data collected at Cloudflare production fleet.</sub></p><p>During production evaluation, the configuration of all three CPUs were optimized to the best of our knowledge, including thermal design power (TDP) configured to 400W for maximum performance. The servers are set up to run the same processes and services like any other server we have in production, which makes for a great side-by-side comparison.&nbsp;</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top}\n.tg .tg-jl1x{background-color:#F6821F;text-align:left;vertical-align:top}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-jl1x\&quot;></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Milan 7713</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Genoa 9654</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Bergamo 9754</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Genoa-X 9684X</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Production performance (request per second) multiplier</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.15x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>2.45x</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-1wig\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Production efficiency (request per second per watt) multiplier</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1.33x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1.38x</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1.63x</span></td>\n </tr>\n</tbody></table></div><h4>AMD EPYC Genoa-X in Cloudflare Gen 12 server</h4><p>Each of these CPUs outperforms the previous generation of processors by at least 2x. AMD EPYC 9684X Genoa-X with 3D V-cache technology gave us the greatest performance improvement, at 2.45x, when compared against our Gen 11 servers with AMD EPYC 7713 Milan.</p><p>Comparing the performance between Genoa-X 9684X and Genoa 9654, we see a ~22.5% performance delta. The primary difference between the two CPUs is the amount of L3 cache available on the CPU. Genoa-X 9684X has 1152 MB of L3 cache, which is three times the Genoa 9654 with 384 MB of L3 cache. Cloudflare workloads benefit from more low level cache being accessible and avoid the much larger latency penalty associated with fetching data from memory.</p><p>Genoa-X 9684X CPU delivered ~22.5% improved performance consuming the same amount of 400W power compared to Genoa 9654. The 3x larger L3 cache does consume additional power, but only at the expense of sacrificing 3% of highest achievable all core boost frequency on Genoa-X 9684X, a favorable trade-off for Cloudflare workloads.</p><p>More importantly, Genoa-X 9684X CPU delivered 145% performance improvement with only 50% system power increase, offering a 63% power efficiency improvement that will help drive down operational expenditure tremendously. It is important to note that even though a big portion of the power efficiency is due to the CPU, it needs to be paired with optimal thermal-mechanical design to realize the full benefit. Earlier last year, <a href=\&quot;https://blog.cloudflare.com/cloudflare-gen-12-server-bigger-better-cooler-in-a-2u1n-form-factor/\&quot;><u>we made the thermal-mechanical design choice to double the height of the server chassis to optimize rack density and cooling efficiency across our global data centers</u></a>. We estimated that moving from 1U to 2U would reduce fan power by 150W, which would decrease system power from 750 watts to 600 watts. Guess what? We were right — a Gen 12 server consumes 600 watts per system at a typical ambient temperature of 25°C.</p><p>While high performance often comes at a higher price, fortunately AMD EPYC 9684X offer an excellent balance between cost and capability. A server designed with this CPU provides top-tier performance without necessitating a huge financial outlay, resulting in a good Total Cost of Ownership improvement for Cloudflare.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;memory\&quot;>Memory</h3>\n <a href=\&quot;#memory\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>AMD Genoa-X CPU supports twelve memory channels of DDR5 RAM up to 4800 mega transfers per second (MT/s) and per socket Memory Bandwidth of 460.8 GB/s. The twelve channels are fully utilized with 32 GB ECC 2Rx8 DDR5 RDIMM with one DIMM per channel configuration for a combined total memory capacity of 384 GB.&nbsp;</p><p>Choosing the optimal memory capacity is a balancing act, as maintaining an optimal memory-to-core ratio is important to make sure CPU capacity or memory capacity is not wasted. Some may remember that our Gen 11 servers with 64 core AMD EPYC 7713 CPUs are also configured with 384 GB of memory, which is about 6 GB per core. So why did we choose to configure our Gen 12 servers with 384 GB of memory when the core count is growing to 96 cores? Great question! A lot of memory optimization work has happened since we introduced Gen 11, including some that we blogged about, like <a href=\&quot;https://blog.cloudflare.com/scalable-machine-learning-at-cloudflare/\&quot;><u>Bot Management code optimization</u></a> and <a href=\&quot;https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/\&quot;><u>our transition to highly efficient Pingora</u></a>. In addition, each service has a memory allocation that is sized for optimal performance. The per-service memory allocation is programmed and monitored utilizing Linux control group resource management features. When sizing memory capacity for Gen 12, we consulted with the team who monitor resource allocation and surveyed memory utilization metrics collected from our fleet. The result of the analysis is that the optimal memory-to-core ratio is 4 GB per CPU core, or 384 GB total memory capacity. This configuration is validated in production. We chose dual rank memory modules over single rank memory modules because they have higher memory throughput, which improves server performance (read more about <a href=\&quot;https://blog.cloudflare.com/ddr4-memory-organization-and-how-it-affects-memory-bandwidth/\&quot;><u>memory module organization and its effect on memory bandwidth</u></a>).&nbsp;</p><p>The table below shows the result of running the <a href=\&quot;https://www.intel.com/content/www/us/en/developer/articles/tool/intelr-memory-latency-checker.html\&quot;><u>Intel Memory Latency Checker (MLC)</u></a> tool to measure peak memory bandwidth for the system and to compare memory throughput between 12 channels of dual-rank (2Rx8) 32 GB DIMM and 12 channels of single rank (1Rx4) 32 GB DIMM. Dual rank DIMMs have slightly higher (1.8%) read memory bandwidth, but noticeably higher write bandwidth. As write ratios increased from 25% to 50%, the memory throughput delta increased by 10%.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Benchmark</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Dual rank advantage over single rank</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel MLC ALL Reads</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>101.8%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel MLC 3:1 Reads-Writes</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>107.7%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel MLC 2:1 Reads-Writes</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>112.9%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel MLC 1:1 Reads-Writes</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>117.8%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Intel MLC Stream-triad like</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>108.6%</span></td>\n </tr>\n</tbody></table></div><p>The table below shows the result of running the <a href=\&quot;https://www.amd.com/en/developer/zen-software-studio/applications/spack/stream-benchmark.html\&quot;><u>AMD STREAM benchmark</u></a> to measure sustainable main memory bandwidth in MB/s and the corresponding computation rate for simple vector kernels. In all 4 types of vector kernels, dual rank DIMMs provide a noticeable advantage over single rank DIMMs.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Benchmark</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Dual rank advantage over single rank</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Stream Copy</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>115.44%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Stream Scale</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>111.22%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Stream Add</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>109.06%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Stream Triad</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>107.70%</span></td>\n </tr>\n</tbody></table></div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;storage\&quot;>Storage</h3>\n <a href=\&quot;#storage\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare’s Gen X server and Gen 11 server support <a href=\&quot;https://en.wikipedia.org/wiki/M.2\&quot;><u>M.2</u></a> form factor drives. We liked the M.2 form factor mainly because it was compact. The M.2 specification was introduced in 2012, but today, the connector system is dated and the industry has concerns about its ability to maintain signal integrity with the high speed signal specified by <a href=\&quot;https://www.xda-developers.com/pcie-5/\&quot;><u>PCIe 5.0</u></a> and <a href=\&quot;https://pcisig.com/pci-express-6.0-specification\&quot;><u>PCIe 6.0</u></a> specifications. The 8.25W thermal limit of the M.2 form factor also limits the number of flash dies that can be fitted, which limits the maximum supported capacity per drive. To address these concerns, the industry has introduced the <a href=\&quot;https://americas.kioxia.com/content/dam/kioxia/en-us/business/ssd/data-center-ssd/asset/KIOXIA_Meta_Microsoft_EDSFF_E1_S_Intro_White_Paper.pdf\&quot;><u>E1.S</u></a> specification and is transitioning from the M.2 form factor to the E1.S form factor.&nbsp;</p><p>In Gen 12, we are making the change to the <a href=\&quot;https://www.snia.org/forums/cmsi/knowledge/formfactors#EDSFF\&quot;><u>EDSFF</u></a> E1 form factor, more specifically the E1.S 15mm. E1.S 15mm, though still in a compact form factor, provides more space to fit more flash dies for larger capacity support. The form factor also has better cooling design to support more than 25W of sustained power.</p><p>While the AMD Genoa-X CPU supports 128 PCIe 5.0 lanes, we continue to use NVMe devices with PCIe Gen 4.0 x4 lanes, as PCIe Gen 4.0 throughput is sufficient to meet drive bandwidth requirements and keep server design costs optimal. The server is equipped with two 8 TB NVMe drives for a total of 16 TB available storage. We opted for two 8 TB drives instead of four 4 TB drives because the dual 8 TB configuration already provides sufficient I/O bandwidth for all Cloudflare workloads that run on each server.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-bykc{background-color:#F6821F;font-weight:bold;text-align:left;vertical-align:top}\n.tg .tg-0lax{text-align:left;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Sequential Read (MB/s) :</span></th>\n <th class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>6,700</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Sequential Write (MB/s) :</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>4,000</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Random Read IOPS:</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1,000,000</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Random Write IOPS: </span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>200,000</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>Endurance</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>1 DWPD</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-bykc\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>PCIe GEN4 x4 lane throughput</span></td>\n <td class=\&quot;tg-0lax\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>7880 MB/s</span></td>\n </tr>\n</tbody></table></div><p><sub><i>Storage devices performance specification</i></sub></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;network\&quot;>Network</h3>\n <a href=\&quot;#network\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Cloudflare servers and top-of-rack (ToR) network equipment operate at <a href=\&quot;https://en.wikipedia.org/wiki/25_Gigabit_Ethernet\&quot;><u>25 GbE</u></a> speeds. In Gen 12, we utilized a <a href=\&quot;https://www.opencompute.org/wiki/Server/DC-MHS\&quot;><u>DC-MHS</u></a> motherboard-inspired design, and upgraded from an <a href=\&quot;https://drive.google.com/file/d/1VGAtABAKU9fq3KfClYhFOgGFN3oe63Uw/view?usp=sharing\&quot;><u>OCP 2.0 form factor</u></a> to an <a href=\&quot;https://drive.google.com/file/d/1U3oEGiSWfupG4SnIdPuJ_8Nte2lJRqTN/view?usp=sharing\&quot;><u>OCP 3.0 form factor</u></a>, which provides tool-less serviceability of the NIC. The OCP 3.0 form factor also occupies less space in the 2U server compared to PCIe-attached NICs, which improves airflow and frees up space for other application-specific PCIe cards, such as GPUs.</p><p>Cloudflare has been using the Mellanox CX4-Lx EN dual port 25 GbE NIC since our <a href=\&quot;https://blog.cloudflare.com/a-tour-inside-cloudflares-g9-servers/\&quot;><u>Gen 9 servers in 2018</u></a>. Even though the NIC has served us well over the years, we are single sourced. During the pandemic, we were faced with supply constraints and extremely long lead times. The team scrambled to qualify the Broadcom M225P dual port 25 GbE NIC as our second-sourced NIC in 2022, ensuring we could continue to turn up servers to serve customer demand. With the lessons learned from single-sourcing the Gen 11 NIC, we are now dual-sourcing and have chosen the Intel Ethernet Network Adapter E810 and NVIDIA Mellanox ConnectX-6 Lx to support Gen 12. These two NICs are compliant with the <a href=\&quot;https://www.opencompute.org/wiki/Server/NIC\&quot;><u>OCP 3.0 specification</u></a> and offer more MSI-X queues that can then be mapped to the increased core count on the AMD EPYC 9684X. The Intel Ethernet Network Adapter comes with an additional advantage, offering full Generic Segmentation Offload (GSO) support including VLAN-tagged encapsulated traffic, whereast many vendors either only support <a href=\&quot;https://netdevconf.info/1.2/papers/LCO-GSO-Partial-TSO-MangleID.pdf\&quot;><u>Partial GSO</u></a> or do not support it at all today. With Full GSO support, the kernel spent noticeably less time in softirq segmenting packets, and servers with Intel E810 NICs are processing approximately 2% more requests per second.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;improved-security-with-dc-scm-project-argus\&quot;>Improved security with DC-SCM: Project Argus</h3>\n <a href=\&quot;#improved-security-with-dc-scm-project-argus\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6ur3YccqqXckIL6oWKd6Lq/5352252ff8e5c1fb15eb02d1572a0689/BLOG-2116_3.png\&quot; alt=\&quot;BLOG-2116 3\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1743\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p><sup><i>DC-SCM in Gen 12 server (Project Argus)</i></sup></p><p>Gen 12 servers are integrated with <a href=\&quot;https://blog.cloudflare.com/introducing-the-project-argus-datacenter-ready-secure-control-module-design-specification/\&quot;><u>Project Argus</u></a>, one of the industry first implementations of <a href=\&quot;https://drive.google.com/file/d/13BxuseSrKo647hjIXjp087ei8l5QQVb0/view\&quot;><u>Data Center Secure Control Module 2.0 (DC-SCM 2.0)</u></a>. DC-SCM 2.0 decouples server management and security functions away from the motherboard. The baseboard management controller (BMC), hardware root of trust (HRoT), trusted platform module (TPM), and dual BMC/BIOS flash chips are all installed on the DC-SCM.&nbsp;</p><p>On our Gen X and Gen 11 server, Cloudflare moved our secure boot trust anchor from the system Basic Input/Output System (BIOS) or the Unified Extensible Firmware Interface (UEFI) firmware to hardware-rooted boot integrity — <a href=\&quot;https://blog.cloudflare.com/anchoring-trust-a-hardware-secure-boot-story/\&quot;><u>AMD’s implementation of Platform Secure Boot (PSB)</u></a> or <a href=\&quot;https://blog.cloudflare.com/armed-to-boot/\&quot;><u>Ampere’s implementation of Single Domain Secure Boot</u></a>. These solutions helped secure Cloudflare infrastructure from BIOS / UEFI firmware attacks. However, we are still vulnerable to out-of-band attacks through compromising the BMC firmware. BMC is a microcontroller that provides out-of-band monitoring and management capabilities for the system. When compromised, attackers can read processor console logs accessible by BMC and control server power states for example. On Gen 12, the HRoT on the DC-SCM serves as the trust store of cryptographic keys and is responsible to authenticate the BIOS/UEFI firmware (independent of CPU vendor) and the BMC firmware for secure boot process.</p><p>In addition, on the DC-SCM, there are additional flash storage devices to enable storing back-up BIOS/UEFI firmware and BMC firmware to allow rapid recovery when a corrupted or malicious firmware is programmed, and to be resilient to flash chip failure due to aging.</p><p>These updates make our Gen 12 server more secure and more resilient to firmware attacks.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;power\&quot;>Power</h3>\n <a href=\&quot;#power\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>A Gen 12 server consumes 600 watts at a typical ambient temperature of 25°C. Even though this is a 50% increase from the 400 watts consumed by the Gen 11 server, as mentioned above in the CPU section, this is a relatively small price to pay for a 145% increase in performance. We’ve paired the server up with dual 800W common redundant power supplies (CRPS) with 80 PLUS Titanium grade efficiency. Both power supply units (PSU) operate actively with distributed power and current. The units are hot-pluggable, allowing the server to operate with redundancy and maximize uptime.</p><p><a href=\&quot;https://www.clearesult.com/80plus/program-details\&quot;><u>80 PLUS</u></a> is a PSU efficiency certification program. The Titanium grade efficiency PSU is 2% more efficient than the Platinum grade efficiency PSU between typical operating load of 25% to 50%. 2% may not sound like a lot, but considering the size of Cloudflare fleet with servers deployed worldwide, 2% savings over the lifetime of all Gen 12 deployment is a reduction of more than 7 GWh, <a href=\&quot;https://www.epa.gov/energy/greenhouse-gas-equivalencies-calculator#results\&quot;><u>equivalent to carbon sequestered by more than 3400 acres of U.S. forests in one year</u></a>.&nbsp; This upgrade also means our Gen 12 server complies with <a href=\&quot;https://www.unicomengineering.com/blog/eu-lot-9-update-the-coming-server-power-migration/\&quot;><u>EU Lot9 requirements</u></a> and can be deployed in the EU region.</p><style type=\&quot;text/css\&quot;>\n.tg {border-collapse:collapse;border-spacing:0;margin:0px auto;}\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;\n font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}\n.tg .tg-baqh{text-align:center;vertical-align:top}\n.tg .tg-gid2{background-color:#F6821F;font-weight:bold;text-align:center;vertical-align:top}\n.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}\n@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}</style>\n<div class=\&quot;tg-wrap\&quot;><table class=\&quot;tg\&quot;><thead>\n <tr>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>80 PLUS certification</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>10%</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>20%</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>50%</span></th>\n <th class=\&quot;tg-gid2\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>100%</span></th>\n </tr></thead>\n<tbody>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>80 PLUS Platinum</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>-</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>92%</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>94%</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>90%</span></td>\n </tr>\n <tr>\n <td class=\&quot;tg-amwm\&quot;><span style=\&quot;font-weight:700;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>80 PLUS Titanium</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>90%</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>94%</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>96%</span></td>\n <td class=\&quot;tg-baqh\&quot;><span style=\&quot;font-weight:400;font-style:normal;text-decoration:none;color:#000;background-color:transparent\&quot;>91%</span></td>\n </tr>\n</tbody></table></div>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;drop-in-gpu-support\&quot;>Drop-in GPU support</h3>\n <a href=\&quot;#drop-in-gpu-support\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Demand for machine learning and AI workloads exploded in 2023, and Cloudflare <a href=\&quot;https://blog.cloudflare.com/workers-ai/\&quot;><u>introduced Workers AI </u></a>to serve the needs of our customers. Cloudflare retrofitted or deployed GPUs worldwide in a portion of our Gen 11 server fleet to support the growth of Workers AI. Our Gen 12 server is also designed to accommodate the addition of more powerful GPUs. This gives Cloudflare the flexibility to support Workers AI in all regions of the world, and to strategically place GPUs in regions to reduce inference latency for our customers. With this design, the server can run Cloudflare’s full software stack. During times when GPUs see lower utilization, the server continues to serve general web requests and remains productive.</p><p>The electrical design of the motherboard is designed to support up to two PCIe add-in cards and the power distribution board is sized to support an additional 400W of power. The mechanics are sized to support either a single FHFL (full height, full length) double width GPU PCIe card, or two FHFL single width GPU PCIe cards. The thermal solution including the component placement, fans, and air duct design are sized to support adding GPUs with TDP up to 400W.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;looking-to-the-future\&quot;>Looking to the future</h3>\n <a href=\&quot;#looking-to-the-future\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Gen 12 Servers are currently deployed and live in multiple Cloudflare data centers worldwide, and already process millions of requests per second. Cloudflare’s EPYC journey has not ended — the 5th-gen AMD EPYC CPUs (code name “Turin”) are already available for testing, and we are very excited to start the architecture planning and design discussion for the Gen 13 server. <a href=\&quot;https://www.cloudflare.com/careers/jobs/\&quot;><u>Come join us</u></a> at Cloudflare to help build a better Internet!</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-25T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:04.301Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1cfqhMdHBDY71m20nb5HLM/de0b58a3e85a96aba15b30df5d7d42ce/BLOG-2116_1_.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;7zGaJ5bHAL9yQY1lK4OHjH&quot;],&quot;name&quot;:[0,&quot;EPYC&quot;],&quot;slug&quot;:[0,&quot;epyc&quot;]}],[0,{&quot;id&quot;:[0,&quot;6NELU2Vg2VAJ5fpLtAToII&quot;],&quot;name&quot;:[0,&quot;AMD&quot;],&quot;slug&quot;:[0,&quot;amd&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Foe3R8of95cWVnQwe5Toi&quot;],&quot;name&quot;:[0,&quot;AI&quot;],&quot;slug&quot;:[0,&quot;ai&quot;]}],[0,{&quot;id&quot;:[0,&quot;3TaNOBp8EhAE6eCfshf1tK&quot;],&quot;name&quot;:[0,&quot;Cloudflare Network&quot;],&quot;slug&quot;:[0,&quot;cloudflare-network&quot;]}],[0,{&quot;id&quot;:[0,&quot;1ffv1vW4BzGcbQOa9xbY4O&quot;],&quot;name&quot;:[0,&quot;Hardware&quot;],&quot;slug&quot;:[0,&quot;hardware&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;JQ Lau&quot;],&quot;slug&quot;:[0,&quot;jq&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4CQMlkneKLrfzuZH6XcSV0/effde37076b1f103045d624323f70a0f/jq.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Ma Xiong&quot;],&quot;slug&quot;:[0,&quot;ma-xiong&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1llgqCms1qXHxxlmLpvUzx/01c65be4e54ece604959faf547440a38/_tmp_mini_magick20231018-2-hom5p6.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Syona Sarma&quot;],&quot;slug&quot;:[0,&quot;syona&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7wXARteBqVJbvxNdpYb71v/5023716b54c8eda890b43d0092a19d12/syona.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Cloudflare is thrilled to announce the general deployment of our next generation of server — Gen 12 powered by AMD Genoa-X processors. This new generation of server focuses on delivering exceptional performance across all Cloudflare services, enhanced support for AI/ML workloads, significant strides in power efficiency, and improved security features.\n&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/gen-12-servers&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Cloudflare’s 12th Generation servers — 145% more performant and 63% more efficient &quot;],&quot;description&quot;:[0,&quot;Cloudflare is thrilled to announce the general deployment of our next generation of server — Gen 12 powered by AMD Genoa-X processors. This new generation of server focuses on delivering exceptional performance across all Cloudflare services, enhanced support for AI/ML workloads, significant strides in power efficiency, and improved security features.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/ClKSEml6Tev0e5Ut7lPP5/ca1c740422acfde789ac4b57a31c99a0/BLOG-2116_OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;EkJICbovEPPuOSElg8poy&quot;],&quot;title&quot;:[0,&quot;TURN and anycast: making peer connections work globally&quot;],&quot;slug&quot;:[0,&quot;webrtc-turn-using-anycast&quot;],&quot;excerpt&quot;:[0,&quot;TURN servers help relay media and data between devices when direct peer-to-peer connections are blocked or fail. Cloudflare Calls' TURN server uses anycast to eliminate the need to think about regions or scaling, improving reliability of WebRTC applications.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>A <a href=\&quot;https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT\&quot;><u>TURN server</u></a> helps maintain connections during video calls when local networking conditions prevent participants from connecting directly to other participants. It acts as an intermediary, passing data between users when their networks block direct communication. TURN servers ensure that peer-to-peer calls go smoothly, even in less-than-ideal network conditions.</p><p>When building their own TURN infrastructure, developers often have to answer a few critical questions:</p><ol><li><p>“How do we build and maintain a mesh network that achieves near-zero latency to all our users?”</p></li><li><p>“Where should we spin up our servers?”</p></li><li><p>“Can we auto-scale reliably to be cost-efficient without hurting performance?”\n</p></li></ol><p>In April, we launched Cloudflare Calls TURN in <a href=\&quot;https://blog.cloudflare.com/cloudflare-calls-anycast-webrtc/\&quot;><u>open beta</u></a> to help answer these questions. Starting today, <a href=\&quot;https://developers.cloudflare.com/calls/turn/\&quot;><u>Cloudflare Calls’ TURN service</u></a> is now generally available to all Cloudflare accounts. Our TURN server works on our anycast network, which helps deliver global coverage and near-zero latency required by real time applications.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;turn-solves-connectivity-and-privacy-problems-for-real-time-apps\&quot;>TURN solves connectivity and privacy problems for real time apps</h2>\n <a href=\&quot;#turn-solves-connectivity-and-privacy-problems-for-real-time-apps\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>When Internet Protocol version 4 (IPv4, <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc791\&quot;><u>RFC 791</u></a>) was designed back in 1981, it was assumed that the 32-bit address space was big enough for all computers to be able to connect to each other. When IPv4 was created, billions of people didn’t have smartphones in their pockets and the idea of the Internet of Things didn’t exist yet. It didn’t take long for companies, ISPs, and even entire countries to realize they didn’t have enough IPv4 address space to meet their needs.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;nats-are-unpredictable\&quot;>NATs are unpredictable</h3>\n <a href=\&quot;#nats-are-unpredictable\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Fortunately, you can have multiple devices share the same IP address because the most common protocols run on top of IP are TCP and UDP, both of which support up to 65,535 port numbers. (Think of port numbers on an IP address as extensions behind a single phone number.) To solve this problem of IP scarcity, network engineers developed a way to share a single IP address across multiple devices by exploiting the port numbers. This is called Network Address Translation (NAT) and it is a process through which your router knows which packets to send to your smartphone versus your laptop or other devices, all of which are connecting to the public Internet through the IP address assigned to the router.</p><p>In a typical NAT setup, when a device sends a packet to the Internet, the NAT assigns a random, unused port to track it, keeping a forwarding table to map the device to the port. This allows NAT to direct responses back to the correct device, even if the source IP address and port vary across different destinations. The system works as long as the internal device initiates the connection and waits for the response.</p><p>However, real-time apps like video or audio calls are more challenging with NAT. Since NATs don&amp;#39;t reveal how they assign ports, devices can&amp;#39;t pre-communicate where to send responses, making it difficult to establish reliable connections. Earlier solutions like STUN (<a href=\&quot;https://datatracker.ietf.org/doc/html/rfc3489\&quot;><u>RFC 3489</u></a>) couldn&amp;#39;t fully solve this, which gave rise to the TURN protocol.</p><p>TURN predictably relays traffic between devices while ensuring minimal delay, which is crucial for real-time communication where even a second of lag can disrupt the experience.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;ice-to-determine-if-a-relay-server-is-needed\&quot;>ICE to determine if a relay server is needed</h3>\n <a href=\&quot;#ice-to-determine-if-a-relay-server-is-needed\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc8445\&quot;><u>ICE (Interactive Connectivity Establishment) protocol</u></a> was designed to find the fastest communication path between devices. It works by testing multiple routes and choosing the one with the least delay. ICE determines whether a TURN server is needed to relay the connection when a direct peer-to-peer path cannot be established or is not performant enough.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/71IX3n5RLM24rwRhwrpM2E/1ef5ecbf98cc85a46e385f333d6cb90c/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1015\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>How two peers (A and B) try to connect directly by sharing their public and local IP addresses using the ICE protocol. If the direct connection fails, both peers use the TURN server to relay their connection and communicate with each other.</i></sup></p><p>While ICE is designed to find the most efficient connection path between peers, it can inadvertently expose sensitive information, creating privacy concerns. During the ICE process, endpoints exchange a list of all possible network addresses, including local IP addresses, NAT IP addresses, and TURN server addresses. This comprehensive sharing of network details can reveal information about a user&amp;#39;s network topology, potentially exposing their approximate geographic location or details about their local network setup.</p><p>The &amp;quot;brute force&amp;quot; nature of ICE, where it attempts connections on all possible paths, can create distinctive network traffic patterns that sophisticated observers might use to infer the use of specific applications or communication protocols.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;turn-solves-privacy-problems\&quot;>TURN solves privacy problems</h2>\n <a href=\&quot;#turn-solves-privacy-problems\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The threat from exposing sensitive information while using real-time applications is especially important for people that use end-to-end encrypted messaging apps for sensitive information — for example, journalists who need to communicate with unknown sources without revealing their location.</p><p>With Cloudflare TURN in place, traffic is proxied through Cloudflare, preventing either party in the call from seeing client IP addresses or associated metadata. Cloudflare simply forwards the calls to their intended recipients, but never inspects the contents — the underlying call data is always end-to-end encrypted. This masking of network traffic is an added layer of privacy.</p><p>Cloudflare is a trusted third-party when it comes to operating these types of services: we have experience operating privacy-preserving proxies at scale for our <a href=\&quot;https://blog.cloudflare.com/1111-warp-better-vpn/\&quot;><u>Consumer WARP</u></a> product, <a href=\&quot;https://blog.cloudflare.com/icloud-private-relay/\&quot;><u>Apple’s Private Relay</u></a>, and <a href=\&quot;https://blog.cloudflare.com/cloudflare-now-powering-microsoft-edge-secure-network/\&quot;><u>Microsoft Edge’s Secure Network</u></a>, preserving end-user privacy without sacrificing performance.&nbsp;&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;cloudflares-turn-is-the-fastest-because-of-anycast\&quot;>Cloudflare’s TURN is the fastest because of Anycast</h2>\n <a href=\&quot;#cloudflares-turn-is-the-fastest-because-of-anycast\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Lots of real time communication services run their own TURN servers on a commercial cloud provider because they don’t want to leave a certain percentage of their customers with non-working communication. This results in additional costs for DevOps, egress bandwidth, etc. And honestly, just deploying and running a TURN server, like <a href=\&quot;https://github.com/coturn/coturn\&quot;><u>CoTURN</u></a>, in a VPS isn’t an interesting project for most engineers.</p><p>Because using a TURN relay adds extra delay for the packets to travel between the peers, the relays should be located as close as possible to the peers. Cloudflare’s TURN service avoids all these headaches by simply running in all of the <a href=\&quot;https://www.cloudflare.com/network\&quot;><u>330 cities where Cloudflare has data centers</u></a>. And any time Cloudflare adds another city, the TURN service automatically becomes available there as well.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;anycast-is-the-perfect-network-topology-for-turn\&quot;>Anycast is the perfect network topology for TURN</h3>\n <a href=\&quot;#anycast-is-the-perfect-network-topology-for-turn\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p><a href=\&quot;https://www.cloudflare.com/learning/cdn/glossary/anycast-network/\&quot;><u>Anycast</u></a> is a network addressing and routing methodology in which a single IP address is shared by multiple servers in different locations. When a client sends a request to an anycast address, the network automatically routes the request via <a href=\&quot;https://www.cloudflare.com/learning/security/glossary/what-is-bgp/\&quot;><u>BGP</u></a> to the topologically nearest server. This is in contrast to unicast, where each destination has a unique IP address. Anycast allows multiple servers to have the same IP address, and enables clients to automatically connect to a server close to them. This is similar to emergency phone networks (911, 112, etc.) which connect you to the closest emergency communications center in your area.</p><p>Anycast allows for lower latency because of the sheer number of locations available around the world. Approximately 95% of the Internet-connected population globally is within approximately 50ms away from a Cloudflare location. For real-time communication applications that use TURN, leads to improved call quality and user experience.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;auto-scaling-and-inherently-global\&quot;>Auto-scaling and inherently global</h3>\n <a href=\&quot;#auto-scaling-and-inherently-global\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Running TURN over anycast allows for better scalability and global distribution. By naturally distributing load across multiple servers based on network topology, this setup helps balance traffic and improve performance. When you use Cloudflare’s TURN service, you don’t need to manage a list of servers for different parts of the world. And you don’t need to write custom scaling logic to scale VMs up or down based on your traffic.&nbsp;&nbsp;</p><p>Anycast allows TURN to use fewer IP addresses, making it easier to allowlist in restrictive networks. Stateless protocols like DNS over UDP work well with anycast. This includes stateless STUN binding requests used to determine a system&amp;#39;s external IP address behind a NAT.</p><p>However, stateful protocols over UDP, like QUIC or TURN, are more challenging with anycast. QUIC handles this better due to its stable connection ID, which load balancers can use to consistently route traffic. However, TURN/STUN lacks a similar connection ID. So when a TURN client sends requests to the Cloudflare TURN service, the <a href=\&quot;https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/\&quot;><u>Unimog load balancer</u></a> ensures that all its requests get routed to the same server within a data center. The challenges for the communication between a client on the Internet and Cloudflare services listening on an anycast IP address have been described <a href=\&quot;https://blog.cloudflare.com/tag/loadbalancing/\&quot;><u>multiple times before</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;how-does-cloudflares-turn-server-receive-packets\&quot;>How does Cloudflare's TURN server receive packets?</h3>\n <a href=\&quot;#how-does-cloudflares-turn-server-receive-packets\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>TURN servers act as relay points to help connect clients. This process involves two types of connections: the client-server connection and the third-party connection (relayed address).</p><p>The client-server connection uses <a href=\&quot;https://developers.cloudflare.com/calls/turn/#_top\&quot;><u>published</u></a> IP and port information to communicate with TURN clients using anycast.</p><p>For the relayed address, using anycast poses a challenge. The TURN protocol requires that packets reach the specific Cloudflare server handling the client connection. If we used anycast for relay addresses, packets might not arrive at the correct data center or server.\n</p><p>One alternative is to use unicast addresses for relay candidates. However, this approach has drawbacks, including making servers vulnerable to attacks and requiring many IP addresses.</p><p>\n</p><p>To solve these issues, we&amp;#39;ve developed a middle-ground solution, previously discussed in “<a href=\&quot;https://blog.cloudflare.com/cloudflare-servers-dont-own-ips-anymore/\&quot;><u>Cloudflare servers don&amp;#39;t own IPs anymore – so how do they connect to the Internet?</u></a>”. We use anycast addresses but add extra handling for packets that reach incorrect servers. If a packet arrives at the wrong Cloudflare location, we forward it over our backbone to the correct datacenter, rather than sending it back over the public Internet.</p><p>This approach not only resolves routing issues but also improves TURN connection speed. Packets meant for the relay address enter the Cloudflare network as close to the sender as possible, optimizing the routing process.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2JxesKGit6hdK0NzaEduEk/5b248cbc27293b9dc1ccb1a5b5f7b615/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1014\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>In this non-ideal setup, a TURN client connects to Cloudflare using Anycast, while a direct client uses Unicast, which would expose the TURN server to potential DDoS attacks.</i></sup></p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/CI9Q5qMDC7xXcifH5l898/975e7f52416e0b737c250433aa68ee82/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1015\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>The optimized setup uses Anycast for all TURN clients, allowing for dynamic load distribution across Cloudflare&amp;#39;s globally distributed TURN servers.</i></sup></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;try-cloudflare-calls-turn-today\&quot;>Try Cloudflare Calls TURN today</h2>\n <a href=\&quot;#try-cloudflare-calls-turn-today\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The new TURN feature of Cloudflare Calls addresses critical challenges in real-time communication:</p><ul><li><p><b>Connectivity</b>: By solving NAT traversal issues, TURN ensures reliable connections even in complex network environments.</p></li><li><p><b>Privacy</b>: Acting as an intermediary, TURN enhances user privacy by masking IP addresses and network details.</p></li><li><p><b>Performance</b>: Leveraging Cloudflare&amp;#39;s global anycast network, our TURN service offers unparalleled speed and near-zero latency.</p></li><li><p><b>Scalability</b>: With presence in over 330 cities, Cloudflare Calls TURN grows with your needs.</p></li></ul><p>Cloudflare Calls TURN service is billed on a usage basis. It is available to self-serve and Enterprise customers alike. There is no cost for the first 1,000 GB (one terabyte) of Cloudflare Calls usage each month. It costs five cents per GB after your first terabyte of usage on self-serve. Volume pricing is available for Enterprise customers through your account team.</p><p>Switching TURN providers is likely as simple as changing a single configuration in your real-time app. To get started with Cloudflare’s TURN service, create a TURN app from your <a href=\&quot;https://dash.cloudflare.com/?to=/:account/calls\&quot;><u>Cloudflare Calls Dashboard</u></a> or read the <a href=\&quot;https://developers.cloudflare.com/calls/turn/\&quot;><u>Developer Docs</u></a>.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-25T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:05.002Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/40sSc6VikabsV34fFE8iCD/1d1d18614bbc689136a7c48944daded9/image4.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;Gjiz2ZEdsdMrNS3Vl3ypi&quot;],&quot;name&quot;:[0,&quot;Cloudflare Calls&quot;],&quot;slug&quot;:[0,&quot;cloudflare-calls&quot;]}],[0,{&quot;id&quot;:[0,&quot;7jhcqd4x1lAMEMo1QGlEtg&quot;],&quot;name&quot;:[0,&quot;Anycast&quot;],&quot;slug&quot;:[0,&quot;anycast&quot;]}],[0,{&quot;id&quot;:[0,&quot;z8ZZrDbXCT44IU6BaHLWl&quot;],&quot;name&quot;:[0,&quot;Load Balancing&quot;],&quot;slug&quot;:[0,&quot;loadbalancing&quot;]}],[0,{&quot;id&quot;:[0,&quot;4RdAxGAPlBtX9qB25qy5Qi&quot;],&quot;name&quot;:[0,&quot;WebRTC&quot;],&quot;slug&quot;:[0,&quot;webrtc&quot;]}],[0,{&quot;id&quot;:[0,&quot;JHdiqMFHaw15OnS6t0dYH&quot;],&quot;name&quot;:[0,&quot;TURN&quot;],&quot;slug&quot;:[0,&quot;turn&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Nils Ohlmeier&quot;],&quot;slug&quot;:[0,&quot;nils-ohlmeier&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3QcLfc07dRucTt9iHRCFdg/dae3a6fc317db307095b86e34bc3c218/nils.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}],[0,{&quot;name&quot;:[0,&quot;Renan Dincer&quot;],&quot;slug&quot;:[0,&quot;renan&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/16iAPxbwQI0F56SJyg8Jjg/9f0de5d81ecff5c032a5a8454451f848/renan.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@rrnn&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;TURN servers help relay media and data between devices when direct peer-to-peer connections are blocked or fail. Cloudflare Calls' TURN server uses anycast to eliminate the need to think about regions or scaling, improving reliability of WebRTC applications.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/webrtc-turn-using-anycast&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;TURN and anycast: making peer connections work globally&quot;],&quot;description&quot;:[0,&quot;TURN servers help relay media and data between devices when direct peer-to-peer connections are blocked or fail. Cloudflare Calls' TURN server uses anycast to eliminate the need to think about regions or scaling, improving reliability of WebRTC applications.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/20Ze6k5hEhGIWiXeMnEFAh/1eb5982f02e092e0e1c371f64765381a/TURN_and_anycast-_making_peer_connections_work_globally-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;6YLU1FUKD4lioSrbpOnb5r&quot;],&quot;title&quot;:[0,&quot;New standards for a faster and more private Internet&quot;],&quot;slug&quot;:[0,&quot;new-standards&quot;],&quot;excerpt&quot;:[0,&quot;Cloudflare's customers can now take advantage of Zstandard (zstd) compression, offering 42% faster compression than Brotli and 11.3% more efficiency than GZIP. We're further optimizing performance for our customers with HTTP/3 prioritization and BBR congestion control, and enhancing privacy through Encrypted Client Hello (ECH).&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>As the Internet grows, so do the demands for speed and security. At Cloudflare, we’ve spent the last 14 years simplifying the adoption of the latest web technologies, ensuring that our users stay ahead without the complexity. From being the first to offer free SSL certificates through <a href=\&quot;https://blog.cloudflare.com/introducing-universal-ssl/\&quot;><u>Universal SSL</u></a> to quickly supporting innovations like <a href=\&quot;https://blog.cloudflare.com/introducing-tls-1-3\&quot;><u>TLS 1.3</u></a>, <a href=\&quot;https://blog.cloudflare.com/introducing-cloudflares-automatic-ipv6-gatewa/\&quot;><u>IPv6</u></a>, and <a href=\&quot;https://blog.cloudflare.com/http-3-from-root-to-tip/\&quot;><u>HTTP/3</u></a>, we&amp;#39;ve consistently made it easy for everyone to harness cutting-edge advancements.</p><p>One of the most exciting recent developments in web performance is Zstandard (zstd) — a new compression algorithm that we have found compresses data 42% faster than Brotli while maintaining almost the same compression levels. Not only that, but Zstandard reduces file sizes by 11.3% compared to GZIP, all while maintaining comparable speeds. As compression speed and efficiency directly impact latency, this is a game changer for improving user experiences across the web.</p><p>We’re also re-starting the <a href=\&quot;https://blog.cloudflare.com/announcing-encrypted-client-hello/\&quot;><u>rollout of Encrypted Client Hello (ECH)</u></a>, a <a href=\&quot;https://datatracker.ietf.org/doc/draft-ietf-tls-esni/\&quot;><u>new proposed standard </u></a>that prevents networks from snooping on which websites a user is visiting. <a href=\&quot;https://blog.cloudflare.com/encrypted-client-hello/\&quot;><u>Encrypted Client Hello (ECH) is a successor to ESNI</u></a> and masks the <a href=\&quot;https://www.cloudflare.com/en-gb/learning/ssl/what-is-sni/\&quot;><u>Server Name Indication (SNI)</u></a> that is used to negotiate a TLS handshake. This means that whenever a user visits a website on Cloudflare that has ECH enabled, no one except for the user, Cloudflare, and the website owner will be able to determine which website was visited. Cloudflare is a big proponent of privacy for everyone and is excited about the prospects of bringing this technology to life.</p><p>In this post, we also further explore our work measuring the impact of HTTP/3 prioritization, and the development of Bottleneck Bandwidth and Round-trip propagation time (BBR) congestion control to further optimize network performance.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;introducing-zstandard-compression\&quot;>Introducing Zstandard compression</h2>\n <a href=\&quot;#introducing-zstandard-compression\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p><a href=\&quot;https://github.com/facebook/zstd\&quot;><u>Zstandard</u></a>, an advanced compression algorithm, was developed by <a href=\&quot;https://engineering.fb.com/2018/12/19/core-infra/zstandard/\&quot;><u>Yann Collet at Facebook</u></a> and open sourced in August 2016 to manage large-scale data processing.&nbsp; It has gained popularity in recent years due to its impressive compression ratios and speed. The protocol was included in <a href=\&quot;https://chromestatus.com/feature/6186023867908096\&quot;><u>Chromium-based browsers</u></a> and <a href=\&quot;https://connect.mozilla.org/t5/ideas/add-support-for-zstd-compression/idi-p/52155\&quot;><u>Firefox</u></a> in March 2024 as a <a href=\&quot;https://caniuse.com/zstd\&quot;><u>supported</u></a> compression algorithm.&nbsp;</p><p>Today, we are excited to announce that Zstandard compression between Cloudflare and browsers is now available to everyone.&nbsp;</p><p>Our testing shows that Zstandard compresses data up to 42% faster than <a href=\&quot;https://github.com/google/brotli\&quot;><u>Brotli</u></a> while achieving nearly equivalent data compression. Additionally, Zstandard outperforms <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc1952\&quot;><u>GZIP</u></a> by approximately 11.3% in compression efficiency, all while maintaining similar compression speeds. This means Zstandard can compress files to the same size as Brotli but in nearly half the time, speeding up your website without sacrificing performance.\n\nThis is exciting because compression speed and file size directly impacts latency. When a browser requests a resource from the origin server, the server needs time to compress the data before it’s sent over the network. A faster compression algorithm, like Zstandard, reduces this initial processing time. By also reducing the size of files transmitted over the Internet, better compression means downloads take less time to complete, websites load quicker, and users ultimately get a better experience.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6HSjbMJGtBI4GJlBp2Jf35/e2f971157f078636c6702f40f2c03a70/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;600\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;why-is-compression-so-important\&quot;>Why is compression so important?</h3>\n <a href=\&quot;#why-is-compression-so-important\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Website performance is crucial to the success of online businesses. <a href=\&quot;https://www2.deloitte.com/content/dam/Deloitte/ie/Documents/Consulting/Milliseconds_Make_Millions_report.pdf\&quot;><u>Study</u></a> after <a href=\&quot;https://www.thinkwithgoogle.com/_qs/documents/4290/c676a_Google_MobileSiteSpeed_Playbook_v2.1_digital_4JWkGQT.pdf\&quot;><u>study</u></a> has shown that an increased load time <a href=\&quot;https://www.cloudflare.com/learning/performance/more/website-performance-conversion-rates/\&quot;><u>directly affects sales</u></a>. In highly competitive markets, the performance of a website is crucial for success. Just like a physical shop situated in a remote area faces challenges in attracting customers, a slow website encounters similar difficulties in attracting traffic. \n\nThink about buying a piece of flat pack furniture such as a bookshelf. Instead of receiving the bookshelf fully assembled, which would be expensive and cumbersome to transport, you receive it in a compact, flat box with all the components neatly organized, ready for assembly. The parts are carefully arranged to take up the least amount of space, making the package much smaller and easier to handle. When you get the item, you simply follow the instructions to assemble it to its proper state.&nbsp;</p><p>This is similar to how data compression works. The data is “disassembled” and packed tightly to reduce its size before being transmitted. Once it reaches its destination, it’s “reassembled” to its original form. This compression process reduces the amount of data that needs to be sent, saving bandwidth, reducing costs, and speeding up the transfer, just like how flat pack furniture reduces shipping costs and simplifies delivery logistics.</p><p>However, with compression, there is a tradeoff: time to compress versus the overall compression ratio. A compression ratio is a measure of how much a file&amp;#39;s size is reduced during compression. For example, a 10:1 compression ratio means that the compressed file is one-tenth the size of the original. Just like assembling flat-pack furniture takes time and effort, achieving higher compression ratios often requires more processing time. While a higher compression ratio significantly reduces file size — making data transmission faster and more efficient — it may take longer to compress and decompress the data. Conversely, quicker compression methods might produce larger files, leading to faster processing but at the cost of greater bandwidth usage. Balancing these factors is key to optimizing performance in data transmission.</p><p><a href=\&quot;https://w3techs.com/technologies/details/ce-compression\&quot;><u>W3 Technologies</u></a> reports that as of September 12, 2024, 88.6% of websites rely on compression to optimize speed and reduce bandwidth usage. <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc1952\&quot;><u>GZIP</u></a>, introduced in 1996, remains the default algorithm for many, used by 57.0% of sites due to its reasonable compression ratios and fast compression speeds. <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc7932\&quot;><u>Brotli</u></a>, released by Google in 2016, delivers better <a href=\&quot;https://blog.cloudflare.com/results-experimenting-brotli/\&quot;><u>compression ratios</u></a>, leading to smaller file sizes, especially for static assets like JavaScript and CSS, and is used by 45.5% of websites. However, this also means that 11.4% of websites still operate without any compression, missing out on crucial performance improvements.</p><p>As the Internet and its supporting infrastructure have evolved, so have user demands for faster, more efficient performance. This growing need for higher efficiency without compromising speed is where Zstandard comes into play.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;enter-zstandard\&quot;>Enter Zstandard</h3>\n <a href=\&quot;#enter-zstandard\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Zstandard offers higher compression ratios comparable to GZIP, but with significantly faster compression and decompression speeds than Brotli. This makes it ideal for real-time applications that require both speed and relatively high compression ratios.</p><p>To understand Zstandard&amp;#39;s advantages, it&amp;#39;s helpful to know about <a href=\&quot;https://blog.cloudflare.com/cloudflare-fights-cancer/\&quot;><u>Zlib</u></a>. Zlib was developed in the mid-1990s based on the <a href=\&quot;https://en.wikipedia.org/wiki/DEFLATE\&quot;><u>DEFLATE</u></a> compression algorithm, which combines <a href=\&quot;https://www.cloudflare.com/en-gb/learning/performance/glossary/what-is-image-compression/\&quot;><u>LZ77 and Huffman coding</u></a> to reduce file sizes. While Zlib has been a compression standard since the mid-1990s and is used in Cloudflare’s <a href=\&quot;https://blog.cloudflare.com/cloudflare-fights-cancer/\&quot;><u>open-source</u></a> GZIP implementation, its design is limited by a 32 KB sliding window — a constraint from the memory limitations of that era. This makes Zlib less efficient on modern hardware, which can access far more memory.</p><p>Zstandard enhances Zlib by leveraging modern innovations and hardware capabilities. Unlike Zlib’s fixed 32 KB window, Zstandard has no strict memory constraints and can theoretically address terabytes of memory. However,&nbsp; in practice, it typically uses much less, around 1 MB at lower compression levels. This flexibility allows Zstandard to buffer large amounts of data, enabling it to identify and compress repeating patterns more effectively. Zstandard also employs <a href=\&quot;https://engineering.fb.com/2016/08/31/core-infra/smaller-and-faster-data-compression-with-zstandard/#:~:text=Repcode%20modeling,within%20zlib/gzip.\&quot;><u>repcode modeling</u></a> to efficiently compress structured data with repetitive sequences, further reducing file sizes and enhancing its suitability for modern compression needs.</p><p>Zstandard is optimized for modern CPUs, which can execute multiple tasks simultaneously using multiple Arithmetic Logic Units (ALUs) that are used to perform mathematical tasks. Zstandard achieves this by processing data in parallel streams, dividing it into multiple parts that are processed concurrently. <a href=\&quot;https://chromium.googlesource.com/external/github.com/klauspost/compress/+/refs/heads/master/huff0/\&quot;><u>The Huffman decoder, Huff0</u></a>, can decode multiple symbols in parallel on a single CPU core, and when combined with multi-threading, this leads to substantial speed improvements during both compression and decompression.</p><p>Zstandard’s branchless design is a crucial innovation that enhances CPU efficiency, especially in modern processors. To understand its significance, consider how CPUs execute instructions.</p><p>Modern CPUs use pipelining, where different stages of an instruction are processed simultaneously—like a production line—keeping all parts of the processor busy. However, when CPUs encounter a branch, such as an &amp;#39;if-else&amp;#39; decision, they must make a <a href=\&quot;https://blog.cloudflare.com/branch-predictor/\&quot;><u>branch prediction</u></a> to guess the next step. If the prediction is wrong, the pipeline must be cleared and restarted, causing slowdowns.</p><p>Zstandard avoids this issue by eliminating conditional branching. Without relying on branch predictions, it ensures the CPU can execute instructions continuously, keeping the pipeline full and avoiding performance bottlenecks.</p><p>A key feature of Zstandard is its use of <a href=\&quot;https://www.rfc-editor.org/rfc/rfc8478.html#section-4.1\&quot;><u>Finite State Entropy (FSE)</u></a>, an advanced compression method that encodes data more efficiently based on probability. FSE, built on the <a href=\&quot;https://en.wikipedia.org/wiki/Asymmetric_numeral_systems\&quot;><u>Asymmetric Numeral System (ANS)</u></a>, allows Zstandard to use fractional bits for encoding, unlike traditional Huffman coding, which only uses whole bits. This allows heavily repeated data to be compressed more tightly without sacrificing efficiency.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;zstandard-findings\&quot;>Zstandard findings</h3>\n <a href=\&quot;#zstandard-findings\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In the third quarter of 2024, we conducted extensive tests on our new Zstandard compression module, focusing on a 24-hour period where we switched the default compression algorithm from Brotli to Zstandard across our Free plan traffic. This experiment spanned billions of requests, covering a wide range of file types and sizes, including HTML, CSS, and JavaScript. The results were very promising, with significant improvements in both compression speed and file size reduction, leading to faster load times and more efficient bandwidth usage.</p><h4>Compression ratios</h4><p>In terms of compression efficiency, Zstandard delivers impressive results. Below are the average compression ratios we observed during our testing.</p><table><tr><td><p><b>Compression Algorithm</b></p></td><td><p><b>Average Compression Ratio</b></p></td></tr><tr><td><p>GZIP</p></td><td><p>2.56</p></td></tr><tr><td><p>Zstandard</p></td><td><p>2.86</p></td></tr><tr><td><p>Brotli</p></td><td><p>3.08</p></td></tr></table>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2EA8KkP7M3j4KiEArzmXVT/2a93b972f531f02f6b253e231f73ff40/image5.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1236\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>As the table shows, Zstandard achieves an average compression ratio of <b>2.86:1</b>, which is notably higher than gzip&amp;#39;s <b>2.56:1</b> and close to Brotli’s <b>3.08:1</b>. While Brotli slightly edges out Zstandard in terms of pure compression ratio, what is particularly exciting is that we are only using Zstandard’s default compression level of 3 (out of 22) on our traffic. In the fourth quarter of 2024, we plan to experiment with higher compression levels and multithreading capabilities to further enhance Zstandard’s performance and optimize results even more.</p><h4>Compression speeds</h4><p>What truly sets Zstandard apart is its speed. Below are the average times to compress data from our traffic-based tests measured in milliseconds:</p><table><tr><td><p><b>Compression Algorithm</b></p></td><td><p><b>Average Time to Compress (ms)</b></p></td></tr><tr><td><p>GZIP</p></td><td><p>0.872</p></td></tr><tr><td><p>Zstandard</p></td><td><p>0.848</p></td></tr><tr><td><p>Brotli</p></td><td><p>1.544</p></td></tr></table>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/15AxPyO1PmyV6hDRRjBznu/9cf16cfdc146afddbf9a3332da29629a/image10.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1234\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>Zstandard not only compresses data efficiently, but it also does so <b>42% faster</b> than Brotli, with an average compression time of <b>0.848 ms</b> compared to Brotli’s <b>1.544 ms</b>. It even outperforms gzip, which compresses at <b>0.872 ms</b> on average.</p><p>From our results, we have found Zstandard strikes an excellent balance between achieving a high compression ratio and maintaining fast compression speed, making it particularly well-suited for dynamic content such as HTML and non-cacheable sensitive data. Zstandard can compress these responses from the origin quickly and efficiently, saving time compared to Brotli while providing better compression ratios than GZIP.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;implementing-zstandard-at-cloudflare\&quot;>Implementing Zstandard at Cloudflare</h3>\n <a href=\&quot;#implementing-zstandard-at-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To implement Zstandard compression at Cloudflare, we needed to build it into our Nginx-based service which already handles GZIP and Brotli compression. Nginx is modular by design, with each module performing a specific function, such as compressing a response. Our custom Nginx module leverages Nginx&amp;#39;s function &amp;#39;hooks&amp;#39; — specifically, the header filter and body filter — to implement Zstandard compression.</p><h4>Header filter</h4><p>The header filter allows us to access and modify response headers. For example, Cloudflare only compresses responses above a certain size (50 bytes for Zstandard), which is enforced with this code:</p>\n <pre class=\&quot;language-C++\&quot;><code class=\&quot;language-C++\&quot;>if (r-&amp;gt;headers_out.content_length_n != -1 &amp;amp;&amp;amp;\n r-&amp;gt;headers_out.content_length_n &amp;lt; conf-&amp;gt;min_length) {\n return ngx_http_next_header_filter(r);\n}</pre></code>\n <p>Here, we check the &amp;quot;Content-Length&amp;quot; header. If the content length is less than our minimum threshold, we skip compression and let Nginx execute the next module.</p><p>We also need to ensure the content is not already compressed by checking the &amp;quot;Content-Encoding&amp;quot; header:</p>\n <pre class=\&quot;language-C++\&quot;><code class=\&quot;language-C++\&quot;>if (r-&amp;gt;headers_out.content_encoding &amp;amp;&amp;amp;\n r-&amp;gt;headers_out.content_encoding-&amp;gt;value.len) {\n return ngx_http_next_header_filter(r);\n}</pre></code>\n <p>If the content is already compressed, the module is bypassed, and Nginx proceeds to the next header filter.</p><h4>Body filter</h4><p>The body filter hook is where the actual processing of the response body occurs. In our case, this involves compressing the data with the Zstandard encoder and streaming the compressed data back to the client. Since responses can be very large, it&amp;#39;s not feasible to buffer the entire response in memory, so we manage internal memory buffers carefully to avoid running out of memory.</p><p>The Zstandard library is well-suited for streaming compression and provides the <code>ZSTD_compressStream2</code> function:</p>\n <pre class=\&quot;language-C++\&quot;><code class=\&quot;language-C++\&quot;>ZSTDLIB_API size_t ZSTD_compressStream2(ZSTD_CCtx* cctx,\n ZSTD_outBuffer* output,\n ZSTD_inBuffer* input,\n ZSTD_EndDirective endOp);</pre></code>\n <p>This function can be called repeatedly with chunks of input data to be compressed. It accepts input and output buffers and an &amp;quot;operation&amp;quot; parameter (<code>ZSTD_EndDirective endOp</code>) that controls whether to continue feeding data, flush the data, or finalize the compression process.</p><p>Nginx uses a &amp;quot;flush&amp;quot; flag on memory buffers to indicate when data can be sent. Our module uses this flag to set the appropriate Zstandard operation:</p>\n <pre class=\&quot;language-C++\&quot;><code class=\&quot;language-C++\&quot;>switch (zstd_operation) {\n case ZSTD_e_continue: {\n if (flush) {\n zstd_operation = ZSTD_e_flush;\n }\n }\n}\n</pre></code>\n <p>This logic allows us to switch from the &amp;quot;ZSTD_e_continue&amp;quot; operation, which feeds more input data into the encoder, to &amp;quot;ZSTD_e_flush&amp;quot;, which extracts compressed data from the encoder.</p><h4>Compression cycle</h4><p>The compression module operates in the following cycle:</p><ol><li><p>Receive uncompressed data.</p></li><li><p>Locate an internal buffer to store compressed data.</p></li><li><p>Compress the data with Zstandard.</p></li><li><p>Send the compressed data back to the client.</p></li></ol><p>Once a buffer is filled with compressed data, it’s passed to the next Nginx module and eventually sent to the client. When the buffer is no longer in use, it can be recycled, avoiding unnecessary memory allocation. This process is managed as follows:</p>\n <pre class=\&quot;language-C++\&quot;><code class=\&quot;language-C++\&quot;>if (free) {\n // A free buffer is available, so use it\n buffer = free;\n} else if (buffers_used &amp;lt; maximum_buffers) {\n // No free buffers, but we&amp;#039;re under the limit, so allocate a new one\n buffer = create_buf();\n} else {\n // No free buffers and can&amp;#039;t allocate more\n err = no_memory;\n}\n</pre></code>\n <h4>Handling backpressure</h4><p>If no buffers are available, it can lead to backpressure — a situation where the Zstandard module generates compressed data faster than the client can receive it. This causes data to become &amp;quot;stuck&amp;quot; inside Nginx, halting further compression due to memory constraints. In such cases, we stop compression and send an empty buffer to the next Nginx module, allowing Nginx to attempt to send the data to the client again. When successful, this frees up memory buffers that our module can reuse, enabling continued streaming of the compressed response without buffering the entire response in memory.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;whats-next-compression-dictionaries\&quot;>What's next? Compression dictionaries</h3>\n <a href=\&quot;#whats-next-compression-dictionaries\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The future of Internet compression lies in the use of <a href=\&quot;https://datatracker.ietf.org/doc/draft-ietf-httpbis-compression-dictionary/\&quot;><u>compression dictionaries</u></a>. Both Brotli and Zstandard support dictionaries, offering up to <a href=\&quot;https://developer.chrome.com/blog/shared-dictionary-compression\&quot;><u>90% improvement</u></a> on compression levels compared to using static dictionaries.&nbsp;</p><p>Compression dictionaries store common patterns or sequences of data, allowing algorithms to compress information more efficiently by referencing these patterns rather than repeating them. This concept is akin to how an iPhone&amp;#39;s predictive text feature works. For example, if you frequently use the phrase &amp;quot;On My Way,&amp;quot; you can customize your iPhone’s dictionary to recognize the abbreviation &amp;quot;OMW&amp;quot; and automatically expand it to &amp;quot;On My Way&amp;quot; when you type it, saving the user from typing six extra letters.</p><table><tr><td><p>O</p></td><td><p>M</p></td><td><p>W</p></td><td><p></p></td><td><p></p></td><td><p></p></td><td><p></p></td><td><p></p></td><td><p></p></td></tr><tr><td><p>O</p></td><td><p>n</p></td><td><p>\n</p></td><td><p>M</p></td><td><p>y</p></td><td><p>\n</p></td><td><p>W</p></td><td><p>a</p></td><td><p>y</p></td></tr></table><p>Traditionally, compression algorithms use a static dictionary defined by its RFC that is shared between clients and origin servers. This static dictionary is designed to be broadly applicable, balancing size and compression effectiveness for general use. However, Zstandard and Brotli support custom dictionaries, tailored specifically to the content being sent to the client. For example, Cloudflare could create a specialized dictionary that focuses on frequently used terms like “Cloudflare”. This custom dictionary would compress these terms more efficiently, and a browser using the same dictionary could decode them accurately, leading to significant improvements in compression and performance.</p><p>In the future, we will enable users to leverage origin-generated dictionaries for Zstandard and Brotli to enhance compression. Another exciting area we&amp;#39;re exploring is the use of AI to create these dictionaries dynamically without them needing to be generated at the origin. By analyzing data streams in real-time, Cloudflare could develop context-aware dictionaries tailored to the specific characteristics of the data being processed. This approach would allow users to significantly improve both compression ratios and processing speed for their applications.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;compression-rules-for-everyone\&quot;>Compression Rules for everyone</h3>\n <a href=\&quot;#compression-rules-for-everyone\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Today we’re also excited to announce the introduction of <a href=\&quot;https://developers.cloudflare.com/rules/compression-rules/\&quot;><u>Compression Rules</u></a> for all our customers. By default, Cloudflare will automatically compress certain content types based on their <a href=\&quot;https://developers.cloudflare.com/speed/optimization/content/brotli/content-compression\&quot;><u>Content-Type headers</u></a>. Customers can use compression rules to optimize how and what Cloudflare compresses. This feature was previously exclusive to our Enterprise plans.\n\nCompression Rules is built on the same robust framework as our other rules products, such as Origin Rules, Custom Firewall Rules, and Cache Rules, with additional fields for Media Type and Extension Type. This allows you to easily specify the content you wish to compress, providing granular control over your site’s performance optimization.</p><p>Compression rules are now available on all our pay-as-you-go plans and will be added to free plans in October 2024. This feature was previously exclusive to our Enterprise customers. In the table below, you’ll find the updated limits, including an increase to 125 Compression Rules for Enterprise plans, aligning with our other rule products&amp;#39; quotas.</p><table><tr><td><p><b>Plan Type</b></p></td><td><p><b>Free*</b></p></td><td><p><b>Pro</b></p></td><td><p><b>Business</b></p></td><td><p><b>Enterprise</b></p></td></tr><tr><td><p>Available Compression Rules</p></td><td><p>10</p></td><td><p>25</p></td><td><p>50</p></td><td><p>125</p></td></tr></table>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;using-compression-rules-to-enable-zstandard\&quot;>Using Compression Rules to enable Zstandard</h3>\n <a href=\&quot;#using-compression-rules-to-enable-zstandard\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To integrate our Zstandard module into our platform, we also added support for it within our Compression Rules framework. This means that customers can now specify Zstandard as their preferred compression method, and our systems will automatically enable the Zstandard module in Nginx, disabling other compression modules when necessary.</p><p>The <code>Accept-Encoding</code> header determines which compression algorithms a client supports. If a browser supports Zstandard (<code>zstd</code>), and both Cloudflare and the zone have enabled the feature, then Cloudflare will return a Zstandard compressed response.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/tRIwu8JItGU0zyVmeTp2e/232af3ea43893022e5879e8361ed42b7/image4.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;467\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>If the client does not support Zstandard, then Cloudflare will automatically fall back to Brotli, GZIP, or serve the content uncompressed where no compression algorithm is supported, ensuring compatibility. \n\nTo enable Zstandard for your entire site or specifically filter on certain file types, all Cloudflare users can&nbsp;deploy a simple compression rule.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2WiodFBfD02mlPASLABkz5/e9a66b552ba46e423f352e502792b398/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;720\&quot; height=\&quot;440\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>Further details and examples of what can be accomplished with Compression Rules can be found in our <a href=\&quot;https://developers.cloudflare.com/rules/compression-rules/\&quot;><u>developer documentation</u></a>.</p><p>Currently, we support Zstandard, Brotli, and GZIP as compression algorithms for traffic sent to clients, and support GZIP and Brotli (since <a href=\&quot;https://blog.cloudflare.com/this-is-brotli-from-origin/\&quot;><u>2023</u></a>) compressed data from the origin. We plan to implement full end-to-end support for Zstandard in 2025, offering customers another effective way to reduce their egress costs.</p><p>Once Zstandard is enabled, you can view your browser’s <a href=\&quot;https://developer.chrome.com/docs/devtools/network\&quot;><u>Network Activity</u></a> log to check the content-encoding headers of the response.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1CujaUsXiEFee79Ny27Zks/1f7ef23910d4bad47c203ad311866951/image11.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;236\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p></p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5JIvK4tNjlxd7uFlWyEJoc/e426053d2c895c980f4c1370379c7b2e/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1196\&quot; height=\&quot;382\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;enable-zstandard-now\&quot;>Enable Zstandard now!</h3>\n <a href=\&quot;#enable-zstandard-now\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Zstandard is now available to all Cloudflare customers through <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/rules/compression-rules\&quot;><u>Compression Rules</u></a> on our Enterprise and pay as you go plans, with free plans gaining access in October 2024. Whether you&amp;#39;re optimizing for speed or aiming to reduce bandwidth, <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/rules/compression-rules\&quot;><u>Compression Rules</u></a> give all customers granular control over their site&amp;#39;s performance.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;encrypted-client-hello-ech\&quot;>Encrypted Client Hello (ECH)</h2>\n <a href=\&quot;#encrypted-client-hello-ech\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4BFVDlJK6Mxn0P1yk5UdHK/e348084642480eeaec9861a76e32d5f2/image9.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;600\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>While performance is crucial for delivering a fast user experience, ensuring privacy is equally important in today’s Internet landscape. As we optimize for speed with Zstandard, Cloudflare is also working to protect users&amp;#39; sensitive information from being exposed during data transmission. With web traffic growing more complex and interconnected, it&amp;#39;s critical to keep both performance and privacy in balance. This is where technologies like Encrypted Client Hello (ECH) come into play, securing connections without sacrificing speed.</p><p>Ten years ago, we embarked on a mission to create a more secure and encrypted web. At the time, much of the Internet remained unencrypted, leaving user data vulnerable to interception. On September 27, 2014, we took a major step forward by enabling HTTPS for free for all Cloudflare customers. Overnight, we doubled the size of the encrypted web. This set the stage for a more secure Internet, ensuring that encryption was not a privilege limited by budget but a right accessible to everyone.</p><p>Since then, both Cloudflare and the broader community have helped encrypt more of the Internet. Projects like <a href=\&quot;https://letsencrypt.org/\&quot;><u>Let&amp;#39;s Encrypt</u></a> launched to make certificates free for everyone. Cloudflare invested to encrypt more of the connection, and future-proof that encryption from coming technologies like <a href=\&quot;https://blog.cloudflare.com/post-quantum-for-all/\&quot;><u>quantum computers</u></a>. We&amp;#39;ve always believed that it was everyone&amp;#39;s right, regardless of your budget, to have an encrypted Internet at no cost.</p><p>One of the last major challenges has been securing the SNI (Server Name Identifier), which remains exposed in plaintext during the TLS handshake. This is where Encrypted Client Hello (ECH) comes in, and today, we are proud to announce that we&amp;#39;re closing that gap.&nbsp;</p><p>Cloudflare announced support for <a href=\&quot;https://blog.cloudflare.com/announcing-encrypted-client-hello/\&quot;><u>Encrypted Client Hello (ECH)</u></a> in 2023 and has continued to enhance its implementation in collaboration with our Internet browser partners. During a TLS handshake, one of the key pieces of information exchanged is the <a href=\&quot;https://www.cloudflare.com/learning/ssl/what-is-sni/\&quot;><u>Server Name Indication (SNI)</u></a>, which is used to initiate a secure connection. Unfortunately, the SNI is sent in plaintext, meaning anyone can read it. Imagine hand-delivering a letter — anyone following you can see where you&amp;#39;re delivering it, even if they don’t know the contents. With ECH, it is like sending the same confidential letter to a P.O. Box. You place your sensitive letter in a sealed inner envelope with the actual address. Then, you put that envelope into a larger, standard envelope addressed to a public P.O. Box, trusted to securely forward your intended recipient. The larger envelope containing the non-sensitive information is visible to everyone, while the inner envelope holds the confidential details, such as the actual address and recipient. Just as the P.O. Box maintains the anonymity of the true recipient’s address, ECH ensures that the SNI remains protected.&nbsp;</p><p>While encrypting the SNI is a primary motivation for ECH, its benefits extend further. ECH encrypts the entire Client Hello, ensuring user privacy and enabling TLS to evolve without exposing sensitive connection data. By securing the full handshake, ECH allows for flexible, future-proof encryption designs that safeguard privacy as the Internet continues to grow.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;how-ech-works\&quot;>How ECH works</h3>\n <a href=\&quot;#how-ech-works\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Encrypted Client Hello (ECH) introduces a layer of privacy by dividing the ClientHello message into two distinct parts: a ClientHelloOuter and a ClientHelloInner.&nbsp;</p><ul><li><p><b>ClientHelloOuter</b>: This part remains unencrypted and contains innocuous values for sensitive TLS extensions. It sets the SNI to Cloudflare’s public name, currently set to cloudflare-ech.com. Cloudflare manages this domain and possesses the necessary certificates to handle TLS negotiations for it.</p></li><li><p><b>ClientHelloInner</b>: This part is encrypted with a public key and includes the actual server name the client wants to visit, along with other sensitive TLS extensions. The encryption scheme ensures that this sensitive data can only be decrypted by the client-facing server, which in our case is Cloudflare.</p></li></ul><p>During the TLS handshake, the ClientHelloOuter reveals only the public name (e.g., cloudflare-ech.com), while the encrypted ClientHelloInner carries the real server name. As a result, intermediaries observing the traffic will only see cloudflare-ech.com in plaintext, concealing the actual destination.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5C7EUMmlYp3gmvfvnbeKul/ea62a3c648cd859bbb46bb6fe0761645/image13.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1574\&quot; height=\&quot;1437\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>The design of ECH effectively addresses many challenges in securely deploying handshake encryption, thanks to the collaborative efforts within the <a href=\&quot;https://datatracker.ietf.org/doc/draft-ietf-tls-esni/\&quot;><u>IETF community</u></a>. The key to ECH’s success is its integration with other IETF standards, including the new <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc9460\&quot;><u>HTTPS DNS resource record</u></a>, which enables HTTPS endpoints to advertise different TLS capabilities and simplifies key distribution. By using <a href=\&quot;https://blog.cloudflare.com/dns-encryption-explained/\&quot;><u>Encrypted DNS</u></a> methods, browsers and clients can anonymously query these HTTPS records. These records contain the ECH parameters needed to initiate a secure connection.&nbsp;</p><p>ECH leverages the <a href=\&quot;https://blog.cloudflare.com/hybrid-public-key-encryption/\&quot;><u>Hybrid Public Key Encryption (HPKE)</u></a> standard, which streamlines the handshake encryption process, making it more secure and easier to implement. Before initiating a layer 4 connection, the user’s browser makes a DNS request for an HTTPS record, and zones with ECH enabled will include an ECH configuration in the HTTPS record containing an encryption public key and some associated metadata. For example, looking at the zone cloudflare-ech.com, you can see the following record returned:</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>dig cloudflare-ech.com https +short\n\n\n1 . alpn=&amp;quot;h3,h2&amp;quot; ipv4hint=104.18.10.118,104.18.11.118 ech=AEX+DQBB2gAgACD1W1B+GxY3nZ53Rigpsp0xlL6+80qcvZtgwjsIs4YoOwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700::6812:a76,2606:4700::6812:b76</pre></code>\n <p>Aside from the public key used by the client to encrypt ClientHelloInner and other <a href=\&quot;https://www.ietf.org/archive/id/draft-ietf-tls-esni-20.html#name-encrypted-clienthello-confi\&quot;><u>parameters</u></a> that specify the ECH configuration, the configured public name is also present.</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>Y2xvdWRmbGFyZS1lY2guY29t</pre></code>\n <p>When the string is decoded it reveals:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>cloudflare-ech.com</pre></code>\n <p>This public name is then used by the client in the ClientHelloOuter.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;practical-implications\&quot;>Practical implications</h3>\n <a href=\&quot;#practical-implications\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With ECH, any observer monitoring the traffic between the client and Cloudflare will see only uniform TLS handshakes that appear to be directed towards <code>cloudflare-ech.com</code>, regardless of the actual website being accessed. For instance, if a user visits <code>example.com</code>, intermediaries will not discern this specific destination but will only see <code>cloudflare-ech.com</code> in the visible handshake data.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;the-problem-with-middleboxes\&quot;>The problem with middleboxes</h3>\n <a href=\&quot;#the-problem-with-middleboxes\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>In a basic HTTPS connection, a browser (client) establishes a TLS connection directly with an origin server to send requests and download content. However, many connections on the Internet do not go directly from a browser to the server but instead pass through some form of proxy or middlebox (often referred to as a &amp;quot;monster-in-the-middle&amp;quot; or MITM). This routing through intermediaries can occur for various reasons, both benign and malicious.</p><p>One common type of HTTPS interceptor is the TLS-terminating forward proxy. This proxy sits between the client and the destination server, transparently forwarding and potentially modifying traffic. To perform this task, the proxy terminates the TLS connection from the client, decrypts the traffic, and then re-encrypts and forwards it to the destination server over a new TLS connection. To avoid browser certificate validation errors, these forward proxies typically require users to install a root certificate on their devices. This root certificate allows the proxy to generate and present a trusted certificate for the destination server, a process often managed by network administrators in corporate environments, as seen with <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/\&quot;><u>Cloudflare WARP</u></a>. These services can help prevent sensitive company data from being transmitted to unauthorized destinations, safeguarding confidentiality.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2xfA7PB61KxnbZ96XRLahh/975153cfcd831f67f47f638ec9578cdb/image8.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1058\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>However, TLS-terminating forward proxies may not be equipped to handle Encrypted Client Hello (ECH) correctly, especially if the MITM proxy and the client facing ECH server belong to different entities.&nbsp; Because the MITM proxy will terminate the TLS connection without being ECH aware, it may provide a valid certificate for the public name (in our case, cloudflare-ech.com) without being able to decrypt the ClientHelloInner or provide a new public key for the client to use. In this case, the client considers ECH to be disabled, which means you lose out on both ECH and pay the cost of an extra round trip.&nbsp;</p><p>We also observed that specific Cloudflare setups, such as <a href=\&quot;https://developers.cloudflare.com/dns/cname-flattening/\&quot;><u>CNAME Flattening</u></a> and <a href=\&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/how-it-works/\&quot;><u>Orange-to-Orange configurations</u></a>, could cause ECH to break. This issue arose because the end destination for these connections did not support TLS 1.3, preventing ECH from being processed correctly. Fortunately, in close collaboration with our browser partners, we implemented a fallback in our <a href=\&quot;https://boringssl.googlesource.com/boringssl/+/d274b1bacdca36f3941bf78e43dc38acf676a1a8\&quot;><u>BoringSSL</u></a> implementation that handles TLS terminations. This fallback allows browsers to retry connections over TLS 1.2 without ECH, ensuring that a connection can be established and not break.</p><p>As a result of these improvements, we have enabled ECH by default for all Free plans, while all other plan types can manually enable it through their <a href=\&quot;https://dash.cloudflare.com/?to=/:account/:zone/ssl-tls/edge-certificates#ech-card\&quot;><u>Cloudflare dashboard</u></a> or via the API. We are excited to support ECH at scale, enhancing the privacy and security of users&amp;#39; browsing activities. ECH plays a crucial role in safeguarding online interactions from potential eavesdroppers and maintaining the confidentiality of web activities.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;http-3-prioritization-and-quic-congestion-control\&quot;>HTTP/3 Prioritization and QUIC congestion control</h2>\n <a href=\&quot;#http-3-prioritization-and-quic-congestion-control\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Two other areas we are investing in to improve performance for all our customers are <a href=\&quot;https://blog.cloudflare.com/better-http-3-prioritization-for-a-faster-web/\&quot;><u>HTTP/3 Prioritization</u></a> and QUIC congestion control.&nbsp;</p><p>HTTP/3 Prioritization focuses on efficiently managing the order in which web assets are loaded, thereby improving web performance by ensuring critical assets are delivered faster. HTTP/3 Prioritization uses Extensible Priorities to simplify prioritization with two parameters: urgency (ranging from 0-7) and a true/false value indicating whether the resource can be processed progressively. This allows resources like HTML, CSS, and images to be prioritized based on importance.</p><p>On the other hand, QUIC congestion control aims to optimize the flow of data, preventing network bottlenecks and ensuring smooth, reliable transmission even under heavy traffic conditions.&nbsp;</p><p>Both of these improvements significantly impact how Cloudflare’s network serves requests to clients. Before deploying these technologies across our global network, which handles peak traffic volumes of over 80 million requests per second, we first developed a reliable method to measure their impact through rigorous experimentation.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;measuring-impact\&quot;>Measuring impact</h3>\n <a href=\&quot;#measuring-impact\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Accurately measuring the impact of features implemented by Cloudflare for our customers is crucial for several reasons. These measurements ensure that optimizations related to performance, security, or reliability deliver the intended benefits without introducing new issues. Precise measurement validates the effectiveness of these changes, allowing Cloudflare to assess improvements in metrics such as load times, user experience, and overall site security. One of the best ways to measure performance changes is through aggregated real-world data.</p><p><a href=\&quot;https://developers.cloudflare.com/pages/how-to/web-analytics/\&quot;><u>Cloudflare Web Analytics</u></a> offers free, privacy-first analytics for your website, helping you understand the performance of your web pages as experienced by your visitors. Real User Metrics (RUM) is a vital tool in web performance optimization, capturing data from real users interacting with a website, providing insights into site performance under real-world conditions. RUM tracks various metrics directly from the user&amp;#39;s device, including load times, resource usage, and user interactions. This data is essential for understanding the actual user experience, as it reflects the diverse environments and conditions under which the site is accessed.</p><p>A key performance indicator measured through RUM is <a href=\&quot;https://web.dev/articles/vitals#core-web-vitals\&quot;><u>Core Web Vitals (CWV)</u></a>, a set of metrics defined by Google that quantify crucial aspects of user experience on the web. CWV focuses on three main areas: loading performance, interactivity, and visual stability. The specific metrics include Largest Contentful Paint (LCP), which measures loading performance; First Input Delay (FID), which gauges interactivity; and Cumulative Layout Shift (CLS), which assesses visual stability. By using the CWV measurement in RUM, developers can monitor and optimize their applications to ensure a smoother, faster, and more stable user experience and track the impact of any changes they release.</p><p>Over the last three months we have developed the capability to include valuable information in Server-Timing response headers. When a page that uses Cloudflare Web Analytics is loaded in a browser, the privacy-first client-side script from Web Analytics collects browser metrics and server-timing headers, then sends back this performance data. This data is ingested, aggregated, and made available for querying. The server-timing header includes Layer 4 information, such as Round-Trip Time (RTT) and protocol type (TCP or QUIC). Combined with Core Web Vitals data, this allows us to determine whether an optimization has positively impacted a request compared to a control sample. This capability enables us to release large-scale changes such as HTTP/3 Prioritization or BBR with a clear understanding of their impact across our global network.</p><p>An example of this header contains several key properties that provide valuable information about the network performance as observed by the server:</p>\n <pre class=\&quot;language-javascript\&quot;><code class=\&quot;language-javascript\&quot;>server-timing: cfL4;desc=&amp;quot;?proto=TCP&amp;amp;rtt=7337&amp;amp;sent=8&amp;amp;recv=8&amp;amp;lost=0&amp;amp;retrans=0&amp;amp;sent_bytes=3419&amp;amp;recv_bytes=832&amp;amp;delivery_rate=548023&amp;amp;cwnd=25&amp;amp;unsent_bytes=0&amp;amp;cid=94dae6b578f91145&amp;amp;ts=225</pre></code>\n <ul><li><p><b>proto</b>: Indicates the transport protocol used</p></li><li><p><b>rtt</b>: Round-Trip Time (RTT), representing the duration of the network round trip as measured by the layer 4 connection using a smoothing algorithm.</p></li><li><p><b>sent</b>: Number of packets sent.</p></li><li><p><b>recv</b>: Number of packets received.</p></li><li><p><b>lost</b>: Number of packets lost.</p></li><li><p><b>retrans</b>: Number of retransmitted packets.</p></li><li><p><b>sent_bytes</b>: Total number of bytes sent.</p></li><li><p><b>recv_bytes</b>: Total number of bytes received.</p></li><li><p><b>delivery_rate</b>: Rate of data delivery, an instantaneous measurement in bytes per second.</p></li><li><p><b>cwnd</b>: Congestion Window, an instantaneous measurement of packet or byte count depending on the protocol.</p></li><li><p><b>unsent_bytes</b>: Number of bytes not yet sent.</p></li><li><p><b>cid</b>: A 16-byte hexadecimal opaque connection ID.</p></li><li><p><b>ts</b>: Timestamp in milliseconds, representing when the data was captured.</p></li></ul><p>This real-time collection of performance data via RUM and Server-Timing headers allows Cloudflare to make data-driven decisions that directly enhance user experience. By continuously analyzing these detailed network and performance insights, we can ensure that future optimizations, such as HTTP/3 Prioritization or BBR deployment, are delivering tangible benefits for our customers.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;enabling-http-3-prioritization-for-all-plans\&quot;>Enabling HTTP/3 Prioritization for all plans</h3>\n <a href=\&quot;#enabling-http-3-prioritization-for-all-plans\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>As part of our focus on improving observability through the integration of the server-timing header, we implemented several minor changes to optimize QUIC handshakes. Notably, we observed positive improvements in our telemetry due to the Layer 4 observability enhancements provided by the server-timing header. These internal findings coincided with third-party measurements, which showed similar improvements in handshake performance.</p><p>In the fourth quarter of 2024, we will apply the same experimental methodology to the HTTP/3 Prioritization support announced during Speed Week 2023. <a href=\&quot;https://blog.cloudflare.com/better-http-3-prioritization-for-a-faster-web/\&quot;><u>HTTP/3 Prioritization</u></a> is designed to enhance the efficiency and speed of loading web pages by intelligently managing the order in which web assets are delivered to users. This is crucial because modern web pages are composed of numerous elements — such as images, scripts, and stylesheets — that vary in importance. Proper prioritization ensures that critical elements, like primary content and layout, load first, delivering a faster and more seamless browsing experience.</p><p>We will use this testing framework to measure performance improvements before enabling the feature across all plan types. This process allows us not only to quantify the benefits but, most importantly, to ensure there are no performance regressions.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;congestion-control\&quot;>Congestion control</h3>\n <a href=\&quot;#congestion-control\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Following the completion of the HTTP/3 Prioritization experiments we will then begin testing different congestion control algorithms, specifically focusing on <a href=\&quot;https://cloud.google.com/blog/products/networking/tcp-bbr-congestion-control-comes-to-gcp-your-internet-just-got-faster\&quot;><u>BBR</u></a> (Bottleneck Bandwidth and Round-trip propagation time) version 3. Congestion control is a crucial mechanism in network communication that aims to optimize data transfer rates while avoiding network congestion. When too much data is sent too quickly over a network, it can lead to congestion, causing packet loss, delays, and reduced overall performance. Think of a busy highway during rush hour. If too many cars (data packets) flood the highway at once, traffic jams occur, slowing everyone down.</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1kR4Ekkg2eUPzO4Lj8CrjY/d002875b8f77f782d13bc0ef199ba931/image6.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;1000\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Congestion control algorithms act like traffic managers, regulating the flow of data to prevent these “traffic jams,” ensuring that data moves smoothly and efficiently across the network. Each side of a connection runs an algorithm in real time, dynamically adjusting the flow of data based on the current and predicted network conditions.\n\nBBR is an advanced congestion control algorithm, initially developed by Google. BBR seeks to estimate the actual available bandwidth and the minimum round-trip time (RTT) to determine the optimal data flow. This approach allows BBR to maintain high throughput while minimizing latency, leading to more efficient and stable network performance.</p><p><a href=\&quot;https://github.com/google/bbr/blob/v3/README.md\&quot;><u>BBR v3</u></a>, the latest iteration, builds on the strengths of its predecessors BBRv1 and BBRv2 by further refining its bandwidth estimation techniques and enhancing its adaptability to varying network conditions. We found BBR v3 to be faster in several cases compared to our previous implementation of <a href=\&quot;https://datatracker.ietf.org/doc/html/rfc8312\&quot;><u>CUBIC</u></a>. Most importantly, it reduced loss and retransmission rates in our <a href=\&quot;https://blog.cloudflare.com/introducing-oxy/\&quot;><u>Oxy</u></a> proxy implementation.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/61VpPQXJWTHnrnlb7dz2um/f1aecca8fea1bbeced3074d46389c3db/image7.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;566\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>With these promising results, we are excited to test various congestion control algorithms including BBRv3 for <a href=\&quot;https://github.com/cloudflare/quiche\&quot;><u>quiche</u></a>, our QUIC implementation, across our HTTP/3 traffic. Combining the layer 4 server-timing information with experiments in this area will enable us to explicitly control and measure the impact on real-world metrics.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;the-future\&quot;>The future</h2>\n <a href=\&quot;#the-future\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The future of the Internet relies on continuous innovation to meet the growing demands for speed, security, and scalability. Technologies like Zstandard for compression, BBR for congestion control, HTTP/3 prioritization, and Encrypted Client Hello are setting new standards for performance and privacy. By implementing these protocols, web services can achieve faster page load times, more efficient bandwidth usage, and stronger protections for user data.</p><p>These advancements don&amp;#39;t just offer incremental improvements, they provide a significant leap forward in optimizing the user experience and safeguarding online interactions. At Cloudflare, we are committed to making these technologies accessible to everyone, empowering businesses to deliver better, faster, and more secure services.&nbsp;</p><p>Stay tuned for more developments as we continue to push the boundaries of what&amp;#39;s possible on the web and if you’re passionate about building and implementing the latest Internet innovations, we’re <a href=\&quot;https://www.cloudflare.com/careers/jobs/\&quot;><u>hiring</u></a>!</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-25T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:05.592Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2pa5KXMxaWp3ss7jnNGRvU/211baac16650f820c09c723de1f1fda4/image12.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;3BWeMuiOShelE7QM48sW9j&quot;],&quot;name&quot;:[0,&quot;Privacy&quot;],&quot;slug&quot;:[0,&quot;privacy&quot;]}],[0,{&quot;id&quot;:[0,&quot;46a4khPVxfuoICIG0E2IzA&quot;],&quot;name&quot;:[0,&quot;Compression&quot;],&quot;slug&quot;:[0,&quot;compression&quot;]}],[0,{&quot;id&quot;:[0,&quot;56vA0Z6hqev6QaJBQmO2J8&quot;],&quot;name&quot;:[0,&quot;TLS&quot;],&quot;slug&quot;:[0,&quot;tls&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Matt Bullock&quot;],&quot;slug&quot;:[0,&quot;matt-bullock&quot;],&quot;bio&quot;:[0,&quot;Product at Cloudflare.&quot;],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3fEkxzMVixG4qTwCCMFlbP/50e9297df6fdc184e4cda6d4e935db69/matt-bullock.jpeg&quot;],&quot;location&quot;:[0,&quot;London, England&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@mibullock&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Maciej Lechowski&quot;],&quot;slug&quot;:[0,&quot;maciej&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3qIFY4yIuugv6SpBHAdR7r/127e282fde0f0611fd09c25e3732abc2/maciej.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Rushil Mehra&quot;],&quot;slug&quot;:[0,&quot;rushil-mehra&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4C0hIM94DE2YvmWRQcHfN1/943b024a7a20b37af08f873891f7f142/rushil-mehra.jpeg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Cloudflare's customers can now take advantage of Zstandard (zstd) compression, offering 42% faster compression than Brotli and 11.3% more efficiency than GZIP. We're further optimizing performance for our customers with HTTP/3 prioritization and BBR congestion control, and enhancing privacy through Encrypted Client Hello (ECH).&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/new-standards&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;New standards for a faster and more private Internet&quot;],&quot;description&quot;:[0,&quot;Cloudflare's customers can now take advantage of Zstandard (zstd) compression, offering 42% faster compression than Brotli and 11.3% more efficiency than GZIP. We're further optimizing performance for our customers with HTTP/3 prioritization and BBR congestion control, and enhancing privacy through Encrypted Client Hello (ECH).&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1hC0w2tovQ13pI6V7fSFS3/19c7f8ebff2fd83be9acb760abf6ea98/New_standards_for_a_faster_and_more_private_Internet-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;11EWaw0wCUNwPTM30w7oUN&quot;],&quot;title&quot;:[0,&quot;Instant Purge: invalidating cached content in under 150ms&quot;],&quot;slug&quot;:[0,&quot;instant-purge&quot;],&quot;excerpt&quot;:[0,&quot;Today we’re excited to share that we’ve built the fastest cache purge in the industry. We now offer a global purge latency for purge by tags, hostnames, and prefixes of less than 150ms on average (P50), representing a 90% improvement since May 2022. &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p><sup>(part 3 of the Coreless Purge </sup><a href=\&quot;https://blog.cloudflare.com/rethinking-cache-purge-architecture/\&quot;><sup>series</sup></a><sup>)</sup></p><p>Over the past 14 years, Cloudflare has evolved far beyond a Content Delivery Network (CDN), expanding its offerings to include a comprehensive <a href=\&quot;https://developers.cloudflare.com/cloudflare-one/\&quot;><u>Zero Trust</u></a> security portfolio, network security &amp;amp; performance <a href=\&quot;https://www.cloudflare.com/network-services/products/\&quot;><u>services</u></a>, application security &amp;amp; performance <a href=\&quot;https://www.cloudflare.com/application-services/products/\&quot;><u>optimizations</u></a>, and a powerful <a href=\&quot;https://www.cloudflare.com/developer-platform/products/\&quot;><u>developer platform</u></a>. But customers also continue to rely on Cloudflare for caching and delivering static website content. CDNs are often judged on their ability to return content to visitors as quickly as possible. However, the speed at which content is removed from a CDN&amp;#39;s global cache is just as crucial.</p><p>When customers frequently update content such as news, scores, or other data, it is essential they avoid serving stale, out-of-date information from cache to visitors. This can lead to a subpar experience where users might see invalid prices, or incorrect news. The goal is to remove the stale content and cache the new version of the file on the CDN, as quickly as possible. And that starts by issuing a “purge.”</p><p>In May 2022, we released the <a href=\&quot;https://blog.cloudflare.com/part1-coreless-purge/\&quot;><u>first part</u><b><u> </u></b></a>of the series detailing our efforts to rebuild and publicly document the steps taken to improve the system our customers use, to purge their cached content. Our goal was to increase scalability, and importantly, the speed of our customer’s purges. In that initial post, we explained how our purge system worked and the design constraints we found when scaling. We outlined how after more than a decade, we had outgrown our purge system and started building an entirely new purge system, and provided purge performance benchmarking that users experienced at the time. We set ourselves a lofty goal: to be the fastest.</p><p><b>Today, we’re excited to share that we’ve built the fastest cache purge in the industry.</b>&nbsp; We now offer a global purge latency for purge by tags, hostnames, and prefixes of less than 150ms on average (P50), representing a 90% improvement since May 2022. Users can now purge from anywhere, (almost) <i>instantly</i>. By the time you hit enter on a purge request and your eyes blink, the file is now removed from our global network — including data centers in <a href=\&quot;https://www.cloudflare.com/network/\&quot;><u>330 cities</u></a> and <a href=\&quot;https://blog.cloudflare.com/backbone2024/\&quot;><u>120+ countries</u></a>.</p><p>But that’s not all. It wouldn’t be Birthday Week if we stopped at just being the fastest purge. We are <b><i>also</i></b><i> </i>announcing that we’re opening up more purge options to Free, Pro, and Business plans. Historically, only Enterprise customers had access to the full arsenal of <a href=\&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/\&quot;><u>cache purge methods</u></a> supported by Cloudflare, such as purge by cache-tags, hostnames, and URL prefixes. As part of rebuilding our purge infrastructure, we’re not only fast but we are able to scale well beyond our current capacity. This enables more customers to use different types of purge. We are excited to offer these new capabilities to all plan types once we finish rolling out our new purge infrastructure, and expect to begin offering additional purge capabilities to all plan types in early 2025.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;why-cache-and-purge\&quot;>Why cache and purge?&nbsp;</h3>\n <a href=\&quot;#why-cache-and-purge\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Caching content is like pulling off a spectacular magic trick. It makes loading website content lightning-fast for visitors, slashes the load on origin servers and the cost to operate them, and enables global scalability with a single button press. But here&amp;#39;s the catch: for the magic to work, caching requires predicting the future. The right content needs to be cached in the right data center, at the right moment when requests arrive, and in the ideal format. This guarantees astonishing performance for visitors and game-changing scalability for web properties.</p><p>Cloudflare helps make this caching magic trick easy. But regular users of our cache know that getting content into cache is only part of what makes it useful. When content is updated on an origin, it must also be updated in the cache. The beauty of caching is that it holds content until it expires or is evicted. To update the content, it must be actively removed and updated across the globe quickly and completely. If data centers are not uniformly updated or are updated at drastically different times, visitors risk getting different data depending on where they are located. This is where cache “purging” (also known as “cache invalidation”) comes in.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;one-to-many-purges-on-cloudflare\&quot;>One-to-many purges on Cloudflare</h3>\n <a href=\&quot;#one-to-many-purges-on-cloudflare\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Back in <a href=\&quot;https://blog.cloudflare.com/rethinking-cache-purge-architecture/\&quot;><u>part 2 of the blog series</u></a>, we touched on how there are multiple ways of purging cache: by URL, cache-tag, hostname, URL prefix, and “purge everything”, and discussed a necessary distinction between purging by URL and the other four kinds of purge — referred to as flexible purges — based on the scope of their impact.</p><blockquote><p><i>The reason flexible purge isn’t also fully coreless yet is because it’s a more complex task than “purge this object”; flexible purge requests can end up purging multiple objects – or even entire zones – from cache. They do this through an entirely different process that isn’t coreless compatible, so to make flexible purge fully coreless we would have needed to come up with an entirely new multi-purge mechanism on top of redesigning distribution. We chose instead to start with just purge by URL, so we could focus purely on the most impactful improvements, revamping distribution, without reworking the logic a data center uses to actually remove an object from cache.</i></p></blockquote><p>We said our next steps included a redesign of flexible purges at Cloudflare, and today we’d like to walk you through the resulting system. But first, a brief history of flexible cache purges at Cloudflare and elaboration on why the old flexible purge system wasn’t “coreless compatible”.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;just-in-time\&quot;>Just in time</h3>\n <a href=\&quot;#just-in-time\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>“Cache” within a given data center is made up of many machines, all contributing disk space to store customer content. When a request comes in for an asset, the URL and headers are used to calculate a <a href=\&quot;https://developers.cloudflare.com/cache/how-to/cache-keys/\&quot;><u>cache key</u></a>, which is the filename for that content on disk and also determines which machine in the datacenter that file lives on. The filename is the same for every data center, and every data center knows how to use it to find the right machine to cache the content. A <a href=\&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/\&quot;><u>purge request</u></a> for a URL (plus headers) therefore contains everything needed to generate the cache key — the pointer to the response object on disk — and getting that key to every data center is the hardest part of carrying out the purge.</p><p>Purging content based on response properties has a different hardest part. If a customer wants to purge all content with the cache-tag “foo”, for example, there’s no way for us to generate all the cache keys that will point to the files with that cache-tag at request time. Cache-tags are response headers, and the decision of where to store a file is based on request attributes only. To find all files with matching cache-tags, we would need to look at every file in every cache disk on every machine in every data center. That’s thousands upon thousands of machines we would be scanning for each purge-by-tag request. There are ways to avoid actually continuously scanning all disks worldwide (foreshadowing!) but for our first implementation of our flexible purge system, we hoped to avoid the problem space altogether.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7n56ZDJwdBbaTNPJII6s2S/db998973efdca121536a932bc50dd842/image5.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1228\&quot; height=\&quot;1020\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>An alternative approach to going to every machine and looking for all files that match some criteria to actively delete from disk was something we affectionately referred to as “lazy purge”. Instead of deleting all matching files as soon as we process a purge request, we wait to do so when we get an end user request for one of those files. Whenever a request comes in, and we have the file in cache, we can compare the timestamp of any recent purge requests from the file owner to the insertion timestamp of the file we have on disk. If the purge timestamp is fresher than the insertion timestamp, we pretend we didn’t find the file on disk. For this to work, we needed to keep track of purge requests going back further than a data center’s maximum cache eviction age to be sure that any file a customer sends a matching flex purge to clear from cache will either be <a href=\&quot;https://developers.cloudflare.com/cache/concepts/retention-vs-freshness/#retention\&quot;><u>naturally evicted</u></a>, or forced to cache MISS and get refreshed from the origin. With this approach, we just needed a distribution and storage system for keeping track of flexible purges.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;purge-looks-a-lot-like-a-nail\&quot;>Purge looks a lot like a nail</h3>\n <a href=\&quot;#purge-looks-a-lot-like-a-nail\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>At Cloudflare there is a lot of configuration data that needs to go “everywhere”: cache configuration, load balancer settings, firewall rules, host metadata — countless products, features, and services that depend on configuration data that’s managed through Cloudflare’s control plane APIs. This data needs to be accessible by every machine in every datacenter in our network. The vast majority of that data is distributed via <a href=\&quot;https://blog.cloudflare.com/introducing-quicksilver-configuration-distribution-at-internet-scale/\&quot;><u>a system introduced several years ago called Quicksilver</u></a>. The system works <i>very, very well</i> (sub-second p99 replication lag, globally). It’s extremely flexible and reliable, and reads are lightning fast. The team responsible for the system has done such a good job that Quicksilver has become a hammer that when wielded, makes everything look like a nail… like flexible purges.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/BFntOlvapsYYjYTcxMs7o/d73ad47b63b9d4893b46aeddc28a8698/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;841\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Core-based purge request entering a data center and getting backhauled to a core data center where Quicksilver distributes the request to all network data centers (hub and spoke).</i></sup><sup>&nbsp;</sup></p><p>Our first version of the flexible purge system used Quicksilver’s spoke-hub distribution to send purges from a core data center to every other data center in our network. It took less than a second for flexible purges to propagate, and once in a given data center, the purge key lookups in the hot path to force cache misses were in the low hundreds of microseconds. We were quite happy with this system at the time, especially because of the simplicity. Using well-supported internal infrastructure meant we weren’t having to manage database clusters or worry about transport between data centers ourselves, since we got that “for free”. Flexible purge was a new feature set and the performance seemed pretty good, especially since we had no predecessor to compare against.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;victims-of-our-own-success\&quot;>Victims of our own success</h3>\n <a href=\&quot;#victims-of-our-own-success\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Our first version of flexible purge didn’t start showing cracks for years, but eventually both our network and our customer base grew large enough that our system was reaching the limits of what it could scale to. As mentioned above, we needed to store purge requests beyond our maximum eviction age. Purge requests are relatively small, and compress well, but thousands of customers using the API millions of times a day adds up to quite a bit of storage that Quicksilver needed on each machine to maintain purge history, and all of that storage cut into disk space we could otherwise be using to cache customer content. We also found the limits of Quicksilver in terms of how many writes per second it could handle without replication slowing down. We bought ourselves more runway by putting <a href=\&quot;https://www.boltic.io/blog/kafka-queue#:~:text=Apache%20Kafka%20Queues%3F-,Apache%20Kafka%20queues,-are%20a%20powerful\&quot;><u>Kafka queues</u></a> in front of Quicksilver to buffer and throttle ourselves to even out traffic spikes, and increased batching, but all of those protections introduced latency. We knew we needed to come up with a solution without such a strong correlation between usage and operational costs.</p><p>Another pain point exposed by our growing user base that we mentioned in <a href=\&quot;https://blog.cloudflare.com/rethinking-cache-purge-architecture/\&quot;><u>Part 2</u></a> was the excessive round trip times experienced by customers furthest away from our core data centers. A purge request sent by a customer in Australia would have to cross the Pacific Ocean and back before local customers would see the new content.</p><p>To summarize, three issues were plaguing us:</p><ol><li><p>Latency corresponding to how far a customer was from the centralized ingest point.</p></li><li><p>Latency due to the bottleneck for writes at the centralized ingest point.</p></li><li><p>Storage needs in all data centers correlating strongly with throughput demand.</p></li></ol>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;coreless-purge-proves-useful\&quot;>Coreless purge proves useful</h3>\n <a href=\&quot;#coreless-purge-proves-useful\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The first two issues affected all types of purge. The spoke-hub distribution model was problematic for purge-by-URL just as much as it was for flexible purges. So we embarked on the path to peer-to-peer distribution for purge-by-URL to address the latency and throughput issues, and the results of that project were good enough that we wanted to propagate flexible purges through the same system. But doing so meant we’d have to replace our use of Quicksilver; it was so good at what it does (fast/reliable replication network-wide, extremely fast/high read throughput) in large part because of the core assumption of spoke-hub distribution it could optimize for. That meant there was no way to write to Quicksilver from “spoke” data centers, and we would need to find another storage system for our purges.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;flipping-purge-on-its-head\&quot;>Flipping purge on its head</h3>\n <a href=\&quot;#flipping-purge-on-its-head\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We decided if we’re going to replace our storage system we should dig into exactly what our needs are and find the best fit. It was time to revisit some of our oldest conclusions to see if they still held true, and one of the earlier ones was that proactively purging content from disk would be difficult to do efficiently given our storage layout.</p><p>But was that true? Or could we make active cache purge fast and efficient (enough)? What would it take to quickly find files on disk based on their metadata? “Indexes!” you’re probably screaming, and for good reason. Indexing files’ hostnames, cache-tags, and URLs would undoubtedly make querying for relevant files trivial, but a few aspects of our network make it less straightforward.</p><p>Cloudflare has hundreds of data centers that see trillions of unique files, so any kind of global index — even ignoring the networking hurdles of aggregation — would suffer the same type of bottlenecking issues with our previous spoke-hub system. Scoping the indices to the data center level would be better, but they vary in size up to several hundred machines. Managing a database cluster in each data center scaled to the appropriate size for the aggregate traffic of all the machines was a daunting proposition; it could easily end up being enough work on its own for a separate team, not something we should take on as a side hustle.</p><p>The next step down in scope was an index per machine. Indexing on the same machine as the cache proxy had some compelling upsides:&nbsp;</p><ul><li><p>The proxy could talk to the index over <a href=\&quot;https://en.wikipedia.org/wiki/Unix_domain_socket\&quot;><u>UDS</u></a> (Unix domain sockets), avoiding networking complexities in the hottest paths.</p></li><li><p>As a sidecar service, the index just had to be running anytime the machine was accepting traffic. If a machine died, so would the index, but that didn’t matter, so there wasn’t any need to deal with the complexities of distributed databases.</p></li><li><p>While data centers were frequently adding and removing machines, machines weren’t frequently adding and removing disks. An index could reasonably count on its maximum size being predictable and constant based on overall disk size.</p></li></ul><p>But we wanted to make sure it was feasible on our machines. We analyzed representative cache disks from across our fleet, gathering data like the number of cached assets per terabyte and the average number of cache-tags per asset. We looked at cache MISS, REVALIDATED, and EXPIRED rates to estimate the required write throughput.</p><p>After conducting a thorough analysis, we were convinced the design would work. With a clearer understanding of the anticipated read/write throughput, we started looking at databases that could meet our needs. After benchmarking several relational and non-relational databases, we ultimately chose <a href=\&quot;https://github.com/facebook/rocksdb\&quot;><u>RocksDB</u></a>, a high-performance embedded key-value store. We found that with proper tuning, it could be extremely good at the types of queries we needed.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;putting-it-all-together\&quot;>Putting it all together</h3>\n <a href=\&quot;#putting-it-all-together\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>And so CacheDB was born — a service written in Rust and built on RocksDB, which operates on each machine alongside the cache proxy to manage the indexing and purging of cached files. We integrated the cache proxy with CacheDB to ensure that indices are stored whenever a file is cached or updated, and they’re deleted when a file is removed due to eviction or purging. In addition to indexing data, CacheDB maintains a local queue for buffering incoming purge operations. A background process reads purge operations in the queue, looking up all matching files using the indices, and deleting the matched files from disk. Once all matched files for an operation have been deleted, the process clears the indices and removes the purge operation from the queue.</p><p>To further optimize the speed of purges taking effect, the cache proxy was updated to check with CacheDB — similar to the previous lazy purge approach — when a cache HIT occurs before returning the asset. CacheDB does a quick scan of its local queue to see if there are any pending purge operations that match the asset in question, dictating whether the cache proxy should respond with the cached file or fetch a new copy. This means purges will prevent the cache proxy from returning a matching cached file as soon as a purge reaches the machine, even if there are millions of files that correspond to a purge key, and it takes a while to actually delete them all from disk.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5W0ZIGBBbG5Cnc3DSbCPGT/a1572b0b67d844d4e5b7cc7899d320b1/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1999\&quot; height=\&quot;884\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Coreless purge using CacheDB and Durable Objects to distribute purges without needing to first stop at a core data center.</i></sup></p><p>The last piece to change was the distribution pipeline, updated to broadcast flexible purges not just to every data center, but to the CacheDB service running on every machine. We opted for CacheDB to handle the last-mile fan out of machine to machine within a data center, using <a href=\&quot;https://www.consul.io/\&quot;><u>consul</u></a> to keep each machine informed of the health of its peers. The choice let us keep the Workers largely the same for purge-by-URL (more <a href=\&quot;https://blog.cloudflare.com/rethinking-cache-purge-architecture/\&quot;><u>here</u></a>) and flexible purge handling, despite the difference in termination points.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;the-payoff\&quot;>The payoff</h3>\n <a href=\&quot;#the-payoff\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Our new approach reduced the long tail of the lazy purge, saving 10x storage. Better yet, we can now delete purged content immediately instead of waiting for the lazy purge to happen or expire. This new-found storage will improve cache retention on disk for all users, leading to improved cache HIT ratios and reduced egress from your origin.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6B0kVX9Q6qA2JshmcTZSrt/80a845904adf8ba69c121bb54923959e/image1.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1554\&quot; height=\&quot;423\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>The shift from lazy content purging (</i></sup><sup><i><u>left</u></i></sup><sup><i>) to the new Coreless Purge architecture allows us to actively delete content (</i></sup><sup><i><u>right</u></i></sup><sup><i>). This helps reduce storage needs and increase cache retention times across our service.</i></sup></p><p>With the new coreless cache purge, we can now get a purge request into any datacenter, distribute the keys to purge, and instantly purge the content from the cache database. This all occurs in less than 150 milliseconds on P50 for tags, hostnames, and prefix URL, covering all <a href=\&quot;https://www.cloudflare.com/network/\&quot;><u>330 cities</u></a> in <a href=\&quot;https://blog.cloudflare.com/backbone2024/\&quot;><u>120+ countries</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;benchmarks\&quot;>Benchmarks</h3>\n <a href=\&quot;#benchmarks\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To measure Instant Purge, we wanted to make sure that we were looking at real user metrics — that these were purges customers were actually issuing and performance that was representative of what we were seeing under real conditions, rather than marketing numbers.</p><p>The time we measure represents the period when a request enters the local datacenter, and ends with when the purge has been executed in every datacenter. When the local data center receives the request, one of the first things we do is to add a timestamp to the purge request. When all data centers have completed the purge action, another timestamp is added to “stop the clock.” Each purge request generates this performance data, and it is then sent to a database for us to measure the appropriate quantiles and to help us understand how we can improve further.</p><p>In August 2024, we took purge performance data and segmented our collected data by region based on where the local data center receiving the request was located.</p><table><tr><td><p><b>Region</b></p></td><td><p><b>P50 Aug 2024 (Coreless)</b></p></td><td><p><b>P50 May 2022 (Core-based)</b></p></td><td><p><b>Improvement</b></p></td></tr><tr><td><p>Africa</p></td><td><p>303ms</p></td><td><p>1,420ms</p></td><td><p>78.66%</p></td></tr><tr><td><p>Asia Pacific Region (APAC)</p></td><td><p>199ms</p></td><td><p>1,300ms</p></td><td><p>84.69%</p></td></tr><tr><td><p>Eastern Europe (EEUR)</p></td><td><p>140ms</p></td><td><p>1,240ms</p></td><td><p>88.70%</p></td></tr><tr><td><p>Eastern North America (ENAM)</p></td><td><p>119ms</p></td><td><p>1,080ms</p></td><td><p>88.98%</p></td></tr><tr><td><p>Oceania</p></td><td><p>191ms</p></td><td><p>1,160ms</p></td><td><p>83.53%</p></td></tr><tr><td><p>South America (SA)</p></td><td><p>196ms</p></td><td><p>1,250ms</p></td><td><p>84.32%</p></td></tr><tr><td><p>Western Europe (WEUR)</p></td><td><p>131ms</p></td><td><p>1,190ms</p></td><td><p>88.99%</p></td></tr><tr><td><p>Western North America (WNAM)</p></td><td><p>115ms</p></td><td><p>1,000ms</p></td><td><p>88.5%</p></td></tr><tr><td><p><b>Global</b></p></td><td><p><b>149ms</b></p></td><td><p><b>1,570ms</b></p></td><td><p><b>90.5%</b></p></td></tr></table><p><sup>Note: Global latency numbers on the core-based measurements (May 2022) may be larger than the regional numbers because it represents all of our data centers instead of only a regional portion, so outliers and retries might have an outsized effect.</sup></p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;whats-next\&quot;>What’s next?</h3>\n <a href=\&quot;#whats-next\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We are currently wrapping up the roll-out of the last throughput changes which allow us to efficiently scale purge requests. As that happens, we will revise our rate limits and open up purge by tag, hostname, and prefix to all plan types! We expect to begin rolling out the additional purge types to all plans and users beginning in early <b>2025</b>.</p><p>In addition, in the process of implementing this new approach, we have identified improvements that will shave a few more milliseconds off our single-file purge. Currently, single-file purges have a P50 of 234ms. However, we want to, and can, bring that number down to below 200ms.</p><p>If you want to come work on the world&amp;#39;s fastest purge system, check out <a href=\&quot;http://www.cloudflare.com/careers\&quot;>our open positions</a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;watch-on-cloudflare-tv\&quot;>Watch on Cloudflare TV</h3>\n <a href=\&quot;#watch-on-cloudflare-tv\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <div style=\&quot;position: relative; padding-top: 56.25%;\&quot;>\n <iframe\n src=\&quot;https://customer-rhnwzxvb3mg4wz3v.cloudflarestream.com/8c6878c0b57e93d0024c42caf351107e/iframe?preload=true&amp;poster=https%3A%2F%2Fcustomer-rhnwzxvb3mg4wz3v.cloudflarestream.com%2F8c6878c0b57e93d0024c42caf351107e%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D2s%26height%3D600\&quot;\n loading=\&quot;lazy\&quot;\n style=\&quot;border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;\&quot;\n allow=\&quot;accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\&quot;\n allowfullscreen=\&quot;true\&quot;\n ></iframe>\n</div><p></p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-25T00:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:06.504Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/59kdx20ZFbCY9AqWfUCsew/d06d6b1e998e56e616690ce8a77c62bf/image4.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;4gN0ARax0fHxjtZL07THOe&quot;],&quot;name&quot;:[0,&quot;Performance&quot;],&quot;slug&quot;:[0,&quot;performance&quot;]}],[0,{&quot;id&quot;:[0,&quot;5RrjSR5vIOJAfRdT8966hf&quot;],&quot;name&quot;:[0,&quot;Cache&quot;],&quot;slug&quot;:[0,&quot;cache&quot;]}],[0,{&quot;id&quot;:[0,&quot;48r7QV00gLMWOIcM1CSDRy&quot;],&quot;name&quot;:[0,&quot;Speed &amp; Reliability&quot;],&quot;slug&quot;:[0,&quot;speed-and-reliability&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Alex Krivit&quot;],&quot;slug&quot;:[0,&quot;alex&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1e9gtWsffhoAWG0rTN45cR/35204e3d77d1a90feeb57a32e388daca/alex.jpg&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@ackriv&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Tim Kornhammar&quot;],&quot;slug&quot;:[0,&quot;tim-kornhammar&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/48jH4cWwD5fakrdEvnB67d/5b3dae96cf6bc0b1032cb17a7a300b74/tim-kornhammar.jpg&quot;],&quot;location&quot;:[0,&quot;Texas, USA&quot;],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,null],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot; Connor Harwood&quot;],&quot;slug&quot;:[0,&quot;connor-harwood&quot;],&quot;bio&quot;:[0],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7ChQBYRPNIiEuQnGQdajbt/3b67f09fd6dae792eb8a1ffafaa1254a/_tmp_mini_magick20221017-43-y5gfah.jpg&quot;],&quot;location&quot;:[0],&quot;website&quot;:[0],&quot;twitter&quot;:[0],&quot;facebook&quot;:[0]}]]],&quot;meta_description&quot;:[0,&quot;Today we’re excited to share that we’ve built the fastest cache purge in the industry. We now offer a global purge latency for purge by tags, hostnames, and prefixes of less than 150ms on average (P50), representing a 90% improvement since May 2022. &quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/instant-purge&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Instant Purge: invalidating cached content in under 150ms&quot;],&quot;description&quot;:[0,&quot;Today we’re excited to share that we’ve built the fastest cache purge in the industry. We now offer a global purge latency for purge by tags, hostnames, and prefixes of less than 150ms on average (P50), representing a 90% improvement since May 2022. &quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/18ZVwqqO5THZ7TrRFKjxR6/e3c93c852b89567e4dde5cb76240f5d7/Instant_Purge-_invalidating_cached_content_in_under_150ms-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;4tzeNEI3qyBtnWskn5TbUa&quot;],&quot;title&quot;:[0,&quot;Cloudflare helps verify the security of end-to-end encrypted messages by auditing key transparency for WhatsApp&quot;],&quot;slug&quot;:[0,&quot;key-transparency&quot;],&quot;excerpt&quot;:[0,&quot;Cloudflare is now verifying WhatsApp’s Key Transparency audit proofs to ensure the security of end-to-end encrypted messaging conversations without having to manually check QR codes. We are publishing the results of the proof verification to https://dash.key-transparency.cloudflare.com for independent researchers and security experts to compare against WhatsApp’s. Cloudflare does not have access to underlying public key material or message metadata as part of this infrastructure.&quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>Chances are good that today you’ve sent a message through an <a href=\&quot;https://www.cloudflare.com/learning/privacy/what-is-end-to-end-encryption\&quot;><u>end-to-end encrypted (E2EE)</u></a> messaging app such as WhatsApp, Signal, or iMessage. While we often take the privacy of these conversations for granted, they in fact rely on decades of research, testing, and standardization efforts, the foundation of which is a <a href=\&quot;https://www.cloudflare.com/learning/ssl/how-does-public-key-encryption-work/\&quot;><u>public-private key exchange</u></a>. There is, however, an oft-overlooked implicit trust inherent in this model: that the messaging app infrastructure is distributing the public keys of all of its users correctly.</p><p>Here’s an example: if Joe and Alice are messaging each other on WhatsApp, Joe uses Alice’s phone number to retrieve Alice’s public key from the WhatsApp database, and Alice receives Joe’s public key. Their messages are then encrypted using this key exchange, so that no one — even WhatsApp&nbsp;— can see the contents of their messages besides Alice and Joe themselves. However, in the unlikely situation where an attacker, Bob, manages to register a different public key in WhatsApp’s database, Joe would try to message Alice but unknowingly be messaging Bob instead. And while this threat is most salient for journalists, activists, and those most vulnerable to cyber attacks<i>, </i>we believe that protecting the privacy and integrity of end-to-end encrypted conversations is for everyone.</p><p>There are several methods that end-to-end encrypted messaging apps have deployed thus far to protect the integrity of public key distribution, the most common of which is to do an in-person verification of the QR code fingerprint of your public key (<a href=\&quot;https://faq.whatsapp.com/2416198805185327?helpref=faq_content\&quot;><u>WhatsApp</u></a> and <a href=\&quot;https://signal.org/blog/safety-number-updates/\&quot;><u>Signal</u></a> both have a version of this). As you can imagine, this experience is inconvenient and unwieldy, especially as your number of contacts and group chats increase.</p><p>Over the past few years, there have been significant developments in this area of cryptography, and WhatsApp has paved the way with their <a href=\&quot;https://engineering.fb.com/2023/04/13/security/whatsapp-key-transparency/\&quot;><u>Key Transparency announcement</u></a>. But as an independent third party, Cloudflare can provide stronger reassurance: that’s why we’re excited to announce that we’re now verifying WhatsApp’s Key Transparency audit proofs.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;auditing-the-next-frontier-of-encryption\&quot;>Auditing: the next frontier of encryption&nbsp;</h2>\n <a href=\&quot;#auditing-the-next-frontier-of-encryption\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>We didn’t build this in a vacuum: similar to how the web and messaging apps became encrypted over time, we see auditing public key infrastructure as the next logical step in securing Internet infrastructure. This solution builds upon learnings from <a href=\&quot;https://en.wikipedia.org/wiki/Certificate_Transparency\&quot;><u>Certificate Transparency</u></a> and<a href=\&quot;https://binary.transparency.dev/\&quot;><u> Binary Transparency</u></a>, which share some of the underlying data structure and cryptographic techniques, and we’re excited about the formation of a <a href=\&quot;https://mailarchive.ietf.org/arch/browse/keytrans/\&quot;><u>working group at the IETF</u></a> to make multi-party operation of Key Transparency-like systems tractable for a broader set of use cases.&nbsp;</p><p>We see our role here as a pioneer of a real world deployment of this auditing infrastructure, working through and sharing the operational challenges of operating a system that is critical for a messaging app used by billions of people around the world.&nbsp;&nbsp;&nbsp;</p><p>We’ve also done this before — in 2022, Cloudflare announced <a href=\&quot;https://blog.cloudflare.com/cloudflare-verifies-code-whatsapp-web-serves-users/\&quot;><u>Code Verify</u></a>, a partnership in which we verify that the code delivered in the browser for <a href=\&quot;https://web.whatsapp.com/\&quot;><u>WhatsApp Web</u></a> has not been tampered with. When users run WhatsApp in their browser, the <a href=\&quot;https://faq.whatsapp.com/639766781216714?cms_platform=web&amp;helpref=faq_content\&quot;><u>WhatsApp Code Verify extension</u></a> compares a hash of the code that is executing in the browser with the hash that Cloudflare has of the codebase, enabling WhatsApp web users to easily see whether the code that is executing is the code that was publicly committed to.&nbsp;</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/451BUpYOdkMZ9KqtGKBbFQ/69edee8fe9e64d124b16908a95bf0933/Code_Verify_-_Blog.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1192\&quot; height=\&quot;598\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>In Code Verify, Cloudflare builds a non-mutable chain associating the WhatsApp version with the hash of its code.</i></sup></p><p>Cloudflare’s role in Key Transparency is similar in that we are checking that a tree-based directory of public keys (more on this later) has been constructed correctly, and has been done so consistently over time.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-key-transparency-works\&quot;>How Key Transparency works</h2>\n <a href=\&quot;#how-key-transparency-works\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The architectural foundation of Key Transparency is the <a href=\&quot;https://github.com/facebook/akd/\&quot;><u>Auditable Key Directory (AKD)</u></a>: a tree-shaped data structure, constructed and maintained by WhatsApp, in which the nodes contain hashed contact details of each user. We’ll explain the basics here but if you’re interested in learning more, check out the <a href=\&quot;https://eprint.iacr.org/2018/607.pdf\&quot;><u>SEEMless</u></a> and <a href=\&quot;https://eprint.iacr.org/2023/081.pdf\&quot;><u>Parakeet</u></a> papers.</p><p>The AKD tree is constructed by building a binary tree, each parent node of which is a hash of each of its left and right child nodes:</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Dl16PIqBNBiKn6qhzanCU/b67a1128bef4ab8733337f720c53f160/Mini_tree_-_Blog.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;770\&quot; height=\&quot;568\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Each child node on the tree contains contact and public key details for a user (shown here for illustrative purposes). In reality, Cloudflare only sees a hash of each node rather than Alice and Bob’s contact info in plaintext.</i></sup></p><p>An epoch describes a specific version of the tree at a given moment in time, identified by its root node. Using a structure similar to Code Verify, the WhatsApp Log stores each root node hash as part of an append-only time structure of updates.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/43FGTWfTV2aIaaMkfyplY2/8576b9c096bead64ede52a034481149b/Key_Transparency_combined_tree_-_Blog.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1518\&quot; height=\&quot;1094\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p>What kind of changes are valid to be included in a given epoch? When a new person, Brian, joins WhatsApp, WhatsApp inserts a new “B” node in the AKD tree, and a new epoch. If Alice loses her phone and rotates her key, her “version” is updated to <code>v1</code> in the next update.&nbsp;&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-we-built-the-auditor-on-cloudflare-workers\&quot;>How we built the Auditor on Cloudflare Workers&nbsp;</h2>\n <a href=\&quot;#how-we-built-the-auditor-on-cloudflare-workers\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The role of the Auditor is to provide two main guarantees: that epochs are globally unique, and that they are valid. They are, however, quite different: global uniqueness requires consistency on whether an epoch and its associated root hash has been seen, while validity is a matter of computation — is the transition from the previous epoch to the current one a correct tree transformation?</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;timestamping-service\&quot;>Timestamping service</h3>\n <a href=\&quot;#timestamping-service\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n \n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5QHtfUaKoIBcIcK5o6H53j/ebaa147f3b22de32a29754d3cd7e73bd/Key_Transparency_Auditor_3_.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;2400\&quot; height=\&quot;768\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Timestamping service architecture (Cloudflare Workers in Rust, using a Durable Object for storage)</i></sup></p><p>At regular intervals, the WhatsApp Log puts all new updates into the tree, and cuts a new epoch in the format “{counter}/{previous}/{current}”. The counter is a number, whereby “previous” is a hexadecimal encoded hash of the previous tree root, and “current” is a hexadecimal encoded hash for the new tree root. As a shorthand, epochs can be referred to by their counter only.</p><p>Here’s an example:</p><p><code>1001/d0bbf29c48716f26a951ae2a244eb1d070ee38865c29c8ad8174e8904e3cdc1a/e1006114485e8f0bbe2464e0ebac77af37bce76851745592e8dd5991ff2cd411</code></p><p>Once an epoch is constructed, the WhatsApp Log sends it to the Auditor for cross-signing, to ensure it has only been seen once. The Auditor adds a timestamp as to when this new epoch has been seen. Cloudflare’s Auditor uses a <a href=\&quot;https://developers.cloudflare.com/durable-objects/platform/known-issues/#global-uniqueness\&quot;><u>Durable Object</u></a> for every epoch to create their timestamp. This guarantees the global uniqueness of an epoch, and the possibility of replay in the event the WhatsApp Log experiences an outage or is distributed across multiple locations. WhatsApp’s Log is expected to produce new epochs at regular intervals, given this constrains the propagation of public key updates seen by their users. Therefore, Cloudflare Auditor does not have to keep the durable object state forever. Once replay and consistency have been accounted for, this state is cleared. This is done after a month, thanks to durable object <a href=\&quot;https://developers.cloudflare.com/durable-objects/api/alarms/\&quot;><u>alarms</u></a>.</p><p>Additional checks are performed by the service, such as checking that the epochs are consecutive, or that their digest is unique. This enforces a chain of epochs and their associated digests, provided by the WhatsApp Log and signed by the Auditor, providing a consistent view for all to see.</p><p>We decided to write this service in Rust because Workers rely on <a href=\&quot;https://github.com/cloudflare/workers-rs\&quot;><u>cloudflare/workers-rs</u></a> bindings, and the auditable key directory library is also in Rust (<a href=\&quot;https://github.com/facebook/akd\&quot;><u>facebook/akd</u></a>).</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;tree-validation-service\&quot;>Tree validation service</h3>\n <a href=\&quot;#tree-validation-service\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With the timestamping service above, WhatsApp users (as well as their Log) have assurance that epochs are transparent. WhatsApp’s directory can be audited at any point in time, and if it were to be tampered with by WhatsApp or an intermediary, the WhatsApp Log can be held accountable for it.</p><p>Epochs and their digests are only representations of their underlying key directory. To fully audit the directory, the transition from the previous digest to a current digest has to be validated. To perform validation, we need to run the epoch validation method. Specifically, we want to run <a href=\&quot;https://github.com/facebook/akd/blob/fcd665aa20f829cd9e06cb3d70cbe0c32ffe6b67/akd/src/auditor.rs#L56\&quot;><u>verify_consecutive_append_only</u></a> on every epoch constructed by the Log. The size of an epoch varies with the number of updates it contains, and therefore the number of associated nodes in the tree to construct as well. While Workers are able to run such validation for a small number of updates, this is a compute-intensive task. Therefore, still leveraging the same Rust codebase, the Auditor leverages a container that only performs the tree construction and validation. The Auditor retrieves the updates for a given epoch, copies them into its own R2 bucket, and delegates the validation to a <a href=\&quot;https://github.com/cloudflare/workers-sdk/tree/main/packages/wrangler/src/cloudchamber\&quot;><u>container</u></a> running on Cloudflare. Once validated, the epoch is marked as verified.</p>\n <figure class=\&quot;kg-card kg-image-card \&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5fNbebayPfLZPn4pEIoWpP/b8d2da4ac9867aeb44e9e1ff52405be9/Key_Transparency_Auditor_4_.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;2400\&quot; height=\&quot;768\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Architecture for Cloudflare’s Plexi Auditor. The proof verification and signatures stored do not contain personally identifiable information such as your phone number, public key, or other metadata tied to your WhatsApp account.</i></sup></p><p>This decouples global uniqueness requirements and epoch validation, which happens at two distinct times. It allows the validation to take more time, and not be latency sensitive.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;how-can-i-verify-cloudflare-has-signed-an-epoch\&quot;>How can I verify Cloudflare has signed an epoch?</h2>\n <a href=\&quot;#how-can-i-verify-cloudflare-has-signed-an-epoch\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Anyone can perform audit proof verification —&nbsp;<a href=\&quot;https://dash.key-transparency.cloudflare.com\&quot;><u>the proofs are publicly available</u></a> —&nbsp;but Cloudflare will be doing so automatically and publicly to make the results accessible to all. Verify that Cloudflare’s signature matches WhatsApp’s by visiting our <a href=\&quot;https://dash.key-transparency.cloudflare.com\&quot;><u>Key Transparency website</u></a>, or via our <a href=\&quot;https://github.com/cloudflare/plexi\&quot;><u>command line</u></a> tool.</p><p>To use our command line tool, you’ll need to download the <a href=\&quot;https://github.com/cloudflare/plexi\&quot;><u>plexi</u></a> client. It helps construct data structures which are used for signatures, and requires you to have git and cargo installed.</p>\n <pre class=\&quot;language-Python\&quot;><code class=\&quot;language-Python\&quot;>cargo install plexi</pre></code>\n <p>With the client installed, let’s now check the audit proofs for WhatsApp namespace: <code>whatsapp.key-transparency.v1</code>. Plexi Auditor is represented by one public key, which can verify and vouch for multiple Logs with their own dedicated “namespace.” To validate an epoch, such as epoch 458298 (the epoch at which the log decided to start sharing data), you can run the following command:</p>\n <pre class=\&quot;language-BASH\&quot;><code class=\&quot;language-BASH\&quot;>plexi audit --remote-url &amp;#039;https://akd-auditor.cloudflare.com&amp;#039; --namespace &amp;#039;whatsapp.key-transparency.v1&amp;#039; --long\nNamespace\n Name \t: whatsapp.key-transparency.v1\n Ciphersuite \t: ed25519(protobuf)\n\nSignature (2024-09-23T16:53:45Z)\n Epoch height \t: 489193\n Epoch digest \t: cbe5097ae832a3ae51ad866104ffd4aa1f7479e873fd18df9cb96a02fc91ebfe\n Signature \t: fe94973e19da826487b637c019d3ce52f0c08093ada00b4fe6563e2f8117b4345121342bc33aae249be47979dfe704478e2c18aed86e674df9f934b718949c08\n Signature verification: success\n Proof verification\t: success</pre></code>\n \n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;interested-in-having-cloudflare-audit-your-public-key-infrastructure\&quot;>Interested in having Cloudflare audit your public key infrastructure?</h2>\n <a href=\&quot;#interested-in-having-cloudflare-audit-your-public-key-infrastructure\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>At the end of the day, security threats shouldn’t become usability problems —&nbsp;everyday messaging app users shouldn’t have to worry about whether the public keys of the people they’re talking to have been compromised. In the same way that <a href=\&quot;https://ct.cloudflare.com/\&quot;><u>certificate transparency</u></a> is now built into the issuance and use of digital certificates to encrypt web traffic, we think that public key transparency and auditing should be built into end-to-end encrypted systems by default, so that users never have to do manual QR code verification again. </p><p>We built our auditing service to be general purpose, reliable, and fast, and&nbsp;WhatsApp’s Key Transparency is just the first of several use cases it will be used for – Cloudflare is interested in helping audit the delivery of code binaries and integrity of all types of end-to-end encrypted infrastructure. If your company or organization is interested in working with us, you can <a href=\&quot;https://www.cloudflare.com/lp/privacy-edge/\&quot;><u>reach out to us here</u></a>.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-24T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-10-09T23:05:07.210Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5SAwlpnTxKcG0U0x0QHSFA/d26f4cdd3319e73bc26220fcd299aa69/image3.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;3BWeMuiOShelE7QM48sW9j&quot;],&quot;name&quot;:[0,&quot;Privacy&quot;],&quot;slug&quot;:[0,&quot;privacy&quot;]}],[0,{&quot;id&quot;:[0,&quot;6Mp7ouACN2rT3YjL1xaXJx&quot;],&quot;name&quot;:[0,&quot;Security&quot;],&quot;slug&quot;:[0,&quot;security&quot;]}],[0,{&quot;id&quot;:[0,&quot;1x7tpPmKIUCt19EDgM1Tsl&quot;],&quot;name&quot;:[0,&quot;Research&quot;],&quot;slug&quot;:[0,&quot;research&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Thibault Meunier&quot;],&quot;slug&quot;:[0,&quot;thibault&quot;],&quot;bio&quot;:[0,null],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1CqrdcRymVgEs1zRfSE6Xr/b8182164b0a8435b162bdd1246b7e91f/thibault.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@thibmeu&quot;],&quot;facebook&quot;:[0,null]}],[0,{&quot;name&quot;:[0,&quot;Mari Galicer&quot;],&quot;slug&quot;:[0,&quot;mari&quot;],&quot;bio&quot;:[0,&quot;Product Manager, Consumer Privacy&quot;],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Gh4G4hhni5rwz8W2Nj7Ok/06696413b61cc3f15c37281d9670a723/mari.png&quot;],&quot;location&quot;:[0,null],&quot;website&quot;:[0,null],&quot;twitter&quot;:[0,&quot;@mmvri&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;Cloudflare is now verifying WhatsApp’s Key Transparency audit proofs to ensure the security of end-to-end encrypted messaging conversations without having to manually check QR codes. We are publishing the results of the proof verification to https://dash.key-transparency.cloudflare.com for independent researchers and security experts to compare against WhatsApp’s. Cloudflare does not have access to underlying public key material or message metadata as part of this infrastructure.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;blog-english-only&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;No Page for Locale&quot;],&quot;frFR&quot;:[0,&quot;No Page for Locale&quot;],&quot;deDE&quot;:[0,&quot;No Page for Locale&quot;],&quot;itIT&quot;:[0,&quot;No Page for Locale&quot;],&quot;jaJP&quot;:[0,&quot;No Page for Locale&quot;],&quot;koKR&quot;:[0,&quot;No Page for Locale&quot;],&quot;ptBR&quot;:[0,&quot;No Page for Locale&quot;],&quot;esLA&quot;:[0,&quot;No Page for Locale&quot;],&quot;esES&quot;:[0,&quot;No Page for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;No Page for Locale&quot;],&quot;thTH&quot;:[0,&quot;No Page for Locale&quot;],&quot;trTR&quot;:[0,&quot;No Page for Locale&quot;],&quot;heIL&quot;:[0,&quot;No Page for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/key-transparency&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Cloudflare helps verify the security of end-to-end encrypted messages by auditing key transparency for WhatsApp&quot;],&quot;description&quot;:[0,&quot;Cloudflare is now verifying WhatsApp’s Key Transparency audit proofs to ensure the security of end-to-end encrypted messaging conversations without having to manually check QR codes. We are publishing the results of the proof verification to https://dash.key-transparency.cloudflare.com for independent researchers and security experts to compare against WhatsApp’s. Cloudflare does not have access to underlying public key material or message metadata as part of this infrastructure.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3pa4LDT6AEnIn2hah2Q1Lw/76f1ad14699ec875a5969727ac544ff0/Cloudflare_helps_verify_the_security_of_end-to-end_encrypted_messages_by_auditing_key_transparency_for_WhatsApp-OG.png&quot;]}]}],[0,{&quot;id&quot;:[0,&quot;1M8zVthnUiMpJpGylQuptu&quot;],&quot;title&quot;:[0,&quot;Automatically generating Cloudflare’s Terraform provider&quot;],&quot;slug&quot;:[0,&quot;automatically-generating-cloudflares-terraform-provider&quot;],&quot;excerpt&quot;:[0,&quot;The Cloudflare Terraform provider used to be manually maintained. With the help of our existing OpenAPI code generation pipeline, we’re now automatically generating the provider for better &quot;],&quot;featured&quot;:[0,false],&quot;html&quot;:[0,&quot;<p>In November 2022, we announced the transition to <a href=\&quot;https://blog.cloudflare.com/open-api-transition/\&quot;><u>OpenAPI Schemas for the Cloudflare API</u></a>. Back then, we had an audacious goal to make the OpenAPI schemas the source of truth for our SDK ecosystem and reference documentation. During 2024’s Developer Week, we backed this up by <a href=\&quot;https://blog.cloudflare.com/workers-production-safety/\&quot;><u>announcing that our SDK libraries are now automatically generated</u></a> from these OpenAPI schemas. Today, we’re excited to announce the latest pieces of the ecosystem to now be automatically generated — the Terraform provider and API reference documentation.</p><p>This means that the moment a new feature or attribute is added to our products and the team documents it, you’ll be able to see how it’s meant to be used across our SDK ecosystem <i>and</i> make use of it immediately. No more delays. No more lacking coverage of API endpoints.</p><p>You can find the new documentation site at <a href=\&quot;https://developers.cloudflare.com/api-next/\&quot;><u>https://developers.cloudflare.com/api-next/</u></a>, and you can try the preview release candidate of the Terraform provider by <a href=\&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.0.0-alpha1\&quot;><u>installing 5.0.0-alpha1</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;why-terraform\&quot;>Why Terraform?&nbsp;</h2>\n <a href=\&quot;#why-terraform\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>For anyone who is unfamiliar with <a href=\&quot;https://www.terraform.io/\&quot;><u>Terraform</u></a>, it is a tool for managing your infrastructure as code, much like you would with your application code. Many of our customers (big and small) rely on Terraform to orchestrate their infrastructure in a technology-agnostic way. Under the hood, it is essentially an HTTP client with lifecycle management built in, which means it makes use of our publicly documented APIs in a way that understands how to create, read, update and delete for the life of the resource.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;keeping-terraform-updated-the-old-way\&quot;>Keeping Terraform updated — the old way</h2>\n <a href=\&quot;#keeping-terraform-updated-the-old-way\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Historically, Cloudflare has manually maintained a Terraform provider, but since the provider internals require their own unique way of doing things, responsibility for maintenance and support has landed on the shoulders of a handful of individuals. The service teams always had difficulties keeping up with the number of changes, due to the amount of cognitive overhead required to ship a single change in the provider. In order for a team to get a change to the provider, it took a minimum of 3 pull requests (4 if you were adding support to <a href=\&quot;https://github.com/cloudflare/cf-terraforming\&quot;><u>cf-terraforming</u></a>).</p>\n <figure class=\&quot;kg-card kg-image-card\&quot;>\n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6spvs4QAkY7BXLNfABDSQs/838f9b224838cd174376eb413cce7848/image6.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1318\&quot; height=\&quot;898\&quot; loading=\&quot;lazy\&quot;/>\n </figure><p>Even with the 4 pull requests completed, it didn’t offer guarantees on coverage of all available attributes, which meant small yet important details could be forgotten and not exposed to customers, causing frustration when trying to configure a resource.</p><p>To address this, our Terraform provider needed to be relying on the same OpenAPI schemas that the rest of our SDK ecosystem was <a href=\&quot;https://blog.cloudflare.com/lessons-from-building-an-automated-sdk-pipeline/\&quot;><u>already benefiting from</u></a>.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;updating-terraform-automatically\&quot;>Updating Terraform automatically</h2>\n <a href=\&quot;#updating-terraform-automatically\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>The thing that differentiates Terraform from our SDKs is that it manages the lifecycle of resources. With that comes a new range of problems related to known values and managing differences in the request and response payloads. Let’s compare the two different approaches of creating a new DNS record and fetching it back.</p><p>With our Go SDK:</p>\n <pre class=\&quot;language-GOLANG\&quot;><code class=\&quot;language-GOLANG\&quot;>// Create the new record\nrecord, _ := client.DNS.Records.New(context.TODO(), dns.RecordNewParams{\n\tZoneID: cloudflare.F(&amp;quot;023e105f4ecef8ad9ca31a8372d0c353&amp;quot;),\n\tRecord: dns.RecordParam{\n\t\tName: cloudflare.String(&amp;quot;@&amp;quot;),\n\t\tType: cloudflare.String(&amp;quot;CNAME&amp;quot;),\n Content: cloudflare.String(&amp;quot;example.com&amp;quot;),\n\t},\n})\n\n\n// Wasteful fetch, but shows the point\nclient.DNS.Records.Get(\n\tcontext.Background(),\n\trecord.ID,\n\tdns.RecordGetParams{\n\t\tZoneID: cloudflare.String(&amp;quot;023e105f4ecef8ad9ca31a8372d0c353&amp;quot;),\n\t},\n)\n</pre></code>\n <p>\nAnd with Terraform:</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>resource &amp;quot;cloudflare_dns_record&amp;quot; &amp;quot;example&amp;quot; {\n zone_id = &amp;quot;023e105f4ecef8ad9ca31a8372d0c353&amp;quot;\n name = &amp;quot;@&amp;quot;\n content = &amp;quot;example.com&amp;quot;\n type = &amp;quot;CNAME&amp;quot;\n}</pre></code>\n <p>On the surface, it looks like the Terraform approach is simpler, and you would be correct. The complexity of knowing how to create a new resource and maintain changes are handled for you. However, the problem is that for Terraform to offer this abstraction and data guarantee, all values must be known at apply time. That means that even if you’re not using the <code>proxied</code> value, Terraform needs to know what the value needs to be in order to save it in the state file and manage that attribute going forward. The error below is what Terraform operators commonly see from providers when the value isn’t known at apply time.</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>Error: Provider produced inconsistent result after apply\n\nWhen applying changes to example_thing.foo, provider &amp;quot;provider[\\&amp;quot;registry.terraform.io/example/example\\&amp;quot;]&amp;quot;\nproduced an unexpected new value: .foo: was null, but now cty.StringVal(&amp;quot;&amp;quot;).</pre></code>\n <p>Whereas when using the SDKs, if you don’t need a field, you just omit it and never need to worry about maintaining known values.</p><p>Tackling this for our OpenAPI schemas was no small feat. Since introducing Terraform generation support, the quality of our schemas has improved by an order of magnitude. Now we are explicitly calling out all default values that are present, variable response properties based on the request payload, and any server-side computed attributes. All of this means a better experience for anyone that interacts with our APIs.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;making-the-jump-from-terraform-plugin-sdk-to-terraform-plugin-framework\&quot;>Making the jump from terraform-plugin-sdk to terraform-plugin-framework</h3>\n <a href=\&quot;#making-the-jump-from-terraform-plugin-sdk-to-terraform-plugin-framework\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To build a Terraform provider and expose resources or data sources to operators, you need two main things: a provider server and a provider.</p><p>The provider server takes care of exposing a <a href=\&quot;https://github.com/hashicorp/terraform/blob/main/docs/plugin-protocol/README.md\&quot;><u>gRPC server</u></a> that Terraform core (via the CLI) uses to communicate when managing resources or reading data sources from the operator provided configuration.</p><p>The provider is responsible for wrapping the resources and data sources, communicating with the remote services, and managing the state file. To do this, you either rely on the <a href=\&quot;https://github.com/hashicorp/terraform-plugin-sdk\&quot;><u>terraform-plugin-sdk</u></a> (commonly referred to as SDKv2) or <a href=\&quot;https://github.com/hashicorp/terraform-plugin-framework\&quot;><u>terraform-plugin-framework</u></a>, which includes all the interfaces and methods provided by Terraform in order to manage the internals correctly. The decision as to which plugin you use depends on the age of your provider. SDKv2 has been around longer and is what most Terraform providers use, but due to the age and complexity, it has many core unresolved issues that must remain in order to facilitate backwards compatibility for those who rely on it. <code>terraform-plugin-framework</code> is the new version that, while lacking the breadth of features SDKv2 has, provides a more Go-like approach to building providers and addresses many of the underlying bugs in SDKv2.</p><p><i>(For a deeper comparison between SDKv2 and the framework, you can check out a </i><a href=\&quot;https://www.youtube.com/watch?v=4P69E44mJGo\&quot;><i><u>conversation between myself and John Bristowe from Octopus Deploy</u></i></a><i>.)</i></p><p>The majority of the Cloudflare Terraform provider is built using SDKv2, but at the beginning of 2023, we <a href=\&quot;https://github.com/cloudflare/terraform-provider-cloudflare/pull/2170\&quot;><u>took the plunge to multiplex</u></a> and offer both in our provider. To understand why this was needed, we have to understand a little about SDKv2. The way SDKv2 is structured isn&amp;#39;t really conducive to representing null or &amp;quot;unset&amp;quot; values consistently and reliably. You can use the <a href=\&quot;https://pkg.go.dev/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema#ResourceData.GetRawConfig\&quot;><u>experimental ResourceData.GetRawConfig</u></a> to check whether the value is set, null, or unknown in the config, but writing it back as null isn&amp;#39;t really supported.</p><p>This caveat first popped up for us when the Edge Rules Engine (Rulesets) started onboarding new services and those services needed to support API responses that contained booleans in an unset (or missing), <code>true</code>, or <code>false</code> state each with their own reasoning and purpose. While this isn’t a conventional API design at Cloudflare, it is a valid way to do things that we should be able to work with. However, as mentioned above, the SDKv2 provider couldn&amp;#39;t. This is because when a value isn&amp;#39;t present in the response or read into state, it gets a Go-compatible zero value for the default. This showed up as the inability to unset values after they had been written to state as false values (and vice versa).</p><p>The only solution we have here to reliably use the three states of those boolean values is to migrate to the <code>terraform-plugin-framework</code>, which has the <a href=\&quot;https://github.com/hashicorp/terraform-plugin-framework/blob/main/types/bool_value.go\&quot;><u>correct implementation of writing back unset values</u></a>.</p><p>Once we started adding more functionality using <code>terraform-plugin-framework</code> in the old provider, it was clear that it was a better developer experience, so we <a href=\&quot;https://github.com/cloudflare/terraform-provider-cloudflare/pull/2871\&quot;><u>added a ratchet</u></a> to prevent SDKv2 usage going forward to get ahead of anyone unknowingly setting themselves up to hit this issue.</p><p>When we decided that we would be automatically generating the Terraform provider, it was only fitting that we also brought all the resources over to be based on the <code>terraform-plugin-framework</code> and leave the issues from SDKv2 behind for good. This did complicate the migration as with the improved internals came changes to major components like the schema and <a href=\&quot;https://en.wikipedia.org/wiki/Create,_read,_update_and_delete\&quot;><u>CRUD operations</u></a> that we needed to familiarize ourselves with. However, it has been a worthwhile investment because by doing so, we’ve future-proofed the foundations of the provider and are now making fewer compromises on a great Terraform experience due to buggy, legacy internals.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;iteratively-finding-bugs\&quot;>Iteratively finding bugs&nbsp;</h3>\n <a href=\&quot;#iteratively-finding-bugs\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>One of the common struggles with code generation pipelines is that unless you have existing tools that implement your new thing, it’s hard to know if it works or is reasonable to use. Sure, you can also generate your tests to exercise the new thing, but if there is a bug in the pipeline, you are very likely to not see it as a bug as you will be generating test assertions that show the bug is expected behavior.</p><p>One of the essential feedback loops we have had is the existing acceptance test suite. All resources within the existing provider had a mix of regression and functionality tests. Best of all, as the test suite is creating and managing real resources, it was very easy to know whether the outcome was a working implementation or not by looking at the HTTP traffic to see whether the API calls were accepted by the remote endpoints. Getting the test suite ported over was only a matter of copying over all the existing tests and checking for any type assertion differences (such as list to single nested list) before kicking off a test run to determine whether the resource was working correctly.</p><p>While the centralized schema pipeline was a huge quality of life improvement for having schema fixes propagate to the whole ecosystem almost instantly, it couldn’t help us solve the largest hurdle, which was surfacing bugs that hide other bugs. This was time-consuming because when fixing a problem in Terraform, you have three places where you can hit an error:</p><ol><li><p>Before any API calls are made, Terraform implements logical schema validation and when it encounters validation errors, it will immediately halt.</p></li><li><p>If any API call fails, it will stop at the CRUD operation and return the diagnostics, immediately halting.</p></li><li><p>After the CRUD operation has run, Terraform then has checks in place to ensure all values are known.</p></li></ol><p>That means that if we hit the bug at step 1 and then fixed the bug, there was no guarantee or way to tell that we didn’t have two more waiting for us. Not to mention that if we found a bug in step 2 and shipped a fix, that it wouldn’t then identify a bug in the first step on the next round of testing.</p><p>There is no silver bullet here and our workaround was instead to notice patterns of problems in the schema behaviors and apply CI lint rules within the OpenAPI schemas before it got into the code generation pipeline. Taking this approach incrementally cut down the number of bugs in step 1 and 2 until we were largely only dealing with the type in step 3.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;a-more-reusable-approach-to-model-and-struct-conversion\&quot;>A more reusable approach to model and struct conversion&nbsp;</h3>\n <a href=\&quot;#a-more-reusable-approach-to-model-and-struct-conversion\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>Within Terraform provider CRUD operations, it is fairly common to see boilerplate like the following:</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>var plan ThingModel\ndiags := req.Plan.Get(ctx, &amp;amp;plan)\nresp.Diagnostics.Append(diags...)\nif resp.Diagnostics.HasError() {\n\treturn\n}\n\nout, err := r.client.UpdateThingModel(ctx, client.ThingModelRequest{\n\tAttrA: plan.AttrA.ValueString(),\n\tAttrB: plan.AttrB.ValueString(),\n\tAttrC: plan.AttrC.ValueString(),\n})\nif err != nil {\n\tresp.Diagnostics.AddError(\n\t\t&amp;quot;Error updating project Thing&amp;quot;,\n\t\t&amp;quot;Could not update Thing, unexpected error: &amp;quot;+err.Error(),\n\t)\n\treturn\n}\n\nresult := convertResponseToThingModel(out)\ntflog.Info(ctx, &amp;quot;created thing&amp;quot;, map[string]interface{}{\n\t&amp;quot;attr_a&amp;quot;: result.AttrA.ValueString(),\n\t&amp;quot;attr_b&amp;quot;: result.AttrB.ValueString(),\n\t&amp;quot;attr_c&amp;quot;: result.AttrC.ValueString(),\n})\n\ndiags = resp.State.Set(ctx, result)\nresp.Diagnostics.Append(diags...)\nif resp.Diagnostics.HasError() {\n\treturn\n}</pre></code>\n <p>At a high level:</p><ul><li><p>We fetch the proposed updates (known as a plan) using <code>req.Plan.Get()</code></p></li><li><p>Perform the update API call with the new values</p></li><li><p>Manipulate the data from a Go type into a Terraform model (<code>convertResponseToThingModel</code>)</p></li><li><p>Set the state by calling <code>resp.State.Set()</code></p></li></ul><p>Initially, this doesn’t seem too problematic. However, the third step where we manipulate the Go type into the Terraform model quickly becomes cumbersome, error-prone, and complex because all of your resources need to do this in order to swap between the type and associated Terraform models.</p><p>To avoid generating more complex code than needed, one of the improvements featured in our provider is that all CRUD methods use unified <code>apijson.Marshal, apijson.Unmarshal</code>, and <code>apijson.UnmarshalComputed</code> methods that solve this problem by centralizing the conversion and handling logic based on the struct tags.</p>\n <pre class=\&quot;language-JavaScript\&quot;><code class=\&quot;language-JavaScript\&quot;>var data *ThingModel\n\nresp.Diagnostics.Append(req.Plan.Get(ctx, &amp;amp;data)...)\nif resp.Diagnostics.HasError() {\n\treturn\n}\n\ndataBytes, err := apijson.Marshal(data)\nif err != nil {\n\tresp.Diagnostics.AddError(&amp;quot;failed to serialize http request&amp;quot;, err.Error())\n\treturn\n}\nres := new(http.Response)\nenv := ThingResultEnvelope{*data}\n_, err = r.client.Thing.Update(\n\t// ...\n)\nif err != nil {\n\tresp.Diagnostics.AddError(&amp;quot;failed to make http request&amp;quot;, err.Error())\n\treturn\n}\n\nbytes, _ := io.ReadAll(res.Body)\nerr = apijson.UnmarshalComputed(bytes, &amp;amp;env)\nif err != nil {\n\tresp.Diagnostics.AddError(&amp;quot;failed to deserialize http request&amp;quot;, err.Error())\n\treturn\n}\ndata = &amp;amp;env.Result\n\nresp.Diagnostics.Append(resp.State.Set(ctx, &amp;amp;data)...)</pre></code>\n <p>Instead of needing to generate hundreds of instances of type-to-model converter methods, we can instead decorate the Terraform model with the correct tags and handle marshaling and unmarshaling of the data consistently. It’s a minor change to the code that in the long run makes the generation more reusable and readable. As an added benefit, this approach is great for bug fixing as once you identify a bug with a particular type of field, fixing that in the unified interface fixes it for other occurrences you may not yet have found.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;but-wait-theres-more-docs\&quot;>But wait, there’s more (docs)!</h2>\n <a href=\&quot;#but-wait-theres-more-docs\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>To top off our OpenAPI schema usage, we’re tightening the SDK integration with our <a href=\&quot;https://developers.cloudflare.com/api-next/\&quot;><u>new API documentation site</u></a>. It’s using the same pipeline we’ve invested in for the last two years while addressing some of the common usage issues.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;sdk-aware\&quot;>SDK aware&nbsp;</h3>\n <a href=\&quot;#sdk-aware\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>If you’ve used our API documentation site, you know we give you examples of interacting with the API using command line tools like curl. This is a great starting point, but if you’re using one of the SDK libraries, you need to do the mental gymnastics to convert it to the method or type definition you want to use. Now that we’re using the same pipeline to generate the SDKs <b>and</b> the documentation, we’re solving that by providing examples in all the libraries you <i>could</i> use — not just curl.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2SNCehksc30kXXQvVKYC47/a3a6071be64d006a2da9b2e615d143ae/image2.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1528\&quot; height=\&quot;334\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Example using cURL to fetch all zones.</i></sup></p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/50PeyK8oOLb51mCLF4ikds/764db96a24232b611ec88d5ff8f8844f/image4.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1534\&quot; height=\&quot;658\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Example using the Typescript library to fetch all zones.</i></sup></p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5rQn6OY3R1yi5iot1oxti4/09cf62ea46ede21d1541b5012497efdb/image5.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1534\&quot; height=\&quot;568\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Example using the Python library to fetch all zones.</i></sup></p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2Na9y9ta3fLBMEAvJK4uaH/41ecf061a5a088f4bdb313d70b173a9a/image7.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1530\&quot; height=\&quot;974\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure><p><sup><i>Example using the Go library to fetch all zones.</i></sup></p><p>With this improvement, we also remember the language selection so if you’ve selected to view the documentation using our Typescript library and keep clicking around, we keep showing you examples using Typescript until it is swapped out.</p><p>Best of all, when we introduce new attributes to existing endpoints or add SDK languages, this documentation site is automatically kept in sync with the pipeline. It is no longer a huge effort to keep it all up to date.</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;faster-and-more-efficient-rendering\&quot;>Faster and more efficient rendering</h3>\n <a href=\&quot;#faster-and-more-efficient-rendering\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>A problem we’ve always struggled with is the sheer number of API endpoints and how to represent them. As of this post, we have 1,330 endpoints, and for each of those endpoints, we have a request payload, a response payload, and multiple types associated with it. When it comes to rendering this much information, the solutions we’ve used in the past have had to make tradeoffs in order to make parts of the representation work.</p><p>This next iteration of the API documentation site addresses this is a couple of ways:</p><ul><li><p>It&amp;#39;s implemented as a modern React application that pairs an interactive client-side experience with static pre-rendered content, resulting in a quick initial load and fast navigation. (Yes, it even works without JavaScript enabled!).&nbsp;</p></li><li><p>It fetches the underlying data incrementally as you navigate.</p></li></ul><p>By solving this foundational issue, we’ve unlocked other planned improvements to the documentation site and SDK ecosystem to improve the user experience without making tradeoffs like we’ve needed to in the past.&nbsp;</p>\n <div class=\&quot;flex anchor relative\&quot;>\n <h3 id=\&quot;permissions\&quot;>Permissions</h3>\n <a href=\&quot;#permissions\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>One of the most requested features to be re-implemented into the documentation site has been minimum required permissions for API endpoints. One of the previous iterations of the documentation site had this available. However, unknown to most who used it, the values were manually maintained and were regularly incorrect, causing support tickets to be raised and frustration for users.</p><p>Inside Cloudflare&amp;#39;s identity and access management system, answering the question “what do I need to access this endpoint” isn’t a simple one. The reason for this is that in the normal flow of a request to the control plane, we need two different systems to provide parts of the question, which can then be combined to give you the full answer. As we couldn’t initially automate this as part of the OpenAPI pipeline, we opted to leave it out instead of having it be incorrect with no way of verifying it.</p><p>Fast-forward to today, and we’re excited to say endpoint permissions are back! We built some new tooling that abstracts answering this question in a way that we can integrate into our code generation pipeline and have all endpoints automatically get this information. Much like the rest of the code generation platform, it is focused on having service teams own and maintain high quality schemas that can be reused with value adds introduced without any work on their behalf.</p>\n <figure class=\&quot;kg-card kg-image-card kg-width-wide\&quot;>\n \n <Image src=\&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/641gSS5MLQpCvEANYXcVK6/447cf0b873ecb60fdbbc415df0424363/image3.png\&quot; alt=\&quot;\&quot; class=\&quot;kg-image\&quot; width=\&quot;1534\&quot; height=\&quot;360\&quot; loading=\&quot;lazy\&quot;/>\n \n </figure>\n <div class=\&quot;flex anchor relative\&quot;>\n <h2 id=\&quot;stop-waiting-for-updates\&quot;>Stop waiting for updates</h2>\n <a href=\&quot;#stop-waiting-for-updates\&quot; aria-hidden=\&quot;true\&quot; class=\&quot;relative sm:absolute sm:-left-5\&quot;>\n <svg width=\&quot;16\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 24 24\&quot;><path fill=\&quot;currentcolor\&quot; d=\&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z\&quot;></path></svg>\n </a>\n </div>\n <p>With these announcements, we’re putting an end to waiting for updates to land in the SDK ecosystem. These new improvements allow us to streamline the ability of new attributes and endpoints the moment teams document them. So what are you waiting for? Check out the <a href=\&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.0.0-alpha1\&quot;><u>Terraform provider</u></a> and <a href=\&quot;https://developers.cloudflare.com/api-next/\&quot;><u>API documentation site</u></a> today.</p>&quot;],&quot;published_at&quot;:[0,&quot;2024-09-24T14:00+01:00&quot;],&quot;updated_at&quot;:[0,&quot;2024-12-12T00:18:18.131Z&quot;],&quot;feature_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1zh37HN3XlMPz8Imlc1pkQ/c93812e87ed5454947b29df8f6aa0671/image1.png&quot;],&quot;tags&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;1Cv5JjXzKWKEA10JdYbXu1&quot;],&quot;name&quot;:[0,&quot;Birthday Week&quot;],&quot;slug&quot;:[0,&quot;birthday-week&quot;]}],[0,{&quot;id&quot;:[0,&quot;5x72ei67SoD11VQ0uqFtpF&quot;],&quot;name&quot;:[0,&quot;API&quot;],&quot;slug&quot;:[0,&quot;api&quot;]}],[0,{&quot;id&quot;:[0,&quot;3rbBQ4KGWcg4kafhbLilKu&quot;],&quot;name&quot;:[0,&quot;SDK&quot;],&quot;slug&quot;:[0,&quot;sdk&quot;]}],[0,{&quot;id&quot;:[0,&quot;4PjcrP7azfu8cw8rGcpYoM&quot;],&quot;name&quot;:[0,&quot;Terraform&quot;],&quot;slug&quot;:[0,&quot;terraform&quot;]}],[0,{&quot;id&quot;:[0,&quot;5agGcvExXGm8IVuFGxiuBF&quot;],&quot;name&quot;:[0,&quot;Open API&quot;],&quot;slug&quot;:[0,&quot;open-api&quot;]}],[0,{&quot;id&quot;:[0,&quot;3JAY3z7p7An94s6ScuSQPf&quot;],&quot;name&quot;:[0,&quot;Developer Platform&quot;],&quot;slug&quot;:[0,&quot;developer-platform&quot;]}],[0,{&quot;id&quot;:[0,&quot;4HIPcb68qM0e26fIxyfzwQ&quot;],&quot;name&quot;:[0,&quot;Developers&quot;],&quot;slug&quot;:[0,&quot;developers&quot;]}],[0,{&quot;id&quot;:[0,&quot;6QktrXeEFcl4e2dZUTZVGl&quot;],&quot;name&quot;:[0,&quot;Product News&quot;],&quot;slug&quot;:[0,&quot;product-news&quot;]}]]],&quot;relatedTags&quot;:[0],&quot;authors&quot;:[1,[[0,{&quot;name&quot;:[0,&quot;Jacob Bednarz&quot;],&quot;slug&quot;:[0,&quot;jacob-bednarz&quot;],&quot;bio&quot;:[0,&quot;System Engineer, Control Plane&quot;],&quot;profile_image&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/qHSrNJsFuwJYKkEu0l8nw/179454d306e61284f83e97e94326fa0d/jacob-bednarz.jpg&quot;],&quot;location&quot;:[0,&quot;Australia&quot;],&quot;website&quot;:[0,&quot;https://jacobbednarz.com&quot;],&quot;twitter&quot;:[0,&quot;@jacobbednarz&quot;],&quot;facebook&quot;:[0,null]}]]],&quot;meta_description&quot;:[0,&quot;The Cloudflare Terraform provider used to be manually maintained. With the help of our existing OpenAPI code generation pipeline, we’re now automatically generating the provider for better endpoint and attribute coverage, faster updates when new products are announced and a new API documentation site to top it all off. Read on to see how we pulled it all together.&quot;],&quot;primary_author&quot;:[0,{}],&quot;localeList&quot;:[0,{&quot;name&quot;:[0,&quot;Automatically generating Cloudflare’s Terraform provider - LL- koKR, zhCN, zhTW, esES, frFR, deDE&quot;],&quot;enUS&quot;:[0,&quot;English for Locale&quot;],&quot;zhCN&quot;:[0,&quot;Translated for Locale&quot;],&quot;zhHansCN&quot;:[0,&quot;No Page for Locale&quot;],&quot;zhTW&quot;:[0,&quot;Translated for Locale&quot;],&quot;frFR&quot;:[0,&quot;Translated for Locale&quot;],&quot;deDE&quot;:[0,&quot;Translated for Locale&quot;],&quot;itIT&quot;:[0,&quot;English for Locale&quot;],&quot;jaJP&quot;:[0,&quot;Translated for Locale&quot;],&quot;koKR&quot;:[0,&quot;Translated for Locale&quot;],&quot;ptBR&quot;:[0,&quot;English for Locale&quot;],&quot;esLA&quot;:[0,&quot;English for Locale&quot;],&quot;esES&quot;:[0,&quot;Translated for Locale&quot;],&quot;enAU&quot;:[0,&quot;No Page for Locale&quot;],&quot;enCA&quot;:[0,&quot;No Page for Locale&quot;],&quot;enIN&quot;:[0,&quot;No Page for Locale&quot;],&quot;enGB&quot;:[0,&quot;No Page for Locale&quot;],&quot;idID&quot;:[0,&quot;No Page for Locale&quot;],&quot;ruRU&quot;:[0,&quot;No Page for Locale&quot;],&quot;svSE&quot;:[0,&quot;No Page for Locale&quot;],&quot;viVN&quot;:[0,&quot;No Page for Locale&quot;],&quot;plPL&quot;:[0,&quot;No Page for Locale&quot;],&quot;arAR&quot;:[0,&quot;No Page for Locale&quot;],&quot;nlNL&quot;:[0,&quot;English for Locale&quot;],&quot;thTH&quot;:[0,&quot;English for Locale&quot;],&quot;trTR&quot;:[0,&quot;English for Locale&quot;],&quot;heIL&quot;:[0,&quot;English for Locale&quot;],&quot;lvLV&quot;:[0,&quot;No Page for Locale&quot;],&quot;etEE&quot;:[0,&quot;No Page for Locale&quot;],&quot;ltLT&quot;:[0,&quot;No Page for Locale&quot;]}],&quot;url&quot;:[0,&quot;https://blog.cloudflare.com/automatically-generating-cloudflares-terraform-provider&quot;],&quot;metadata&quot;:[0,{&quot;title&quot;:[0,&quot;Automatically generating Cloudflare’s Terraform provider&quot;],&quot;description&quot;:[0,&quot;The Cloudflare Terraform provider used to be manually maintained. With the help of our existing OpenAPI code generation pipeline, we’re now automatically generating the provider for better endpoint and attribute coverage, faster updates when new products are announced and a new API documentation site to top it all off. Read on to see how we pulled it all together.&quot;],&quot;imgPreview&quot;:[0,&quot;https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2jMU7eEhUq17urGaWaoNmk/b4ba02608e15e967c21348c69ccb5ee0/Automatically_generating_Cloudflare_s_Terraform_provider-OG.png&quot;]}]}]]],&quot;translations&quot;:[0,{&quot;posts.by&quot;:[0,&quot;By&quot;],&quot;footer.gdpr&quot;:[0,&quot;GDPR&quot;],&quot;lang_blurb1&quot;:[0,&quot;This post is also available in {lang1}.&quot;],&quot;lang_blurb2&quot;:[0,&quot;This post is also available in {lang1} and {lang2}.&quot;],&quot;lang_blurb3&quot;:[0,&quot;This post is also available in {lang1}, {lang2} and {lang3}.&quot;],&quot;footer.press&quot;:[0,&quot;Press&quot;],&quot;header.title&quot;:[0,&quot;The Cloudflare Blog&quot;],&quot;search.clear&quot;:[0,&quot;Clear&quot;],&quot;search.filter&quot;:[0,&quot;Filter&quot;],&quot;search.source&quot;:[0,&quot;Source&quot;],&quot;footer.careers&quot;:[0,&quot;Careers&quot;],&quot;footer.company&quot;:[0,&quot;Company&quot;],&quot;footer.support&quot;:[0,&quot;Support&quot;],&quot;footer.the_net&quot;:[0,&quot;theNet&quot;],&quot;search.filters&quot;:[0,&quot;Filters&quot;],&quot;footer.our_team&quot;:[0,&quot;Our team&quot;],&quot;footer.webinars&quot;:[0,&quot;Webinars&quot;],&quot;page.more_posts&quot;:[0,&quot;More posts&quot;],&quot;posts.time_read&quot;:[0,&quot;{time} min read&quot;],&quot;search.language&quot;:[0,&quot;Language&quot;],&quot;footer.community&quot;:[0,&quot;Community&quot;],&quot;footer.resources&quot;:[0,&quot;Resources&quot;],&quot;footer.solutions&quot;:[0,&quot;Solutions&quot;],&quot;footer.trademark&quot;:[0,&quot;Trademark&quot;],&quot;header.subscribe&quot;:[0,&quot;Subscribe&quot;],&quot;footer.compliance&quot;:[0,&quot;Compliance&quot;],&quot;footer.free_plans&quot;:[0,&quot;Free plans&quot;],&quot;footer.impact_ESG&quot;:[0,&quot;Impact/ESG&quot;],&quot;posts.follow_on_X&quot;:[0,&quot;Follow on X&quot;],&quot;footer.help_center&quot;:[0,&quot;Help center&quot;],&quot;footer.network_map&quot;:[0,&quot;Network Map&quot;],&quot;header.please_wait&quot;:[0,&quot;Please Wait&quot;],&quot;page.related_posts&quot;:[0,&quot;Related posts&quot;],&quot;search.result_stat&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong> for <strong>{search_keyword}</strong>&quot;],&quot;footer.case_studies&quot;:[0,&quot;Case Studies&quot;],&quot;footer.connect_2024&quot;:[0,&quot;Connect 2024&quot;],&quot;footer.terms_of_use&quot;:[0,&quot;Terms of Use&quot;],&quot;footer.white_papers&quot;:[0,&quot;White Papers&quot;],&quot;footer.cloudflare_tv&quot;:[0,&quot;Cloudflare TV&quot;],&quot;footer.community_hub&quot;:[0,&quot;Community Hub&quot;],&quot;footer.compare_plans&quot;:[0,&quot;Compare plans&quot;],&quot;footer.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.contact_sales&quot;:[0,&quot;Contact Sales&quot;],&quot;header.email_address&quot;:[0,&quot;Email Address&quot;],&quot;page.error.not_found&quot;:[0,&quot;Page not found&quot;],&quot;footer.developer_docs&quot;:[0,&quot;Developer docs&quot;],&quot;footer.privacy_policy&quot;:[0,&quot;Privacy Policy&quot;],&quot;footer.request_a_demo&quot;:[0,&quot;Request a demo&quot;],&quot;page.continue_reading&quot;:[0,&quot;Continue reading&quot;],&quot;footer.analysts_report&quot;:[0,&quot;Analyst reports&quot;],&quot;footer.for_enterprises&quot;:[0,&quot;For enterprises&quot;],&quot;footer.getting_started&quot;:[0,&quot;Getting Started&quot;],&quot;footer.learning_center&quot;:[0,&quot;Learning Center&quot;],&quot;footer.project_galileo&quot;:[0,&quot;Project Galileo&quot;],&quot;pagination.newer_posts&quot;:[0,&quot;Newer Posts&quot;],&quot;pagination.older_posts&quot;:[0,&quot;Older Posts&quot;],&quot;posts.social_buttons.x&quot;:[0,&quot;Discuss on X&quot;],&quot;search.icon_aria_label&quot;:[0,&quot;Search&quot;],&quot;search.source_location&quot;:[0,&quot;Source/Location&quot;],&quot;footer.about_cloudflare&quot;:[0,&quot;About Cloudflare&quot;],&quot;footer.athenian_project&quot;:[0,&quot;Athenian Project&quot;],&quot;footer.become_a_partner&quot;:[0,&quot;Become a partner&quot;],&quot;footer.cloudflare_radar&quot;:[0,&quot;Cloudflare Radar&quot;],&quot;footer.network_services&quot;:[0,&quot;Network services&quot;],&quot;footer.trust_and_safety&quot;:[0,&quot;Trust &amp; Safety&quot;],&quot;header.get_started_free&quot;:[0,&quot;Get Started Free&quot;],&quot;page.search.placeholder&quot;:[0,&quot;Search Cloudflare&quot;],&quot;footer.cloudflare_status&quot;:[0,&quot;Cloudflare Status&quot;],&quot;footer.cookie_preference&quot;:[0,&quot;Cookie Preferences&quot;],&quot;header.valid_email_error&quot;:[0,&quot;Must be valid email.&quot;],&quot;search.result_stat_empty&quot;:[0,&quot;Results <strong>{search_range}</strong> of <strong>{search_total}</strong>&quot;],&quot;footer.connectivity_cloud&quot;:[0,&quot;Connectivity cloud&quot;],&quot;footer.developer_services&quot;:[0,&quot;Developer services&quot;],&quot;footer.investor_relations&quot;:[0,&quot;Investor relations&quot;],&quot;page.not_found.error_code&quot;:[0,&quot;Error Code: 404&quot;],&quot;search.autocomplete_title&quot;:[0,&quot;Insert a query. Press enter to send&quot;],&quot;footer.logos_and_press_kit&quot;:[0,&quot;Logos &amp; press kit&quot;],&quot;footer.application_services&quot;:[0,&quot;Application services&quot;],&quot;footer.get_a_recommendation&quot;:[0,&quot;Get a recommendation&quot;],&quot;posts.social_buttons.reddit&quot;:[0,&quot;Discuss on Reddit&quot;],&quot;footer.sse_and_sase_services&quot;:[0,&quot;SSE and SASE services&quot;],&quot;page.not_found.outdated_link&quot;:[0,&quot;You may have used an outdated link, or you may have typed the address incorrectly.&quot;],&quot;footer.report_security_issues&quot;:[0,&quot;Report Security Issues&quot;],&quot;page.error.error_message_page&quot;:[0,&quot;Sorry, we can't find the page you are looking for.&quot;],&quot;header.subscribe_notifications&quot;:[0,&quot;Subscribe to receive notifications of new posts:&quot;],&quot;footer.cloudflare_for_campaigns&quot;:[0,&quot;Cloudflare for Campaigns&quot;],&quot;header.subscription_confimation&quot;:[0,&quot;Subscription confirmed. Thank you for subscribing!&quot;],&quot;posts.social_buttons.hackernews&quot;:[0,&quot;Discuss on Hacker News&quot;],&quot;footer.diversity_equity_inclusion&quot;:[0,&quot;Diversity, equity &amp; inclusion&quot;],&quot;footer.critical_infrastructure_defense_project&quot;:[0,&quot;Critical Infrastructure Defense Project&quot;]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;MorePosts&quot;,&quot;value&quot;:true}" await-children> <div class="w-100 bt-l b--gray8"> <h3 data-testid="more-posts-title" class="orange fw5 f4 ph3 mt4">MORE POSTS</h3> </div> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-27T14:00+01:00">September 27, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/bringing-ai-to-cloudflare/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">AI Everywhere with the WAF Rule Builder Assistant, Cloudflare Radar AI Insights, and updated AI bot protection</h6></a> <p class="gray1 lh-copy">This year for Cloudflare’s birthday, we’ve extended our AI Assistant capabilities to help you build new WAF rules, added new AI bot &amp; crawler traffic insights to Radar, and given customers new AI bot <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/adam-martinetti/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Adam Martinetti</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/harsh-saxena/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Harsh Saxena</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/gauri-baraskar/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Gauri Baraskar</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/carlos/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Carlos Azevedo</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/david-belson/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">David Belson</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/bot-management/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Bot Management</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/bots/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Bots</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/ai-bots/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AI Bots</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/ai/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AI</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-27T14:00+01:00">September 27, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/expanding-our-support-for-oss-projects-with-project-alexandria/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Expanding Cloudflare's support for open source projects with Project Alexandria</h6></a> <p class="gray1 lh-copy">At Cloudflare, we believe in the power of open source. With Project Alexandria, our expanded open source program, we’re helping open source projects have a sustainable and scalable future, providing them with the tools and protection needed to thrive.<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/veronica-marin/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Veronica Marin</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/gabby-shires/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Gabby Shires</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/open-source/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Open Source</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/better-internet/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Better Internet</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00-07:00">September 26, 2024 9:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/builder-day-2024-announcements/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Builder Day 2024: 18 big updates to the Workers platform</h6></a> <p class="gray1 lh-copy">To celebrate Builder Day 2024, we’re shipping 18 updates inspired by direct feedback from developers building on Cloudflare. This includes new capabilities, like running evals with AI Gateway, beta <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/tanushree/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Tanushree Sharma</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/rohin/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Rohin Lohe</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/anni/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Anni Wang</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/nevi/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Nevi Shah</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developer-platform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developer Platform</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/workers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Workers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-r2/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">R2 Storage</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00+01:00">September 26, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/workers-ai-bigger-better-faster/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Cloudflare’s bigger, better, faster AI platform</h6></a> <p class="gray1 lh-copy">Whether you want the fastest inference at the edge, optimized AI workflows, or vector database-powered RAG, we’re excited to help you harness the full potential of AI and get started on building with Cloudflare.<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/michelle/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Michelle Chen</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/kathy/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Kathy Liao</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/phil/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Phil Wittig</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/vectorize/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Vectorize</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/ai-gateway/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AI Gateway</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/ai/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AI</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00+01:00">September 26, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/faster-workers-kv/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">We made Workers KV up to 3x faster — here’s the data</h6></a> <p class="gray1 lh-copy">Speed is a critical factor that dictates Internet behavior. Every additional millisecond a user spends waiting for your web page to load results in them abandoning your website. <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/thomas-gauvin/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Thomas Gauvin</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/rob/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Rob Sutter</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/andrew-plunk/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Andrew Plunk</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-workers-kv/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Workers KV</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developer-platform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developer Platform</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/performance/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Performance</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00+01:00">September 26, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/making-workers-ai-faster/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Making Workers AI faster and more efficient: Performance optimization with KV cache compression and speculative decoding</h6></a> <p class="gray1 lh-copy">With a new generation of data center accelerator hardware and using optimization techniques such as KV cache compression and speculative decoding, we’ve made large language model (LLM)<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/isaac-rehg/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Isaac Rehg</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/jesse/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Jesse Kipp</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/product-news/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Product News</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/workers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Workers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developer-platform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developer Platform</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00+01:00">September 26, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/sqlite-in-durable-objects/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Zero-latency SQLite storage in every Durable Object</h6></a> <p class="gray1 lh-copy">Traditional cloud storage is inherently slow because it is accessed over a network and must synchronize many clients. But what if we could instead put your application code deep into the storage layer<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/kenton-varda/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Kenton Varda</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/product-news/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Product News</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/workers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Workers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/durable-objects/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Durable Objects</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-26T14:00+01:00">September 26, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/startup-program-250k-credits/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Startup Program revamped: build and grow on Cloudflare with up to $250,000 in credits</h6></a> <p class="gray1 lh-copy">Cloudflare’s Startup Program now offers up to $250,000 in credits for companies building on our Developer Platform. The program relaunch uses clear and predictable credits so that you can easily see how usage impacts future pricing. <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/christopher-rotas/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Christopher Rotas</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/melissa-kargiannakis/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Melissa Kargiannakis</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/workers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Workers</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/serverless/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Serverless</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developer-platform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developer Platform</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/developers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Developers</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-25T14:00+01:00">September 25, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/introducing-speed-brain/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Introducing Speed Brain: helping web pages load 45% faster</h6></a> <p class="gray1 lh-copy">We are excited to announce the latest leap forward in speed – Speed Brain. Speed Brain uses the Speculation Rules API to prefetch content for the user's likely next navigations. The goal is to download a web page to the browser before a user navigates to it, allowing pages to loa<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/alex/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Alex Krivit</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/suleman/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Suleman Ahmad</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/william/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">William Woodhead</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/speed-and-reliability/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Speed &amp; Reliability</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/research/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Research</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cache/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cache</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/speed-brain/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Speed Brain</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-25T14:00+01:00">September 25, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/gen-12-servers/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Cloudflare’s 12th Generation servers — 145% more performant and 63% more efficient</h6></a> <p class="gray1 lh-copy">Cloudflare is thrilled to announce the general deployment of our next generation of server — Gen 12 powered by AMD Genoa-X processors. This new generation of server focuses on delivering exceptional performance across all Cloudflare services, enhanced support for AI/ML workloads,<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/jq/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">JQ Lau</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/ma-xiong/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Ma Xiong</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/syona/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Syona Sarma</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/epyc/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">EPYC</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/amd/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AMD</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/ai/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">AI</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-network/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Network</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-25T14:00+01:00">September 25, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/webrtc-turn-using-anycast/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">TURN and anycast: making peer connections work globally</h6></a> <p class="gray1 lh-copy">TURN servers help relay media and data between devices when direct peer-to-peer connections are blocked or fail. Cloudflare Calls' TURN server uses anycast to eliminate the need to think about regions or scaling, improving reliability of WebRTC applications.<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/nils-ohlmeier/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Nils Ohlmeier</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/renan/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Renan Dincer</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cloudflare-calls/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cloudflare Calls</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/anycast/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Anycast</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/loadbalancing/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Load Balancing</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/webrtc/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">WebRTC</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-25T14:00+01:00">September 25, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/new-standards/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">New standards for a faster and more private Internet</h6></a> <p class="gray1 lh-copy">Cloudflare's customers can now take advantage of Zstandard (zstd) compression, offering 42% faster compression than Brotli and 11.3% more efficiency than GZIP. We're further optimizing performance for our customers with HTTP/3 prioritization and BBR congestion control, and enhanc<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/matt-bullock/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Matt Bullock</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/maciej/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Maciej Lechowski</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/rushil-mehra/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Rushil Mehra</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/privacy/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Privacy</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/compression/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Compression</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/tls/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">TLS</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-25T00:00+01:00">September 24, 2024 11:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/instant-purge/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Instant Purge: invalidating cached content in under 150ms</h6></a> <p class="gray1 lh-copy">Today we’re excited to share that we’ve built the fastest cache purge in the industry. We now offer a global purge latency for purge by tags, hostnames, and prefixes of less than 150ms on average (P50), representing a 90% improvement since May 2022. <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/alex/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Alex Krivit</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/tim-kornhammar/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Tim Kornhammar</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/connor-harwood/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline"> Connor Harwood</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/performance/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Performance</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/cache/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Cache</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/speed-and-reliability/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Speed &amp; Reliability</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-24T14:00+01:00">September 24, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/key-transparency/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Cloudflare helps verify the security of end-to-end encrypted messages by auditing key transparency for WhatsApp</h6></a> <p class="gray1 lh-copy">Cloudflare is now verifying WhatsApp’s Key Transparency audit proofs to ensure the security of end-to-end encrypted messaging conversations without having to manually check QR codes. We are publishing the results of the proof verification to https://dash.key-transparency.cloudfla<!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/thibault/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Thibault Meunier</a> </div></li> <li class="list flex items-center"> <div class="author-name-tooltip"> <span class="fw5 f2 black no-underline">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/author/mari/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Mari Galicer</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/privacy/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Privacy</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/security/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Security</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/research/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Research</a> </div> </div> </article> <article data-testid="more-posts-article" class="w-100 w-100-m ph3 mb4"> <p class="f3 fw5 gray1" data-iso-date="2024-09-24T14:00+01:00">September 24, 2024 1:00 PM</p><a href="https://blog-cloudflare-com.translate.goog/automatically-generating-cloudflares-terraform-provider/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline gray1 f4 fw5"><h6 class="gray1 f4 fw5 mt2">Automatically generating Cloudflare’s Terraform provider</h6></a> <p class="gray1 lh-copy">The Cloudflare Terraform provider used to be manually maintained. With the help of our existing OpenAPI code generation pipeline, we’re now automatically generating the provider for better <!-- -->...</p> <ul class="flex pl0 fw6 f2"> <span>By<!-- -->&nbsp;</span> <li class="list flex items-center"> <div class="author-name-tooltip"> <a href="https://blog-cloudflare-com.translate.goog/author/jacob-bednarz/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="fw5 f2 black no-underline">Jacob Bednarz</a> </div></li> </ul> <div class="flex flex-row flex-wrap"> <div> <a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Birthday Week</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/api/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">API</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/sdk/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">SDK</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/terraform/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Terraform</a> </div> <div> <span class="f1 fw2 blue3 no-underline underline-hover">,&nbsp;</span><a href="https://blog-cloudflare-com.translate.goog/tag/open-api/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" class="no-underline f1 fw2 blue3 underline-hover">Open API</a> </div> </div> </article><!--astro:end--> </astro-island> <div class="pagination mw-100 center mv5 ph3 w-100 tc"> <div class="center w-50-l w-100"> <div class="flex items-center justify-center justify-around-m "> <ul class="flex list ml3" style="padding-inline-start:inherit"> <li class="gray"><a class="no-underline underline-hover dib-m dib-l mr1 gray3 " href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB">1</a></li> <li class=""><a class="no-underline underline-hover dib-m dib-l mr1 blue3" href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/page/2/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB">2</a></li> <li class="ml">…</li> <li><a class="no-underline underline-hover dib-m dib-l mr3 blue3" href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/page/10/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB">10</a></li> </ul><span><a class="no-underline blue3 underline-hover" data-testid="pagination-toggle-next" href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/page/2/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB" rel="prev"><span class="underline-hover dn dib-m dib-l">Older Posts</span> →</a></span> </div> </div> </div> </main> <footer class="pt4 pb4 pl1 pr1 main-footer"> <div class="mw8 center dn db-l ph3"> <div class="flex flex-row justify-between"> <div class="main-footer__menu-group"> <ul id="getting-started-menu" class="list pl0"> <li class="pt1 pb1 f1 main-footer__menu-group__header js-toggle-footer-group" data-submenu="getting-started-menu">Getting Started<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/plans/free/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="free-plans" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Free plans</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/enterprise/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="enterprise" class="f1 blue3 no-underline underline-hover" rel="noreferrer">For enterprises</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/plans/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="compare-plans" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Compare plans</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/about-your-website/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="get-a-recommendation" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Get a recommendation</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/plans/enterprise/demo/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="request-a-demo" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Request a demo</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/plans/enterprise/contact/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="contact-sales" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Contact Sales</a></li> </ul> </div> <div class="main-footer__menu-group"> <ul id="company-menu" class="list pl0"> <li class="pt1 pb1 f1" data-submenu="company-menu">Resources<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/learning/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="learning-center" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Learning Center</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/analysts/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="analysts-report" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Analyst reports</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://radar.cloudflare.com/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="overview" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Cloudflare Radar</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://cloudflare.tv/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="tv" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Cloudflare TV</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/case-studies/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="case-studies" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Case Studies</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/resource-hub/?resourcetype%3DWebinar" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="webinars" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Webinars</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/resource-hub/?resourcetype%3DWhitepaper" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="white-papers" class="f1 blue3 no-underline underline-hover" rel="noreferrer">White Papers</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://developers.cloudflare.com" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="developer-docs" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Developer docs</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/the-net/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="theNet" class="f1 blue3 no-underline underline-hover" rel="noreferrer">theNet</a></li> </ul> </div> <div class="main-footer__menu-group"> <ul id="sales-menu" class="list pl0"> <li class="pt1 pb1 f1 main-footer__menu-group__header js-toggle-footer-group" data-submenu="sales-menu">Solutions<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/connectivity-cloud/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="connectivity-cloud" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Connectivity cloud</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/zero-trust/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="zero-trust" class="f1 blue3 no-underline underline-hover" rel="noreferrer">SSE and SASE services</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/application-services/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="application-services" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Application services</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/network-services/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="network-services" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Network services</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/developer-platform/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="developer-services" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Developer services</a></li> </ul> </div> <div class="main-footer__menu-group"> <ul id="community-menu" class="list pl0"> <li class="pt1 pb1 f1 main-footer__menu-group__header js-toggle-footer-group" data-submenu="community-menu">Community<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://community.cloudflare.com" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="community_hub" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Community Hub</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/galileo/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="galileo" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Project Galileo</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/athenian/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="athenian" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Athenian Project</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/campaigns/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="cloudflare-for-campaigns" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Cloudflare for Campaigns</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/partners/technology-partners/cidp/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="critical-infrastructure-defense-project" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Critical Infrastructure Defense Project</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/connect2024/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="connect-2024" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Connect 2024</a></li> </ul> </div> <div class="main-footer__menu-group"> <ul id="support-menu" class="list pl0"> <li class="pt1 pb1 f1 main-footer__menu-group__header js-toggle-footer-group" data-submenu="support-menu">Support<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://support.cloudflare.com" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="help-center" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Help center</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflarestatus.com" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="status" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Cloudflare Status</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/compliance/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="compliance" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Compliance</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/gdpr/introduction/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="gdpr" class="f1 blue3 no-underline underline-hover" rel="noreferrer">GDPR</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/trust-hub/abuse-approach/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="trust-and-safety" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Trust &amp; Safety</a></li> </ul> </div> <div class="main-footer__menu-group"> <ul id="company-menu" class="list pl0"> <li class="pt1 pb1 f1 main-footer__menu-group__header js-toggle-footer-group" data-submenu="company-menu">Company<i class="icon-caret-down"></i></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/about-overview/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="overview" class="f1 blue3 no-underline underline-hover" rel="noreferrer">About Cloudflare</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/people/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="our_team" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Our team</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://cloudflare.net/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="investor-relations" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Investor relations</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/press/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="press" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Press</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/careers/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="careers" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Careers</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/diversity-equity-and-inclusion/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="diversity-equity-inclusion" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Diversity, equity &amp; inclusion</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/impact/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="impact-ESG" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Impact/ESG</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/network/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="network_map" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Network Map</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/press-kit/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="press-kit" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Logos &amp; press kit</a></li> <li class="pt1 pb1"><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/partners/" target="_blank" data-tracking-category="footer" data-tracking-action="click" data-tracking-label="partners" class="f1 blue3 no-underline underline-hover" rel="noreferrer">Become a partner</a></li> </ul> </div> </div> </div> <div class="mw8 center ph3"> <div class="flex flex-row flex-wrap justify-center md:justify-between items-center pt4"> <div class="flex flex-row space-x-4 items-start w-25-l pb4 pb0-l"> <a target="_blank" rel="noreferrer" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.facebook.com/Cloudflare/" class="w-8"><img class="w-8" src="https://www.cloudflare.com/img/footer/facebook.svg" alt="facebook"></a><a target=" _blank" rel="noreferrer" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://x.com/Cloudflare" class="w-8"><img class="w-8" src="https://www.cloudflare.com/img/footer/twitter.svg" alt="X"></a><a target="_blank" rel="noreferrer" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.linkedin.com/company/cloudflare" class="w-8"><img class="w-8" src="https://www.cloudflare.com/img/footer/linkedin.svg" alt="linkedin"></a><a target="_blank" rel="noreferrer" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.youtube.com/cloudflare" class="w-8"><img class="w-8" src="https://www.cloudflare.com/img/footer/youtube.svg" alt="youtube"></a><a target="_blank" rel="noreferrer" href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.instagram.com/cloudflare" class="w-8"><img class="w-8" src="https://www.cloudflare.com/img/footer/instagram.svg" alt="instagram"></a> </div> <div class="w-70-l tr-l tl-ns"> <div> <span class="main-footer__copyright f1">© <!-- -->2025<!-- --> Cloudflare, Inc.<!-- --> </span><span class="main-footer__copyright f1">|</span><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/privacypolicy/" target="_blank" class="main-footer__copyright f1 no-underline underline-hover" rel="noreferrer"> <!-- -->Privacy Policy<!-- --> </a><span class="main-footer__copyright f1">|</span><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/website-terms/" target="_blank" class="main-footer__copyright f1 no-underline underline-hover" rel="noreferrer"> <!-- -->Terms of Use<!-- --> </a><span class="main-footer__copyright f1">|</span><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/disclosure/" target="_blank" class="main-footer__copyright f1 no-underline underline-hover" rel="noreferrer"> <!-- -->Report Security Issues<!-- --> </a><span class="main-footer__copyright f1">|</span><img class="mw2 ph1" src="/images/privacy-options.svg" alt="Privacy Options"><a href="https://blog-cloudflare-com.translate.goog/tag/birthday-week/?_x_tr_sl=pl&amp;_x_tr_tl=de&amp;_x_tr_hl=en-GB#cookie-settings" id="ot-sdk-btn" class="ot-sdk-show-settings main-footer__copyright f1 no-underline underline-hover"><span class="brandGray5">Cookie Preferences</span> </a><span class="main-footer__copyright f1">|</span><a href="https://translate.google.com/website?sl=pl&amp;tl=de&amp;hl=en-GB&amp;u=https://www.cloudflare.com/trademark/" target="_blank" class="main-footer__copyright f1 no-underline underline-hover" rel="noreferrer"> <!-- -->Trademark<!-- --> </a> </div> </div> </div> </div> </footer> <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon="{&quot;rayId&quot;:&quot;9138df62a85ace87&quot;,&quot;version&quot;:&quot;2025.1.0&quot;,&quot;serverTiming&quot;:{&quot;name&quot;:{&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfSpeedBrain&quot;:true,&quot;cfCacheStatus&quot;:true}},&quot;token&quot;:&quot;2bc156e5f250476cb274d269511ffb57&quot;,&quot;b&quot;:1}" crossorigin="anonymous"></script> <script>function gtElInit() {var lib = new google.translate.TranslateService();lib.translatePage('pl', 'de', function () {});}</script> <script src="https://translate.google.com/translate_a/element.js?cb=gtElInit&amp;hl=en-GB&amp;client=wt" type="text/javascript"></script> </body> </html>

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