Files
nexus/sreweekly/articles/25/09-fault-tolerance-on-the-cheap.html
2026-09-12 17:23:01 +08:00

1800 lines
176 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><!-- Last Published: Thu Sep 10 2026 16:27:10 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="webflow.cloudbees.com" data-wf-page="6a1fe2a5a11dca1afc48dd2b" data-wf-site="695e1939655d6c0175b126da" data-wf-intellimize-customer-id="117374858" lang="en" data-wf-collection="6a1fe2a4a11dca1afc48dd15" data-wf-item-slug="comparing-elixir-go"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Comparing Elixir and Go</title><meta content="Compare Elixir and Go for high concurrency solutions. Understand their differences in programming styles, concurrency models, and error handling. Learn more!" name="description"/><meta content="Comparing Elixir and Go" property="og:title"/><meta content="Compare Elixir and Go for high concurrency solutions. Understand their differences in programming styles, concurrency models, and error handling. Learn more!" property="og:description"/><meta content="Comparing Elixir and Go" name="twitter:title"/><meta content="Compare Elixir and Go for high concurrency solutions. Understand their differences in programming styles, concurrency models, and error handling. Learn more!" name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/css/cloudbees-staging.shared.de709e9b8.min.css" rel="stylesheet" type="text/css" integrity="sha384-3nCem4UuiZHajW+HR0KDQRVI46PykPFAtPxnct426b/xTCCmlGUsL0dDDMM+wvJt" crossorigin="anonymous"/><style>@media (min-width:992px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855b"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855d"] {-webkit-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="e08e7190-573b-1ed5-0f56-04bb938f6aff"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}}@media (max-width:991px) and (min-width:768px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855b"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855d"] {-webkit-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="e08e7190-573b-1ed5-0f56-04bb938f6aff"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}}@media (max-width:767px) and (min-width:480px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855b"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855d"] {-webkit-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 1rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="e08e7190-573b-1ed5-0f56-04bb938f6aff"] {-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}}</style><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({ google: { families: ["Inconsolata:400,700","Inter:300,400,500,600,700"] }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/69712fa082fbe845b939a243_CloudBees-favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/69712fc6dc61f354e7d8715e_CloudBees-webclip.svg" rel="apple-touch-icon"/><link href="https://www.cloudbees.com/blog/comparing-elixir-go" rel="canonical"/><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Comparing Elixir and Go",
"name": "Comparing Elixir and Go - ab73fca9-2aa5-45b8-85fc-c9e35f62761a",
"description": "Compare Elixir and Go for high concurrency solutions. Understand their differences in programming styles, concurrency models, and error handling. Learn more!",
"url": "/blog/comparing-elixir-go",
"image": "",
"datePublished": "2017-01-26",
"dateModified": "2026-06-04T17:16:43.549Z",
"author": {
"@type": "Person",
"name": "Barry Jones",
"image": "",
"jobTitle": ""
},
"publisher": {
"@type": "Organization",
"name": "CloudBees",
"logo": {
"@type": "ImageObject",
"url": "https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696254cf9924a1df0698d83e_Brand%20Logo.svg"
}
},
"articleSection": "How-tos and Support",
"inLanguage": "en"
}
</script><style>.anti-flicker, .anti-flicker * {visibility: hidden !important; opacity: 0 !important;}</style><style>[data-wf-hidden-variation], [data-wf-hidden-variation] * {
display: none !important;
}</style><script type="text/javascript">if (localStorage.getItem('intellimize_data_tracking_type') !== 'disabled') { localStorage.setItem('intellimize_opt_out_117374858', 'true'); } if (localStorage.getItem('intellimize_data_tracking_type') !== 'disabled') { localStorage.setItem('intellimize_data_tracking_type', 'disabled'); }</script><script type="text/javascript">(function(e){var s={r:[]};e.wf={r:s.r,ready:t=>{s.r.push(t)}}})(window)</script><script type="text/javascript">(function(e,t,p){var n=document.documentElement,s={p:[],r:[]},u={p:s.p,r:s.r,push:function(e){s.p.push(e)},ready:function(e){s.r.push(e)}};e.intellimize=u,n.className+=" "+p,setTimeout(function(){n.className=n.className.replace(RegExp(" ?"+p),"")},t)})(window, 4000, 'anti-flicker')</script><link href="https://cdn.intellimize.co/snippet/117374858.js" rel="preload" as="script"/><script type="text/javascript">var wfClientScript=document.createElement("script");wfClientScript.src="https://cdn.intellimize.co/snippet/117374858.js",wfClientScript.async=!0,wfClientScript.onerror=function(){document.documentElement.className=document.documentElement.className.replace(RegExp(" ?anti-flicker"),"")},document.head.appendChild(wfClientScript);</script><link href="https://api.intellimize.co" rel="preconnect" crossorigin="true"/><link href="https://log.intellimize.co" rel="preconnect" crossorigin="true"/><link href="https://117374858.intellimizeio.com" rel="preconnect"/><link href="rss.xml" rel="alternate" title="RSS Feed" type="application/rss+xml"/><!-- OneTrust Cookies Consent Notice start for cloudbees.com -->
<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="30e8c8b5-5f2b-4d72-a544-f68ac4b5ebe8" ></script>
<script type="text/javascript">
function OptanonWrapper() {
// Get initial OnetrustActiveGroups ids
if(typeof OptanonWrapperCount == "undefined"){
otGetInitialGrps();
}
//Delete cookies
otDeleteCookie(otIniGrps);
// Assign OnetrustActiveGroups to custom variable
function otGetInitialGrps(){
OptanonWrapperCount = '';
otIniGrps = OnetrustActiveGroups;
// console.log("otGetInitialGrps", otIniGrps)
}
function otDeleteCookie(iniOptGrpId)
{
var otDomainGrps = JSON.parse(JSON.stringify(Optanon.GetDomainData().Groups));
var otDeletedGrpIds = otGetInactiveId(iniOptGrpId, OnetrustActiveGroups);
if(otDeletedGrpIds.length != 0 && otDomainGrps.length !=0){
for(var i=0; i < otDomainGrps.length; i++){
//Check if CustomGroupId matches
if(otDomainGrps[i]['CustomGroupId'] != '' && otDeletedGrpIds.includes(otDomainGrps[i]['CustomGroupId'])){
for(var j=0; j < otDomainGrps[i]['Cookies'].length; j++){
// console.log("otDeleteCookie",otDomainGrps[i]['Cookies'][j]['Name'])
//Delete cookie
eraseCookie(otDomainGrps[i]['Cookies'][j]['Name']);
}
}
//Check if Hostid matches
if(otDomainGrps[i]['Hosts'].length != 0){
for(var j=0; j < otDomainGrps[i]['Hosts'].length; j++){
//Check if HostId presents in the deleted list and cookie array is not blank
if(otDeletedGrpIds.includes(otDomainGrps[i]['Hosts'][j]['HostId']) && otDomainGrps[i]['Hosts'][j]['Cookies'].length !=0){
for(var k=0; k < otDomainGrps[i]['Hosts'][j]['Cookies'].length; k++){
//Delete cookie
eraseCookie(otDomainGrps[i]['Hosts'][j]['Cookies'][k]['Name']);
}
}
}
}
}
}
otGetInitialGrps(); //Reassign new group ids
}
//Get inactive ids
function otGetInactiveId(customIniId, otActiveGrp){
//Initial OnetrustActiveGroups
// console.log("otGetInactiveId",customIniId)
customIniId = customIniId.split(",");
customIniId = customIniId.filter(Boolean);
//After action OnetrustActiveGroups
otActiveGrp = otActiveGrp.split(",");
otActiveGrp = otActiveGrp.filter(Boolean);
var result=[];
for (var i=0; i < customIniId.length; i++){
if ( otActiveGrp.indexOf(customIniId[i]) <= -1 ){
result.push(customIniId[i]);
}
}
return result;
}
//Delete Cookies by Name Pattern
function findCookiesByPattern(cookieNamePattern){
var cookies = document.cookie.split(';');
var dataCookies = cookies.filter(function(cookie){
if (cookie.trim().indexOf(cookieNamePattern) === 0) {
var cookieName = cookie.substr(0,cookie.indexOf('='));
eraseCookie(cookieName)
return true;
} else {
return false;
}
});
}
//Delete cookie
function eraseCookie(name) {
if (name === '_ga_xxxxxxxxxx') {
findCookiesByPattern('_ga_')
}
if (name === '_gclxxxx') {
findCookiesByPattern('_gcl')
}
//Delete root path cookies
domainName = window.location.hostname;
domainNameDot = '.'+domainName.replace(/www./g, "");
document.cookie = name+'=; Max-Age=-99999999; Path=/;Domain='+ domainNameDot;
document.cookie = name+'=; Max-Age=-99999999; Path=/;Domain='+ domainName;
document.cookie = name+'=; Max-Age=-99999999; Path=/;';
//Delete LSO incase LSO being used, cna be commented out.
localStorage.removeItem(name);
//Check for the current path of the page
pathArray = window.location.pathname.split('/');
//Loop through path hierarchy and delete potential cookies at each path.
for (var i=0; i < pathArray.length; i++){
if (pathArray[i]){
//Build the path string from the Path Array e.g /site/login
var currentPath = pathArray.slice(0,i+1).join('/');
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + ';Domain='+ domainNameDot;
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + ';Domain='+ domainName;
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + ';';
//Maybe path has a trailing slash!
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + '/;Domain='+ domainNameDot;
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + '/;Domain='+ domainName;
document.cookie = name+'=; Max-Age=-99999999; Path=' + currentPath + '/;';
}
}
}
}
</script>
<!-- OneTrust Cookies Consent Notice end for cloudbees.com -->
<!-- WebFlow OneTrust Cookies Consent Integration -->
<script>
const runConsentMode = () => {
wf.ready(() => {
// Function to opt in or out based on consent preferences
const handleWebflowAnalyticsConsent = () => {
try {
// Logic to check consent groups from the OneTrust cookie
const otCookieKey = 'OptanonConsent=';
const otCookie = document.cookie.split('; ').find(row => row.startsWith(otCookieKey));
if (!otCookie) {
throw new Error('OneTrust cookie not found.');
}
const otGroupsKey = 'groups=';
const otGroups = decodeURIComponent(otCookie.split('&').find(row => row.startsWith(otGroupsKey)).split('=')[1]);
// OneTrust groups: 1 = necessary, 2 = performance, 3 = functional, 4 = targeting
const OT_FUNCTIONAL_CONSENT = 'C0003:1'; // Ensure this matches your expected consent group
// Check for functional cookies group
const hasOptedIn = otGroups.indexOf(OT_FUNCTIONAL_CONSENT) !== -1;
// Adjust Webflow Analytics opt-in/out based on consent
if (hasOptedIn) {
wf.allowUserTracking();
} else {
wf.denyUserTracking();
}
} catch (e) {
console.error('Error handling OneTrust consent:', e);
}
};
// Set up the OneTrust consent change listener to check when preferences change
if (typeof OneTrust !== 'undefined' && OneTrust.OnConsentChanged) {
OneTrust.OnConsentChanged(() => {
handleWebflowAnalyticsConsent();
});
}
// Initial check when the page loads
handleWebflowAnalyticsConsent();
});
};
if (typeof window.wf !== "undefined" && typeof window.wf.ready === "function") {
window.wf.ready(runConsentMode);
} else {
// fallback so your code still runs
document.addEventListener("DOMContentLoaded", runConsentMode);
console.warn("wf is not defined; using DOMContentLoaded fallback");
}
</script>
<!-- WebFlow OneTrust Cookies Consent Integration -->
<!-- Initial Google Consent Set to denied to match OneTrust -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Default is DENIED (matches your OneTrust default reject)
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: 'denied',
functionality_storage: 'denied',
personalization_storage: 'denied',
security_storage: 'granted',
wait_for_update: 500
});
</script>
<!-- End Initial Google Consent Set to denied to match OneTrust -->
<!-- Navattic JS (MKT-2104) — queue stub + async SDK, loaded for ALL visitors.
Moved here from the GTM "Navattic JS" tag so consent can be signalled via
setCookieConsent (see the OneTrust->Google sync below). Remove the GTM tag when this ships. -->
<script>
void 0===window.navatticQueue&&(window.navatticQueue=[],window.navattic=new Proxy({},{get:function n(t,u,e){return function(){for(var n=arguments.length,t=Array(n),e=0;e<n;e++)t[e]=arguments[e];return navatticQueue.push({function:u,arguments:t})}}}));
</script>
<script async src="https://js.navattic.com/sdk.js?key=pkey_cm9vjdepy000j04l4hexl9p18"></script>
<!-- End Navattic JS -->
<!-- Update Google Consent to match OneTrust Consent Categories-->
<script>
(function(){
const OT_ANALYTICS = "C0002"; // OneTrust Performance Cookies Group ID
const OT_FUNCTIONALITY = "C0003"; // OneTrust Functional Cookies Group ID
const OT_ADS_PERSONALIZATION = "C0004"; // OneTrust Targeting Cookies Group ID
function getGroups() {
const oc = document.cookie.split("; ").find(x => x.startsWith("OptanonConsent="));
if (!oc) return "";
const groupsParam = oc.split("&").find(x => x.startsWith("groups="));
return groupsParam ? decodeURIComponent(groupsParam.split("=")[1]) : "";
}
function syncConsentToGoogle() {
const groups = getGroups();
const analyticsOn = groups.includes(`${OT_ANALYTICS}:1`);
const functionalityOn = groups.includes(`${OT_FUNCTIONALITY}:1`);
const targettingOn = groups.includes(`${OT_ADS_PERSONALIZATION}:1`);
gtag("consent", "update", {
ad_storage: targettingOn ? "granted" : "denied",
ad_user_data: targettingOn ? "granted" : "denied",
ad_personalization: targettingOn ? "granted" : "denied",
analytics_storage: analyticsOn ? "granted" : "denied",
functionality_storage: functionalityOn ? "granted" : "denied",
personalization_storage: targettingOn ? "granted" : "denied",
});
// MKT-2104: mirror Targeting (C0004) consent to Navattic — runs anonymously (no cookies/PII) when denied,
// but still emits events so the Google Ads conversion can send a cookieless (modeled) ping.
try { navattic.setCookieConsent(targettingOn); } catch (e) {}
}
window.addEventListener("OneTrustGroupsUpdated", syncConsentToGoogle);
syncConsentToGoogle();
})();
</script>
<!-- End Update Google Consent to match OneTrust Consent Categories-->
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-KMJ7D77');</script>
<!-- End Google Tag Manager -->
<!-- Ad Attribution Session Storage -->
<script>
(function () {
const params = new URLSearchParams(window.location.search);
const utms = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
const captured = {};
utms.forEach((key) => {
if (params.get(key)) captured[key] = params.get(key);
});
if (Object.keys(captured).length > 0) {
// Tag the originating page so we know where the session started
captured.utm_landing_page = window.location.pathname;
sessionStorage.setItem('cb_ad_attribution', JSON.stringify(captured));
}
})();
</script>
<!-- End Ad Attribution Session Storage -->
<style>
.nav__banner {
display: none;
}
.nav__banner.show {
display: block;
}
</style>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.io/js/pa-hcJukO43tqwUkZ00jY7P2.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script><!--head code-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400&display=swap" rel="stylesheet">
<!-- <meta
property="og:image"
content="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a8569f061da12045317c7d2_OG%20-%20%20CloudBees%20Blog.png"
> --></head><body><div class="page-wrapper"><div class="styles"><div class="global-styles w-embed"><style>
/* Make text look crisper and more legible in all browsers */
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* Focus state style for keyboard navigation for the focusable elements */
*[tabindex]:focus-visible,
input[type="file"]:focus-visible {
outline: 0.125rem solid #4d65ff;
outline-offset: 0.125rem;
}
/* Get rid of top margin on first element in any rich text element */
.w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
margin-top: 0 !important;
}
/* Get rid of bottom margin on last element in any rich text element */
.w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
margin-bottom: 0 !important;
}
/* Create a class of .div-square which maintains a 1:1 dimension of a div */
.div-square::after {
content: "";
display: block;
padding-bottom: 100%;
}
/* Make sure containers never lose their center alignment */
.container-medium,.container-small, .container-large, .container-huge {
margin-right: auto !important;
margin-left: auto !important;
}
/*
Make the following elements inherit typography styles from the parent and not have hardcoded values.
Important: You will not be able to style for example "All Links" in Designer with this CSS applied.
Uncomment this CSS to use it in the project. Leave this message for future hand-off.
*/
/*
a,
.w-input,
.w-select,
.w-tab-link,
.w-nav-link,
.w-dropdown-btn,
.w-dropdown-toggle,
.w-dropdown-link {
color: inherit;
text-decoration: inherit;
font-size: inherit;
}
*/
/* Apply "..." after 3 lines of text */
.ts-3lines {
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
/* Apply "..." after 2 lines of text */
.ts-2lines {
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* Apply "..." after 1 lines of text */
.ts-1line {
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
/* Adds inline flex display */
.display-inlineflex {
display: inline-flex;
}
/* These classes are never overwritten */
.hide {
display: none !important;
}
@media screen and (max-width: 991px),
@media screen and (max-width: 767px),
@media screen and (max-width: 479px){
.hide, .hide-tablet{
display: none !important;
}
}
@media screen and (max-width: 767px)
.hide-mobile-landscape{
display: none !important;
}
}
@media screen and (max-width: 479px)
.hide-mobile{
display: none !important;
}
}
/* Removes native scrollbar */
.no-scrollbar,
[data-scrollbar="none"] {
-ms-overflow-style: none; /* For Internet Explorer and Edge */
overflow: -moz-scrollbars-none; /* For Firefox */
}
.no-scrollbar::-webkit-scrollbar,
[data-scrollbar="none"]::-webkit-scrollbar {
display: none; /* For Chrome, Safari, and Opera */
}
[x-clip] {
overflow-x: clip;
}
body.popup-open {
overflow: hidden;
padding-right: var(--scrollbar-width);
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.mktoCaptchaDisclaimer {
color: #666;
}
</style></div><div class="project-styles w-embed"><style>
.button:hover .button-arrow {
transform: translateX(2px);
}
.btn-contrast .btn-icon {
filter: invert(6%) sepia(12%) saturate(420%) hue-rotate(200deg) brightness(20%) contrast(110%);
}
.btn-sm .btn-icon {
width: 1.25rem;
height: 1.25rem;
}
.swiper-arrow.swiper-button-disabled {
pointer-events: none;
color: var(--_tokens---button--secondary-disabled);
border-color: var(--_tokens---button--secondary-disabled);
}
.contact_rte ul > li:before,
.tabs_rte ul > li:before,
.main_rte ul > li:before,
.main_rte-p2 ul > li:before {
content: '';
height: 1.25rem;
width: 1.25rem;
min-width: 1.25rem;
margin-top: 0.125rem;
display: block;
position: absolute;
left: -2rem;
background: url('https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6965dcada9cbb61894fcd729_check-circle-secondary.svg') center no-repeat;
background-size: contain;
}
.contact_rte p:has(+ ul),
.contact_rte p:has(+ ol) {
margin-bottom: 1rem !important;
}
.white_rte ul > li:before,
.article_white_rte ul > li:before {
content: '';
height: 1.5rem;
width: 1.5rem;
min-width: 1.5rem;
margin-top: 0.125rem;
display: block;
background: url('https://cdn.prod.website-files.com/695e1939655d6c0175b126da/69611147c4643f011be05298_check-circle.svg') center no-repeat;
background-size: contain;
}
.global_section:has(.global_frame) {
padding: 0 var(--_spacing---padding--side-20);
}
.global_section:has(.global_frame-no-border) {
padding-left: var(--_spacing---padding--side-20);
padding-right: var(--_spacing---padding--side-20);
}
.story_bg-wr {
overflow-x: clip;
}
.side_layout:last-child {
margin-bottom: 0;
}
.product_swiper-tab-bullet .product_tab_logo {
opacity: 0.4;
}
.product_swiper-tab-bullet.is-active .product_tab_logo {
opacity: 0.7;
}
@media (min-width: 480px) {
.product_tab-link_logo {
display: none;
}
}
.logo-ribbon-wr {
-webkit-mask: linear-gradient(90deg, #00000000 0%, #000000 10% 90%, #00000000 100%);
mask: linear-gradient(90deg, #00000000 0%, #000000 10% 90%, #00000000 100%);
}
#popup-content .wistia_embed {
width: 100% !important;
aspect-ratio: 16/9 !important;
}
.story_img-wr .ts-cap {
margin: 0 auto;
max-width: 90%;
text-align: center;
}
.cms_share-link.is-copied .is-url {
opacity: 0;
}
.cms_share-link.is-copied .is-url-check {
opacity: 1;
}
</style></div><div class="w-embed"><style>
.logo-ribbon-wr.is-investor .logo-ribbon_row-wr {
opacity: 1;
}
/* Logo Ribbon Animation */
@keyframes scroll {
from {
transform: translateX(0);
}
to {
transform: translateX(calc(-100% - 6.25rem));
}
}
.logo-ribbon_row-wr {
animation: scroll 35s linear infinite;
}
/* Mobile Styles */
@media (max-width: 767px) { /* Adjust the max-width as needed */
@keyframes scroll {
from {
transform: translateX(0);
}
to {
transform: translateX(calc(-100% - 3.5rem));
}
}
.logo-ribbon_row-wr {
animation: scroll 30s linear infinite;
}
}
</style></div></div><div data-banner="show" class="nav__banner"><div class="top-banner_code w-embed w-script"><script>
document.addEventListener('DOMContentLoaded', function () {
const banner = document.querySelector('.nav__banner');
const closeButton = document.getElementById('banner-close');
// 👀 Check if banner should be shown based on attribute
const bannerState = banner?.getAttribute('data-banner');
if (bannerState === 'hide') {
banner?.classList.remove('show');
return; // skip all logic
}
const lastShown = localStorage.getItem('bannerLastShown');
const now = new Date();
let shouldShow = true;
if (lastShown) {
const lastShownDate = new Date(lastShown);
const diffDays = Math.floor((now - lastShownDate) / (1000 * 60 * 60 * 24));
if (diffDays <= 7) {
shouldShow = false;
}
}
const bannerClosed = localStorage.getItem('bannerClosed');
if (bannerClosed === 'true') {
shouldShow = false;
}
if (shouldShow) {
banner?.classList.add('show');
}
closeButton?.addEventListener('click', function () {
banner?.classList.remove('show');
localStorage.setItem('bannerClosed', 'true');
localStorage.setItem('bannerLastShown', now.toISOString());
});
});
</script></div><div id="banner-close" class="nav-banner__close-button"><div class="nav-banner__close-button__image w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.4 19L5 17.6L10.6 12L5 6.4L6.4 5L12 10.6L17.6 5L19 6.4L13.4 12L19 17.6L17.6 19L12 13.4L6.4 19Z" fill="currentcolor"/>
</svg></div></div><div href="#" class="nav-banner__content__wrapper"><div class="nav-banner__content"><div class="banner_label">New</div><p id="nav-banner-text" class="nav-banner-text">A note from our new CEO Moritz Plassnig</p><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a856:065b8505-25cf-4b0e-3cb3-92c9f08f6f13" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="065b8505-25cf-4b0e-3cb3-92c9f08f6f13" data-wf-component-context="%5B%7B%22componentId%22%3A%22065b8505-25cf-4b0e-3cb3-92c9f08f6f09%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a856%22%7D%5D" href="https://www.cloudbees.com/blog/introducing-moritz-plassnig-cloudbees-ceo/" class="btn is-text-sm is-nav-banner w-inline-block"><div>Read the announcement</div><div class="icon-regular w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5137 6.46826C13.8078 6.17663 14.2825 6.17816 14.5742 6.47217L19.5322 11.4722C19.8219 11.7646 19.8221 12.2365 19.5322 12.5288L14.5742 17.5288C14.2826 17.8225 13.8077 17.824 13.5137 17.5327C13.2198 17.2411 13.2175 16.7663 13.5088 16.4722L17.2002 12.7505H5C4.58595 12.7505 4.25026 12.4145 4.25 12.0005C4.25 11.5863 4.58579 11.2505 5 11.2505H17.2002L13.5088 7.52881C13.2173 7.2348 13.2199 6.75994 13.5137 6.46826Z" fill="currentcolor"/>
</svg></div></a></div></div></div><div class="header-wr"><div class="nav-styles w-embed"><style>
.header.scroll .header__bg {
opacity: 1;
}
.nav__dd-trigger.w--open .nav__dd_arrow {
transform: rotateZ(180deg);
}
.nav__dd_menu-wr .nav__dd_group:last-child {
border-right: none;
}
@media screen and (min-width: 1280px) {
.nav__menu-list:has(.nav__dd-trigger[dd="small"].w--open) {
position: relative;
}
.nav__menu-list:not(:has(.nav__dd-trigger[dd="small"].w--open)) {
position: static;
}
.nav__dd-trigger[dd="small"] + .nav__dd-content {
top: 28px;
}
}
@media (max-width: 767px) {
.btn-nav .btn-text {
font-size: var(--_typography---size--p3);
line-height: var(--_typography---height--p3);
}
</style></div><header id="header" class="header"><div class="header__container"><a aria-label="Go to Home page" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b3e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b3e" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="/" class="header__brand w-inline-block"><img loading="eager" src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696254cf9924a1df0698d83e_Brand%20Logo.svg" alt="CloudBees Logo" class="company-logo_img"/></a><div class="nav__layout"><nav class="nav__menu-list"><div class="mobile_header"><a aria-label="Go to Home page" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b43" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b43" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="/" class="header__brand w-inline-block"><img loading="eager" src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696254cf9924a1df0698d83e_Brand%20Logo.svg" alt="CloudBees Logo" class="company-logo_img"/></a><div class="mobile_header-btn-wr"><div class="header__buttons-wr"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b47" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b47" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="https://www.cloudbees.com/contact-us" class="btn-nav btn-primary w-inline-block"><div class="btn-text">Book a demo</div></a></div><a data-w-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b4c" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b4c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b4c" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="#" class="nav__menu-button w-inline-block"><div class="nav__menu-icon is-cross w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.4697 4.46985C14.7626 4.17696 15.2374 4.17696 15.5303 4.46985C15.8231 4.76275 15.8231 5.23754 15.5303 5.5304L11.0605 10.0001L15.5303 14.4698C15.8231 14.7628 15.8231 15.2375 15.5303 15.5304C15.2374 15.8233 14.7626 15.8232 14.4697 15.5304L10 11.0607L5.53027 15.5304C5.23742 15.8233 4.76263 15.8232 4.46973 15.5304C4.17683 15.2375 4.17683 14.7627 4.46973 14.4698L8.93945 10.0001L4.46973 5.5304C4.17683 5.2375 4.17683 4.76274 4.46973 4.46985C4.76262 4.17696 5.23738 4.17696 5.53027 4.46985L10 8.93958L14.4697 4.46985Z" fill="white"/>
</svg></div></a></div></div><ul data-scrollbar="none" role="list" class="nav__menu"><li class="nav__list-item"><div data-delay="0" data-hover="false" class="nav__dd w-dropdown"><div dd="small" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b51" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b51" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" class="nav__dd-trigger w-dropdown-toggle"><div>Product</div><div class="nav__dd_arrow w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M14.4697 6.96985C14.7626 6.67696 15.2374 6.67696 15.5303 6.96985C15.8231 7.26275 15.8231 7.73754 15.5303 8.0304L10.5303 13.0304C10.2374 13.3233 9.76263 13.3232 9.46973 13.0304L4.46973 8.0304C4.17683 7.7375 4.17683 7.26274 4.46973 6.96985C4.76262 6.67696 5.23738 6.67696 5.53027 6.96985L10 11.4396L14.4697 6.96985Z" fill="white" fill-opacity="0.5"/>
</svg></div></div><nav class="nav__dd-content w-dropdown-list"><div class="nav__dd_menu-wr is-small"><div id="w-node-f74b5068-adc7-1a9c-53c4-9f2f35f2a1be-35f2a1bd" class="nav__dd_group is-link"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1bf" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1bf" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" href="/unify" class="nav__dd_featured-link w-inline-block"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6984deccc2defde3d4f42ad0_f2942b06ac3aa33a70161ed027fdea6b_Unify-Overview-nav-feature.avif" loading="eager" sizes="100vw" srcset="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6984deccc2defde3d4f42ad0_f2942b06ac3aa33a70161ed027fdea6b_Unify-Overview-nav-feature-p-500.avif 500w, https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6984deccc2defde3d4f42ad0_f2942b06ac3aa33a70161ed027fdea6b_Unify-Overview-nav-feature.avif 744w" alt="CloudBees Unify Analytics screen." class="nav__dd_featured-img"/><div class="nav__dd_featured_text-group"><div class="nav__dd_featured_text-wr"><div class="nav__dd_link-title">CloudBees Unify Overview</div></div><p class="nav__dd_link-desc">CloudBees Unify gives enterprises one shared language across the SDLC.</p><div class="btn is-text-sm"><div>Explore</div><div class="icon-regular w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5137 6.46826C13.8078 6.17663 14.2825 6.17816 14.5742 6.47217L19.5322 11.4722C19.8219 11.7646 19.8221 12.2365 19.5322 12.5288L14.5742 17.5288C14.2826 17.8225 13.8077 17.824 13.5137 17.5327C13.2198 17.2411 13.2175 16.7663 13.5088 16.4722L17.2002 12.7505H5C4.58595 12.7505 4.25026 12.4145 4.25 12.0005C4.25 11.5863 4.58579 11.2505 5 11.2505H17.2002L13.5088 7.52881C13.2173 7.2348 13.2199 6.75994 13.5137 6.46826Z" fill="currentcolor"/>
</svg></div></div></div></a></div><div class="nav__dd_group is-small"><ul role="list" class="nav__dd_links_list is-1col is-first"><li><a href="/capabilities/ci-cd-workflows" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1cd" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1cd" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976938a76b54533480c_cd57991f6dbd9328eda91ca192bfeea3_workflow.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">CI/CD</div><p class="nav__dd_link-desc">Streamline CI/CD workflows for faster innovation and reliable deployments</p></div></a></li><li><a href="/capabilities/compliance" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1d6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1d6" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0c88dd3eb1f35371ef1f_28cb23b26a1cbf8530073bffa6ab8f59_shield-check.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Security and Compliance</div><p class="nav__dd_link-desc">Continuous security and compliance assessment with control insights</p></div></a></li><li><a href="/capabilities/feature-management" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1df" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1df" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09758beb7f5fc8c2d179_6cd04eba7a6b0b34a9e98db62bd08f7e_flag.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Feature Management</div><p class="nav__dd_link-desc">Control feature rollouts with flags for safer, faster releases and testing</p></div></a></li></ul></div><div class="nav__dd_group is-small"><ul role="list" class="nav__dd_links_list is-1col"><li><a href="/capabilities/cloudbees-smart-tests" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1ea" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1ea" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975c1d9a5fab249c9b2_563273da20b713605c4625ca0ba0cc09_flask-conical.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Smart Tests</div><p class="nav__dd_link-desc">AI-driven test intelligence that delivers developer feedback 80% faster</p></div></a></li><li><a href="/capabilities/release-orchestration" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1f3" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1f3" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976e9236cb5e93c4c16_17a9899912c5755e26e2d7362c206518_waypoints.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Release Orchestration</div><p class="nav__dd_link-desc">Orchestrate complex releases with DevOps ecosystem visibility</p></div></a></li><li><a href="/capabilities/analytics" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b56:f74b5068-adc7-1a9c-53c4-9f2f35f2a1fc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f74b5068-adc7-1a9c-53c4-9f2f35f2a1fc" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%22f74b5068-adc7-1a9c-53c4-9f2f35f2a1bd%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b56%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975b85d7acb849512d2_f7d862b2e5c030eb99eac717ed65ff00_chart-column.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Analytics</div><p class="nav__dd_link-desc">Single source of truth for software delivery insights and metrics</p></div></a></li></ul></div></div></nav></div></li><li class="nav__list-item"><div data-delay="0" data-hover="false" class="nav__dd w-dropdown"><div dd="small" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b59" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b59" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" class="nav__dd-trigger w-dropdown-toggle"><div>Solutions</div><div class="nav__dd_arrow w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M14.4697 6.96985C14.7626 6.67696 15.2374 6.67696 15.5303 6.96985C15.8231 7.26275 15.8231 7.73754 15.5303 8.0304L10.5303 13.0304C10.2374 13.3233 9.76263 13.3232 9.46973 13.0304L4.46973 8.0304C4.17683 7.7375 4.17683 7.26274 4.46973 6.96985C4.76262 6.67696 5.23738 6.67696 5.53027 6.96985L10 11.4396L14.4697 6.96985Z" fill="white" fill-opacity="0.5"/>
</svg></div></div><nav class="nav__dd-content w-dropdown-list"><div class="nav__dd_menu-wr is-solutions"><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Use Cases</p></div><ul role="list" class="nav__dd_links_list"><li><a href="/use-case/jenkins-modernization" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bd8d" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bd8d" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a097657c04ac5445ae13b_1e2655369bf05b4c399a533ce3eb3a04_server-cog.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">AI-Powered CI</div></div></a></li><li><a href="/use-case/agentic-devops" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bd96" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bd96" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a097521987fff4d2849a2_3470f8c00f2f5ea8f1e1e7d1d8e380c5_bot.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Governed AI software delivery</div></div></a></li><li><a href="/use-case/orchestration-and-governance" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bd9f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bd9f" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976c8ea52b40d7228ae_d14f4e4bd20ee92db2d44d35057f898e_network.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Multi-tool release orchestration</div></div></a></li><li><a href="/use-case/security-and-compliance" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bda8" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bda8" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a097552e78c474078eae9_2e34c7f0d98b1272a44c7002b60ff4e4_brick-wall-shield.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Continuous Security and Compliance</div></div></a></li></ul></div><div id="w-node-_44a36620-13c5-fbfe-5a1a-6f9877d1bdb0-77d1bd86" class="nav__dd_group is-wide"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Industries</p></div><ul role="list" class="nav__dd_links_list is-2col"><li><a href="/industries/automotive" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bdb6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bdb6" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975d02ebe816d59a6a2_f2a2a13a1181cd590a39ba6b764ec8be_car.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Automotive</div></div></a></li><li><a href="/industries/government" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bdbf" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bdbf" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09758c5181fd620d8cc0_e1e65c44301b4f93edb9c5043193d1a9_landmark.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Government</div></div></a></li><li><a href="/industries/financial-services" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bdc8" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bdc8" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a097527b3e2ada1f3b27d_9b267388f792400b2c9cf3fe8e57dc75_banknote.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Financial Services</div></div></a></li><li><a href="/industries/insurance" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bdd1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bdd1" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976b084ff39f338a53a_07417b9c5387fb085880b29a50c1441d_umbrella.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Insurance</div></div></a></li><li><a href="/industries/retail" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bdda" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bdda" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09761ce0ab5e29c71c4d_d0b8cb6b161886e01480db7f4bc2a6ea_store.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Retail</div></div></a></li><li><a href="/industries/software" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b5e:44a36620-13c5-fbfe-5a1a-6f9877d1bde3" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="44a36620-13c5-fbfe-5a1a-6f9877d1bde3" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2244a36620-13c5-fbfe-5a1a-6f9877d1bd86%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b5e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0a825af84f44d78a96a0_b49b3d53bcc604cf9dd8844268a91d30_code.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Software</div></div></a></li></ul></div></div></nav></div></li><li class="nav__list-item"><div data-delay="0" data-hover="false" class="nav__dd w-dropdown"><div data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b61" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b61" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" class="nav__dd-trigger w-dropdown-toggle"><div>Resources</div><div class="nav__dd_arrow w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M14.4697 6.96985C14.7626 6.67696 15.2374 6.67696 15.5303 6.96985C15.8231 7.26275 15.8231 7.73754 15.5303 8.0304L10.5303 13.0304C10.2374 13.3233 9.76263 13.3232 9.46973 13.0304L4.46973 8.0304C4.17683 7.7375 4.17683 7.26274 4.46973 6.96985C4.76262 6.67696 5.23738 6.67696 5.53027 6.96985L10 11.4396L14.4697 6.96985Z" fill="white" fill-opacity="0.5"/>
</svg></div></div><nav class="nav__dd-content w-dropdown-list"><div class="nav__dd_menu-wr is4col"><div id="w-node-_21a8087d-8638-67de-c541-223e68ebb0b4-68ebb0b3" class="nav__dd_group is-wide-desktop"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Discover</p></div><ul role="list" class="nav__dd_links_list is-2col-desktop"><li><a href="https://ai.cloudbees.com/" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0ba" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0ba" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975be99e833813f5160_cb6c952934afa1d03155a6159f42086b_badge-plus.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">AI Design Partner Program</div></div></a></li><li><a href="/resources" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0c3" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0c3" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09757234a36b32ee7169_ba0212838c74830ebdf16ad261a51b42_layout-dashboard.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Resources Overview Page</div></div></a></li><li><a href="/blog" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0cc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0cc" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976869064c0e6744f8c_3c5a6dc0f9fc9395357b740b417f062d_newspaper.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Blog</div></div></a></li><li><a href="/videos" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0d5" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0d5" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976a0447e86bed71d08_d795c7a1294838e19c44f8da0ffe5787_video.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Webinars &amp; Videos</div></div></a></li><li><a href="/events" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0de" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0de" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975938a76b5453347d7_179a2818d919a6d5fef9097c81065d75_calendar-days.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Events</div></div></a></li><li><a href="/guides" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0e7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0e7" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696df108b936a6f63633120c_7849291e3649d0271f631c42bdcdd886_book-open.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Guides &amp; Reports</div></div></a></li><li><a href="/customers" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0f0" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0f0" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a097650f2564e14ec0eb3_b802ac4a7e0941a9e356067dfd2c4f12_message-square-quote.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Customer Stories</div></div></a></li></ul></div><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Security</p></div><ul role="list" class="nav__dd_links_list"><li><a href="/company/trust-center" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb0fe" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb0fe" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696df1419d6732a58ee8ce63_94d64edb7b15a61e7804eed6daf31083_check-badge.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Trust Center</div></div></a></li><li><a href="/security-advisories" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb107" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb107" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975ba9dff321c25ddb7_9a1c14dcbff9ea42680fdaeb3898ea19_bell.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Security Advisories</div></div></a></li></ul></div><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Get help</p></div><ul role="list" class="nav__dd_links_list"><li><a href="https://docs.cloudbees.com/" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb115" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb115" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09754634f217840601fe_649681123281e64f9f98cc26c7df78f9_book-marked.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Documentation</div></div></a></li><li><a href="https://support.cloudbees.com/hc/en-us" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb11e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb11e" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976b80f2c2e10077fae_d10dce94a66917c7f89f23e94160623b_life-buoy.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Support</div></div></a></li><li><a href="/services" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b66:21a8087d-8638-67de-c541-223e68ebb127" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="21a8087d-8638-67de-c541-223e68ebb127" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%2221a8087d-8638-67de-c541-223e68ebb0b3%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b66%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09760bb9a89b4cd2c5b1_8b27954584753d420f4b82dc295da19f_user-check.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Customer Success &amp; Professional Services</div></div></a></li></ul></div></div></nav></div></li><li class="nav__list-item"><div data-delay="0" data-hover="false" class="nav__dd w-dropdown"><div dd="small" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b69" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b69" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" class="nav__dd-trigger w-dropdown-toggle"><div>About</div><div class="nav__dd_arrow w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M14.4697 6.96985C14.7626 6.67696 15.2374 6.67696 15.5303 6.96985C15.8231 7.26275 15.8231 7.73754 15.5303 8.0304L10.5303 13.0304C10.2374 13.3233 9.76263 13.3232 9.46973 13.0304L4.46973 8.0304C4.17683 7.7375 4.17683 7.26274 4.46973 6.96985C4.76262 6.67696 5.23738 6.67696 5.53027 6.96985L10 11.4396L14.4697 6.96985Z" fill="white" fill-opacity="0.5"/>
</svg></div></div><nav class="nav__dd-content w-dropdown-list"><div class="nav__dd_menu-wr is-about"><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Company</p></div><ul role="list" class="nav__dd_links_list"><li><a href="/about-us" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce36" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce36" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/697b1a52df58ada7ee5f9df2_8aadef5ab9f241b2aa20fdb150069428_cbinfinity.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">About Us</div></div></a></li><li><a href="/newsroom" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce3f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce3f" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975d714fe3434073553_706f8a7511a42063d1e10a5885077c15_megaphone.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Press and Recognition</div></div></a></li><li><a href="/partners" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce48" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce48" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0975e3fe7c8e139a90bb_b3de2cd5abd8ac9b64c44ef8d8b42a6a_handshake.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Partners</div></div></a></li><li><a href="/careers" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce51" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce51" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link-icon"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a09750bb9a89b4cd2c510_bdd0e13348a8518659eedf4409e714b8_briefcase-business.svg" loading="lazy" alt="" class="nav__dd_link-ic"/></div><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">Careers</div></div></a></li></ul></div><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Compare CloudBees</p></div><ul role="list" class="nav__dd_links_list"><li><a href="/vs" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce5f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce5f" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">CloudBees vs All Competitors</div></div></a></li><li><a href="/blog/cloudbees-vs-github-actions-choosing-a-ci-cd-platform-for-your-business" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce68" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce68" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">vs GitHub Actions</div></div></a></li><li><a href="/vs/cloudbees-vs-gitlab" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:2e5052c0-21c9-c12f-736f-07d0f9da71bc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="2e5052c0-21c9-c12f-736f-07d0f9da71bc" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">vs GitLab</div></div></a></li><li><a href="/vs/cloudbees-vs-harness" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:820dab86-65ae-55c8-e3cd-d57a30f4cb29" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="820dab86-65ae-55c8-e3cd-d57a30f4cb29" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">vs Harness</div></div></a></li><li><a href="/blog/cloudbees-ci-enhancing-jenkins-for-business-and-mission-critical" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce71" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce71" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">vs Jenkins Open Source</div></div></a></li><li><a href="/vs/cloudbees-vs-launchdarkly" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce7a" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce7a" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" class="nav__dd_link w-inline-block"><div class="nav__dd_link_text-wr"><div class="nav__dd_link-title">vs LaunchDarkly</div></div></a></li></ul></div><div class="nav__dd_group"><div class="nav__dd_group_title-wr"><p class="nav__dd_group-title">Featured article</p></div><div class="nav__dd_links_list"><a id="w-node-_8ee7248b-4f5b-1b67-86b3-dfde38e3ce87-38e3ce2f" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b6e:8ee7248b-4f5b-1b67-86b3-dfde38e3ce87" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="8ee7248b-4f5b-1b67-86b3-dfde38e3ce87" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%2C%7B%22componentId%22%3A%228ee7248b-4f5b-1b67-86b3-dfde38e3ce2f%22%2C%22instanceId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b6e%22%7D%5D" href="/blog/introducing-moritz-plassnig-cloudbees-ceo" class="nav__dd_featured-link plausible-event-name--navfeaturedarticleclick w-inline-block"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a314b83b6ac6b428e1c3ef0_Blog%20Hero-Mo%20Plassnig.jpg" loading="eager" sizes="100vw" srcset="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a314b83b6ac6b428e1c3ef0_Blog%20Hero-Mo%20Plassnig-p-500.jpg 500w, https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a314b83b6ac6b428e1c3ef0_Blog%20Hero-Mo%20Plassnig-p-800.jpg 800w, https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a314b83b6ac6b428e1c3ef0_Blog%20Hero-Mo%20Plassnig-p-1080.jpg 1080w, https://cdn.prod.website-files.com/695e1939655d6c0175b126da/6a314b83b6ac6b428e1c3ef0_Blog%20Hero-Mo%20Plassnig.jpg 1280w" alt="2026 Winner Cybersecurity Excellence Awards" class="nav__dd_featured-img"/><div class="nav__dd_featured_text-group"><div class="nav__dd_featured_text-wr"><div class="nav__dd_link-title">A Note from CloudBees’ New CEO</div></div><div class="btn is-text-sm"><div>Explore</div><div class="icon-regular w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5137 6.46826C13.8078 6.17663 14.2825 6.17816 14.5742 6.47217L19.5322 11.4722C19.8219 11.7646 19.8221 12.2365 19.5322 12.5288L14.5742 17.5288C14.2826 17.8225 13.8077 17.824 13.5137 17.5327C13.2198 17.2411 13.2175 16.7663 13.5088 16.4722L17.2002 12.7505H5C4.58595 12.7505 4.25026 12.4145 4.25 12.0005C4.25 11.5863 4.58579 11.2505 5 11.2505H17.2002L13.5088 7.52881C13.2173 7.2348 13.2199 6.75994 13.5137 6.46826Z" fill="currentcolor"/>
</svg></div></div></div></a></div></div></div></nav></div></li></ul></nav><div class="header__buttons-wr"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b74" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b74" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="https://www.cloudbees.com/contact-us" data-wf-event-ids="157073893" class="btn-nav btn-primary w-inline-block"><div class="btn-text">Book a demo</div></a></div><a aria-label="Open navigation menu" data-w-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b79" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a857:82ab6d2f-ec31-6cad-cafc-b3b1e8663b79" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82ab6d2f-ec31-6cad-cafc-b3b1e8663b79" data-wf-component-context="%5B%7B%22componentId%22%3A%2282ab6d2f-ec31-6cad-cafc-b3b1e8663b3a%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a857%22%7D%5D" href="#" class="nav__menu-button w-inline-block"><div class="nav__menu-icon is-lines w-embed"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.665 15.083C17.0791 15.083 17.4149 15.4189 17.415 15.833C17.415 16.2472 17.0793 16.583 16.665 16.583H3.33203C2.91797 16.5828 2.58203 16.2471 2.58203 15.833C2.58221 15.4191 2.91808 15.0832 3.33203 15.083H16.665ZM16.665 9.25C17.0793 9.25 17.415 9.58579 17.415 10C17.415 10.4142 17.0793 10.75 16.665 10.75H3.33203C2.91797 10.7498 2.58203 10.4141 2.58203 10C2.58203 9.58589 2.91797 9.25018 3.33203 9.25H16.665ZM16.665 3.41699C17.0793 3.41699 17.415 3.75278 17.415 4.16699C17.4149 4.58106 17.0791 4.91699 16.665 4.91699H3.33203C2.91808 4.91682 2.58221 4.58095 2.58203 4.16699C2.58203 3.75289 2.91797 3.41717 3.33203 3.41699H16.665Z" fill="white"/>
</svg></div></a></div></div><div class="header__bg"></div></header></div><div class="page-styles"><div class="w-embed"><style>
.article_rte .w-code-block {
background-color: var(--gray--100) !important;
border-radius: 1rem;
font-size: var(--_typography---size--p2)!important;
}
.article_rte h1 > strong,
.article_rte h2 > strong,
.article_rte h3 > strong,
.article_rte h4 > strong,
.article_rte h5 > strong{
font-weight:normal;
}
.article_rte blockquote > strong {
display: block;
margin-top: 16px;
color: var(--_tokens---text--inverted-primary);
font-size: var(--_typography---size--p2);
line-height: var(--_typography---height--p2);
font-weight: 400;
}
.article_rte blockquote > strong > em {
display: block;
margin-top: 4px;
color: var(--_tokens---text--inverted-secondary);
font-size: var(--_typography---size--p3);
line-height: var(--_typography---height--p3);
font-weight: 400;
font-style: normal;
}
.toc_nav::-webkit-scrollbar {
width: 0.625rem !important;
}
/* Track */
.toc_nav::-webkit-scrollbar-track {
background: transparent;
margin-top: 0.75rem;
margin-bottom: 0.75rem;
}
/* Handle */
.toc_nav::-webkit-scrollbar-thumb {
background: var(--_tokens---border--inverted-default);
border-radius: 6px;
border: 3px solid #FAFAFA;
}
.w-richtext figure.w-richtext-align-fullwidth {
border-radius: 0.75rem;
overflow: hidden;
}
</style></div><div class="cc-element w-embed"><style>
.cms_share-link .is-url,
.cms_share-link .is-url-check {
transition: opacity 200ms ease;
}
.cms_share-link .is-url {
opacity: 1 !important;
}
.cms_share-link .is-url-check {
opacity: 0 !important;
}
.cms_share-link.is-copied .is-url {
opacity: 0 !important;
}
.cms_share-link.is-copied .is-url-check {
opacity: 1 !important;
}
</style></div><div class="cc-element w-embed"><style>
/* === TABLE LAYOUT === */
.w-embed table {
width: 100%;
min-width: 100%;
table-layout: fixed;
border: 1px solid var(--_tokens---border--inverted-default);
border-radius: 0.75rem;
background-color: var(--gray-alpha--02);
overflow: hidden;
border-collapse: separate;
position: relative;
z-index: 0;
margin: 1.5rem 0;
}
.w-embed table td ul {
margin-top: 0rem;
margin-bottom: 0rem;
gap: 0;
}
.w-embed table td ul li {
margin-bottom: 0rem;
}
/* === CELLS === */
.w-embed th,
.w-embed td {
max-width: 33.33%;
padding: 1rem;
position: relative;
z-index: 1;
}
.w-embed td {
border-top: 1px solid var(--_tokens---border--inverted-default);
vertical-align: top;
font-weight: 400;
}
.w-embed th:not(:first-child),
.w-embed td:not(:first-child) {
border-left: 1px solid var(--_tokens---border--inverted-default);
}
/* Remove border on last row and first if there is no header */
.w-embed tbody tr:last-child {
border-bottom: none !important;
}
.w-embed table:not(:has(thead)) tbody tr:first-child td {
border-top: none;
}
/* tight head cells */
.table-feature-comparison th:not(:first-child) {
padding: 1rem 0.375rem;
}
/* Alignment */
.w-embed th {
text-align: left;
vertical-align: middle;
}
/* Header background */
.w-embed thead {
background-color: var(--gray-alpha--02);
}
/* === TEXT === */
.w-embed th {
font-size: var(--_typography---size--p2);
line-height: var(--_typography---height--p2);
color: var(--_tokens---text--inverted-primary);
font-weight: 500;
}
/* First column (feature) */
.w-embed td:first-child {
font-size: var(--_typography---size--p2);
line-height: var(--_typography---height--p2);
color: var(--_tokens---text--inverted-primary);
}
/* Default cells */
.w-embed td {
font-size: var(--_typography---size--p2);
line-height: var(--_typography---height--p2);
color: var(--_tokens---text--inverted-primary);
white-space: normal;
overflow-wrap: break-word;
}
/* Caption */
.w-embed caption {
caption-side: bottom;
padding-top: 0.75rem;
font-size: var(--_typography---size--p3);
line-height: var(--_typography---height--p3);
color: var(--_tokens---text--inverted-secondary);
}
/* === ADDITIONAL COLORS === */
.table-pass {
color: var(--_tokens---text--inverted-success);
font-weight: 700;
}
.table-fail {
color: var(--_tokens---text--inverted-error);
font-weight: 700;
}
.table-high {
color: var(--_tokens---text--inverted-warning);
font-weight: 700;
}
.table-muted {
color: var(--_tokens---text--inverted-misc);
}
.table-check {
color: var(--_tokens---text--inverted-success);
font-weight: 700;
}
.table-cross {
color: var(--_tokens---text--inverted-error);
font-weight: 700;
}
.table-feature-title {
display: block;
font-weight: 600;
}
.table-feature-description {
display: block;
color: var(--_tokens---text--inverted-secondary);
font-size: var(--_typography---size--p3);
line-height: var(--_typography---height--p3);
}
.table-highlight-column {
background: var(--blue--100);
}
/* === COMPARISON TABLE === */
.table-feature-comparison table {
table-layout: fixed;
}
.table-feature-comparison td,
.table-feature-comparison th {
vertical-align: middle;
}
.table-feature-comparison th:first-child,
.table-feature-comparison td:first-child {
text-align: left;
}
.table-feature-comparison th:not(:first-child),
.table-feature-comparison td:not(:first-child) {
text-align: center;
}
.table-feature-comparison tbody tr:nth-child(even) td {
background-color: var(--gray-alpha--02);
}
.table-feature-comparison thead th:nth-child(2) {
background-color: var(--blue--500);
color: white;
}
.table-feature-comparison tbody tr td:nth-child(2) {
background-color: var(--blue--100);
}
/* === STATES === */
@media (max-width: 480px) {
.w-embed table {
min-width: 896px;
}
}
@media (max-width: 1279px) {
.table-scroll-wide {
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
}
.table-scroll-wide table {
min-width: 720px;
}
}
/* Scrollbar */
.table-scroll-wide::-webkit-scrollbar {
height: 0.625rem;
}
.table-scroll-wide::-webkit-scrollbar-track {
background: transparent;
margin-left: 0.75rem;
margin-right: 0.75rem;
}
.table-scroll-wide::-webkit-scrollbar-thumb {
background: var(--_tokens---border--inverted-default);
border-radius: 6px;
border: 3px solid white;
}
/* Mobile scroll */
@media (max-width: 480px) {
.w-embed:has(table) {
max-width: 100%;
}
/* Make embed a scroll container */
.w-embed:has(table) .table-scroll {
width: 100vw;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
margin-left: calc(var(--_spacing---padding--side-no-frame) * -1);
margin-right: calc(var(--_spacing---padding--side-no-frame) * -1);
padding-left: var(--_spacing---padding--side-no-frame);
padding-right: var(--_spacing---padding--side-no-frame);
}
.w-embed:has(table) table {
width: 600px;
min-width: 600px;
}
.table-scroll-wide table {
width: 720px !important;
min-width: 720px !important;
}
}
</style></div><div class="cc-element w-embed"><style>
#content code:not(pre code),
.w-richtext code:not(pre code) {
font-family: 'Roboto Mono', monospace !important;
font-weight: 500 !important;
font-size: 1rem !important;
color: var(--_tokens---text--inverted-primary);
line-height: 1.65 !important;
background: transparent !important;
white-space: nowrap;
}
.code-block p {
margin-top: 0rem;
margin-bottom: 0rem;
color: var(--_tokens---text--inverted-primary);
}
/* Prism override for code blocks */
.code-block pre[class*="language-"] {
padding: 0 1rem 0 0 !important;
margin: 0 !important;
overflow: visible !important;
}
.code-block code[class*="language-"],
.code-block pre[class*="language-"] {
font-family: "Roboto Mono", monospace !important;
font-weight: 400 !important;
font-size: 1rem !important;
line-height: 1.65 !important;
background: transparent !important;
}
/* enable wrapping (Prism disables this by default) */
.code-block pre[class*="language-"],
.code-block code[class*="language-"] {
white-space: pre-wrap !important;
word-break: break-word;
}
/* Comments */
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #00000099 !important;
}
.token.punctuation {
color: #212121 !important;
}
/* Keywords (if, else, const, return, etc.) */
.token.keyword,
.token.atrule {
color: #9E1891 !important;
}
/* Functions and classes */
.token.function,
.token.class-name {
color: #2A58C5 !important;
}
/* Strings */
.token.string,
.token.char,
.token.attr-value,
.token.inserted {
color: #21770F !important;
}
/* Numbers and booleans */
.token.number,
.token.boolean,
.token.constant {
color: #00777B !important;
}
/* Variables / properties */
.token.property,
.token.symbol,
.token.builtin {
color: #CB3232 !important;
}
/* HTML / CSS selectors and attributes */
.token.selector,
.token.attr-name,
.token.tag {
color: #800000;
}
/* Operators and punctuation */
.token.operator,
.token.entity,
.token.url {
color: #212121 !important;
background: none !important;
}
/* Deleted / diff */
.token.deleted {
color: #b31d28;
}
</style></div></div><main x-clip="" class="main-wrapper"><section class="global_section btm-20"><div class="global_frame bg-alfa"><div class="global_container"><div class="blog_heading-wr"><p class="ts-overline">How-tos and Support</p><h1 data-w-id="e08e7190-573b-1ed5-0f56-04bb938f6aff" class="ts-h3 ts-wrap-balance">Comparing Elixir and Go</h1><div data-w-id="0199c7fc-edc8-ee9f-99d2-5aa4a810855d" class="blog_hero_info-row"><p class="ts-p2"><span id="result" class="read-time">15</span> minutes to read</p></div></div></div></div><div class="section_bg"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696bc00bb646a7a2194a1211_541c0df5f2322e6e94744318be17d15b_bg%20gradient.avif" loading="lazy" alt="" class="section_bg_blur"/></div></section><section x-clip="" class="global_section is-detail-white z-index-1"><div class="global_container"><div class="article_layout"><aside data-toc="" aria-labelledby="toc-heading" class="article_right-wr"><div class="blog_aside-wr"><div class="article_details"><div class="ts-overline in-details">Written by</div><div class="blog_author-wr in-details"><p class="ts-p2 in-details">Barry Jones</p></div><div class="spacer is-8"></div><div class="ts-overline in-details">Published on</div><p class="ts-p2 in-details">January 26, 2017</p></div><div class="toc_wrapper"><h2 id="toc-heading" class="ts-overline tc-inverted-secondary">Table of contents</h2><nav data-toc-scroll="" aria-label="Page sections" class="toc_nav"><ul data-offset="6rem" data-toc-list="" role="list" class="toc_list"><li data-toc-template="" class="toc_li"><a data-wf-native-id-path="7b3ff569-4297-ec03-dc41-01c5b57e6fba" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7b3ff569-4297-ec03-dc41-01c5b57e6fba" href="#" class="toc_link w-inline-block"><span data-toc-label="">Introduction</span></a></li></ul></nav></div><div class="blog_share-wr"><h2 id="toc-heading" class="ts-overline tc-inverted-secondary">Share</h2><div class="share-row"><a title="Copy URL" aria-label="Copy URL" data-wf-native-id-path="7b3ff569-4297-ec03-dc41-01c5b57e6fbe" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7b3ff569-4297-ec03-dc41-01c5b57e6fbe" href="#" class="cms_share-link is-inverted w-inline-block"><div class="icon-medium is-url w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M9.99825 13C10.4277 13.5741 10.9756 14.0491 11.6048 14.3929C12.234 14.7367 12.9298 14.9411 13.6449 14.9923C14.36 15.0435 15.0778 14.9403 15.7496 14.6897C16.4214 14.4392 17.0314 14.047 17.5382 13.54L20.5382 10.54C21.449 9.59695 21.953 8.33394 21.9416 7.02296C21.9302 5.71198 21.4044 4.45791 20.4773 3.53087C19.5503 2.60383 18.2962 2.07799 16.9853 2.0666C15.6743 2.0552 14.4113 2.55918 13.4682 3.46997L11.7482 5.17997M13.9982 11C13.5688 10.4258 13.0209 9.95078 12.3917 9.60703C11.7625 9.26327 11.0667 9.05885 10.3516 9.00763C9.63645 8.95642 8.91866 9.0596 8.2469 9.31018C7.57514 9.56077 6.96513 9.9529 6.45825 10.46L3.45825 13.46C2.54746 14.403 2.04348 15.666 2.05488 16.977C2.06627 18.288 2.59211 19.542 3.51915 20.4691C4.44619 21.3961 5.70026 21.9219 7.01124 21.9333C8.32222 21.9447 9.58524 21.4408 10.5282 20.53L12.2382 18.82" stroke="currentcolor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg></div><div class="icon-medium is-url-check w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M19.4697 5.46979C19.7626 5.1769 20.2373 5.1769 20.5302 5.46979C20.823 5.76269 20.8231 6.23747 20.5302 6.53034L9.53022 17.5303C9.23735 17.8232 8.76257 17.8232 8.46967 17.5303L3.46967 12.5303C3.17678 12.2374 3.17678 11.7627 3.46967 11.4698C3.76256 11.1769 4.23732 11.1769 4.53022 11.4698L8.99994 15.9395L19.4697 5.46979Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Share on LinkedIn" data-wf-native-id-path="7b3ff569-4297-ec03-dc41-01c5b57e6fc1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7b3ff569-4297-ec03-dc41-01c5b57e6fc1" href="#" class="cms_share-link is-inverted w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5ZM8.52076 7.00272C8.52639 7.95897 7.81061 8.54819 6.96123 8.54397C6.16107 8.53975 5.46357 7.90272 5.46779 7.00413C5.47201 6.15897 6.13998 5.47975 7.00764 5.49944C7.88795 5.51913 8.52639 6.1646 8.52076 7.00272ZM12.2797 9.76176H9.75971H9.7583V18.3216H12.4217V18.1219C12.4217 17.742 12.4214 17.362 12.4211 16.9819C12.4203 15.9681 12.4194 14.9532 12.4246 13.9397C12.426 13.6936 12.4372 13.4377 12.5005 13.2028C12.7381 12.3253 13.5271 11.7586 14.4074 11.8979C14.9727 11.9864 15.3467 12.3141 15.5042 12.8471C15.6013 13.1803 15.6449 13.5389 15.6491 13.8863C15.6605 14.9339 15.6589 15.9815 15.6573 17.0292C15.6567 17.399 15.6561 17.769 15.6561 18.1388V18.3202H18.328V18.1149C18.328 17.6629 18.3278 17.211 18.3275 16.7591C18.327 15.6296 18.3264 14.5001 18.3294 13.3702C18.3308 12.8597 18.276 12.3563 18.1508 11.8627C17.9638 11.1286 17.5771 10.5211 16.9485 10.0824C16.5027 9.77019 16.0133 9.5691 15.4663 9.5466C15.404 9.54401 15.3412 9.54062 15.2781 9.53721C14.9984 9.52209 14.7141 9.50673 14.4467 9.56066C13.6817 9.71394 13.0096 10.0641 12.5019 10.6814C12.4429 10.7522 12.3852 10.8241 12.2991 10.9314L12.2797 10.9557V9.76176ZM5.68164 18.3244H8.33242V9.76733H5.68164V18.3244Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Share on Facebook" data-wf-native-id-path="7b3ff569-4297-ec03-dc41-01c5b57e6fc3" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7b3ff569-4297-ec03-dc41-01c5b57e6fc3" href="#" class="cms_share-link is-inverted w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Share on Twitter" data-wf-native-id-path="7b3ff569-4297-ec03-dc41-01c5b57e6fc5" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7b3ff569-4297-ec03-dc41-01c5b57e6fc5" href="#" class="cms_share-link is-inverted w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M17.1761 4H19.9362L13.9061 10.7774L21 20H15.4456L11.0951 14.4066L6.11723 20H3.35544L9.80517 12.7508L3 4H8.69545L12.6279 9.11262L17.1761 4ZM16.2073 18.3754H17.7368L7.86441 5.53928H6.2232L16.2073 18.3754Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Share on Reddit" data-wf-native-id-path="65fe0228-b88a-02ec-eceb-5a1bc4126e21" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="65fe0228-b88a-02ec-eceb-5a1bc4126e21" href="#" class="cms_share-link is-inverted w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.797 5.19567C15.0353 6.20602 15.9426 6.95868 17.026 6.95868C18.2908 6.95868 19.3162 5.9333 19.3162 4.66849C19.3162 3.40367 18.2908 2.3783 17.026 2.3783C15.9201 2.3783 14.9978 3.16209 14.783 4.20465C12.9309 4.40328 11.4846 5.9741 11.4846 7.87776C11.4846 7.88205 11.4846 7.88527 11.4846 7.88957C9.47038 7.97439 7.63114 8.54774 6.17091 9.45287C5.6287 9.03305 4.94797 8.78288 4.20927 8.78288C2.4366 8.78288 1 10.2195 1 11.9922C1 13.2784 1.75588 14.3865 2.84783 14.8986C2.95412 18.6244 7.01376 21.621 12.0075 21.621C17.0013 21.621 21.0663 18.6211 21.1672 14.8922C22.2506 14.3768 23 13.272 23 11.9932C23 10.2206 21.5634 8.78396 19.7907 8.78396C19.0552 8.78396 18.3777 9.03198 17.8366 9.44857C16.3635 8.53701 14.5039 7.96365 12.4692 7.88742C12.4692 7.8842 12.4692 7.88205 12.4692 7.87883C12.4692 6.51524 13.4828 5.38357 14.797 5.19782V5.19567ZM6.04207 14.029C6.09575 12.8651 6.86881 11.9718 7.7675 11.9718C8.66618 11.9718 9.35334 12.9155 9.29966 14.0794C9.24597 15.2433 8.57491 15.6663 7.67516 15.6663C6.7754 15.6663 5.98838 15.1928 6.04207 14.029ZM16.2486 11.9718C17.1484 11.9718 17.9214 12.8651 17.974 14.029C18.0277 15.1928 17.2396 15.6663 16.3409 15.6663C15.4423 15.6663 14.7701 15.2444 14.7164 14.0794C14.6628 12.9155 15.3489 11.9718 16.2486 11.9718ZM15.1792 16.7218C15.3478 16.739 15.4551 16.914 15.3897 17.0707C14.8367 18.3925 13.5311 19.3212 12.0075 19.3212C10.4839 19.3212 9.1794 18.3925 8.62538 17.0707C8.55988 16.914 8.66725 16.739 8.83582 16.7218C9.82362 16.6219 10.8919 16.5672 12.0075 16.5672C13.1231 16.5672 14.1903 16.6219 15.1792 16.7218Z" fill="currentcolor"/>
</svg>
</div></a></div></div></div></aside><article class="article_content-wr"><div id="content" data-content="" class="article_rte w-richtext"><p>Elixir and Go have both grown significantly in popularity over the past few years, and both are often reached for by developers looking for high concurrency solutions. The two languages follow many similar principles, but both have made some core tradeoffs that affect their potential use cases.</p><p>Let&#x27;s compare the two by taking a look at their backgrounds, their programming styles, and how they deal with concurrency.</p><h2>Foundations</h2><p><a href="https://golang.org/" data-wf-native-id-path="fa29ee4c-89d6-f699-b770-6ab9622f6fb6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="fa29ee4c-89d6-f699-b770-6ab9622f6fb6">Go/Golang</a> has been developed by Google since <a href="https://en.wikipedia.org/wiki/Go_(programming_language)#History" data-wf-native-id-path="09b1bc60-fbd1-597c-f3f3-82b18c659b8f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="09b1bc60-fbd1-597c-f3f3-82b18c659b8f">2009</a> and runs as a compiled native binary for the architecture where it&#x27;s deployed. It began as an experiment to create a new programming language that addressed the main criticisms of other programming languages while maintaining their strengths.</p><p>Go does an excellent job of achieving the balance of development speed, concurrency, performance, stability, portability, and maintainability that it set out to reach. As a result, Docker and InfluxDB are built with Go while <a href="https://en.wikipedia.org/wiki/Go_(programming_language)#Projects_using_Go" data-wf-native-id-path="1b16928a-0ebf-aaa4-3f61-b6aa14140e04" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="1b16928a-0ebf-aaa4-3f61-b6aa14140e04">many major companies</a> including Google, Netflix, Uber, Dropbox, SendGrid and SoundCloud are using it for assortments of tools.</p><p><a href="http://elixir-lang.org/" data-wf-native-id-path="c01e379b-bad8-c450-8991-49061a285ff8" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="c01e379b-bad8-c450-8991-49061a285ff8">Elixir</a> has been developed by <a href="https://twitter.com/josevalim" data-wf-native-id-path="019721a2-2719-c64a-969e-76607ce34aa9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="019721a2-2719-c64a-969e-76607ce34aa9">Jose Valim</a> at Plataformatec since <a href="https://en.wikipedia.org/wiki/Elixir_(programming_language)#History" data-wf-native-id-path="e2d65a7d-5fe7-2485-03fd-35762eec9cb1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="e2d65a7d-5fe7-2485-03fd-35762eec9cb1">2011</a> and runs on the BEAM virtual machine, also known as the Erlang VM.</p><p>Erlang has been developed by <a href="https://www.ericsson.com/news/141204-inside-erlang-creator-joe-armstrong-tells-his-story_244099435_c" data-wf-native-id-path="adce5abf-5010-8600-129f-d0a000b20eb2" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="adce5abf-5010-8600-129f-d0a000b20eb2">Ericsson since 1986</a> for use in highly available, distributed phone systems. It has since expanded into numerous other areas, such as web servers, and has achieved <a href="https://en.wikipedia.org/wiki/High_availability#Percentage_calculation" data-wf-native-id-path="edc0818d-368f-f7ac-5081-c0628d779c52" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="edc0818d-368f-f7ac-5081-c0628d779c52">nine 9s</a> of availability (31 milliseconds/year of downtime).</p><p>Elixir was designed to enable higher extensibility and productivity in the Erlang VM while maintaining compatibility with the Erlang ecosystem. It achieves that goal by allowing use of Erlang libraries in Elixir code and vice versa.</p><p>For purposes of this article and to avoid repetition, we&#x27;ll refer to Elixir/Erlang/BEAM as &quot;Elixir.&quot;</p><p>A <a href="https://github.com/doomspork/elixir-companies" data-wf-native-id-path="fa1ed8fe-76f2-2bdc-2e56-7bac8f113890" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="fa1ed8fe-76f2-2bdc-2e56-7bac8f113890">number of companies</a> are using Elixir in production, including Discord, Bleacher Report, Teachers Pay Teachers, Puppet Labs, Seneca Systems, and FarmBot. Many other projects are built with Erlang, including WhatsApp, Facebook&#x27;s chat service, Amazon&#x27;s CloudFront CDN, Incapsula, Heroku&#x27;s routing and logging layers, CouchDB, Riak, RabbitMQ, and about half of the world&#x27;s phone systems.</p><h2>Programming Style</h2><p>The core principles of each run-time need to be understood to make a solid comparison of Elixir and Go, as these building blocks are where everything else is derived.</p><p>Go is a language that will be more familiar to people coming from a traditional C-style programming background, even though the language makes some decisions that favor a functional programming style. You&#x27;ll see static typing, pointers, and structs that will feel very familiar.</p><p>Functions can be created and attached to struct types, but the style is more composable to facilitate the growth of projects over time. Rather than embedding the functions within an Object that must be expanded, the function can be created anywhere and attached to the type.</p><p>If a method needs to be called with more than one type of struct, an interface can be defined for the method to provide greater flexibility. Unlike interfaces from typical object-oriented programming languages where an object must be defined initially to implement a specific interface, interfaces in Go are automatically applied to anything that matches them. Here is a <a href="https://gobyexample.com/interfaces" data-wf-native-id-path="260ed4bc-ef1d-4fbe-05fd-e3d454e7299d" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="260ed4bc-ef1d-4fbe-05fd-e3d454e7299d">good example of Go interface code</a>.</p><p>Elixir favors a more functional style but blends some principles from object-oriented languages that make the transition seem less foreign.</p><p>Variables are immutable, and message passing is used so no pointers are passed around, meaning that function calls are very literal in their operation. Arguments are passed in, a result is returned with no side effects. This simplifies a number of aspects of development, including testing and code readability.</p><p>Due to immutable data, common operations such as for-loops aren&#x27;t available because incrementing a counter isn&#x27;t an option. Instead, recursion is used for these operations, although the Enum library provides common iterative patterns in a manner that is comfortable.</p><p>Because recursion is so heavily used, Elixir also utilizes <a href="http://erlang.org/pipermail/erlang-questions/2016-October/090663.html" data-wf-native-id-path="beb73a23-4c81-423e-dd7a-8d67525fbc29" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="beb73a23-4c81-423e-dd7a-8d67525fbc29">tail call optimization</a>. The compiler detects the last function call in every code path and transforms the last call to the jump so the call stack doesn&#x27;t grow.</p><p>Elixir utilizes pattern matching everywhere, which is very similar to the way that Go leverages interfaces. With Elixir, a function can be defined as:</p><p><code>LANG:python<br/>def example_pattern(%{ &quot;data&quot; =&gt; %{ &quot;nifty&quot; =&gt; &quot;bob&quot;, &quot;other_thing&quot; =&gt; other}}) do<br/> IO.puts(other)<br/>end</code></p><p>Using a map pattern as an argument, that function will only be called if a map with a key of <code>data</code> is passed in that has a nested map which contains a <code>nifty</code> key that has a value of <code>&quot;bob&quot;</code> and an <code>other_thing</code> key. The variable <code>other</code> would be set to its value.</p><p>Pattern matching is used everywhere, from function arguments to variable assignments and especially recursion. Here are a <a href="https://quickleft.com/blog/pattern-matching-elixir/" data-wf-native-id-path="1934ce9e-598c-5124-f845-91216b7b2d99" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="1934ce9e-598c-5124-f845-91216b7b2d99">few good examples of pattern matching</a> to make sense of it. Structs can be defined as types and then utilized in pattern matching as well.</p><p>These approaches are both very similar in principle. Both separate data structures from data operations. Both use matching to define function calls, Go via interfaces and Elixir via pattern matching.</p><p>Even though Go allows functions to be called by a specific type, <code>g.area()</code>, it&#x27;s essentially the same thing as calling <code>area(g)</code>. The only difference in the two is that with Elixir, <code>area()</code> would have to return a result while Go could potentially manipulate a reference in memory.</p><p>Both languages are very composable because of this approach, meaning that large inheritance trees don&#x27;t have to be manipulated, extended, injected, or rebuilt over the life-cycle of a project. This is a significant boon for large projects over time.</p><p>The biggest difference here is that with Go, the patterns are defined outside of a function for reuse but can result in creating a lot of duplicate interfaces if they aren&#x27;t well organized. Elixir can&#x27;t reuse the patterns as easily, but the pattern is always defined in the exact place where it is used.</p><p>Elixir utilizes <a href="https://hexdocs.pm/elixir/typespecs.html" data-wf-native-id-path="12932846-ecd0-978e-9a1f-e0523944b696" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="12932846-ecd0-978e-9a1f-e0523944b696">&quot;strong&quot; typing</a> rather than static typing, and much of it is inferred. Within Elixir, there is no operator overloading, which can seem confusing at first if you want to use a <code>+</code> to concatenate two strings. In Elixir you would use <code>&lt;&gt;</code> instead.</p><p>This will seem tedious if you don&#x27;t understand the reason behind it. The compiler is able to use the explicit operators to infer that whatever is on either side of that plus sign must be a number. Likewise, either side of the <code>&lt;&gt;</code> must be a string.</p><p>Strong typing essentially means dynamic typing where the <a href="https://www.youtube.com/watch?v=JT0ECYZ9FaQ" data-wf-native-id-path="92f88b99-45a7-a741-a76b-f1c97007e7ba" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="92f88b99-45a7-a741-a76b-f1c97007e7ba">compiler (via dialyzer) can catch virtually</a> every type, with the exception of ambiguous arguments in a pattern match (using an <code>_</code> operator to indicate a variable or argument that isn&#x27;t used to avoid allocated memory for it, just as with Go). Code comments can be used to define types in these exception cases. The benefit of this is that you gain most of the benefits of static typing without losing the flexibility and meta programming perks that come from dynamic typing.</p><p>Elixir files can use a .ex extension for compiled code or a .exs extension for scripts that are compiled at run-time, such as shell scripts and so on. Go is always compiled, however the Go compiler is so fast that even with huge code bases it can feel almost instantaneous.</p><h2>Concurrency</h2><p>Concurrency is where the meat of the comparison comes from, and now that you have a basic overview of the language styles, the rest of this will make more sense.</p><p>Traditionally, concurrency has involved threads, which were more heavyweight. More recently, languages have taken to using &quot;light threads&quot; or &quot;green threads,&quot; which essentially use a scheduler inside of a single thread to let different logic take turns.</p><p>This type of concurrency pattern is much more memory efficient but relies on the run-time to dictate its flow. JavaScript has utilized this style for years in the browser. As a simple example, when you hear the term &quot;non-blocking I/O&quot; with JavaScript, it means that code executing in the thread relinquishes control back to the scheduler to do something else when an I/O operation begins.</p><h3>Cooperative versus preemptive scheduling</h3><p>Both Elixir and Go utilize a scheduler to achieve their concurrency models, although both languages naturally spread across multiple processors, while JavaScript does not.</p><p>Elixir and Go both implement scheduling differently. Go utilizes cooperative scheduling, which means that running code must relinquish control back to the scheduler for another operation to have a turn. Elixir utilizes preemptive scheduling, in which each operation has a preset execution window that will be enforced no matter what.</p><p>Cooperative scheduling is more efficient in terms of benchmarking, as preemptive scheduling creates additional execution overhead to enforce. Preemptive scheduling is more consistent, meaning that millions of small operations can&#x27;t be delayed by a single large operation that doesn&#x27;t relinquish control.</p><p>Go programmers have the ability to insert <code>runtime.Gosched()</code> in their code to force more check-ins with the scheduler as a precautionary measure for potential problem code. Run-time enforcement allows more trust of third-party libraries and real-time systems.</p><h3>Goroutines versus processes</h3><p>In order to execute a concurrent operation in Go, we use a goroutine, which is as simple as typing <code>go</code> before your method...any method. So we can go from:</p><p><code>LANG:code<br/>hello(&quot;Bob&quot;)<br/>// To...<br/>go hello(&quot;Bob&quot;)</code></p><p>Elixir is very similar in this regard. Instead of goroutines, you spawn processes (not OS processes, for the sake of clarity). Also note that functions must be inside modules in Elixir.</p><p><code>LANG:code<br/># From...<br/>HelloModule.hello(&quot;Bob&quot;)<br/># To...<br/>spawn(HelloModule, :hello, [&quot;Bob&quot;])<br/># Or by passing a function<br/>spawn fn -&gt; HelloModule.hello(&quot;Bob&quot;) end</code></p><p>The main difference between what&#x27;s happening here is that the <code>go</code> operation returns nothing while the <code>spawn</code> operation returns an id for the process.</p><p>Both systems utilize a similar communication style with these routines via messages queues. Go calls them channels, while Elixir has process mailboxes.</p><p>With Go, a channel can be defined so that anything can pass messages to if it has the channel reference. With Elixir, messages are sent to a process either via the process id or a process name. Channels in Go are defined with types for the messages, while process mailboxes in Elixir utilize pattern matching.</p><p>Sending messages to an Elixir process is equivalent to sending a message to a Go channel monitored by a goroutine. Here&#x27;s a simple example:</p><p><a href="https://gobyexample.com/channels" data-wf-native-id-path="b69e4098-06d8-1e5b-4cd2-5fe868b7c3a7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="b69e4098-06d8-1e5b-4cd2-5fe868b7c3a7">Go channel</a></p><p><code>LANG:code<br/>messages := make(chan string) // Define a channel that accepts strings<br/>go func() { messages &lt;- &quot;ping&quot; }() // Send to messages<br/>msg := &lt;-messages // Listen for new messages<br/>fmt.Println(msg)</code></p><p><a href="http://elixir-lang.org/getting-started/processes.html#send-and-receive]" data-wf-native-id-path="06264807-0ae0-04df-904e-c163a8b24462" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="06264807-0ae0-04df-904e-c163a8b24462">Elixir process mailbox</a></p><p><code>LANG:code<br/>send self(), {:hello, &quot;world&quot;}<br/>receive do<br/> {:hello, msg} -&gt; msg # This reciever will match the pattern<br/> {:world, msg} -&gt; &quot;won&#x27;t match&quot;<br/>end</code></p><p>Both have the ability to set timeouts when listening for messages as well. Because Go has shared memory, goroutines can also directly transform an in-memory reference, although a mutex lock must be used to avoid contention. Ideally, a single goroutine should listen on a channel for updates to shared memory to avoid the need for a mutex lock.</p><p>Beyond this functionality is where things start to expand.</p><p>Erlang defines a set of patterns for best practices when utilizing concurrency and distribution logic all bundled under &quot;OTP&quot;. In most cases with Elixir code, you&#x27;ll never touch the raw <code>spawn</code> and <code>send/receive</code> functions, deferring to the abstractions for this functionality.</p><p>Wrappers include <code>Task</code> for simple <code>async/await</code> style calls; <code>Agent</code> for concurrent processes which maintain and update a shared state; <code>GenServer</code> for more complex custom logic.</p><p>In order to constrain maximum concurrency to a particular queue, Go channels implement buffers which receive a defined number of messages (blocking the sender of at the limit). By default, channels block until something is ready to receive the messages, unless that buffer has been set.</p><p>Elixir process mailboxes default to unlimited messages but can utilize <code>Task.async_stream</code> to define max concurrency for an operation and blocking senders in the same way as limited buffers on a channel.</p><p>Routines in both languages are inexpensive: goroutines are 2KB each, while Elixir processes are 0.5KB each. Elixir processes have their own isolated heap spaces which are individually reclaimed when the process finishes, while goroutines utilize shared memory and an application-wide garbage collector to reclaim resources.</p><h3>Error handling</h3><p>This is probably the single biggest difference in the languages. Go is very explicit about error handling at all levels, from function calls to panics. In Elixir, error handling is considered &quot;code smell.&quot; I&#x27;ll take a second to let you read that again.</p><p>So how does this all work? Remember earlier when we talked about Elixir&#x27;s <code>spawn</code> call returning a process ID? That&#x27;s used for more than just sending messages. It can also be used to monitor the process and check whether it&#x27;s still alive.</p><p>Because processes are so inexpensive, the standard mode of operation in Elixir is to create two. One to run the process and another to supervise the process.</p><p>This approach is called the supervisor pattern, and Elixir applications tend to operate within a supervision tree. The supervisor spawns the process with a different function called <code>spawn_link</code> under the hood that will <a href="http://elixir-lang.org/getting-started/processes.html#links" data-wf-native-id-path="d1b16966-fa95-e0b7-d87c-a51f882f7113" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="d1b16966-fa95-e0b7-d87c-a51f882f7113">crash the spawning process</a> if the spawned process itself crashes. Supervisors handle these and instantly restart the process.</p><p>Here is a <a href="https://github.com/kblake/simple-supervision" data-wf-native-id-path="d4a22b81-8cf4-6a95-8ef1-99f98e921b07" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="d4a22b81-8cf4-6a95-8ef1-99f98e921b07">simple example using a supervised process to do division</a>. Dividing by zero crashes the process, which the supervisor immediately restarts, allowing future operations to continue. It&#x27;s not that error handling doesn&#x27;t exist, it&#x27;s just implemented by supervisors transparently.</p><p>By contrast, Go has no way of tracking the execution of individual goroutines. Error handling is very explicit at every level, leading to a lot of code that looks like this:</p><p><code>LANG:code<br/>b, err := base64.URLEncoding.DecodeString(cookie)<br/>if err != nil {<br/> // Handle error<br/>}</code></p><p>The expectation here is that error handling will exist at the point where an error can occur, whether in a goroutine or not.</p><p>Goroutines can pass error cases to channels in the same way. However, if panics occur, each goroutine is responsible for having its own recovery condition met, or it will crash the entire application. Panics are not equivalent to exceptions in other languages as they are intended to be system level &quot;stop everything&quot; events.</p><p>This condition is perfectly encapsulated by an Out of Memory error. If a goroutine triggers an Out of Memory error, the entire Go application will crash even with proper error handling because of the shared memory state of the run-time.</p><p>With Elixir, because each process has its own heap space, a max heap size can be set per process that would crash the process if reached but would then be independently garbage-collected and restarted without affecting anything else.</p><p>That&#x27;s not to say that Elixir is bullet proof. The VM itself can still run out of memory via other means. But it&#x27;s a containable problem within processes.</p><p>This isn&#x27;t intended to be a knock against Go either. This is a problem faced by virtually every language with shared memory, meaning most every language you&#x27;ve ever heard about. It&#x27;s specifically a strength of the way that Erlang/Elixir was designed.</p><p>Go&#x27;s approach forces developers to handle errors directly at the point that they would occur, which requires explicit design thought and can lead to very well-thought-out applications.</p><p>The main point of the Elixir model is an application that can be expected to run forever, as <a href="https://twitter.com/joeerl" data-wf-native-id-path="f20be9f2-924c-9d5e-be51-0933efbecf99" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="f20be9f2-924c-9d5e-be51-0933efbecf99">Joe Armstrong</a> put it. Just as you can manually call the scheduler with Go, you can also manually implement a version of supervisors in Go via the <a href="http://www.jerf.org/iri/post/2930" data-wf-native-id-path="224ecf26-60dd-b266-7c12-2fa3526cffa9" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="224ecf26-60dd-b266-7c12-2fa3526cffa9">suture library</a>.</p><p>Note: Within handlers that you&#x27;ll implement with Go for most servers, panics are already addressed. Therefore, a crash within a web request that wasn&#x27;t critical enough to kill the entire application won&#x27;t. You&#x27;ll still have to address it on your own goroutines though. Don&#x27;t let this explanation imply that Go is fragile, because it is not.</p><h2>Mutable versus Immutable</h2><p>Understanding the trade-offs that come from mutable versus immutable data is important in a comparison between Elixir and Go.</p><p>Go uses the same style of memory management that most programmers are experienced with via shared memory, pointers, and data structures that can be changed or reassigned. For dealing with transformations of large data structures, this can be much more efficient.</p><p>Immutable data within Elixir utilizes copy-on-write. That means that within the same heap space it really is just passing a pointer to the data, but as soon as you want to do something to it, a new copy is created.</p><p>A list of values, for example, would pass a list of pointers to those immutable values in memory, while sorting would return a list of pointers in a different order since the values in memory themselves can be relied on to go unchanged. Changing a value in the list would return a new list of pointers, including a pointer to the different value. If I want to pass that list to another process however, the entire list including values would be copied to the new heap space.</p><h3>Clustering</h3><p>The other trade-off that comes from mutable versus immutable data comes from clustering. With Go, you have the ability to make remote procedure calls very seamlessly if you want to implement them, but because of pointers and shared memory, if you call a method on another box with an argument that references to something on your machine, it can&#x27;t be expected to function the same way.</p><p>With Elixir, because everything operates with message passing, the entire application stack can be clustered across any number of machines. Data is passed into a function that returns a response. There is no in-memory transformation that occurs as the result of any function call, which allows Elixir to call functions on different heap spaces, different machines, or different data centers entirely in the exact same way as any other function in its local heap space.</p><p>Many applications don&#x27;t require clustering, but there are a number of applications that benefit from it significantly, such as communications systems like chats where users are connected from different machines or horizontally distributed databases. Both have common solutions available via the Phoenix framework&#x27;s channels and Erlang&#x27;s Mnesia database respectively. Clustering is critical to any application&#x27;s ability to horizontally scale without depending on bottlenecked central relay points.</p><h2>Libraries</h2><p>Go has an <a href="https://golang.org/pkg/" data-wf-native-id-path="543b1dd4-a0e9-f9d2-90fe-803a1a93a291" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="543b1dd4-a0e9-f9d2-90fe-803a1a93a291">extensive standard library</a> which will allow most developers to do virtually anything without needing to reach for third-party packages.</p><p>The <a href="https://hexdocs.pm/elixir/Kernel.html" data-wf-native-id-path="d0af5cd0-33f6-e602-7952-01fe14aec298" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="d0af5cd0-33f6-e602-7952-01fe14aec298">Elixir standard lib</a> is more concise but also includes the <a href="http://erlang.org/doc/apps/stdlib/index.html" data-wf-native-id-path="de2b0745-8501-4a48-ff43-badf2783f2b1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="de2b0745-8501-4a48-ff43-badf2783f2b1">Erlang standard lib</a>, which is more thorough and includes three built-in databases, <a href="https://blog.codeship.com/elixir-ets-vs-redis/" data-wf-native-id-path="6705a556-7d2d-a706-1f28-eb1c3b0db494" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6705a556-7d2d-a706-1f28-eb1c3b0db494">ETS/DETS/Mnesia</a>. Other packages must be pulled in from third-party libraries.</p><p>Both Elixir and Go have plenty of third-party packages available. Go uses a direct <code>go get</code> command to import packages remotely, while Elixir uses <a href="http://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html" data-wf-native-id-path="594a5e77-a9c6-a9c7-8939-3b4849367d6f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="594a5e77-a9c6-a9c7-8939-3b4849367d6f">Mix</a>, a build tool that invokes the Hex package manager in a manner that will be familiar for users of most languages.</p><p>Go is still working to standardize a full package-management solution across the language. Between that and the extensive standard library, most people in the Go community seem to favor sticking with the standard lib where possible. There are <a href="https://github.com/golang/go/wiki/PackageManagementTools" data-wf-native-id-path="7a84648c-4a51-7b18-3245-886746d7a20f" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="7a84648c-4a51-7b18-3245-886746d7a20f">several package-management tools</a> already available.</p><h2>Deployment</h2><p>Go deployments are straightforward. A Go application is compiled into a single binary including all of its dependencies that can then be run natively, cross platform, wherever it&#x27;s going. The Go compiler can compile binaries for just about any destination architecture, regardless of the type of machine that you&#x27;re running on. This is one of Go&#x27;s greatest strengths.</p><p>Elixir actually comes with a lot of deployment options, but the primary method is via the excellent distillery package. This wraps up your Elixir application into a binary with all of its dependencies that can be deployed to its destination.</p><p>The biggest difference between the two languages is that compilation for the destination architecture has to be done on that same architecture with Elixir. The documents include several workarounds for this scenario, but the simplest method is to build your release within a Docker container that has the destination architecture.</p><figure class="w-richtext-align-fullwidth w-richtext-figure-type-image"><div><img loading="lazy" alt="Wordpress import https://no-cache.hubspot.com/cta/default/1169977/964db6a6-69da-4366-afea-b129019aff07.png" src="https://cdn.prod.website-files.com/6964c3f9b6de03a57eb64454/6a1ff76e33514a2e01b09e27_https___no-cache.hubspot.com_cta_default_1169977_964db6a6-69da-4366-afea-b129019aff07.png"/></div></figure><p>With both of those approaches, you just stop the currently running code, replace the binary, and restart it as you would with most blue-green style deployments today.</p><h3>Hot reloading</h3><p>Elixir also comes with another deployment option that the BEAM makes possible. It&#x27;s a little bit more complex, but certain types of applications can greatly benefit from it. It&#x27;s called a &quot;hot reload&quot; or &quot;hot upgrade.&quot;</p><p>Distillery goes out of its way to make this easy by just letting you tac on the <code>--upgrade</code> flag to your release build command, but that still doesn&#x27;t mean you should always use it.</p><p>Before talking about when you&#x27;d use it, we need to understand what it does.</p><p>Erlang was developed to power phone systems (OTP stands for Open Telecom Platform) and currently powers about half of them on the planet. It was designed to never go down, which is a complicated problem for deployments when you have active phone calls running through the system.</p><p>How do you deploy without disconnecting everybody on the system? Do you stop new traffic from coming to that server and then politely wait for every single call to finish?</p><p>The answer is no, and that&#x27;s where hot reloads come in.</p><p>Because of the heap isolation between processes, a release upgrade can be deployed without interrupting existing processes. The processes that aren&#x27;t actively running can be replaced, new processes can be deployed side by side with currently running processes while absorbing the new traffic, and the running processes can keep on trucking until they finish their individual jobs.</p><p>That allows you do deploy a system upgrade with millions of calls and let the existing calls finish on their own time without interruption. Imagine replacing a bunch of bubbles in the sky with new bubbles...that&#x27;s basically how hot reloading works; the old bubbles hang around until they pop.</p><p>Understanding that, we can potentially see some scenarios where it might come in handy:</p><ol role="list"><li>A chat system utilizing websockets where users are connected to specific machines</li><li>A job server where you may need to deploy an update without interrupting jobs in progress</li><li>A CDN with huge transfers in progress on a slow connection next to small web requests</li></ol><p>For websockets specifically, this allows deployments to a machine that might have millions of active connections without immediately bombarding the server with millions of reconnection attempts, losing any in progress messages. That&#x27;s why WhatsApp is built on Erlang, by the way. Hot reloading has been used to deploy updates to flight computers while planes were in the air.</p><p>The drawback is that hot reloading is more complicated if you need to roll back. You probably shouldn&#x27;t use it unless you have a scenario where you really do need it. Knowing you have the option is nice.</p><p>Clustering is the same way; you don&#x27;t always need it, but it&#x27;s indispensable when you do. Clustering and hot reloads go hand in hand with a distributed system.</p><h2>Conclusions</h2><p>This article has been a long journey, but hopefully it provides a solid overview of the differences between Elixir and Go. The most helpful way to think about these two languages that I&#x27;ve found is to think of Elixir as an operating system and Go as a specialized program.</p><p>Go works extremely well for engineering exceptionally fast and very focused solutions. Elixir creates an environment where many different programs can coexist, operate, and talk to each other without interfering with each other even during deployments. You&#x27;d utilize Go to build individual microservices. You&#x27;d build multiple microservices within a single Elixir <a href="http://elixir-lang.org/getting-started/mix-otp/dependencies-and-umbrella-apps.html#umbrella-projects" data-wf-native-id-path="334ac1be-db9b-e417-365c-080d214d207b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="334ac1be-db9b-e417-365c-080d214d207b">umbrella</a>.</p><p>Go is more focused and simpler to pick up. Elixir is very straightforward once you get the hang of it, but the world of OTP and expanse of Erlang can be intimidating if your goal is to learn it all before you use it.</p><p>Both are excellent languages that are at the top of my list of recommendations to do virtually anything in programming.</p><p>For very focused code, portable system level tools, performance intensive tasks, and APIs, Go is very hard to beat. For <a href="http://www.phoenixframework.org/" data-wf-native-id-path="82d16b08-0ed7-1a5b-25d4-f1ca1dec2591" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="82d16b08-0ed7-1a5b-25d4-f1ca1dec2591">full-stack web applications</a>, distributed systems, real-time systems, or <a href="http://nerves-project.org/" data-wf-native-id-path="3584d1ca-55e8-878e-de94-d306b4aab0db" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="3584d1ca-55e8-878e-de94-d306b4aab0db">embedded applications</a>, I&#x27;d reach for Elixir.</p></div><template id="code-template" class="code-template"><div class="code-block"><div class="code-header"><div class="code-lang-wr"><div class="code_icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.7841 3.7765C13.9077 3.38125 14.3283 3.16081 14.7236 3.28431C15.1188 3.40784 15.3392 3.82846 15.2157 4.22376L10.2157 20.2238C10.0922 20.6191 9.67163 20.8395 9.27629 20.7159C8.88095 20.5924 8.66059 20.1718 8.7841 19.7765L13.7841 3.7765ZM5.46965 7.46985C5.76254 7.17707 6.23733 7.17704 6.5302 7.46985C6.82306 7.76271 6.82299 8.2375 6.5302 8.5304L3.06047 12.0001L6.5302 15.4699C6.82306 15.7627 6.82299 16.2375 6.5302 16.5304C6.2373 16.8233 5.76254 16.8233 5.46965 16.5304L1.46965 12.5304C1.1768 12.2375 1.17677 11.7627 1.46965 11.4699L5.46965 7.46985ZM17.4696 7.46985C17.7625 7.17708 18.2373 7.17704 18.5302 7.46985L22.5302 11.4699C22.8231 11.7627 22.823 12.2375 22.5302 12.5304L18.5302 16.5304C18.2373 16.8233 17.7625 16.8233 17.4696 16.5304C17.1768 16.2375 17.1768 15.7627 17.4696 15.4699L20.9394 12.0001L17.4696 8.5304C17.1768 8.2375 17.1768 7.76273 17.4696 7.46985Z" fill="#0F0F14"/>
</svg>
</div><p data-lang-code="" class="ts-p1 tc-inverted-primary hide">React</p></div><a aria-label="Copy Code" data-wf-native-id-path="30f24974-5334-06d3-73f0-6705cedbd9c7" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="30f24974-5334-06d3-73f0-6705cedbd9c7" href="#" class="code-copy w-inline-block"><div class="code_icon w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M20 7.25C21.5188 7.25 22.75 8.48122 22.75 10V20C22.75 21.5188 21.5188 22.75 20 22.75H10C8.48122 22.75 7.25 21.5188 7.25 20V10C7.25 8.48122 8.48122 7.25 10 7.25H20ZM10 8.75C9.30964 8.75 8.75 9.30964 8.75 10V20C8.75 20.6904 9.30964 21.25 10 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V10C21.25 9.30964 20.6904 8.75 20 8.75H10ZM14 1.25C15.5142 1.25 16.75 2.48579 16.75 4C16.75 4.41421 16.4142 4.75 16 4.75C15.5858 4.75 15.25 4.41421 15.25 4C15.25 3.31421 14.6858 2.75 14 2.75H4C3.31421 2.75 2.75 3.31421 2.75 4V14C2.75 14.6858 3.31421 15.25 4 15.25C4.41421 15.25 4.75 15.5858 4.75 16C4.75 16.4142 4.41421 16.75 4 16.75C2.48579 16.75 1.25 15.5142 1.25 14V4C1.25 2.48579 2.48579 1.25 4 1.25H14Z" fill="currentcolor"/>
</svg>
</div></a></div><div class="code-body"></div></div></template></article></div></div></section><section class="global_section tb-96"><div class="global_container"><div data-w-id="3673e385-3f2b-0276-7de5-d26c9c2e0219" style="-webkit-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 2rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0" class="heading-wr is-side"><h2>Read next</h2><a data-wf-native-id-path="3673e385-3f2b-0276-7de5-d26c9c2e021c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="3673e385-3f2b-0276-7de5-d26c9c2e021c" href="/blog" class="btn-secondary btn-md w-inline-block"><div class="btn-text">Explore All</div></a></div><div class="res_col-wr w-dyn-list"><div fs-list-load="pagination" fs-list-element="list" role="list" class="res_list w-dyn-items"><div role="listitem" class="w-dyn-item"><a data-wf-native-id-path="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200_instance-0" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200" data-wf-cms-context="%5B%7B%22collectionId%22%3A%226a1fe2a4a11dca1afc48dd15%22%2C%22itemId%22%3A%226a8c99a9a4b4609f63715f18%22%7D%5D" href="/blog/who-owns-ai-generated-code-failures" class="guide_card w-inline-block"><div class="res_card_text-wr"><div class="res_card_date-wr"><p fs-list-field="tag" class="ts-p2-500">Industry Insights</p><div class="res_card_dot"></div><p fs-list-field="tag" class="ts-p2-500">September 9, 2026</p></div><p fs-list-field="title" class="ts-h5 ts-3lines">When AI breaks production, who is accountable?</p></div></a></div><div role="listitem" class="w-dyn-item"><a data-wf-native-id-path="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200_instance-1" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200" data-wf-cms-context="%5B%7B%22collectionId%22%3A%226a1fe2a4a11dca1afc48dd15%22%2C%22itemId%22%3A%226a8c93afb8ce9874256c8b3e%22%7D%5D" href="/blog/every-tool-is-green-can-you-ship" class="guide_card w-inline-block"><div class="res_card_text-wr"><div class="res_card_date-wr"><p fs-list-field="tag" class="ts-p2-500">Industry Insights</p><div class="res_card_dot"></div><p fs-list-field="tag" class="ts-p2-500">September 9, 2026</p></div><p fs-list-field="title" class="ts-h5 ts-3lines">Every tool is green. Can you ship?</p></div></a></div><div role="listitem" class="w-dyn-item"><a data-wf-native-id-path="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200_instance-2" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="ddedbf7a-7ece-7a1f-0863-9dcbf0d88200" data-wf-cms-context="%5B%7B%22collectionId%22%3A%226a1fe2a4a11dca1afc48dd15%22%2C%22itemId%22%3A%226a8605f48a480aa38550e626%22%7D%5D" href="/blog/smart-tests-high-failure-rate-tests-quarantine" class="guide_card w-inline-block"><div class="res_card_text-wr"><div class="res_card_date-wr"><p fs-list-field="tag" class="ts-p2-500">Product Updates</p><div class="res_card_dot"></div><p fs-list-field="tag" class="ts-p2-500">August 20, 2026</p></div><p fs-list-field="title" class="ts-h5 ts-3lines">When red doesn’t mean broken, your pipeline stops meaning anything</p></div></a></div></div></div></div></section><section class="global_section"><div class="cc-element w-embed"><style>
:root {
--mkto-space-xl: 1.5rem;
--mkto-space-lg: 1rem;
--mkto-space-md: 0.75rem;
--mkto-radius-lg: 1.5rem;
--mkto-radius-md: 0.75rem;
--mkto-radius-sm: 1.25rem;
--mkto-field-height: 3rem;
}
@media (max-width: 767px) {
:root {
--mkto-space-xl: 1.25rem;
}
}
/* Loader */
.mkto-loading .mkto-form-wrapper {
display: none;
}
.mkto-loading .mkto-loader {
display: block;
}
.mkto-form-wrapper {
position: relative;
}
.contact_form-wr .mkto-loader {
width: 48px;
height: 48px;
margin: 80px auto;
border-radius: 50%;
border: 3px solid rgba(255, 255, 255, 0.15);
border-top-color: #fff;
animation: mkto-spin 0.9s linear infinite;
}
@keyframes mkto-spin {
to {
transform: rotate(360deg);
}
}
/* Form */
#mktoForm_1037 {
font-family: var(--_typography---text-font) !important;
padding: var(--mkto-space-xl);
width: 100% !important;
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: var(--mkto-space-xl);
}
#mktoForm_1037 .mktoFormRow {
margin: 0 !important;
width: calc(50% - (var(--mkto-space-xl) / 2));
box-sizing: border-box;
}
@media (max-width: 767px) {
#mktoForm_1037 .mktoFormRow {
width: 100% !important;
}
}
#mktoForm_1037 .mktoOffset,
#mktoForm_1037 .mktoGutter,
#mktoForm_1037 .mktoClear {
display: none !important;
}
#mktoForm_1037 .mktoFormCol {
width: 100% !important;
margin-bottom: 0 !important;
}
#mktoForm_1037 .mktoFormRow:has(input[type='hidden']),
#mktoForm_1037 .mktoFormRow:has(.mktoPlaceholder) {
display: none;
}
#mktoForm_1037 .mktoFieldWrap,
#mktoForm_1037 input,
#mktoForm_1037 label {
width: 100% !important;
}
#mktoForm_1037 .mktoField {
width: 100% !important;
box-sizing: border-box;
}
#mktoForm_1037 .mktoFieldWrap {
display: flex;
flex-direction: column;
gap: 8px;
}
#mktoForm_1037 .mktoLabel {
color: var(--_tokens---text--primary);
font-size: var(--_typography---size--p3);
line-height: var(--_typography---height--p3) !important;
font-weight: 400 !important;
display: flex;
flex-direction: row;
padding-top: 0 !important;
}
#mktoForm_1037 .mktoAsterix {
color: var(--_tokens---text--error) !important;
padding-left: 6px;
order: 99;
}
#mktoForm_1037 input {
width: 100% !important;
box-sizing: border-box;
appearance: none;
background-color: var(--white-alpha--06) !important;
border: 1px solid var(--_tokens---border--default) !important;
border-radius: var(--mkto-radius-lg) !important;
color: var(--_tokens---text--primary) !important;
font-size: var(--_typography---size--p2) !important;
line-height: var(--_typography---height--p2) !important;
padding: var(--mkto-space-md) var(--mkto-space-lg) !important;
box-shadow: none !important;
outline: none !important;
min-height: var(--mkto-field-height) !important;
transition: all 0.3s;
}
#mktoForm_1037 input:hover {
border-color: var(--_tokens---border--accent) !important;
}
#mktoForm_1037 input:focus,
#mktoForm_1037 input:active {
border-color: var(--_tokens---text--misc) !important;
outline: none !important;
}
/* Button */
#mktoForm_1037 .mktoButtonRow {
position: relative;
flex: 0 0 calc(100% + (var(--mkto-space-xl) * 2));
width: calc(100% + (var(--mkto-space-xl) * 2)) !important;
margin:
calc(-1 * var(--mkto-space-xl))
calc(-1 * var(--mkto-space-xl)) !important;
padding:
calc(var(--mkto-space-xl) * 2)
var(--mkto-space-xl)
var(--mkto-space-xl) !important;
background-color: var(--_tokens---surface--default);
border-radius: 0 0 var(--mkto-radius-md) var(--mkto-radius-md);
box-sizing: border-box;
z-index: 2;
}
#mktoForm_1037 .mktoButtonRow::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: var(--mkto-space-xl);
background-color: var(--_tokens---surface--subtle);
border-bottom: 1px solid var(--_tokens---border--default);
border-radius: 0 0 var(--mkto-radius-md) var(--mkto-radius-md);
pointer-events: none;
z-index: 0;
}
#mktoForm_1037 .mktoButtonWrap {
position: relative;
z-index: 1;
margin: 0 !important;
display: block;
width: 100%;
}
#mktoForm_1037 .mktoButton {
position: relative;
z-index: 1;
height: 2.5rem;
width: 100%;
padding: 0.5rem;
border-radius: var(--mkto-radius-sm);
border: none;
background: var(--_tokens---button--default);
color: #fff;
cursor: pointer;
box-shadow: none !important;
text-shadow: none !important;
font-family: var(--_typography---text-font) !important;
font-size: var(--_typography---size--p2) !important;
line-height: var(--_typography---height--p2) !important;
font-weight: 500 !important;
transition: all 0.3s;
}
/* Error */
#mktoForm_1037 .mktoError {
position: static;
right: auto !important;
z-index: 5 !important;
}
#mktoForm_1037 .mktoError .mktoErrorArrowWrap {
display: none;
}
#mktoForm_1037 .mktoError .mktoErrorMsg {
background: none !important;
border: 0 !important;
box-shadow: none !important;
padding: 0 !important;
margin: 6px 0 0 !important;
color: var(--_tokens---text--error) !important;
font-size: var(--_typography---size--cap) !important;
line-height: var(--_typography---height--cap) !important;
text-shadow: none !important;
}
</style></div><div class="global_frame"><div class="global_container"><div class="side_layout full-height"><div class="newsletter_text-wr"><div class="newsletter_icon-wr"><img loading="lazy" src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696a0976869064c0e6744f8c_3c5a6dc0f9fc9395357b740b417f062d_newspaper.svg" alt="" class="icon-large"/></div><div class="contact_rte w-richtext"><h2>Newsletter</h2><p>Get updates about our latest releases, events, <br/>and more</p></div></div><div class="contact_form-wr is-newsletter"><div class="mkto-form-wrapper w-embed w-script"><script>
document.documentElement.classList.add('mkto-loading');
</script>
<script src="//build.cloudbees.com/js/forms2/js/forms2.min.js"></script>
<form id="mktoForm_1037"></form>
<script>
MktoForms2.loadForm("//build.cloudbees.com", "333-QPV-725", 1037, function(form) {
const attribution = JSON.parse(sessionStorage.getItem('cb_ad_attribution') || 'null');
if (!attribution) return;
// Set vals immediately before submission, not on load
form.onSubmit(function() {
form.vals({
utm_campaign__c: attribution.utm_campaign || '',
utm_content__c: attribution.utm_content || '',
utm_medium__c_lead: attribution.utm_medium || '',
utm_source__c_lead: attribution.utm_source || '',
utm_term__c: attribution.utm_term || ''
});
});
// Fire GTM conversion event on submit
form.onSuccess(function() {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'campaign_conversion',
utm_source: attribution.utm_source,
utm_medium: attribution.utm_medium,
utm_campaign: attribution.utm_campaign,
utm_content: attribution.utm_content || '',
utm_term: attribution.utm_term || '',
conversion_origin: attribution.utm_landing_page
});
sessionStorage.removeItem('cb_ad_attribution');
return true;
});
});
</script>
<script>
MktoForms2.whenReady((mktoForm) => {
const form = document.querySelector('#mktoForm_1037');
if (!form) return;
/* ---------- Label → placeholder ---------- */
form.querySelectorAll('.mktoFieldWrap').forEach(wrap => {
const label = wrap.querySelector('.mktoLabel');
const field = wrap.querySelector('input, textarea');
if (!label || !field) return;
if (field.placeholder) return;
let text = label.textContent || '';
text = text
.replace('*', '')
.replace(/\s*:\s*$/, '')
.replace(/\s+/g, ' ')
.trim();
if (text) {
field.placeholder = text;
}
});
/* ---------- Success State ---------- */
mktoForm.onSuccess(() => {
const wrapper = document.querySelector('.contact_form-wr');
if (!wrapper) return false;
const formWrapper = wrapper.querySelector('.mkto-form-wrapper');
const successState = wrapper.querySelector('.mkto-success-state');
if (formWrapper) {
formWrapper.style.display = 'none';
}
if (successState) {
successState.style.display = 'flex';
}
return false;
});
/* ---------- Loader off ---------- */
requestAnimationFrame(() => {
document.documentElement.classList.remove('mkto-loading');
});
});
</script></div><div class="mkto-loader"></div><div class="mkto-success-state"><img src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/69611147c4643f011be05298_a5735dcd1c3684f9c2dbd36324db6f68_check-circle.svg" loading="lazy" alt="" class="icon-large"/><div class="mkto-success_text-wr"><p class="ts-h6">Subscription confirmed</p><p class="ts-p2">You&#x27;ll now receive our latest news, releases, and event updates by email.</p></div></div></div></div></div><div class="frame_bg"><div class="frame_bg_gradient is-contact"></div></div></div></section></main><footer class="footer"><div class="padding-global"><div class="container-large"><div class="f_top-group"><div class="f_top-left-group"><a href="/" title="CloudBees Homepage" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe38f6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe38f6" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_brand w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/696254cf9924a1df0698d83e_Brand%20Logo.svg" alt=""/></a><div class="f_social-links"><a aria-label="Visit CloudBees on Facebook" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe38fc" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe38fc" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://www.facebook.com/CloudBees/" target="_blank" class="f_social_link w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Visit CloudBees on Instagram" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe38fe" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe38fe" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://www.instagram.com/cloudbees_inc/#" target="_blank" class="f_social_link w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 3H8C5.23858 3 3 5.23858 3 8V16C3 18.7614 5.23858 21 8 21H16C18.7614 21 21 18.7614 21 16V8C21 5.23858 18.7614 3 16 3ZM19.25 16C19.2445 17.7926 17.7926 19.2445 16 19.25H8C6.20735 19.2445 4.75549 17.7926 4.75 16V8C4.75549 6.20735 6.20735 4.75549 8 4.75H16C17.7926 4.75549 19.2445 6.20735 19.25 8V16ZM16.75 8.25C17.3023 8.25 17.75 7.80228 17.75 7.25C17.75 6.69772 17.3023 6.25 16.75 6.25C16.1977 6.25 15.75 6.69772 15.75 7.25C15.75 7.80228 16.1977 8.25 16.75 8.25ZM12 7.5C9.51472 7.5 7.5 9.51472 7.5 12C7.5 14.4853 9.51472 16.5 12 16.5C14.4853 16.5 16.5 14.4853 16.5 12C16.5027 10.8057 16.0294 9.65957 15.1849 8.81508C14.3404 7.97059 13.1943 7.49734 12 7.5ZM9.25 12C9.25 13.5188 10.4812 14.75 12 14.75C13.5188 14.75 14.75 13.5188 14.75 12C14.75 10.4812 13.5188 9.25 12 9.25C10.4812 9.25 9.25 10.4812 9.25 12Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Visit CloudBees on YouTube" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3900" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3900" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://www.youtube.com/user/CloudBeesTV" target="_blank" class="f_social_link w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M21.543 6.498C22 8.28 22 12 22 12C22 12 22 15.72 21.543 17.502C21.289 18.487 20.546 19.262 19.605 19.524C17.896 20 12 20 12 20C12 20 6.107 20 4.395 19.524C3.45 19.258 2.708 18.484 2.457 17.502C2 15.72 2 12 2 12C2 12 2 8.28 2.457 6.498C2.711 5.513 3.454 4.738 4.395 4.476C6.107 4 12 4 12 4C12 4 17.896 4 19.605 4.476C20.55 4.742 21.292 5.516 21.543 6.498ZM10 15.5L16 12L10 8.5V15.5Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Visit CloudBees on Twitter" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3902" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3902" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://x.com/cloudbees" target="_blank" class="f_social_link w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M17.1761 4H19.9362L13.9061 10.7774L21 20H15.4456L11.0951 14.4066L6.11723 20H3.35544L9.80517 12.7508L3 4H8.69545L12.6279 9.11262L17.1761 4ZM16.2073 18.3754H17.7368L7.86441 5.53928H6.2232L16.2073 18.3754Z" fill="currentcolor"/>
</svg></div></a><a aria-label="Visit CloudBees on LinkedIn" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3904" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3904" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://www.linkedin.com/company/cloudbees" target="_blank" class="f_social_link w-inline-block"><div class="icon-medium w-embed"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5ZM8.52076 7.00272C8.52639 7.95897 7.81061 8.54819 6.96123 8.54397C6.16107 8.53975 5.46357 7.90272 5.46779 7.00413C5.47201 6.15897 6.13998 5.47975 7.00764 5.49944C7.88795 5.51913 8.52639 6.1646 8.52076 7.00272ZM12.2797 9.76176H9.75971H9.7583V18.3216H12.4217V18.1219C12.4217 17.742 12.4214 17.362 12.4211 16.9819C12.4203 15.9681 12.4194 14.9532 12.4246 13.9397C12.426 13.6936 12.4372 13.4377 12.5005 13.2028C12.7381 12.3253 13.5271 11.7586 14.4074 11.8979C14.9727 11.9864 15.3467 12.3141 15.5042 12.8471C15.6013 13.1803 15.6449 13.5389 15.6491 13.8863C15.6605 14.9339 15.6589 15.9815 15.6573 17.0292C15.6567 17.399 15.6561 17.769 15.6561 18.1388V18.3202H18.328V18.1149C18.328 17.6629 18.3278 17.211 18.3275 16.7591C18.327 15.6296 18.3264 14.5001 18.3294 13.3702C18.3308 12.8597 18.276 12.3563 18.1508 11.8627C17.9638 11.1286 17.5771 10.5211 16.9485 10.0824C16.5027 9.77019 16.0133 9.5691 15.4663 9.5466C15.404 9.54401 15.3412 9.54062 15.2781 9.53721C14.9984 9.52209 14.7141 9.50673 14.4467 9.56066C13.6817 9.71394 13.0096 10.0641 12.5019 10.6814C12.4429 10.7522 12.3852 10.8241 12.2991 10.9314L12.2797 10.9557V9.76176ZM5.68164 18.3244H8.33242V9.76733H5.68164V18.3244Z" fill="currentcolor"/>
</svg></div></a></div></div><div class="f_top-right-group"><div class="f_links-col"><div class="f_link-title">Product</div><ul role="list" class="f_links-list"><li class="f_link-item"><a href="/unify" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe390c" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe390c" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">CloudBees Unify</a></li><li class="f_link-item"><a href="/capabilities/ci-cd-workflows" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3912" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3912" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">CI/CD</a></li><li class="f_link-item"><a href="/capabilities/compliance" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3915" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3915" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Security and Compliance</a></li><li class="f_link-item"><a href="/capabilities/feature-management" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3918" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3918" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Feature Management</a></li><li class="f_link-item"><a href="/capabilities/cloudbees-smart-tests" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe391b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe391b" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Smart Tests</a></li><li class="f_link-item"><a href="/capabilities/release-orchestration" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe391e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe391e" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Release Orchestration</a></li><li class="f_link-item"><a href="/capabilities/analytics" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3921" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3921" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Analytics</a></li></ul></div><div class="f_links-col"><div class="f_link-title">Solutions</div><ul role="list" class="f_links-list"><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3928" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3928" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/use-case/jenkins-modernization" class="f_link">AI-Powered CI</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe392b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe392b" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/use-case/agentic-devops" class="f_link">Governed AI software delivery</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe392e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe392e" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/use-case/orchestration-and-governance" class="f_link">Multi-tool release orchestration</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3931" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3931" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/use-case/security-and-compliance" class="f_link">Continuous Security and Compliance</a></li></ul></div><div class="f_links-col"><div class="f_link-title">Resources</div><ul role="list" class="f_links-list"><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3938" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3938" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/blog" class="f_link">Blog</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe393b" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe393b" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://ai.cloudbees.com/" class="f_link">AI Design Partner Program</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe393e" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe393e" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/company/trust-center" class="f_link">Trust Center</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3944" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3944" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/security-advisories" class="f_link">Security Advisories</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3947" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3947" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://docs.cloudbees.com/" class="f_link">Documentation</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe394a" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe394a" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="https://support.cloudbees.com/hc/en-us" class="f_link">Support</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe394d" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe394d" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/services" class="f_link">Customer Success and Professional Services</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:45f652bb-ce51-bb9e-5315-9591f50565be" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="45f652bb-ce51-bb9e-5315-9591f50565be" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/ci-waste-calculator" class="f_link">CI Waste Calculator</a></li></ul></div><div class="f_links-col"><div class="f_link-title">Company</div><ul role="list" class="f_links-list"><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3954" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3954" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/about-us" class="f_link">About Us</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3957" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3957" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/newsroom" class="f_link">Press and Recognition</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe395a" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe395a" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/partners" class="f_link">Partners</a></li><li class="f_link-item"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe395d" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe395d" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/careers" class="f_link">Careers</a></li><li class="f_link-item"><a href="/pricing" data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:d33d1c36-3415-6d11-7870-a106dcea9ba6" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="d33d1c36-3415-6d11-7870-a106dcea9ba6" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" class="f_link">Pricing</a></li></ul></div></div></div><div class="f_separator"></div><div class="f_bottom-group"><div class="ts-cap tc-tertiary">© 2026 CloudBees, Inc., CloudBees® and the Infinity logo® are registered trademarks of CloudBees, Inc. in the United States and may be registered in other countries. Other products or brand names may be trademarks or registered trademarks of CloudBees, Inc. or their respective holders.</div><div class="footer_bottom-links"><div class="footer_bottom-links"><a data-wf-native-id-path="fac149d5-edf9-39d0-68f9-084a33c3a859:6712cc61-808c-ccab-0d36-2ccadbfe3968" data-wf-ao-click-engagement-tracking="true" data-wf-element-id="6712cc61-808c-ccab-0d36-2ccadbfe3968" data-wf-component-context="%5B%7B%22componentId%22%3A%226712cc61-808c-ccab-0d36-2ccadbfe38f1%22%2C%22instanceId%22%3A%22fac149d5-edf9-39d0-68f9-084a33c3a859%22%7D%5D" href="/company/terms-of-service" class="footer_bottom-link w-inline-block"><div>Terms of Service</div></a></div></div></div></div></div></footer></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=695e1939655d6c0175b126da" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/js/cloudbees-staging.schunk.181a2070a530b302.js" type="text/javascript" integrity="sha384-JWdgqTXFub/8eKOkMquT9MN7nnkFfqj2IsxHNIv8W+n3NdpIA3X+EZEx+ykmtOKR" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/js/cloudbees-staging.schunk.4bd9a8a936f24217.js" type="text/javascript" integrity="sha384-zCbeDEMPOwW6NN4QH/7/feRaV4oAvhevE2fLMRH0Y7cZBg2ufLb96qHt2eBfI0Vi" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/695e1939655d6c0175b126da/js/cloudbees-staging.218fa848.f809c73b119cb9bd.js" type="text/javascript" integrity="sha384-oBYsZOOWP+A6rKZtP5LzKQK5H44W/cXeUHUppiS1lkGsy/KCHgXg+gnBo018jM4V" crossorigin="anonymous"></script><script>
//NAVBAR
// Check scroll position and toggle class
function checkScroll() {
var scroll = $(window).scrollTop();
if (scroll > 0) {
$("#header").addClass('scroll');
} else {
$("#header").removeClass('scroll');
}
}
// Run on scroll
$(window).on('scroll', checkScroll);
// Run on load
$(document).ready(function() {
checkScroll();
// Toggle header's 'scroll' class only if at top
$(".nav__menu-button").on('click', function() {
if ($(window).scrollTop() === 0) {
$("#header").toggleClass('scroll');
}
// Always toggle page scroll (disable/enable)
$('body').toggleClass('no-scroll');
});
});
</script>
<!-- Prevent CMS filter forms (Finsweet Attributes) from triggering native Webflow form submissions / notification emails. Finsweet filtering runs on input/change events and does not require the form to actually submit. -->
<script>
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('form[fs-list-element="filters"]').forEach(function (form) {
form.addEventListener('submit', function (e) {
e.preventDefault();
});
});
});
</script>
<style>
/* 2. Set all animation and transition times to exactly 0 seconds */
#onetrust-banner-sdk,
#onetrust-banner-sdk * {
animation-duration: 0s !important;
transition-duration: 0s !important;
animation-delay: 0s !important;
transition-delay: 0s !important;
}
/* 3. Use standard system fonts to stop font-swapping layout shifts (CLS) */
#onetrust-banner-sdk,
#onetrust-banner-sdk *,
#onetrust-banner-sdk button {
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
}
</style>
<script>
window.addEventListener('load', () => {
const element = document.getElementById('content');
const result = document.getElementById('result');
if (!element || !result) return;
const text = element.textContent || '';
const words = text.trim().match(/\w+/g)?.length || 0;
const minutes = Math.max(1, Math.round(words / 170));
result.textContent = `${minutes}`;
});
</script>
<script>
window.addEventListener('DOMContentLoaded', () => {
const pageUrl = encodeURIComponent(window.location.href);
const pageTitle = encodeURIComponent(document.title);
const shareUrls = {
linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${pageUrl}`,
facebook: `https://www.facebook.com/sharer/sharer.php?u=${pageUrl}`,
twitter: `https://twitter.com/intent/tweet?url=${pageUrl}&text=${pageTitle}`,
reddit: `https://www.reddit.com/submit?url=${pageUrl}&title=${pageTitle}`,
};
function openSharePopup(url) {
const width = 600;
const height = 600;
const left = window.screenX + (window.outerWidth - width) / 2;
const top = window.screenY + (window.outerHeight - height) / 2;
window.open(url, 'share-window', `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`);
}
function setupShareButton(selector, url) {
const button = document.querySelector(selector);
if (!button) return;
button.setAttribute('href', url);
button.addEventListener('click', (event) => {
event.preventDefault();
openSharePopup(url);
});
}
setupShareButton('[aria-label="Share on LinkedIn"]', shareUrls.linkedin);
setupShareButton('[aria-label="Share on Facebook"]', shareUrls.facebook);
setupShareButton('[aria-label="Share on Twitter"]', shareUrls.twitter);
setupShareButton('[aria-label="Share on Reddit"]', shareUrls.reddit);
const copyButton = document.querySelector('[aria-label="Copy URL"], [title="Copy URL"]');
if (copyButton) {
copyButton.addEventListener('click', async (event) => {
event.preventDefault();
try {
await navigator.clipboard.writeText(window.location.href);
copyButton.classList.add('is-copied');
setTimeout(() => {
copyButton.classList.remove('is-copied');
}, 2000);
} catch (error) {
console.error('Copy failed:', error);
}
});
}
});
</script>
<link href="https://cdn.jsdelivr.net/npm/prismjs/themes/prism.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/prismjs/prism.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const template = document.getElementById('code-template');
if (!template) return;
const LANG_LABELS = {
js: 'JavaScript',
javascript: 'JavaScript',
ts: 'TypeScript',
typescript: 'TypeScript',
jsx: 'React',
tsx: 'React (TS)',
react: 'React',
css: 'CSS',
html: 'HTML',
bash: 'Bash',
shell: 'Shell',
sh: 'Shell',
json: 'JSON',
python: 'Python',
py: 'Python',
makefile: 'Makefile',
make: 'Makefile',
yaml: 'YAML',
yml: 'YAML',
};
function normalizeLang(lang) {
lang = (lang || 'code').toLowerCase().trim();
const aliases = {
javascript: 'js',
typescript: 'ts',
sh: 'bash',
shell: 'bash',
py: 'python',
make: 'makefile',
yml: 'yaml',
};
return aliases[lang] || lang;
}
/* ---------- Webflow imported code fallback ----------
Converts:
<p><code>LANG:makefile<br>...</code></p>
into:
<pre data-lang="makefile"><code>...</code></pre>
*/
function getCodeTextWithBreaks(codeEl) {
let text = '';
codeEl.childNodes.forEach((node) => {
if (node.nodeType === Node.TEXT_NODE) {
text += node.nodeValue;
} else if (node.nodeName === 'BR') {
text += '\n';
}
});
return text;
}
document.querySelectorAll('.w-richtext p > code').forEach((codeEl) => {
const rawText = getCodeTextWithBreaks(codeEl);
const lines = rawText.replace(/\r\n/g, '\n').split('\n');
const firstLine = (lines[0] || '').trim();
const match = firstLine.match(/^LANG:(.+)$/i);
if (!match) return;
const lang = normalizeLang(match[1]);
lines.shift();
const pre = document.createElement('pre');
pre.setAttribute('data-lang', lang);
const code = document.createElement('code');
code.textContent = lines.join('\n').replace(/^\n+|\n+$/g, '');
pre.appendChild(code);
const paragraph = codeEl.closest('p');
if (paragraph) {
paragraph.replaceWith(pre);
}
});
/* ---------- Render code blocks ---------- */
document.querySelectorAll('pre[data-lang]').forEach((pre) => {
const lang = normalizeLang(pre.dataset.lang || 'code');
const clone = template.content.cloneNode(true);
const wrapper = clone.querySelector('.code-block');
const body = clone.querySelector('.code-body');
const langText = clone.querySelector('.code-lang-wr p');
const copyBtn = clone.querySelector('.code-copy');
let code = pre.querySelector('code');
if (!code) {
code = document.createElement('code');
code.textContent = pre.textContent.trim();
pre.innerHTML = '';
pre.appendChild(code);
}
code.className = `language-${lang}`;
pre.setAttribute('data-lang', lang);
if (langText) {
langText.textContent = LANG_LABELS[lang] || lang.toUpperCase();
}
const parent = pre.parentNode;
parent.insertBefore(wrapper, pre);
body.appendChild(pre);
if (copyBtn) {
copyBtn.addEventListener('click', (e) => {
e.preventDefault();
navigator.clipboard.writeText(code.textContent).then(() => {
copyBtn.setAttribute('aria-label', 'Copied');
setTimeout(() => {
copyBtn.setAttribute('aria-label', 'Copy Code');
}, 1500);
});
});
}
if (window.Prism) {
Prism.highlightElement(code);
}
});
});
</script>
<!-- TOC -->
<script src="https://cdn.jsdelivr.net/gh/helenmadeit/webflow-scripts/toc.js"></script></body></html>