CINXE.COM
Konveyor AI: supporting application modernization | CNCF
<!DOCTYPE html> <html lang="en-US" class="no-focus-outline"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Konveyor AI: supporting application modernization | CNCF</title> <!-- The SEO Framework by Sybre Waaijer --> <meta name="robots" content="max-snippet:-1,max-image-preview:standard,max-video-preview:-1" /> <link rel="canonical" href="https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/" /> <meta name="description" content="Member post by John Matthews, and Savitha Raghunathan, Red Hat Migrating legacy software to modern platforms has long been a challenging endeavor for businesses." /> <meta property="og:type" content="article" /> <meta property="og:locale" content="en_US" /> <meta property="og:site_name" content="CNCF" /> <meta property="og:title" content="Konveyor AI: supporting application modernization" /> <meta property="og:description" content="Member post by John Matthews, and Savitha Raghunathan, Red Hat Migrating legacy software to modern platforms has long been a challenging endeavor for businesses. Companies often need to move decades…" /> <meta property="og:url" content="https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/" /> <meta property="og:image" content="https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32.jpg" /> <meta property="og:image:width" content="1650" /> <meta property="og:image:height" content="866" /> <meta property="article:published_time" content="2024-11-22T16:00:00+00:00" /> <meta property="article:modified_time" content="2024-11-21T12:27:46+00:00" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@cloudnativefdn" /> <meta name="twitter:title" content="Konveyor AI: supporting application modernization" /> <meta name="twitter:description" content="Member post by John Matthews, and Savitha Raghunathan, Red Hat Migrating legacy software to modern platforms has long been a challenging endeavor for businesses. Companies often need to move decades…" /> <meta name="twitter:image" content="https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32.jpg" /> <script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://www.cncf.io/#/schema/WebSite","url":"https://www.cncf.io/","name":"CNCF","inLanguage":"en-US","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.cncf.io/search/{search_term_string}/"},"query-input":"required name=search_term_string"},"publisher":{"@type":"Organization","@id":"https://www.cncf.io/#/schema/Organization","name":"CNCF","url":"https://www.cncf.io/","sameAs":["https://www.facebook.com/CloudNativeComputingFoundation/","https://twitter.com/cloudnativefdn","https://www.instagram.com/humans.of.cloudnative/","https://www.youtube.com/c/cloudnativefdn","https://www.linkedin.com/company/cloud-native-computing-foundation/"],"logo":{"@type":"ImageObject","url":"https://www.cncf.io/wp-content/uploads/2022/11/cncf-logo-stacked.png","contentUrl":"https://www.cncf.io/wp-content/uploads/2022/11/cncf-logo-stacked.png","width":1293,"height":762,"contentSize":"12810"}}},{"@type":"WebPage","@id":"https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/","url":"https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/","name":"Konveyor AI: supporting application modernization | CNCF","description":"Member post by John Matthews, and Savitha Raghunathan, Red Hat Migrating legacy software to modern platforms has long been a challenging endeavor for businesses.","inLanguage":"en-US","isPartOf":{"@id":"https://www.cncf.io/#/schema/WebSite"},"breadcrumb":{"@type":"BreadcrumbList","@id":"https://www.cncf.io/#/schema/BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":"https://www.cncf.io/","name":"CNCF"},{"@type":"ListItem","position":2,"item":"https://www.cncf.io/blog/","name":"Category: Blog"},{"@type":"ListItem","position":3,"name":"Konveyor AI: supporting application modernization"}]},"potentialAction":{"@type":"ReadAction","target":"https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/"},"datePublished":"2024-11-22T16:00:00+00:00","dateModified":"2024-11-21T12:27:46+00:00","author":{"@type":"Person","@id":"https://www.cncf.io/#/schema/Person/d97a259a66ac4633ce2cecfb8ee7d597","name":"Jessie"}}]}</script> <!-- / The SEO Framework by Sybre Waaijer | 8.78ms meta | 0.15ms boot --> <link rel='dns-prefetch' href='//www.cncf.io' /> <link rel='dns-prefetch' href='//js.hs-scripts.com' /> <link rel='dns-prefetch' href='//cmp.osano.com' /> <link crossorigin='' href='//www.googletagmanager.com' rel='preconnect' /> <link crossorigin='' href='//www.gstatic.com' rel='preconnect' /> <link crossorigin href='//js.hscollectedforms.net' rel='preconnect' /> <link crossorigin href='//js.hs-banner.com' rel='preconnect' /> <link crossorigin href='//js.hs-analytics.net' rel='preconnect' /> <link crossorigin href='//js.hsforms.net' rel='preconnect' /> <link crossorigin href='//js.hs-scripts.com' rel='preconnect' /> <link crossorigin href='//landscape.cncf.io' rel='preconnect' /> <link crossorigin href='//cmp.osano.com' rel='preconnect' /> <link crossorigin href='//consent.api.osano.com' rel='preconnect' /> <style id='wp-block-library-inline-css'> :root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} </style> <link rel='stylesheet' id='main-css' href='https://www.cncf.io/wp-content/themes/cncf-twenty-two/build/styles.min.css?ver=1732320241' media='all' /> <style id='wp-block-button-inline-css'> .wp-block-button__link{box-sizing:border-box;cursor:pointer;display:inline-block;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none} </style> <style id='wp-block-buttons-inline-css'> .wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-button.aligncenter{text-align:center} </style> <script defer src="https://cmp.osano.com/16A0DbT9yDNIaQkvZ/c3494b1e-ff3a-436f-978d-842e9a0bed27/osano.js?ver=1" id="osano-js"></script> <link rel="https://api.w.org/" href="https://www.cncf.io/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.cncf.io/wp-json/wp/v2/posts/120908" /><!-- Google Tag Manager --> <script data-type="lazy" data-src="data:text/javascript;base64,KGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOgpuZXcgRGF0ZSgpLmdldFRpbWUoKSxldmVudDonZ3RtLmpzJ30pO3ZhciBmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0sCmo9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPQonaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7Cn0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnZGF0YUxheWVyJywnR1RNLUtOWEZXVicpOw=="></script> <!-- End Google Tag Manager --> <!-- DO NOT COPY THIS SNIPPET! Start of Page Analytics Tracking for HubSpot WordPress plugin v11.1.65--> <script class="hsq-set-content-id" data-content-id="blog-post"> var _hsq = _hsq || []; _hsq.push(["setContentType", "blog-post"]); </script> <!-- DO NOT COPY THIS SNIPPET! End of Page Analytics Tracking for HubSpot WordPress plugin --> <link rel="icon" href="https://www.cncf.io/wp-content/themes/cncf-twenty-two/images/favicon.ico" sizes="any"> <link rel="icon" href="https://www.cncf.io/wp-content/themes/cncf-twenty-two/images/favicon.svg" sizes="any" type="image/svg+xml"> <link rel="apple-touch-icon" href="https://www.cncf.io/wp-content/themes/cncf-twenty-two/images/apple-touch-icon.png"> <link rel="manifest" href="https://www.cncf.io/wp-content/themes/cncf-twenty-two/images/manifest.webmanifest"> <meta name="theme-color" content="#000000"> <meta http-equiv="X-UA-Compatible" content="IE=edge"><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"NRJS-97e2229449e282c1bef",applicationID:"643908501"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);var r=g(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={840:0,374:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script> <style> html { visibility: hidden; } </style> </head> <body class="post-template-default single single-post postid-120908 single-format-standard wp-embed-responsive"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KNXFWV" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <a class="skip-link" href="#maincontent">Skip to content</a> <a class="skip-link" href="https://www.cncf.io/accessibility-statement/">Accessibility help</a> <div class="hello-bar" role="banner" style="background-color: #0175e4; color: #ffffff"> <div class="container wrap"> <p>Meet us in Delhi for KubeCon + CloudNativeCon India · Dec 11-12 · <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-india/register/?utm_source=www&utm_medium=homepage&utm_campaign=KubeCon-India-2024&utm_content=hello-bar">REGISTER TODAY</a></p> </div> </div> <header class="header"> <div class="container wrap"> <div class="logo"> <a href="/" title="Cloud Native Computing Foundation"> <img loading="eager" src="https://www.cncf.io/wp-content/uploads/2023/04/cncf-main-site-logo.svg" width="210" height="40" alt="Cloud Native Computing Foundation"> </a> </div> <nav class="main-menu"> <ul class="main-menu__wrapper"> <li class="menu-item-has-children"> <a href="#"><span>About</span></a> <div class="sub-menu"> <div class="col-container"> <div class="col1"> <ul id="menu-about_01" class="menu"><li id="menu-item-71611" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71611 lf-menu-title">Discover CNCF</li> <li id="menu-item-112411" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112411"><a href="https://www.cncf.io/membership-hub/">Membership Hub<span class="lf-menu-description">Learn about all the benefits of being a CNCF Member</span></a></li> <li id="menu-item-71617" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71617"><a href="https://www.cncf.io/people/technical-oversight-committee/">Technical Oversight Committee<span class="lf-menu-description">The TOC defines CNCF’s technical vision and provides experienced technical leadership to the cloud native community</span></a></li> <li id="menu-item-71618" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71618"><a href="https://www.cncf.io/people/governing-board/">Governing Board<span class="lf-menu-description">The GB is responsible for marketing, business oversight, and budget decisions for CNCF</span></a></li> <li id="menu-item-102485" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-102485"><a href="https://www.cncf.io/people/end-user-technical-advisory-board/">End User Technical Advisory Board<span class="lf-menu-description">The End User TAB serves as the voice of the end users in CNCF community decisions</span></a></li> <li id="menu-item-72396" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72396"><a href="https://www.cncf.io/people/ambassadors/">Ambassadors<span class="lf-menu-description">Meet our Ambassadors—experienced practitioners passionate about helping others learn about cloud native technologies</span></a></li> </ul> </div> <div class="col2"> <ul id="menu-about_02" class="menu"><li id="menu-item-71619" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71619 lf-menu-title">Additional Info</li> <li id="menu-item-102486" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-102486"><a href="https://www.cncf.io/about/who-we-are/">Who We Are</a></li> <li id="menu-item-112412" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112412"><a href="https://www.cncf.io/about/members/">Member Listing</a></li> <li id="menu-item-74274" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-74274"><a href="https://www.cncf.io/conduct/">Code of Conduct</a></li> <li id="menu-item-118514" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-118514"><a href="https://www.cncf.io/policies/">Policies</a></li> <li id="menu-item-71620" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71620"><a href="https://www.cncf.io/people/staff/">Staff</a></li> <li id="menu-item-71621" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71621"><a href="https://www.cncf.io/about/faq/">FAQ</a></li> <li id="menu-item-71622" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71622"><a href="https://www.cncf.io/about/contact/">Contact Us</a></li> </ul> </div> <div class="col3"> <ul class="menu"> <li class="lf-menu-title">Featured Reads </li> </ul> <div class="columns-one"> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/reports/cncf-annual-report-2023/" title="CNCF Annual Report 2023" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-300x158.jpg 300w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-1024x538.jpg 1024w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-768x403.jpg 768w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-900x473.jpg 900w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-762x400.jpg 762w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2023/12/Annual-Report-2023_Share-Banner.jpg 1800w" sizes="(max-width: 200px) 100vw, 200px" alt="CNCF Annual Report 2023"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Annual category" href="https://www.cncf.io/reports/?_sft_lf-report-type=annual">Annual Report</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/reports/cncf-annual-report-2023/" title="CNCF Annual Report 2023">CNCF Annual Report 2023</a> </span> <span class="main-menu-item__date">January 23, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/reports/cncf-ecosystem-gaps/" title="CNCF Ecosystem Gaps" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Screenshot-2024-11-14-at-7.40.10 AM-1180x620.jpg 1180w" sizes="(max-width: 200px) 100vw, 200px" alt="CNCF Ecosystem Gaps"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Survey category" href="https://www.cncf.io/reports/?_sft_lf-report-type=survey">Survey Report</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/reports/cncf-ecosystem-gaps/" title="CNCF Ecosystem Gaps">CNCF Ecosystem Gaps</a> </span> <span class="main-menu-item__date">November 14, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper"> <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-india/" title="KubeCon + CloudNativeCon India 2024" class="main-menu-item__link main-menu-item__event"> <!-- event start --> <div class="main-menu-item__event-overlay" style="background-color: rgb(173, 20, 87) "> </div> <figure class="main-menu-item__event-bg-figure"> <img width="194" height="102" loading="lazy" class="main-menu-item__event-bg-image" src="https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/03/Screenshot-2024-11-06-at-10.37.21 AM-1180x620.jpg 1180w" sizes="(max-width: 200px) 100vw, 200px" alt="KubeCon + CloudNativeCon India 2024"> </figure> <div class="main-menu-item__event-content"> <div> <img loading="lazy" class="main-menu-item__event-logo" src="https://www.cncf.io/wp-content/uploads/2024/03/kc_cnc_india24_white.svg" alt="KubeCon + CloudNativeCon India 2024" width="414" height="177"> <h4><span class="main-menu-item__event-city">Delhi, India</span> </h4> </div> </div> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Events" href="https://www.cncf.io/events">Next Event</a> <span class="main-menu-item__title"> <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-india/" title="KubeCon + CloudNativeCon India 2024">KubeCon + CloudNativeCon India 2024</a> </span> <span class="main-menu-item__date"> December 11-12, 2024</span> </div> </div> </div> </div> </div> </div> </li> <li class="menu-item-has-children"><a href="#"><span>Projects</span></a> <div class="sub-menu"> <div class="col-container"> <div class="col1"> <ul id="menu-projects_01" class="menu"><li id="menu-item-71623" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71623 lf-menu-title">CNCF Projects</li> <li id="menu-item-71624" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71624"><a href="https://www.cncf.io/projects/">Graduated<span class="lf-menu-description">Projects considered stable, widely adopted, and production ready, attracting thousands of contributors</span></a></li> <li id="menu-item-71625" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71625"><a href="https://www.cncf.io/projects/">Incubating<span class="lf-menu-description">Projects used successfully in production by a small number users with a healthy pool of contributors</span></a></li> <li id="menu-item-71626" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71626"><a href="https://www.cncf.io/sandbox-projects/">Sandbox<span class="lf-menu-description">Experimental projects not yet widely tested in production on the bleeding edge of technology</span></a></li> <li id="menu-item-71627" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71627"><a href="https://www.cncf.io/archived-projects/">Archived<span class="lf-menu-description">Projects that have reached the end of their lifecycle and have become inactive</span></a></li> <li id="menu-item-94549" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-94549"><a href="https://www.cncf.io/project-metrics/">Project Metrics<span class="lf-menu-description">View metrics of CNCF projects moving through maturity levels</span></a></li> </ul> </div> <div class="col2"> <ul id="menu-projects_02" class="menu"><li id="menu-item-71628" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71628 lf-menu-title">Get Involved</li> <li id="menu-item-71629" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71629"><a href="https://contribute.cncf.io"><span class="lf-external-link">Contribute</span><span class="lf-menu-description">Join the 150K+ folx in #TeamCloudNative who’ve contributed their expertise to CNCF hosted projects</span></a></li> <li id="menu-item-103342" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-103342"><a href="https://contribute.cncf.io/resources/project-services/"><span class="lf-external-link">Services for CNCF Projects</span><span class="lf-menu-description">CNCF services for our open source projects – from marketing to legal services</span></a></li> <li id="menu-item-71632" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71632"><a href="https://landscape.cncf.io"><span class="lf-external-link">Cloud Native Landscape</span><span class="lf-menu-description">A comprehensive categorical overview of projects and product offerings in the cloud native space</span></a></li> <li id="menu-item-71631" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71631"><a href="/reports/?_sft_lf-report-type=project-journey">Project Journey Reports<span class="lf-menu-description">Showing how CNCF has impacted the progress and growth of various graduated projects</span></a></li> <li id="menu-item-71633" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71633"><a href="/project-tools/">Project Tools<span class="lf-menu-description">Quick links to tools and resources for your CNCF project</span></a></li> </ul> </div> <div class="col3"> <ul class="menu"> <li class="lf-menu-title">Latest Project Journey Reports </li> </ul> <div class="columns-one"> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/reports/cilium-project-journey-report/" title="Cilium Project Journey Report" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-300x158.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-1024x538.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-768x404.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-900x473.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-1800x946.jpg 1800w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-761x400.jpg 761w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Cilium-Project-Journey-1180x620.jpg 1180w" sizes="(max-width: 200px) 100vw, 200px" alt="Cilium Project Journey Report"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Project Journey category" href="https://www.cncf.io/reports/?_sft_lf-report-type=project-journey">Project Journey Report</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/reports/cilium-project-journey-report/" title="Cilium Project Journey Report">Cilium Project Journey Report</a> </span> <span class="main-menu-item__date">November 11, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/reports/etcd-project-journey-report/" title="etcd Project Journey Report" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-300x158.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-1024x538.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-768x404.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-900x473.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-380x200.jpg 380w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-761x400.jpg 761w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2024/09/etcd-Project-Journey-590x310-1.jpg 1229w" sizes="(max-width: 200px) 100vw, 200px" alt="etcd Project Journey Report"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Project Journey category" href="https://www.cncf.io/reports/?_sft_lf-report-type=project-journey">Project Journey Report</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/reports/etcd-project-journey-report/" title="etcd Project Journey Report">etcd Project Journey Report</a> </span> <span class="main-menu-item__date">September 25, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/reports/etcd-project-journey-report-jp/" title="etcd Project Journey Report – Japanese translation" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/10/etcd-pjr-jp1-1180x620.jpg 1180w" sizes="(max-width: 200px) 100vw, 200px" alt="etcd Project Journey Report – Japanese translation"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Project Journey category" href="https://www.cncf.io/reports/?_sft_lf-report-type=project-journey">Project Journey Report</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/reports/etcd-project-journey-report-jp/" title="etcd Project Journey Report – Japanese translation">etcd Project Journey Report – Japanese translation</a> </span> <span class="main-menu-item__date">September 25, 2024</span> </div> </div> </div> </div> </div> </div> </li> <li class="menu-item-has-children"><a href="#"><span>Training</span></a> <div class="sub-menu"> <div class="col-container"> <div class="col1"> <ul id="menu-certifications_01" class="menu"><li id="menu-item-71634" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71634 lf-menu-title">Become an expert</li> <li id="menu-item-97034" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97034"><a href="https://www.cncf.io/training/">Training Overview<span class="lf-menu-description">Find your path to cloud native success with training and certificates from the pioneer of cloud-native technology</span></a></li> <li id="menu-item-97032" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97032"><a href="https://www.cncf.io/training/certification/">Certifications<span class="lf-menu-description">Get certified by the only authoritative source for cloud-native certification accepted by industry</span></a></li> <li id="menu-item-97033" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97033"><a href="https://www.cncf.io/training/courses/">Courses<span class="lf-menu-description">Learn the basics of cloud native or train for a certification with training courses built in collaboration with the Linux Foundation</span></a></li> <li id="menu-item-104457" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-104457"><a href="https://www.cncf.io/training/kubestronaut/">Kubestronaut Program<span class="lf-menu-description">Uplevel your Kubernetes skills</span></a></li> </ul> </div> <div class="col2"> <ul id="menu-certifications_02" class="menu"><li id="menu-item-71638" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71638 lf-menu-title">Additional Resources</li> <li id="menu-item-71642" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71642"><a href="https://www.cncf.io/training/kubernetes-training-partners/">Kubernetes Training Partners<span class="lf-menu-description">Find a qualified KTP to prepare for your next certification</span></a></li> <li id="menu-item-104420" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-104420"><a href="https://www.cncf.io/training/cncf-endorsed-content/">CNCF Endorsed Content<span class="lf-menu-description">Training materials that match strict criteria</span></a></li> <li id="menu-item-71640" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71640"><a href="https://www.cncf.io/training/certification/software-conformance/">Certified Kubernetes<span class="lf-menu-description">Software conformance ensures your versions of CNCF projects support the required APIs</span></a></li> <li id="menu-item-72609" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72609"><a href="https://www.cncf.io/training/certification/cnf/">Cloud Native Network Function Certification (Beta)<span class="lf-menu-description">CNF Certification ensures applications demonstrate cloud native best practices</span></a></li> <li id="menu-item-71643" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71643"><a href="https://www.cncf.io/training/certification/kcsp/">Kubernetes Certified Service Provider<span class="lf-menu-description">KCSPs have deep experience helping enterprises successfully adopt cloud native technologies</span></a></li> </ul> </div> <div class="col3"> <ul class="menu"> <li class="lf-menu-title">Recommended Links </li> </ul> <div class="columns-one"> <div class="main-menu-item promotion-item"> <div class="main-menu-item__image-wrapper"> <a href="https://www.cncf.io/enduser/" title="Save $10K on Cloud Native" class="main-menu-item__link"> <img width="2048" height="1365" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k.jpg" srcset="https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k.jpg 2048w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-300x200.jpg 300w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-768x512.jpg 768w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-1024x683.jpg 1024w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-1536x1024.jpg 1536w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-900x600.jpg 900w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-1800x1200.jpg 1800w, https://www.cncf.io/wp-content/uploads/2022/05/45581516234_606446e424_k-600x400.jpg 600w" sizes="(max-width: 400px) 100vw, 400px" alt="Save $10K on Cloud Native"> </a> </div> <div class="main-menu-item__text-wrapper"> <span class="main-menu-item__title"> <a href="https://www.cncf.io/enduser/" title="Save $10K on Cloud Native">Save $10K on Cloud Native</a> </span> <p class="main-menu-item__body">Enroll your company as a CNCF End User and save more than $10K in training and conference costs</p> <p class="is-style-link-cta"><a href="https://www.cncf.io/enduser/">Become an End User</a></p> </div> </div> </div> </div> </div> </div> </li> <li class="menu-item-has-children"><a href="#"><span>Community</span></a> <div class="sub-menu"> <div class="col-container"> <div class="col1"> <ul id="menu-community_01" class="menu"><li id="menu-item-71644" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71644 lf-menu-title">Take Part</li> <li id="menu-item-71645" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71645"><a href="https://www.cncf.io/enduser/">End User Community<span class="lf-menu-description">Join our vendor-neutral community using cloud native technologies to build products and services</span></a></li> <li id="menu-item-71646" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71646"><a href="https://www.cncf.io/events/">Events<span class="lf-menu-description">Meet #TeamCloudNative and CNCF staff at events around the world</span></a></li> <li id="menu-item-71648" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71648"><a href="https://www.cncf.io/case-studies/">Case Studies<span class="lf-menu-description">Read real-world case studies about the impact cloud native projects are having on organizations around the world</span></a></li> <li id="menu-item-72634" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72634"><a href="https://www.cncf.io/humans-of-cloud-native/">Humans of Cloud Native<span class="lf-menu-description">Read stories of amazing individuals and their contributions</span></a></li> <li id="menu-item-120507" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-120507"><a href="https://www.cncf.io/heroes/">The Cloud Native Heroes Challenge<span class="lf-menu-description">Be a cloud native hero! Help us defeat patent trolls to earn swag and prizes</span></a></li> </ul> </div> <div class="col2"> <ul id="menu-community_02" class="menu"><li id="menu-item-71651" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71651 lf-menu-title">Community Content</li> <li id="menu-item-72395" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72395"><a href="https://www.cncf.io/online-programs/">Online Programs<span class="lf-menu-description">Watch our free online programs for the latest insights into cloud native technologies and projects</span></a></li> <li id="menu-item-71652" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71652"><a href="https://www.cncf.io/kubeweekly/">KubeWeekly<span class="lf-menu-description">Sign up for a weekly dose of all things Kubernetes, curated by #TeamCloudNative</span></a></li> <li id="menu-item-71653" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71653"><a href="https://community.cncf.io"><span class="lf-external-link">Community Groups</span><span class="lf-menu-description">Join #TeamCloudNative at events and meetups near you</span></a></li> <li id="menu-item-71654" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71654"><a href="https://www.cncf.io/phippy/">Phippy & Friends<span class="lf-menu-description">Phippy explains core cloud native concepts in simple terms through stories perfect for all ages</span></a></li> <li id="menu-item-71655" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71655"><a href="https://glossary.cncf.io"><span class="lf-external-link">Cloud Native Glossary</span><span class="lf-menu-description">Explore cloud native concepts in clear and simple language – no technical knowledge required!</span></a></li> </ul> </div> <div class="col3"> <ul id="menu-community_03" class="menu"><li id="menu-item-71656" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71656 lf-menu-title">Additional Resources</li> <li id="menu-item-71657" class="has-icon icon-job menu-item menu-item-type-custom menu-item-object-custom menu-item-71657"><a href="https://jobs.cncf.io"><span class="lf-external-link">Job Board</span></a></li> <li id="menu-item-71658" class="has-icon icon-slack menu-item menu-item-type-custom menu-item-object-custom menu-item-71658"><a href="https://slack.cncf.io/"><span class="lf-external-link">Slack</span></a></li> <li id="menu-item-71659" class="has-icon icon-mailing menu-item menu-item-type-custom menu-item-object-custom menu-item-71659"><a href="https://lists.cncf.io/g/main/subgroups"><span class="lf-external-link">Mailing Lists</span></a></li> <li id="menu-item-71660" class="has-icon icon-store menu-item menu-item-type-custom menu-item-object-custom menu-item-71660"><a href="https://store.cncf.io"><span class="lf-external-link">Store</span></a></li> <li id="menu-item-71661" class="has-icon icon-calendar menu-item menu-item-type-post_type menu-item-object-page menu-item-71661"><a href="https://www.cncf.io/calendar/">Calendar</a></li> </ul> </div> </div> </div> </li> <li class="menu-item-has-children"><a href="#"><span>Blog & News</span></a> <div class="sub-menu"> <div class="col-container"> <div class="col1"> <ul id="menu-blog_01" class="menu"><li id="menu-item-71662" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71662 lf-menu-title">All the news</li> <li id="menu-item-71663" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-71663"><a href="https://www.cncf.io/blog/">Blog<span class="lf-menu-description">Catch up on the latest happenings and technical insights from #TeamCloudNative</span></a></li> <li id="menu-item-71664" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-71664"><a href="https://www.cncf.io/announcements/">Announcements<span class="lf-menu-description">Media releases and official CNCF announcements</span></a></li> <li id="menu-item-71665" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-71665"><a href="https://www.cncf.io/news/">News<span class="lf-menu-description">CNCF projects and #TeamCloudNative in the media</span></a></li> <li id="menu-item-71666" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71666"><a href="https://www.cncf.io/reports/">Reports<span class="lf-menu-description">Read transparent, in-depth reports on our organization, events, and projects</span></a></li> </ul> </div> <div class="col2"> <ul id="menu-blog_02" class="menu"><li id="menu-item-71667" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71667 lf-menu-title">Media Resources</li> <li id="menu-item-75049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-75049"><a href="https://www.cncf.io/brand-guidelines/">Brand Guidelines</a></li> <li id="menu-item-71668" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71668"><a href="https://github.com/cncf/artwork"><span class="lf-external-link">Project Logos</span></a></li> <li id="menu-item-71669" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71669"><a href="https://www.youtube.com/c/cloudnativefdn"><span class="lf-external-link">Videos</span></a></li> <li id="menu-item-71670" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71670"><a href="https://www.flickr.com/photos/143247548@N03/albums/"><span class="lf-external-link">Pictures</span></a></li> </ul> </div> <div class="col3"> <ul class="menu"> <li class="lf-menu-title">Latest Blog Posts </li> </ul> <div class="columns-one"> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/blog/2024/11/22/open-source-spirit-elevating-team-collaboration-and-innovation/" title="Open source spirit: elevating team collaboration and innovation" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-194x102.png" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-194x102.png 194w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-300x157.png 300w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-1024x537.png 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-768x403.png 768w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-388x204.png 388w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-776x408.png 776w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-1552x816.png 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-900x472.png 900w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-381x200.png 381w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40.png 1650w" sizes="(max-width: 200px) 100vw, 200px" alt="Open source spirit: elevating team collaboration and innovation"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Ambassador category" href="https://www.cncf.io/blog?_sft_lf-author-category=ambassador">Ambassador Post</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/blog/2024/11/22/open-source-spirit-elevating-team-collaboration-and-innovation/" title="Open source spirit: elevating team collaboration and innovation">Open source spirit: elevating team collaboration and innovation</a> </span> <span class="main-menu-item__date">November 22, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/" title="Konveyor AI: supporting application modernization" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-300x157.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-1024x537.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-768x403.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-900x472.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-762x400.jpg 762w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Template-4-32.jpg 1650w" sizes="(max-width: 200px) 100vw, 200px" alt="Konveyor AI: supporting application modernization"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Member category" href="https://www.cncf.io/blog?_sft_lf-author-category=member">Member Post</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/blog/2024/11/22/konveyor-ai-supporting-application-modernization/" title="Konveyor AI: supporting application modernization">Konveyor AI: supporting application modernization</a> </span> <span class="main-menu-item__date">November 22, 2024</span> </div> </div> <div class="main-menu-item"> <div class="main-menu-item__image-wrapper not-sticky"> <a href="https://www.cncf.io/blog/2024/11/21/unlock-growth-and-talent-why-maintainers-should-mentor-with-cncf/" title="Unlock growth and talent: why maintainers should mentor with CNCF" class="main-menu-item__link"> <img width="194" height="102" loading="lazy" class="main-menu-item__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-194x102.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-300x157.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1024x537.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-768x403.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-900x472.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-762x400.jpg 762w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33.jpg 1650w" sizes="(max-width: 200px) 100vw, 200px" alt="Unlock growth and talent: why maintainers should mentor with CNCF"> </a> </div> <div class="main-menu-item__text-wrapper"> <a class="author-category" title="See more in Mentorship category" href="https://www.cncf.io/blog?_sft_lf-author-category=mentorship">Mentorship Post</a> <span class="main-menu-item__title"> <a href="https://www.cncf.io/blog/2024/11/21/unlock-growth-and-talent-why-maintainers-should-mentor-with-cncf/" title="Unlock growth and talent: why maintainers should mentor with CNCF">Unlock growth and talent: why maintainers should mentor with CNCF</a> </span> <span class="main-menu-item__date">November 21, 2024</span> </div> </div> </div> </div> </div> </div> </li> </ul> <div style="height:60px;" aria-hidden="true" class="wp-block-spacer show-upto-1000"> </div> <div class="header-cta"> <div class="wp-block-button"> <a href="https://www.cncf.io/about/join/" class="wp-block-button__link wp-element-button">Join</a> </div> </div> <div style="height:20px" aria-hidden="true" class="wp-block-spacer show-upto-1000"> </div> <!-- Button to open the search menu --> <button class="header__search_open search-toggle button-reset show-over-1000" type="button" aria-label="Search"> <svg fill="none" viewbox="0 0 29 27" width="29" height="27" xmlns="http://www.w3.org/2000/svg"><path d="M11.172 20.035c5.042 0 9.13-4.036 9.13-9.015s-4.088-9.015-9.13-9.015-9.129 4.036-9.129 9.015c0 4.98 4.087 9.015 9.13 9.015zm5.974-4.615L26.849 25" opacity=".893" stroke="#000" stroke-width="4"/></svg> </button> <div class="header__search_wrapper"> <div class="header__search_container"> <form class="search-form" method="get" autocomplete="off" action="https://www.cncf.io" role="search"> <label for="search-bar" class="screen-reader-text">Search CNCF</label> <input class="search-input" type="search" id="search-bar" value="" name="s" placeholder="I'm looking for..." title="Search CNCF site" autocapitalize="off" spellcheck="false" maxlength="98" required> <input class="search-input-button wp-block-button__link has-no-padding" type="submit" value="Search" /> </form> <div style="height:100px" aria-hidden="true" class="wp-block-spacer show-upto-1000"> </div> <button class="button-reset search-toggle show-over-1000" type="button" aria-label="Close"> <svg width="18" height="18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.999 2.001L2 16M2 2l13.999 13.999" stroke="#fff" stroke-width="3" stroke-linecap="round"/></svg> </button> </div> </div> </nav> <button class="hamburger" type="button" aria-label="Toggle Menu"> <span class="hamburger-box"> <span class="hamburger-inner"></span> </span> </button> </div> </header> <div class="skip-link-target" id="maincontent"></div> <header class="title-wrapper container wrap"> <div class="parent-link-align"> <a class="parent-link" href="https://www.cncf.io/blog/" title="See Blog posts">Blog</a> <div class="space-slash"> / </div> <span><a class="author-category" title="See Member posts" href="https://www.cncf.io/blog?_sft_lf-author-category=member"> Member Post </a></span> </div> <h1 class="is-style-post-title" itemprop="headline"> Konveyor AI: supporting application modernization </h1> </header> <main> <article class="container wrap post-content"> <div class="post-author"> <p class="post-author__date">Posted on November 22, 2024 <span class="post-author__author">by John Matthews, and Savitha Raghunathan</span> </p> </div> <p><em>Member post by <a href="https://www.linkedin.com/in/johnwmatthews/">John Matthews</a>, and <a href="https://www.linkedin.com/in/savitharaghunathan/">Savitha Raghunathan</a></em>, <em>Red Hat</em></p> <p>Migrating legacy software to modern platforms has long been a challenging endeavor for businesses. Companies often need to move decades-old systems to newer technologies without causing disruptions. <a href="https://www.konveyor.io/">Konveyor</a> is an open source project aimed at supporting enterprises with the modernization of their applications, especially in cloud-native environments. It provides a suite of tools and services that enable organizations to migrate and adapt their workloads to Kubernetes and cloud-native platforms. Now, with Konveyor AI (Kai), the focus expands to using AI-driven solutions to make the modernization journey even smoother and more efficient, and that is what we will explore in this blog post.</p> <h2 class="wp-block-heading"><strong>What Kai is and How It Works</strong></h2> <p><a href="https://github.com/konveyor/kai"><strong>Konveyor AI</strong></a>, or “<strong>Kai</strong>,” is aimed at assisting with these migrations. By applying Generative AI methods, Kai helps organizations seamlessly transition legacy codebases to modern platforms through tailored code suggestions.</p> <p>Kai uses the <a href="https://www.promptingguide.ai/techniques/rag">Retrieval Augmented Generation (RAG) approach</a>, combining two sources of intelligence: static code analysis and past migration examples within an organization. This enables Kai to offer highly relevant code suggestions based on how similar migration challenges have been tackled before, avoiding the need for extensive AI retraining.</p> <ol class="wp-block-list"> <li><strong>Static Code Analysis</strong>: This data is provided by <a href="https://github.com/konveyor/analyzer-lsp"><strong>analyzer-lsp</strong></a>, which performs a detailed analysis of a codebase to identify parts of the code that need updating.</li> <li><strong>Solved Examples</strong>: These are prior solutions to similar migration issues that have already been encountered and resolved by the organization. Kai incorporates these examples to provide context for its code suggestions.</li> <li><strong>Model Agnostic</strong>: Kai follows the “Bring Your Own Model” approach. It allows organizations to use their preferred LLMs, ensuring flexibility and adaptability. </li> </ol> <p>By combining these data sources, Kai can generate context-aware suggestions that help developers modernize their applications while staying consistent with how their organization typically solves problems.</p> <h2 class="wp-block-heading"><strong>The Workflow: Step-by-Step</strong></h2> <p>Kai’s workflow integrates seamlessly into the development process:</p> <ol class="wp-block-list"> <li><strong>Static Code Analysis</strong>: The tool starts by running <strong>analyzer-lsp</strong> on the codebase, identifying specific migration issues based on predefined or custom rulesets.</li> <li><strong>Locate Solved Examples</strong>: Kai searches through the organization’s codebase to find prior instances where similar issues have already been solved.</li> <li><strong>Generate Code Suggestions</strong>: Using the static analysis data and the relevant solved examples, the LLM creates suggestions for how to resolve the migration issues.</li> <li><strong>Display in IDE</strong>: The generated code suggestions are surfaced in the developer’s <strong>IDE</strong> (Integrated Development Environment), allowing them to implement the changes directly.</li> </ol> <p>This process allows developers to efficiently address migration issues without having to manually comb through old projects or reinvent solutions from scratch.</p> <figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1600" height="914" src="https://www.cncf.io/wp-content/uploads/2024/11/migrator1.jpg" alt="migrator grid" class="wp-image-121242" srcset="https://www.cncf.io/wp-content/uploads/2024/11/migrator1.jpg 1600w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-300x171.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-1024x585.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-768x439.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-900x514.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-350x200.jpg 350w, https://www.cncf.io/wp-content/uploads/2024/11/migrator1-700x400.jpg 700w" sizes="(max-width: 1600px) 100vw, 1600px" /></figure> <p>To better understand how Kai works, we put together <a href="https://github.com/konveyor/kai/blob/main/docs/scenarios/demo.md">a Kai demo</a>, where we showcase its capabilities in facilitating the modernization of application source code to a new target. We focus on how Kai can handle various levels of migration complexity, ranging from simple import swaps to more involved changes such as modifying scope from CDI bean requirements. Additionally, we look into migration scenarios that involve EJB Remote and Message Driven Bean(MBD) changes. We also concentrate on migrating a partially migrated JavaEE Coolstore application to Quarkus, a task that involves not only technical translation but also considerations for deployment to Kubernetes.</p> <h2 class="wp-block-heading"><strong>Addressing Key LLM Challenges with Kai</strong></h2> <p>Kai is designed to address several key challenges that are common in large-scale modernization projects leveraging generative AI.</p> <h3 class="wp-block-heading"><strong>1. Handling Limited Context in LLMs</strong></h3> <p>LLMs can only process a limited amount of data at a time, referred to as their context size. Since most legacy codebases are too large to be processed in a single request, Kai uses the results from <strong>static code analysis</strong> to narrow down the problem to specific areas of the code that need attention. This helps to avoid overwhelming the LLM and ensures that it remains focused on solving manageable, well-defined issues.</p> <h3 class="wp-block-heading"><strong>2. Cascading Changes Across a Repository</strong></h3> <p>One of the challenges in application modernization is dealing with changes that affect multiple files across a repository. For example, changing a method’s signature may require updates in other files that call that method. While Kai currently focuses on file-specific changes, future iterations will tackle repository-wide changes, drawing inspiration from Microsoft’s CodePlan research which will allow Kai to propagate changes automatically across related files.</p> <h3 class="wp-block-heading"><strong>3. Customize code suggestions to an organization’s past behavior</strong></h3> <p>Many organizations use custom frameworks and technologies that are not widely known or supported by existing AI models. Kai addresses this by incorporating examples of how an organization has handled similar migration problems in the past. This <a href="https://www.promptingguide.ai/techniques/fewshot"><strong>few-shot prompting</strong></a> technique provides the LLM with additional context to help it generate relevant code suggestions, even when dealing with proprietary or unfamiliar frameworks.</p> <h3 class="wp-block-heading"><strong>4. Adapting to Rapidly Changing LLM Capabilities</strong></h3> <p>Kai is designed to be <strong>model agnostic</strong>. As LLMs continue to evolve, Kai remains adaptable, allowing organizations to switch between different models as needed, whether using public, private, or local AI services.</p> <h3 class="wp-block-heading"><strong>5. Iterating on Code Suggestions</strong></h3> <p>Kai includes an <strong>agent</strong> that iteratively refines code suggestions by checking the validity of the initial output and providing feedback to the LLM. This iterative process helps improve the quality of the final code solution, ensuring that it addresses the problem effectively.</p> <h2 class="wp-block-heading"><strong>Next Steps for Kai</strong></h2> <p>Maintainers of Kai are actively working on development, with a heavy focus on addressing cascading changes across large codebases and improving the IDE experience. We regularly produce early <a href="https://github.com/konveyor/kai/blob/main/docs/evaluation_builds.md">evaluation builds</a> that adopters can test and use.</p> <h2 class="wp-block-heading"><strong>How to Get Involved</strong></h2> <p>For those interested in contributing to Kai or learning more about its development, there are several ways you can get involved:</p> <ul class="wp-block-list"> <li>Join the<a href="https://github.com/konveyor/community"> Konveyor community</a>’s monthly calls to stay updated on the project’s progress.</li> <li>Contribute to the <strong>Kai</strong> GitHub repository:<a href="https://github.com/konveyor/kai"> https://github.com/konveyor/kai</a>.</li> <li>Engage with the developers and community members via <a href="https://communityinviter.com/apps/kubernetes/community"><strong>Kubernetes Slack</strong></a> workspace in the <a href="https://kubernetes.slack.com/archives/CR85S82A2">#konveyor</a> channel.</li> </ul> <p><strong>Konveyor AI</strong> aims to provide practical, efficient support for application modernization. By leveraging <strong>static code analysis</strong> and prior <strong>solved examples</strong>, it offers code suggestions that can help organizations migrate their legacy codebases without having to rebuild solutions from the ground up. With a flexible and adaptable design, Kai is poised to assist companies in meeting their modernization goals, regardless of the technology stack or the size of the codebase.</p> <div style="height:80px" aria-hidden="true" class="wp-block-spacer is-style-80-120"> </div> <div class="social-share"> <p class="social-share__title">Share</p> <div class="social-share__wrapper"> <!-- linkedin --> <a aria-label="Share on Linkedin" title="Share on Linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.cncf.io%2Fblog%2F2024%2F11%2F22%2Fkonveyor-ai-supporting-application-modernization%2F&summary=Konveyor%20AI%3A%20supporting%20application%20modernization"><svg width="30" height="31" viewbox="0 0 30 31" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M27.758.456a2.193 2.193 0 0 1 2.204 1.804c.017.11.026.22.026.332v25.705a2.132 2.132 0 0 1-2.033 2.125H2.243c-1.066 0-1.875-.571-2.154-1.537A2.318 2.318 0 0 1 0 28.253V2.632A2.123 2.123 0 0 1 2.135.465C3.16.453 23.5.473 27.758.455ZM15.992 13.62v-1.624c0-.248-.06-.342-.328-.337-1.226.014-2.451.014-3.675 0-.293 0-.361.09-.359.368V25.69c0 .279.07.377.36.372 1.274-.012 2.546-.012 3.817 0 .284 0 .363-.082.361-.367-.01-2.292-.01-4.583 0-6.874a8.238 8.238 0 0 1 .117-1.42c.171-.968.614-1.755 1.64-2.012.328-.072.663-.103.998-.092 1.033.014 1.713.513 1.945 1.518a8.46 8.46 0 0 1 .192 1.802c.02 2.357.012 4.714 0 7.07 0 .272.07.38.36.375 1.272-.012 2.544-.012 3.817 0 .272 0 .35-.084.347-.354v-7.602a13.265 13.265 0 0 0-.29-3.088c-.326-1.384-.966-2.565-2.33-3.177a6.232 6.232 0 0 0-4.216-.35c-1.16.306-2.053 1.03-2.756 2.129Zm-7.075 5.217v-6.843c0-.253-.07-.338-.333-.335-1.288.012-2.578.012-3.87 0-.253 0-.335.065-.333.328V25.73c0 .274.101.33.343.33H8.54c.372 0 .375 0 .375-.375l.002-6.848Zm-2.26-9.095A2.603 2.603 0 1 0 4.05 7.165a2.577 2.577 0 0 0 2.605 2.577h.002Z" fill="currentColor"/></svg></a> <!-- facebook --> <a aria-label="Share on Facebook" title="Share on Facebook" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.cncf.io%2Fblog%2F2024%2F11%2F22%2Fkonveyor-ai-supporting-application-modernization%2F&t=Konveyor%20AI%3A%20supporting%20application%20modernization"><svg xmlns="http://www.w3.org/2000/svg" viewbox="-0.51 -0.26 26.45 26.45" aria-label="Facebook"><path fill="currentColor" d="M25.497 13.075c0-2.45-.698-4.848-2.011-6.911a12.765 12.765 0 0 0-5.398-4.73A12.671 12.671 0 0 0 11.008.38a12.705 12.705 0 0 0-6.529 2.95A12.827 12.827 0 0 0 .563 9.358a12.896 12.896 0 0 0-.07 7.201 12.831 12.831 0 0 0 3.801 6.103 12.709 12.709 0 0 0 6.471 3.078v-8.957H7.53v-3.708h3.235v-2.824c0-3.213 1.903-4.988 4.813-4.988.956.014 1.909.097 2.852.25V8.67h-1.607a1.83 1.83 0 0 0-1.518.497 1.854 1.854 0 0 0-.561 1.505v2.404h3.535l-.563 3.708h-2.97v8.957a12.725 12.725 0 0 0 7.697-4.337 12.87 12.87 0 0 0 3.054-8.328z"/></svg></a> <!-- x --> <a aria-label="Share on X" title="Share on X" href="https://x.com/intent/tweet?text=Konveyor%20AI%3A%20supporting%20application%20modernization&url=https%3A%2F%2Fwww.cncf.io%2Fblog%2F2024%2F11%2F22%2Fkonveyor-ai-supporting-application-modernization%2F&hashtags=cncf&via=CloudNativeFDN"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 300 300" aria-label="X"><path fill="currentColor" d="M178.57 127.15 290.27 0h-26.46l-97.03 110.38L89.34 0H0l117.13 166.93L0 300.25h26.46l102.4-116.59 81.8 116.59h89.34M36.01 19.54H76.66l187.13 262.13h-40.66"/></svg> </a> <!-- sendto email --> <a aria-label="Share by Email" title="Share by Email" href="mailto:?subject=Konveyor%20AI%3A%20supporting%20application%20modernization&body=https%3A%2F%2Fwww.cncf.io%2Fblog%2F2024%2F11%2F22%2Fkonveyor-ai-supporting-application-modernization%2F"><svg fill="transparent" viewbox=".16 -.47 30.88 25.5" xmlns="http://www.w3.org/2000/svg" aria-label="Email"><g stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"><path d="m4.97 1.675h21.315a2.672 2.672 0 0 1 2.665 2.664v15.987c0 1.466-1.2 2.665-2.665 2.665h-21.315a2.672 2.672 0 0 1 -2.664-2.665v-15.986a2.672 2.672 0 0 1 2.664-2.664z"/><path d="m28.95 4.34-13.323 9.326-13.322-9.326"/></g></svg></a> </div> </div> <div style="height:80px" aria-hidden="true" class="wp-block-spacer is-style-80-120"> </div> </article> <aside class="container wrap"> <div class="event-banner has-animation-scale-2" role="banner"> <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-india/" title="KubeCon + CloudNativeCon India 2024"> <picture> <source media="(max-width: 499px)" srcset="https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-mobile.jpg"> <source media="(min-width: 500px)" srcset="https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop.jpg"> <img width="2400" height="840" loading="lazy" class="" src="https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop.jpg 2400w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-300x105.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-1024x358.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-768x269.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-900x315.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-1800x630.jpg 1800w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-571x200.jpg 571w, https://www.cncf.io/wp-content/uploads/2024/03/kccnc-india-2024-desktop-1143x400.jpg 1143w" sizes="(max-width: 1200px) 100vw, 1200px" alt="KubeCon + CloudNativeCon India 2024"> </picture> </a> </div> <div style="height:100px" aria-hidden="true" class="wp-block-spacer is-style-60-100"></div> <h2>The latest from our blog</h2> <div style="height:60px" aria-hidden="true" class="wp-block-spacer"> </div> <div class="columns-three"> <div class="news-item-vertical not-sticky has-animation-scale-2"> <a href="https://www.cncf.io/blog/2024/11/22/open-source-spirit-elevating-team-collaboration-and-innovation/" class="news-item-vertical__link" title="Open source spirit: elevating team collaboration and innovation"> <img width="388" height="204" loading="lazy" class="news-item-vertical__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-388x204.png" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-388x204.png 388w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-300x157.png 300w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-1024x537.png 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-768x403.png 768w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-194x102.png 194w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-776x408.png 776w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-1552x816.png 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-900x472.png 900w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40-381x200.png 381w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-2-40.png 1650w" sizes="(max-width: 400px) 100vw, 400px" alt=""> <h3 class="news-item-vertical__title">Open source spirit: elevating team collaboration and innovation</h3> </a> <span class="news-item-vertical__date">November 22, 2024</span> </div> <div class="news-item-vertical not-sticky has-animation-scale-2"> <a href="https://www.cncf.io/blog/2024/11/21/unlock-growth-and-talent-why-maintainers-should-mentor-with-cncf/" class="news-item-vertical__link" title="Unlock growth and talent: why maintainers should mentor with CNCF"> <img width="388" height="204" loading="lazy" class="news-item-vertical__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-388x204.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-300x157.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1024x537.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-768x403.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-900x472.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-762x400.jpg 762w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2024/11/Single-Card-33.jpg 1650w" sizes="(max-width: 400px) 100vw, 400px" alt=""> <h3 class="news-item-vertical__title">Unlock growth and talent: why maintainers should mentor with CNCF</h3> </a> <span class="news-item-vertical__date">November 21, 2024</span> </div> <div class="news-item-vertical not-sticky has-animation-scale-2"> <a href="https://www.cncf.io/blog/2024/11/21/how-fastly-used-kubernetes-to-scale-our-platform-engineering-practice/" class="news-item-vertical__link" title="How Fastly used Kubernetes to scale our platform engineering practice"> <img width="388" height="204" loading="lazy" class="news-item-vertical__image" src="https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-388x204.jpg" srcset="https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-388x204.jpg 388w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-300x157.jpg 300w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-1024x537.jpg 1024w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-768x403.jpg 768w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-194x102.jpg 194w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-776x408.jpg 776w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-1552x816.jpg 1552w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-900x472.jpg 900w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-381x200.jpg 381w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-762x400.jpg 762w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-590x310.jpg 590w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30-1180x620.jpg 1180w, https://www.cncf.io/wp-content/uploads/2024/11/Copy-of-Single-Card-3-30.jpg 1650w" sizes="(max-width: 400px) 100vw, 400px" alt=""> <h3 class="news-item-vertical__title">How Fastly used Kubernetes to scale our platform engineering practice</h3> </a> <span class="news-item-vertical__date">November 21, 2024</span> </div> </div> <div style="height:80px" aria-hidden="true" class="wp-block-spacer is-style-80-120"> </div> </aside> </main> <footer class="footer"> <div class="container wrap footer_container" id="inner-footer-container"> <div style="height:70px" aria-hidden="true" class="wp-block-spacer is-style-70-100"></div> <div class="newsletter" id="newsletter"> <p class="newsletter__title is-style-max-width-800"><strong>Subscribe</strong> for updates, event info, webinars, and the latest community news</p> <div style="height:60px" aria-hidden="true" class="wp-block-spacer is-style-20-60"></div> <script> window.hsFormsOnReady = window.hsFormsOnReady || []; window.hsFormsOnReady.push(()=>{ hbspt.forms.create({ portalId: 8112310, formId: "be1b038f-98de-43b5-b211-d5f7bf6510c9", target: "#hbspt-form-1732391139000-6881488522", region: "", })}); </script> <div class="hbspt-form" id="hbspt-form-1732391139000-6881488522"></div> <div style="height:30px" aria-hidden="true" class="wp-block-spacer is-style-30-40"></div> <p class="newsletter__privacy">By submitting this form, I consent to receive marketing emails from the LF and its projects regarding their events, training, research, developments, and related announcements. I understand that I can unsubscribe at any time using the links in the footers of the emails I receive. <a href="https://www.linuxfoundation.org/privacy/">Privacy Policy</a>.</p> <div style="height:60px" aria-hidden="true" class="wp-block-spacer is-style-30-60"></div> </div> <div class="horizontal-rule"></div> <div style="height:60px" aria-hidden="true" class="wp-block-spacer is-style-40-60"></div> <div class="lf-grid"> <nav class="width-10/12"> <div class="menu-footer_01-container"><ul id="menu-footer_01" class="menu"><li id="menu-item-71671" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71671 lf-menu-title">About Us</li> <li id="menu-item-112413" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112413"><a href="https://www.cncf.io/membership-hub/">Membership Hub</a></li> <li id="menu-item-71674" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71674"><a href="https://www.cncf.io/people/technical-oversight-committee/">Technical Oversight Committee</a></li> <li id="menu-item-71675" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71675"><a href="https://www.cncf.io/people/governing-board/">Governing Board</a></li> <li id="menu-item-102487" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-102487"><a href="https://www.cncf.io/people/end-user-technical-advisory-board/">End User TAB</a></li> <li id="menu-item-72638" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72638"><a href="https://www.cncf.io/people/ambassadors/">Ambassadors</a></li> <li id="menu-item-71722" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71722"><div class="lf-menu-divider"></div></li> <li id="menu-item-71672" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71672"><a href="https://www.cncf.io/about/who-we-are/">Who We Are</a></li> <li id="menu-item-71673" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71673"><a href="https://www.cncf.io/about/members/">Member Listing</a></li> <li id="menu-item-74275" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-74275"><a href="https://www.cncf.io/conduct/">Code of Conduct</a></li> <li id="menu-item-118515" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-118515"><a href="https://www.cncf.io/policies/">Policies</a></li> <li id="menu-item-71676" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71676"><a href="https://www.cncf.io/people/staff/">Staff</a></li> <li id="menu-item-71677" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71677"><a href="https://www.cncf.io/about/faq/">FAQ</a></li> <li id="menu-item-71678" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71678"><a href="https://www.cncf.io/about/contact/">Contact Us</a></li> </ul></div><div class="menu-footer_02-container"><ul id="menu-footer_02" class="menu"><li id="menu-item-71679" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71679 lf-menu-title">Projects</li> <li id="menu-item-71680" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71680"><a href="https://contribute.cncf.io"><span class="lf-external-link">Contribute</span></a></li> <li id="menu-item-103343" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-103343"><a href="https://contribute.cncf.io/resources/project-services/"><span class="lf-external-link">Services for CNCF Projects</span></a></li> <li id="menu-item-71682" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71682"><a href="https://landscape.cncf.io"><span class="lf-external-link">Cloud Native Landscape</span></a></li> <li id="menu-item-71724" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71724"><a href="https://www.cncf.io/reports/?_sft_lf-report-type=project-journey">Project Journey Reports</a></li> <li id="menu-item-72639" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72639"><a href="https://www.cncf.io/project-tools/">Project Tools</a></li> <li id="menu-item-71723" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71723"><div class="lf-menu-divider"></div></li> <li id="menu-item-71684" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71684"><a href="https://www.cncf.io/projects/">Graduated</a></li> <li id="menu-item-71685" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71685"><a href="https://www.cncf.io/projects/">Incubating</a></li> <li id="menu-item-71686" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71686"><a href="https://www.cncf.io/sandbox-projects/">Sandbox</a></li> <li id="menu-item-71687" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71687"><a href="https://www.cncf.io/archived-projects/">Archive</a></li> <li id="menu-item-94550" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-94550"><a href="https://www.cncf.io/project-metrics/">Project Metrics</a></li> </ul></div><div class="menu-footer_03-container"><ul id="menu-footer_03" class="menu"><li id="menu-item-71688" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71688 lf-menu-title">Training</li> <li id="menu-item-97055" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97055"><a href="https://www.cncf.io/training/">Training Overview</a></li> <li id="menu-item-97053" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97053"><a href="https://www.cncf.io/training/certification/">Certifications</a></li> <li id="menu-item-97054" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-97054"><a href="https://www.cncf.io/training/courses/">Courses</a></li> <li id="menu-item-104458" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-104458"><a href="https://www.cncf.io/training/kubestronaut/">Kubestronaut Program</a></li> <li id="menu-item-71725" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71725"><div class="lf-menu-divider"></div></li> <li id="menu-item-71691" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71691"><a href="https://www.cncf.io/training/kubernetes-training-partners/">KTP</a></li> <li id="menu-item-104421" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-104421"><a href="https://www.cncf.io/training/cncf-endorsed-content/">CNCF Endorsed Content</a></li> <li id="menu-item-71689" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71689"><a href="https://www.cncf.io/training/certification/software-conformance/">Certified Kubernetes</a></li> <li id="menu-item-72642" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72642"><a href="https://www.cncf.io/training/certification/cnf/">CNF</a></li> <li id="menu-item-72641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72641"><a href="https://www.cncf.io/training/certification/kcsp/">KCSP</a></li> </ul></div><div class="menu-footer_04-container"><ul id="menu-footer_04" class="menu"><li id="menu-item-71697" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71697 lf-menu-title">Community</li> <li id="menu-item-71698" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71698"><a href="https://www.cncf.io/enduser/">End User Community</a></li> <li id="menu-item-71699" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71699"><a href="https://www.cncf.io/events/">Events We’ll Be At</a></li> <li id="menu-item-71701" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71701"><a href="https://www.cncf.io/case-studies/">Case Studies</a></li> <li id="menu-item-72643" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72643"><a href="https://www.cncf.io/humans-of-cloud-native/">Humans of Cloud Native</a></li> <li id="menu-item-120508" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-120508"><a href="https://www.cncf.io/heroes/">The Cloud Native Heroes Challenge</a></li> <li id="menu-item-71726" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71726"><div class="lf-menu-divider"></div></li> <li id="menu-item-71700" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71700"><a href="https://www.cncf.io/online-programs/">Online Programs</a></li> <li id="menu-item-71704" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71704"><a href="https://www.cncf.io/kubeweekly/">KubeWeekly</a></li> <li id="menu-item-71705" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71705"><a href="https://community.cncf.io"><span class="lf-external-link">Community Groups</span></a></li> <li id="menu-item-71706" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71706"><a href="https://www.cncf.io/phippy/">Phippy & Friends</a></li> <li id="menu-item-71707" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71707"><a href="https://glossary.cncf.io"><span class="lf-external-link">Cloud Native Glossary</span></a></li> <li id="menu-item-71727" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71727"><div class="lf-menu-divider"></div></li> <li id="menu-item-71708" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71708"><a href="https://jobs.cncf.io"><span class="lf-external-link">Job Board</span></a></li> <li id="menu-item-71709" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71709"><a href="https://slack.cncf.io/"><span class="lf-external-link">Slack</span></a></li> <li id="menu-item-71710" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71710"><a href="https://lists.cncf.io/g/main/subgroups"><span class="lf-external-link">Mailing Lists</span></a></li> <li id="menu-item-71711" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71711"><a href="https://store.cncf.io"><span class="lf-external-link">Store</span></a></li> <li id="menu-item-71712" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71712"><a href="https://www.cncf.io/calendar/">Calendar</a></li> </ul></div><div class="menu-footer_05-container"><ul id="menu-footer_05" class="menu"><li id="menu-item-71713" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71713 lf-menu-title">Blog & News</li> <li id="menu-item-71714" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-71714"><a href="https://www.cncf.io/blog/">Blog</a></li> <li id="menu-item-71715" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-71715"><a href="https://www.cncf.io/announcements/">Announcements</a></li> <li id="menu-item-71716" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-71716"><a href="https://www.cncf.io/news/">News</a></li> <li id="menu-item-71717" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71717"><a href="https://www.cncf.io/reports/">Reports</a></li> <li id="menu-item-71728" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71728"><div class="lf-menu-divider"></div></li> <li id="menu-item-75050" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-75050"><a href="https://www.cncf.io/brand-guidelines/">Brand Guidelines</a></li> <li id="menu-item-71719" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71719"><a href="https://github.com/cncf/artwork"><span class="lf-external-link">Project Logos</span></a></li> <li id="menu-item-71720" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71720"><a href="https://www.youtube.com/c/cloudnativefdn"><span class="lf-external-link">Videos</span></a></li> <li id="menu-item-71721" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-71721"><a href="https://www.flickr.com/photos/143247548@N03/albums/"><span class="lf-external-link">Pictures</span></a></li> </ul></div> </nav> <div class="footer__cta"> <a href="https://www.cncf.io/about/join/" class="wp-block-button__link has-no-padding">Join Now</a> </div> </div> <div style="height:80px" aria-hidden="true" class="wp-block-spacer is-style-30-80"></div> <div class="lf-grid"> <div class="footer__logo-and-hub"> <a class="footer__logo show-over-1000" href="/" title="Cloud Native Computing Foundation"> <img src="https://www.cncf.io/wp-content/uploads/2022/05/CNCF_logo_white.svg" loading="lazy" width="210" height="40" alt="Cloud Native Computing Foundation"> </a> <!-- All CNCF button --> <div class="footer__hub wp-block-buttons"> <div class="wp-block-button"><a href="https://www.cncf.io/all-cncf/" class="wp-block-button__link wp-element-button">All CNCF Sites</a></div> </div> </div> <ul class="social-links"> <li class="social-twitter"><a title="Cloud Native Computing Foundation on X" href="https://twitter.com/cloudnativefdn"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 300 300" aria-label="X"><path fill="currentColor" d="M178.57 127.15 290.27 0h-26.46l-97.03 110.38L89.34 0H0l117.13 166.93L0 300.25h26.46l102.4-116.59 81.8 116.59h89.34M36.01 19.54H76.66l187.13 262.13h-40.66"/></svg> </a></li> <li class="social-github"><a title="Cloud Native Computing Foundation on Github" href="https://github.com/cncf"><svg xmlns="http://www.w3.org/2000/svg" viewbox="-0.1 0.21 24.7 24.14" aria-label="GitHub"><path fill="currentColor" d="M24.188 12.63A11.893 11.893 0 0 0 3.887 4.221a11.893 11.893 0 0 0-1.272 15.317 11.899 11.899 0 0 0 5.81 4.34 1.14 1.14 0 0 0 .612-.885c0-.654-.014-2.337-.014-2.337-.415.061-.834.09-1.253.088a2.692 2.692 0 0 1-2.722-1.837 3.22 3.22 0 0 0-1.336-1.585c-.308-.198-.379-.431-.023-.498 1.643-.308 2.064 1.853 3.16 2.198.76.236 1.58.17 2.293-.183.1-.614.44-1.165.943-1.531-2.791-.267-4.446-1.232-5.304-2.781l-.092-.174-.216-.492-.064-.176a8.34 8.34 0 0 1-.386-2.694A4.596 4.596 0 0 1 5.334 7.58a4.765 4.765 0 0 1 .207-3.43s1.208-.248 3.492 1.378c1.237-.528 4.538-.571 6.1-.117.957-.63 2.71-1.524 3.417-1.274.193.307.604 1.2.25 3.164a5.523 5.523 0 0 1 1.493 3.942 10.198 10.198 0 0 1-.305 2.444l-.103.349s-.06.165-.123.322l-.075.173c-.828 1.809-2.527 2.484-5.274 2.766.89.557 1.144 1.256 1.144 3.146s-.025 2.144-.02 2.578a1.199 1.199 0 0 0 .59.87 11.9 11.9 0 0 0 8.06-11.26z"/></svg></a></li> <li class="social-linkedin"><a title="Cloud Native Computing Foundation on LinkedIn" href="https://www.linkedin.com/company/cloud-native-computing-foundation/"><svg xmlns="http://www.w3.org/2000/svg" viewbox="-10.23 -10.23 531.96 531.96" aria-label="LinkedIn"><rect width="512" height="512" rx="0" fill="currentColor"/><circle fill="#000" cx="142" cy="138" r="37"/><path stroke="#000" stroke-width="66" d="M244 194v198M142 194v198"/><path fill="#000" d="M276 282c0-20 13-40 36-40 24 0 33 18 33 45v105h66V279c0-61-32-89-76-89-34 0-51 19-59 32"/></svg></a></li> <li class="social-instagram"><a title="Cloud Native Computing Foundation on Instagram" href="https://www.instagram.com/cloudnativecomputingfoundation/"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m12 0c-3.26 0-3.667.015-4.947.072-1.278.06-2.148.261-2.913.558-.789.306-1.459.717-2.126 1.384s-1.079 1.336-1.384 2.126c-.297.765-.499 1.635-.558 2.913-.06 1.28-.072 1.687-.072 4.947s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558 1.28.06 1.687.072 4.947.072s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126-.667-.667-1.335-1.079-2.126-1.384-.765-.297-1.636-.499-2.913-.558-1.28-.06-1.687-.072-4.947-.072zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zm0 10.162c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44s.646-1.439 1.44-1.439c.793-.001 1.44.645 1.44 1.439z"/></svg></a></li> <li class="social-wechat"><a title="Cloud Native Computing Foundation on WeChat" href="https://www.cncf.io/wechat/"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0.14 -0.17 38.02 33.02" aria-label="Wechat"><path fill="currentColor" d="M26.289 10.976a12.972 12.972 0 0 0-8.742 3.53 10.386 10.386 0 0 0-3.224 8.795c-1.326-.164-2.535-.345-3.75-.448a2.332 2.332 0 0 0-1.273.216c-1.18.666-2.311 1.418-3.652 2.255.246-1.112.405-2.087.687-3.024a1.15 1.15 0 0 0-.523-1.52C1.737 17.902.02 13.601 1.307 9.165c1.189-4.1 4.11-6.587 8.077-7.884A13.54 13.54 0 0 1 24.18 5.617a10.135 10.135 0 0 1 2.109 5.359zM10.668 9.594a1.564 1.564 0 0 0-2.095-1.472 1.52 1.52 0 0 0-.895 1.964 1.502 1.502 0 0 0 1.391.966 1.545 1.545 0 0 0 1.598-1.46v.002zm8.15-1.566a1.567 1.567 0 0 0-1.528 1.543 1.528 1.528 0 0 0 1.571 1.492 1.52 1.52 0 0 0 1.375-2.117 1.518 1.518 0 0 0-1.415-.919l-.003.001z"/><path fill="currentColor" d="M33.914 32.137c-1.075-.478-2.062-1.196-3.11-1.306-1.049-.11-2.145.494-3.24.605a10.821 10.821 0 0 1-8.781-2.864c-4.682-4.33-4.013-10.97 1.403-14.518 4.811-3.154 11.874-2.102 15.268 2.273a8.671 8.671 0 0 1-1.002 12.095c-1.046.929-1.422 1.693-.751 2.917.102.257.174.525.213.798zM21.68 20.292a1.264 1.264 0 1 0 .01-2.528 1.264 1.264 0 0 0-.01 2.528zm7.887-2.526a1.266 1.266 0 0 0-1.256 1.21 1.247 1.247 0 1 0 1.256-1.21z"/></svg></a></li> <li class="social-youtube"><a title="Cloud Native Computing Foundation on YouTube" href="https://www.youtube.com/c/cloudnativefdn"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0.21 0.27 34.45 25.07" aria-label="YouTube"><path fill="currentColor" d="M33.729 6.084s-.327-2.33-1.317-3.356a4.691 4.691 0 0 0-3.32-1.432c-4.634-.34-11.589-.34-11.589-.34h-.014s-6.954 0-11.59.342a4.692 4.692 0 0 0-3.32 1.432c-.993 1.025-1.315 3.354-1.315 3.354a52.189 52.189 0 0 0-.331 5.473v2.566c.014 1.829.125 3.656.331 5.472 0 0 .322 2.33 1.316 3.36 1.26 1.345 2.916 1.3 3.653 1.445 2.65.26 11.263.34 11.263.34s6.96-.01 11.597-.353a4.691 4.691 0 0 0 3.32-1.432c.993-1.026 1.316-3.356 1.316-3.356.206-1.817.316-3.644.33-5.473v-2.57a52.26 52.26 0 0 0-.33-5.472zM14.076 17.232V7.729l8.951 4.768-8.95 4.735z"/></svg></a></li> <li class="social-flickr"><a title="Cloud Native Computing Foundation on Flickr" href="https://www.flickr.com/photos/143247548@N03/albums"><svg xmlns="http://www.w3.org/2000/svg" viewbox="-0.35 0.34 27.82 13.45" aria-label="Flickr"><path fill="currentColor" fill-rule="evenodd" d="M12.599 7.083a6.181 6.181 0 1 1-12.363 0 6.181 6.181 0 0 1 12.363 0zm14.376 0a6.18 6.18 0 1 1-12.362 0 6.18 6.18 0 0 1 12.362 0z" clip-rule="evenodd"/></svg></a></li> <li class="social-facebook"><a title="Cloud Native Computing Foundation on Facebook" href="https://www.facebook.com/CloudNativeComputingFoundation/"><svg xmlns="http://www.w3.org/2000/svg" viewbox="-0.51 -0.26 26.45 26.45" aria-label="Facebook"><path fill="currentColor" d="M25.497 13.075c0-2.45-.698-4.848-2.011-6.911a12.765 12.765 0 0 0-5.398-4.73A12.671 12.671 0 0 0 11.008.38a12.705 12.705 0 0 0-6.529 2.95A12.827 12.827 0 0 0 .563 9.358a12.896 12.896 0 0 0-.07 7.201 12.831 12.831 0 0 0 3.801 6.103 12.709 12.709 0 0 0 6.471 3.078v-8.957H7.53v-3.708h3.235v-2.824c0-3.213 1.903-4.988 4.813-4.988.956.014 1.909.097 2.852.25V8.67h-1.607a1.83 1.83 0 0 0-1.518.497 1.854 1.854 0 0 0-.561 1.505v2.404h3.535l-.563 3.708h-2.97v8.957a12.725 12.725 0 0 0 7.697-4.337 12.87 12.87 0 0 0 3.054-8.328z"/></svg></a></li> <li class="social-bluesky"><a title="Cloud Native Computing Foundation on Bluesky" href="https://bsky.app/profile/cncf.io"><svg aria-label="Bluesky" fill="none" height="23" viewbox="0 0 26 23" width="26" xmlns="http://www.w3.org/2000/svg"><path d="m5.81085 1.81485c-2.0472-1.60851-5.410459-2.778339-5.410459 1.0236 0 .80426.438685 6.43406.658029 7.38455.95048 3.1439 4.16751 3.9482 7.09208 3.5095-5.04488.8042-6.36094 3.6557-3.5826 6.5072 5.26423 5.4835 7.6039-1.3161 8.1888-3.0708l.1462-.3656.1463.3656c.5849 1.7547 2.9245 8.5543 8.1888 3.0708 2.7783-2.8515 1.4622-5.703-3.5826-6.5072 2.9245.4387 6.1416-.3656 7.092-3.5095.2194-.95049.6581-6.58029.6581-7.38455 0-3.801939-3.3633-2.63211-5.4105-1.0236-2.8514 2.12032-5.9954 6.50717-7.0921 8.84685-1.0967-2.33968-4.2406-6.72653-7.09205-8.84685z" fill="currentColor"/></svg></a></li> <li class="social-slack"><a title="Cloud Native Computing Foundation Slack" href="https://slack.cncf.io/"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0.16 -0.03 21.19 21.19" aria-label="Slack"><path fill="currentColor" d="M4.896 13.27a2.147 2.147 0 0 1-2.141 2.142A2.147 2.147 0 0 1 .613 13.27c0-1.178.963-2.141 2.142-2.141h2.141v2.141zm1.08 0c0-1.178.962-2.141 2.141-2.141s2.142.963 2.142 2.141v5.363a2.147 2.147 0 0 1-2.142 2.141 2.147 2.147 0 0 1-2.141-2.142V13.27zm2.141-8.6a2.147 2.147 0 0 1-2.141-2.14c0-1.18.962-2.142 2.141-2.142s2.142.963 2.142 2.141v2.142H8.117zm0 1.08c1.179 0 2.141.962 2.141 2.141a2.147 2.147 0 0 1-2.141 2.142H2.755A2.147 2.147 0 0 1 .613 7.89c0-1.179.963-2.141 2.142-2.141h5.362zm8.599 2.141c0-1.179.963-2.141 2.141-2.141 1.179 0 2.143.962 2.143 2.14a2.147 2.147 0 0 1-2.142 2.142h-2.141V7.89zm-1.08 0a2.147 2.147 0 0 1-2.141 2.142 2.147 2.147 0 0 1-2.141-2.142V2.53c0-1.178.962-2.141 2.141-2.141s2.142.963 2.142 2.141v5.362zm-2.141 8.6c1.179 0 2.142.962 2.142 2.14a2.147 2.147 0 0 1-2.142 2.142 2.147 2.147 0 0 1-2.141-2.141V16.49h2.141zm0-1.08a2.147 2.147 0 0 1-2.141-2.141c0-1.179.962-2.142 2.141-2.142h5.362c1.179 0 2.142.963 2.142 2.142a2.147 2.147 0 0 1-2.142 2.142h-5.362z"/></svg></a></li> </ul> </div> <div style="height:40px" aria-hidden="true" class="wp-block-spacer show-over-1000"></div> <div class="horizontal-rule show-over-1000"></div> <div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div> <div class="lf-grid"> <div class="footer__copyright"> <p>Copyright © 2024 The Linux Foundation®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our <a href="https://www.linuxfoundation.org/legal/trademark-usage">Trademark Usage</a> page. Linux is a registered trademark of Linus Torvalds. <a href="https://www.linuxfoundation.org/legal/privacy-policy">Privacy Policy</a> and <a href="https://www.linuxfoundation.org/legal/terms">Terms of Use</a>. </p> </div> <p class="footer__issue"> <a href="https://www.cncf.io/accessibility-statement/">Accessibility Statement</a><br> <a href="https://github.com/cncf/cncf.io/issues/new?title=Your+issue&projects=cncf/cncf.io/1&body=From+URL%3A+https%3A%2F%2Fwww.cncf.io%2Fblog%2F2024%2F11%2F22%2Fkonveyor-ai-supporting-application-modernization%2F">Submit an issue with this page</a> </p> </div> <div style="height:90px" aria-hidden="true" class="wp-block-spacer"> </div> </div> </footer> <div class="back-to-top"> <span title="Go to top"> <svg width="40" height="27" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 23.5l17-17 17 17" stroke="#fff" stroke-width="8"/></svg> </span> </div> <style id='wp-block-paragraph-inline-css'> .is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg} </style> <style id='wp-block-heading-inline-css'> h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg} </style> <style id='wp-block-list-inline-css'> ol,ul{box-sizing:border-box}:root :where(ul.has-background,ol.has-background){padding:1.25em 2.375em} </style> <style id='wp-block-image-inline-css'> .wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;transition:opacity .2s ease;width:20px;z-index:100}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both;visibility:visible}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}@media (prefers-reduced-motion:no-preference){.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}} </style> <style id='wp-block-image-theme-inline-css'> :root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em} </style> <style id='global-styles-inline-css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #FFFFFF;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--pink-400: #d62293;--wp--preset--color--tertiary-400: #62a1ff;--wp--preset--color--gray-700: #747474;--wp--preset--color--gray-500: #c4c4c4;--wp--preset--color--gray-400: #e6e6e6;--wp--preset--color--gray-300: #eeeeee;--wp--preset--color--gray-200: #f8f8f8;--wp--preset--color--gray-100: #fcfcfc;--wp--preset--color--gray-050: #fdfdfd;--wp--preset--color--purple: #4A23CC;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 14px;--wp--preset--font-size--medium: 18px;--wp--preset--font-size--large: 20px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--extra-small: 10px;--wp--preset--font-size--normal: 16px;--wp--preset--font-size--larger: 24px;--wp--preset--font-size--extra-large: 36px;--wp--preset--font-size--extra-extra-large: 46px;--wp--preset--font-family--primary: Clarity City,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Roboto,Ubuntu,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--wp--preset--font-family--serif: Source Serif Pro, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}.wp-block-button .wp-block-button__link{--wp--preset--color--pink-400: #d62293;--wp--preset--color--black: #000000;}:root { --wp--style--global--content-size: 1200px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{background-color: var(--wp--preset--color--gray-050);color: var(--wp--preset--color--black);font-family: var(--wp--preset--font-family--primary);font-weight: 400;padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;text-decoration: none;}a:where(:not(.wp-element-button)){color: var(--wp--preset--color--pink-400);font-weight: 700;text-decoration: none;}h1, h2, h3, h4, h5, h6{color: var(--wp--preset--color--black);font-weight: 700;}:root :where(.wp-element-button, .wp-block-button__link){background-color: var(--wp--preset--color--pink-400);border-radius: 5px;border-width: 0;color: var(--wp--preset--color--white);font-family: inherit;font-size: 16px;font-weight: 700;letter-spacing: 0.02em;line-height: 18px;padding-top: 11px;padding-right: 40px;padding-bottom: 11px;padding-left: 40px;text-decoration: none;text-transform: uppercase;}:root :where(.wp-element-button:visited, .wp-block-button__link:visited){color: var(--wp--preset--color--white);text-decoration: none;}:root :where(.wp-element-button:hover, .wp-block-button__link:hover){background-color: #c53490;color: var(--wp--preset--color--white);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-pink-400-color{color: var(--wp--preset--color--pink-400) !important;}.has-tertiary-400-color{color: var(--wp--preset--color--tertiary-400) !important;}.has-gray-700-color{color: var(--wp--preset--color--gray-700) !important;}.has-gray-500-color{color: var(--wp--preset--color--gray-500) !important;}.has-gray-400-color{color: var(--wp--preset--color--gray-400) !important;}.has-gray-300-color{color: var(--wp--preset--color--gray-300) !important;}.has-gray-200-color{color: var(--wp--preset--color--gray-200) !important;}.has-gray-100-color{color: var(--wp--preset--color--gray-100) !important;}.has-gray-050-color{color: var(--wp--preset--color--gray-050) !important;}.has-purple-color{color: var(--wp--preset--color--purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-pink-400-background-color{background-color: var(--wp--preset--color--pink-400) !important;}.has-tertiary-400-background-color{background-color: var(--wp--preset--color--tertiary-400) !important;}.has-gray-700-background-color{background-color: var(--wp--preset--color--gray-700) !important;}.has-gray-500-background-color{background-color: var(--wp--preset--color--gray-500) !important;}.has-gray-400-background-color{background-color: var(--wp--preset--color--gray-400) !important;}.has-gray-300-background-color{background-color: var(--wp--preset--color--gray-300) !important;}.has-gray-200-background-color{background-color: var(--wp--preset--color--gray-200) !important;}.has-gray-100-background-color{background-color: var(--wp--preset--color--gray-100) !important;}.has-gray-050-background-color{background-color: var(--wp--preset--color--gray-050) !important;}.has-purple-background-color{background-color: var(--wp--preset--color--purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-pink-400-border-color{border-color: var(--wp--preset--color--pink-400) !important;}.has-tertiary-400-border-color{border-color: var(--wp--preset--color--tertiary-400) !important;}.has-gray-700-border-color{border-color: var(--wp--preset--color--gray-700) !important;}.has-gray-500-border-color{border-color: var(--wp--preset--color--gray-500) !important;}.has-gray-400-border-color{border-color: var(--wp--preset--color--gray-400) !important;}.has-gray-300-border-color{border-color: var(--wp--preset--color--gray-300) !important;}.has-gray-200-border-color{border-color: var(--wp--preset--color--gray-200) !important;}.has-gray-100-border-color{border-color: var(--wp--preset--color--gray-100) !important;}.has-gray-050-border-color{border-color: var(--wp--preset--color--gray-050) !important;}.has-purple-border-color{border-color: var(--wp--preset--color--purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-extra-small-font-size{font-size: var(--wp--preset--font-size--extra-small) !important;}.has-normal-font-size{font-size: var(--wp--preset--font-size--normal) !important;}.has-larger-font-size{font-size: var(--wp--preset--font-size--larger) !important;}.has-extra-large-font-size{font-size: var(--wp--preset--font-size--extra-large) !important;}.has-extra-extra-large-font-size{font-size: var(--wp--preset--font-size--extra-extra-large) !important;}.has-primary-font-family{font-family: var(--wp--preset--font-family--primary) !important;}.has-serif-font-family{font-family: var(--wp--preset--font-family--serif) !important;}.wp-block-button .wp-block-button__link.has-pink-400-color{color: var(--wp--preset--color--pink-400) !important;}.wp-block-button .wp-block-button__link.has-black-color{color: var(--wp--preset--color--black) !important;}.wp-block-button .wp-block-button__link.has-pink-400-background-color{background-color: var(--wp--preset--color--pink-400) !important;}.wp-block-button .wp-block-button__link.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.wp-block-button .wp-block-button__link.has-pink-400-border-color{border-color: var(--wp--preset--color--pink-400) !important;}.wp-block-button .wp-block-button__link.has-black-border-color{border-color: var(--wp--preset--color--black) !important;} </style> <script id="flying-pages-js-before"> window.FPConfig= { delay: 10, ignoreKeywords: ["\/wp-admin","\/wp-login.php","\/cart","add-to-cart","logout","#","?",".png",".jpeg",".jpg",".gif",".svg"], maxRPS: 3, hoverDelay: 50 }; </script> <script defer src="https://www.cncf.io/wp-content/plugins/flying-pages/flying-pages.min.js?ver=2.4.6" id="flying-pages-js"></script> <script id="leadin-script-loader-js-js-extra"> var leadin_wordpress = {"userRole":"visitor","pageType":"post","leadinPluginVersion":"11.1.65"}; </script> <script defer id="leadin-script-loader-js-js" data-type="lazy" data-src="https://js.hs-scripts.com/8112310.js?integration=WordPress&businessUnitId=983905&ver=11.1.65"></script> <script defer src="https://www.cncf.io/wp-content/themes/cncf-twenty-two/build/globals.min.js?ver=1732320241" id="global-scripts-js"></script> <script defer id="leadin-forms-v2-js" data-type="lazy" data-src="https://js.hsforms.net/forms/embed/v2.js?ver=11.1.65"></script> <script type="text/javascript" id="flying-scripts">const loadScriptsTimer=setTimeout(loadScripts,10*1000);const userInteractionEvents=["mouseover","keydown","touchstart","touchmove","wheel"];userInteractionEvents.forEach(function(event){window.addEventListener(event,triggerScriptLoader,{passive:!0})});function triggerScriptLoader(){loadScripts();clearTimeout(loadScriptsTimer);userInteractionEvents.forEach(function(event){window.removeEventListener(event,triggerScriptLoader,{passive:!0})})} function loadScripts(){document.querySelectorAll("script[data-type='lazy']").forEach(function(elem){elem.setAttribute("src",elem.getAttribute("data-src"))})}</script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-97e2229449e282c1bef","applicationID":"643908501","transactionName":"MVFSYxFWXhICUxdaXggbcVQXXl8PTEMKXVYKUQ==","queueTime":0,"applicationTime":450,"atts":"HRZRFVlMTRw=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>