Files
nexus/sreweekly/articles/19/02-growing-up-with-mysql-how-we-scaled-our-primary-datastore-by-over-20x.html
2026-09-12 17:23:01 +08:00

2040 lines
159 KiB
HTML
Raw 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>
<html class="no-js" lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https://yoast.com/wordpress/plugins/seo/ -->
<title>Growing up with MySQL | Nylas</title>
<meta name="description" content="How to scale your primary datastore by over 20x in 3 weeks. At Nylas, we achieved this by deploying a recently-developed tool called ProxySQL and horizontally sharding our primary keyspace." />
<link rel="canonical" href="https://www.nylas.com/blog/growing-up-with-mysql/" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="article" />
<meta property="og:title" content="Growing up with MySQL - Nylas" />
<meta property="og:description" content="How to scale your primary datastore by over 20x in 3 weeks. At Nylas, we achieved this by deploying a recently-developed tool called ProxySQL and horizontally sharding our primary keyspace." />
<meta property="og:url" content="https://www.nylas.com/blog/growing-up-with-mysql/" />
<meta property="og:site_name" content="Nylas" />
<meta property="article:published_time" content="2016-12-07T22:41:00+00:00" />
<meta property="article:modified_time" content="2019-10-04T19:35:51+00:00" />
<meta property="og:image" content="https://www.nylas.com/wp-content/uploads/2019/07/mysql_blog_header.png" />
<meta property="og:image:width" content="1852" />
<meta property="og:image:height" content="812" />
<meta property="og:image:type" content="image/jpeg" />
<meta name="author" content="wpengine" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Growing up with MySQL - Nylas" />
<meta name="twitter:description" content="How to scale your primary datastore by over 20x in 3 weeks. At Nylas, we achieved this by deploying a recently-developed tool called ProxySQL and horizontally sharding our primary keyspace." />
<meta name="twitter:image" content="https://www.nylas.com/wp-content/uploads/2019/07/mysql_blog_header.png" />
<meta name="twitter:creator" content="@nylas" />
<meta name="twitter:site" content="@nylas" />
<meta name="twitter:label1" content="Written by" />
<meta name="twitter:data1" content="wpengine" />
<meta name="twitter:label2" content="Est. reading time" />
<meta name="twitter:data2" content="14 minutes" />
<!-- / Yoast SEO plugin. -->
<link rel='dns-prefetch' href='//www.google.com' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Nylas &raquo; Growing up with MySQL Comments Feed" href="https://www.nylas.com/blog/growing-up-with-mysql/feed/" />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.nylas.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.8"}};
/*! This file is auto-generated */
!function(s,n){var o,i,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),a=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===a[t]})}function u(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);for(var n=e.getImageData(16,16,1,1),a=0;a<n.data.length;a++)if(0!==n.data[a])return!1;return!0}function f(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\udedf")}return!1}function g(e,t,n,a){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):s.createElement("canvas"),o=r.getContext("2d",{willReadFrequently:!0}),i=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(function(e){i[e]=t(o,e,n,a)}),i}function t(e){var t=s.createElement("script");t.src=e,t.defer=!0,s.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",i=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){s.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+g.toString()+"("+[JSON.stringify(i),f.toString(),p.toString(),u.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"}),r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=function(e){c(n=e.data),r.terminate(),t(n)})}catch(e){}c(n=g(i,f,p,u))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://www.nylas.com/wp-includes/css/dist/block-library/style.min.css?ver=6.8.8' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='acf-nylas-pricing-hero-style-inline-css' type='text/css'>
.ny-pricing-hero {
--ny-pricing-black: #000000;
--ny-pricing-white: #ffffff;
--ny-pricing-teal: #0b9b8a;
--ny-pricing-teal-text: #16A392;
--ny-pricing-teal-bright: #39dac7;
--ny-pricing-card-border: #404040;
--ny-pricing-muted-dark: rgba(255, 255, 255, 0.7);
--ny-pricing-muted-light: rgba(0, 0, 0, 1);
--ny-pricing-heading: "Manrope", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif;
--ny-pricing-body: "Inter", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif;
position: relative;
isolation: isolate;
overflow: hidden;
background: var(--ny-pricing-black);
color: var(--ny-pricing-white);
font-family: var(--ny-pricing-body);
line-height: 1.45;
padding-block: clamp(28px, 4vw, 44px) clamp(72px, 8vw, 120px) !important;
-webkit-font-smoothing: antialiased;
}
.ny-pricing-hero *,
.ny-pricing-hero *::before,
.ny-pricing-hero *::after {
box-sizing: border-box;
}
.ny-pricing-hero::before{
content: "";
position: absolute;
top: -22%; left: -12%;
width: 70%; height: 95%;
background: radial-gradient(closest-side, rgba(57,218,199,.42), rgba(34,160,150,.16) 55%, transparent 78%);
filter: blur(10px);
pointer-events: none; z-index: 0;
}
.ny-pricing-hero::after{
content: "";
position: absolute;
top: -18%; right: -14%;
width: 60%; height: 80%;
background: radial-gradient(closest-side, rgba(36,110,140,.28), transparent 72%);
filter: blur(24px);
pointer-events: none; z-index: 0;
}
.ny-pricing-hero::before{animation: ny-pricing-hero-aurora 16s ease-in-out infinite;}
@keyframes ny-pricing-hero-aurora { 0%, 100% { transform: translate3d(0,0,0) scale(1); opacity: .92; } 50% { transform: translate3d(4%, 3%, 0) scale(1.07); opacity: 1; } }
.ny-pricing-hero :where(h1, h2, h3, p, ul) {
margin: 0;
padding: 0;
}
.ny-pricing-hero :where(ul) {
list-style: none;
}
.ny-pricing-hero :where(a) {
color: inherit;
text-decoration: none;
}
.ny-pricing-hero :where(button) {
border: 0;
font: inherit;
}
.ny-pricing-hero__container {
width: min(100% - clamp(32px, 8vw, 80px), 1280px);
margin-inline: auto;
}
.ny-pricing-hero__back {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 42px;
aspect-ratio: 1 / 1;
padding: 8px 12px 8px 8px;
border-radius: 999px;
color: rgba(255, 255, 255, 0.82);
font-size: 0.875rem;
font-weight: 500;
transition: color 180ms ease, background-color 180ms ease, transform 180ms ease;
}
.ny-pricing-hero__back svg {
width: 28px;
height: 28px;
}
.ny-pricing-hero__back:hover,
.ny-pricing-hero__back:focus-visible {
background: rgba(255, 255, 255, 0.09);
color: var(--ny-pricing-white);
transform: translateX(-3px);
}
.ny-pricing-hero__back:focus-visible,
.ny-pricing-card__cta:focus-visible,
.ny-pricing-card__help:focus-visible,
.ny-pricing-hero .ny-pricing-switch__option:focus-visible {
outline: 2px solid var(--ny-pricing-teal-bright);
outline-offset: 3px;
}
.ny-pricing-hero__header {
max-width: 860px;
margin: 0 auto clamp(42px, 6vw, 50px);
text-align: center;
animation: ny-pricing-hero-fade-up .6s cubic-bezier(.22, .61, .36, 1) backwards;
}
.ny-pricing-hero__title {
color: var(--ny-pricing-white);
font-family: var(--ny-pricing-heading);
font-size: clamp(1.9rem, 4.4vw, 3.125rem);
font-weight: 500;
letter-spacing: 0;
line-height: 1.25;
}
.ny-pricing-hero__subtitle {
margin: 6px auto 0;
color: var(--ny-pricing-white);
font-size: 1rem;
line-height: 1.5;
}
.ny-pricing-hero__cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 265px), 1fr));
align-items: stretch;
gap: 15px;
}
.ny-pricing-card {
position: relative;
display: flex;
min-width: 0;
min-height: 100%;
flex-direction: column;
padding: clamp(20px, 2.4vw, 28px);
border: 1px solid var(--ny-pricing-card-border);
border-radius: 6px;
background: rgba(0, 0, 0, 0.78);
color: var(--ny-pricing-white);
box-shadow: 0 18px 44px -32px rgba(57, 218, 199, 0.5);
transition: transform 220ms ease, border-color 220ms ease, box-shadow 220ms ease;
animation: ny-pricing-hero-fade-up .5s cubic-bezier(.22, .61, .36, 1) backwards;
}
.ny-pricing-card:nth-child(1){ animation-delay: .14s; }
.ny-pricing-card:nth-child(2){ animation-delay: .21s; }
.ny-pricing-card:nth-child(3){ animation-delay: .28s; }
.ny-pricing-card:nth-child(4){ animation-delay: .35s; }
.ny-pricing-card:hover {
transform: translateY(-5px);
border-color: rgba(57, 218, 199, 0.62);
box-shadow: 0 26px 52px -30px rgba(57, 218, 199, 0.66);
}
.ny-pricing-card.is-enterprise {
border-color: #d8d8d8;
background: #fafafa;
color: #000000;
box-shadow: 0 20px 44px -30px rgba(0, 0, 0, 0.42);
}
.ny-pricing-card.has-badge {
position: relative;
}
.ny-pricing-card.has-badge::before {
content: '';
position: absolute;
z-index: 0;
inset: 0px;
border-radius: inherit;
padding: 1px;
background: linear-gradient(13.89deg, #404040 -2.04%, #0b9b8a 86.59%);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
/* border: 1px solid transparent;
border-image: linear-gradient(13.89deg, #404040 -2.04%, #0b9b8a 86.59%) 1; */
}
.ny-pricing-card__badge {
position: absolute;
z-index: 2;
top: -12px;
left: 10%;
max-width: calc(100% - 24px);
min-width: 120px;
/* transform: translateX(-50%); */
border-radius: 4px;
background: #0b9b8a;
color: #ffffff;
font-size: 0.75rem;
font-weight: 600;
line-height: 1.25;
padding: 3px 12px;
text-align: center;
}
.ny-pricing-card__head {
min-height: 64px;
}
.ny-pricing-card__title-wrap {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.ny-pricing-card__title,
.ny-pricing-card__head h2 {
color: inherit;
font-family: var(--ny-pricing-heading);
font-size: 1.625rem;
font-weight: 600;
letter-spacing: 0;
line-height: 1.2;
}
.ny-pricing-card__description {
margin-top: 16px !important;
color: var(--ny-pricing-white);
font-size: 0.875rem;
line-height: 1.25;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__description {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card__billing {
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: flex-end;
gap: 7px;
position: relative;
margin-left: auto;
}
.ny-pricing-card__annual-badge {
display: inline-flex;
max-width: 100%;
border-radius: 4px;
background: #0b9b8acc;
color: #ffffff;
font-size: 0.625rem;
font-weight: 500;
line-height: 1.25;
padding: 4px 4px;
text-align: right;
position: absolute;
z-index: 5;
top: -16px;
right: -10px;
}
.ny-pricing-hero .ny-pricing-switch {
position: relative;
display: inline-grid;
grid-template-columns: 1fr 1fr;
gap: 0;
min-width: 130px;
padding: 3px;
border-radius: 30px;
background: #484848;
color: #ffffff;
cursor: pointer;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}
.ny-pricing-hero .ny-pricing-switch__option {
font-family: var(--ny-pricing-body);
position: relative;
z-index: 1;
min-width: 0;
width: 100%;
min-height: 26px;
padding: 5px 7px;
border-radius: 30px;
background: transparent;
color: #ffffff;
cursor: pointer;
font-size: 0.75rem;
font-weight: 500;
line-height: 1;
transition: color 220ms ease, transform 180ms ease;
}
.ny-pricing-hero .ny-pricing-switch__option:not(.is-active):hover {
background: rgba(255, 255, 255, 0.11);
}
.ny-pricing-hero .ny-pricing-switch__option.is-active {
color: #0a0a0a;
}
.ny-pricing-hero .ny-pricing-switch::before {
position: absolute;
z-index: 0;
top: 3px;
left: 3px;
width: calc(50% - 3px);
height: calc(100% - 6px);
border-radius: 30px;
background: #ffffff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22);
content: "";
transform: translateX(0);
transition: transform 300ms cubic-bezier(0.22, 0.61, 0.36, 1);
}
.ny-pricing-hero .ny-pricing-switch[data-active-period="annual"]::before {
transform: translateX(100%);
}
.ny-pricing-hero .ny-pricing-switch__option:active {
transform: scale(0.97);
}
.ny-pricing-card__price {
min-height: 56px;
margin-top: 24px !important;
font-family: var(--ny-pricing-heading);
line-height: 1;
}
.ny-pricing-card__price > span {
display: inline-flex;
align-items: baseline;
gap: 5px;
}
.ny-pricing-card__price-value {
font-family: var(--ny-pricing-body);
font-size: 2.25rem;
font-weight: 600;
letter-spacing: 0;
}
.ny-pricing-card__price-period {
color: var(--ny-pricing-muted-dark);
font-family: var(--ny-pricing-body);
font-size: 1rem;
}
.ny-pricing-card__price-description {
min-height: 20px;
margin-top: 8px;
color: var(--ny-pricing-muted-dark);
font-size: 0.75rem;
line-height: 1.45;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__price-description {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card.is-enterprise .ny-pricing-card__price-period {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card__cta-wrap {
margin-top: 22px;
min-height: 76px;
}
.ny-pricing-card__cta {
position: relative;
display: flex;
min-height: 48px;
align-items: center;
justify-content: center;
overflow: hidden;
width: 100%;
border: 1px solid #535353;
border-radius: 999px;
background: #ffffff;
color: #000000 !important;
font-size: 0.9375rem;
font-weight: 600 !important;
padding: 12px 18px;
text-align: center;
transition: transform 180ms ease, box-shadow 180ms ease, opacity 180ms ease;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__cta {
background: #000000;
color: #ffffff !important;
}
.ny-pricing-card__cta::after {
position: absolute;
inset: 0 auto 0 -70%;
width: 55%;
background: linear-gradient(100deg, transparent, rgba(57, 218, 199, 0.48), transparent);
content: "";
transform: skewX(-18deg);
transition: left 620ms cubic-bezier(0.22, 0.61, 0.36, 1);
}
.ny-pricing-card__cta:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px -12px rgba(0, 0, 0, 0.8);
}
.ny-pricing-card__cta:hover::after {
left: 125%;
}
.ny-pricing-card__cta.is-disabled {
cursor: not-allowed;
opacity: 0.58;
}
.ny-pricing-card__cta-description {
margin-top: 8px;
color: var(--ny-pricing-muted-dark);
font-size: 0.75rem;
line-height: 1.5;
text-align: center;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__cta-description {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card__features {
display: flex;
flex-direction: column;
gap: 2px;
margin-top: 8px;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__features {
border-top-color: rgba(0, 0, 0, 0.12);
}
.ny-pricing-card__features-label,
.ny-pricing-card__feature-title {
color: inherit;
font-size: 0.875rem;
font-weight: 500;
}
.ny-pricing-card__features-label {
margin-bottom: .4rem;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__features-label {
margin-bottom: 0rem;
}
.ny-pricing-card__feature-title {
color: var(--ny-pricing-teal-text);
line-height: 1.25;
}
.ny-pricing-card__feature-group {
display: flex;
flex-direction: column;
gap: 4px;
}
.ny-pricing-card__feature-description {
color: var(--ny-pricing-muted-dark);
font-size: 0.75rem;
line-height: 1.45;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__feature-description {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card__feature-list {
display: flex;
flex-direction: column;
gap: 11px;
margin: 5px 0;
}
.ny-pricing-card__feature-item {
display: flex;
align-items: flex-start;
gap: 10px;
color: var(--ny-pricing-white);
font-size: 0.875rem;
line-height: 1.45;
/* text-wrap-style: pretty; */
}
.ny-pricing-card.is-enterprise .ny-pricing-card__feature-item {
color: var(--ny-pricing-muted-light);
}
.ny-pricing-card__feature-icon {
display: inline-flex;
width: 20px;
height: 20px;
flex: 0 0 20px;
align-items: center;
justify-content: center;
color: var(--ny-pricing-white);
}
.ny-pricing-card.is-enterprise .ny-pricing-card__feature-icon {
color: #000000;
}
.ny-pricing-card__feature-icon svg,
.ny-pricing-card__feature-image {
display: block;
width: 20px;
height: 20px;
object-fit: contain;
}
.ny-pricing-card__feature-text {
display: inline;
}
.ny-pricing-card__help {
display: inline-flex;
width: 15px;
height: 15px;
flex: 0 0 auto;
align-items: center;
justify-content: center;
margin-left: 4px;
border: 1px solid rgba(255, 255, 255, 0.45);
border-radius: 50%;
background: transparent;
color: rgba(255, 255, 255, 0.72);
cursor: help;
font-size: 0.625rem;
font-weight: 700;
line-height: 1;
vertical-align: 1px;
transition: color 160ms ease, border-color 160ms ease, transform 160ms ease;
}
.ny-pricing-card.is-enterprise .ny-pricing-card__help {
border-color: #b8bec5;
color: #8b949e;
}
.ny-pricing-card__help:hover,
.ny-pricing-card__help[aria-expanded="true"] {
border-color: var(--ny-pricing-teal-bright);
color: var(--ny-pricing-teal-bright);
transform: scale(1.08);
}
.ny-pricing-card.is-enterprise .ny-pricing-card__help:hover,
.ny-pricing-card.is-enterprise .ny-pricing-card__help[aria-expanded="true"] {
border-color: var(--ny-pricing-teal);
color: var(--ny-pricing-teal);
}
.ny-pricing-tooltip {
position: fixed;
z-index: 100000;
max-width: min(300px, calc(100vw - 24px));
padding: 10px 12px;
border-radius: 8px;
background: #111418;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.26);
color: #ffffff;
font-family: "Inter", "Poppins", -apple-system, BlinkMacSystemFont, sans-serif;
font-size: 0.8125rem;
font-weight: 400;
line-height: 1.5;
opacity: 0;
pointer-events: none;
transform: translateY(4px) scale(0.98);
transition: opacity 140ms ease, transform 140ms ease;
visibility: hidden;
}
.ny-pricing-tooltip.is-visible {
opacity: 1;
transform: translateY(0) scale(1);
visibility: visible;
}
.ny-pricing-tooltip::after {
position: absolute;
left: var(--ny-pricing-tooltip-arrow, 50%);
border: 6px solid transparent;
content: "";
transform: translateX(-50%);
}
.ny-pricing-tooltip.is-above::after {
top: 100%;
border-top-color: #111418;
}
.ny-pricing-tooltip.is-below::after {
bottom: 100%;
border-bottom-color: #111418;
}
.ny-pricing-block-notice {
margin: 16px 0;
padding: 14px 16px;
border-left: 4px solid #0b9b8a;
background: #ffffff;
color: #0a0a0a;
}
@media (max-width: 720px) {
.ny-pricing-hero__container {
width: min(100% - 32px, 1280px);
}
.ny-pricing-hero__back span {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
clip-path: inset(50%);
white-space: nowrap;
}
.ny-pricing-card__head {
min-height: 0;
}
.ny-pricing-hero__title {
font-size: 2.5rem;
}
.ny-pricing-hero__subtitle {
font-size: 1rem;
}
.ny-pricing-card__title,
.ny-pricing-card__head h2 {
font-size: 1.35rem;
}
.ny-pricing-card__price-value {
font-size: 2.15rem;
}
}
@media (prefers-reduced-motion: reduce) {
.ny-pricing-hero::before,
.ny-pricing-hero::after,
.ny-pricing-hero *,
.ny-pricing-hero *::before,
.ny-pricing-hero *::after,
.ny-pricing-tooltip {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}
.ny-pricing-hero *[hidden] {
display: none !important;
}
@keyframes ny-pricing-hero-fade-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
</style>
<link rel='stylesheet' id='acf-nylas-pricing-comparison-style-css' href='https://www.nylas.com/wp-content/themes/nylas/template-parts/blocks/pricing-comparison/style.css?ver=1.0.2' type='text/css' media='all' />
<link rel='stylesheet' id='podcast-archive-css' href='https://www.nylas.com/wp-content/plugins/nylas-podcasts/blocks/podcast-archive/style.css?ver=1747071323' type='text/css' media='all' />
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='aos-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/aos.css?ver=6.8.8' type='text/css' media='all' />
<link rel='stylesheet' id='style-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/build/css/styles.css?ver=1781049796.1234114' type='text/css' media='all' />
<link rel='stylesheet' id='google-fonts-inter-poppins-css' href='https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@400;500;600&#038;display=swap' type='text/css' media='all' />
<link rel='stylesheet' id='header-figma-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/header-figma.css?ver=1781220009.31174' type='text/css' media='all' />
<link rel='stylesheet' id='google-fonts-manrope-css' href='https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&#038;display=swap' type='text/css' media='all' />
<link rel='stylesheet' id='blog-hub-2025-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/blog-hub-2025.css?ver=1781219244.30753' type='text/css' media='all' />
<link rel='stylesheet' id='blog-single-2026-css' href='https://www.nylas.com/wp-content/themes/nylas/assets/css/blog-single-2026.css?ver=1.0' type='text/css' media='all' />
<link rel='stylesheet' id='tablepress-default-css' href='https://www.nylas.com/wp-content/tablepress-combined.min.css?ver=9' type='text/css' media='all' />
<link rel='stylesheet' id='enlighterjs-css' href='https://www.nylas.com/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=nBGpNqTfHqCvwcY' type='text/css' media='all' />
<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.nylas.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.8" />
<link rel='shortlink' href='https://www.nylas.com/?p=521' />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.nylas.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.nylas.com%2Fblog%2Fgrowing-up-with-mysql%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.nylas.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.nylas.com%2Fblog%2Fgrowing-up-with-mysql%2F&#038;format=xml" />
<meta name="generator" content="Redux 4.5.14" /><!-- HubSpot WordPress Plugin v11.3.73: embed JS disabled as a portalId has not yet been configured -->
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
<meta name="generator" content="Elementor 4.2.4; features: e_font_icon_svg, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-swap">
<!-- Schema & Structured Data For WP v1.66 - -->
<script type="application/ld+json" class="saswp-schema-markup-output">
[{"@context":"https:\/\/schema.org\/","@type":"BreadcrumbList","@id":"https:\/\/www.nylas.com\/blog\/growing-up-with-mysql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.nylas.com","name":"Nylas"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/www.nylas.com\/blog\/topic\/blog\/","name":"Blog"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.nylas.com\/blog\/topic\/engineering\/","name":"Engineering"}},{"@type":"ListItem","position":4,"item":{"@id":"https:\/\/www.nylas.com\/blog\/growing-up-with-mysql\/","name":"Growing up with MySQL"}}]}]
</script>
<style>
.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),
.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * {
background-image: none !important;
}
@media screen and (max-height: 1024px) {
.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),
.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * {
background-image: none !important;
}
}
@media screen and (max-height: 640px) {
.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),
.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * {
background-image: none !important;
}
}
</style>
<link rel="icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-150x150.png" sizes="32x32" />
<link rel="icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" />
<meta name="msapplication-TileImage" content="https://www.nylas.com/wp-content/uploads/favicon-1-300x300.png" />
<style type="text/css" id="wp-custom-css">
@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;600;700;800&display=swap');
/*Temp styles for phase 1a*/
.page-template-template-casestudy h6 {
color:white;
}
#blog-subscribe-container .mktoForm #Email::-webkit-input-placeholder {
color:white;
}
#blog-subscribe-container .mktoForm #Email::-moz-placeholder {
color:white;
}
#blog-subscribe-container .mktoForm #Email:-ms-input-placeholder {
color:white;
}
#blog-subscribe-container .mktoForm #Email::-ms-input-placeholder {
color:white;
}
#blog-subscribe-container .mktoForm #Email::placeholder {
color:white;
}
#blog-subscribe-container .mktoForm #Email{
color:white;
}
#blog-subscribe-container .mktoForm .mktoError .mktoErrorMsg {
color:white!important;
}
.page-template-template-solutions{
margin-top:50px;
border-top:solid thin transparent;
}
.page-template-template-form-gated .form-header {
background:white!important;
}
.press-release-single {
background-color:#f7f7f7;
}
@media screen and (max-width:700px){
.page-template-template-roi .company_sizes__ul {
margin-top:15px!important;
flex-direction:row!important;
flex-wrap:wrap!important;
}
.page-template-template-roi .company_sizes__ul li{
margin:15px!important;
}
.page-template-template-roi .roi-calculator__button{
margin-bottom:50px!important;
}
.main-nav #menu-item-10434 .main-menu-drop {
width: 100%
}
}
/*Stycky TOC for Evergreen Template */
.page-template-template-everngreen .sticky-element-inner {
position:sticky;
top:66px;
}
.page-template-template-everngreen .sticky-element {
align-self:stretch;
}
.page-template-template-everngreen .sticky-element-wrap-css {
position:relative;
}
.page-template-template-everngreen .main--no-padding, .page-template-template-everngreen .wrapper {
overflow:visible;
}
.no-touch .main-header-links .menu-item-12073 a:not(.button-link):hover {
color:#fff;
}
li#menu-item-12073 {
padding: 10px 0px;
}
.menu-item-12073 a{
padding: 10px 30px;
}
.section-light-blue {
background-color: #f6f8fd;
}
.page-id-9569 .newsroom-liked-section .wave, .page-id-9962 .newsroom-liked-section .wave {
display:none;
}
section.use-case-product--module .heading-wrap small {
font-size: 16px;
}
@media screen and (min-width: 1200px) {
section.hero-section .breadcrumbs-wrap {
top: 100px;
}
}
.hs-button:hover {
background: #fff !important;
border: 1px solid #4169e1 !important;
color: #4169e1 !important;
cursor: pointer;
}
.hs-button {
border: 1px solid #4169e1 !important;
}
/* API Guide */
.apig-page-content h1 {
color: #293056 !important;
}
.apig-page-content h2 {
border-bottom: 2px solid #DDE0EE;
width: fit-content;
color: #293056 !important;
margin-top: 40px;
}
.agip-code-module.developer-api-prod--module .heading-wrap h2, .product-promo-banner h2 {
border: none;
padding: 0;
margin-top: 0;
}
.apig-page-content ul li {
padding-bottom: 10px;
}
.apig-page-content ul {
padding-top: 10px;
}
.apig-menu-content ul a {
padding: .6rem .5rem;
}
@media screen and (max-width:800px){
.main-nav #menu-item-10434 .main-menu-drop {
width: 100%
}
.template--use-case-lander .nylas-buttons {
display: grid
}
.nylas-button.nylas-button--arrow {
margin:auto;
}
}
.main-nav .drop-menu-list p {
font-size: 14px;
}
.lp-hero-module__banner-info p {
font-size: 16px;
}
.main-nav .main-nav-columns img {
filter: none;
}
select#country___hubspot-233f68cd-2d1c-4526-b8aa-dc90d695a52d {
height: 50px !important;
margin: 0px !important;
}
.apig-header-title .apig-header-icon, .apig-header-title svg
{
width: 50px;
margin-left: 10px;
}
@media only screen and (min-width: 1024px) {
.press-release-sidebar .share-box {
padding: 20px 20px;
}
}
.header-featured-content .image {
background-size: contain;
}
.np-authors.np-desktop {
padding-top: 20px;
}
.blog-press-release-details-section .press-release-content h2 {
margin: 30px 0;
}
h2#ready-to-get-started {
margin: 0 0 15px 0;
}
@media only screen and (min-width: 1200px) {
.leadership-section .team-list .item {
width: calc(25% - 40px);
}
}
.page-id-44138 .fractal-glass-bar--progress{
background-color: #1AA780;
}
.page-id-44138 #agentic-ai-is-already-shipping{
margin-top: 0;
}
.home-page-presentation__code{
z-index:9;
}
.page-template-template-home-2024 .main-header .menu-header_additional_menu-container + a.button-link {
border-radius: 50px!important;
}
.page-template-template-email-api-landing-2024 main{
font-family: Manrope;
}
.main-nav #menu-item-48802 .item.active .subtitle {
min-height: 0;
margin: 0;
padding: 0;
line-height: 0;
} </style>
<style type="text/css" id="c4wp-checkout-css">
.woocommerce-checkout .c4wp_captcha_field {
margin-bottom: 10px;
margin-top: 15px;
position: relative;
display: inline-block;
}
</style>
<style type="text/css" id="c4wp-v3-lp-form-css">
.login #login, .login #lostpasswordform {
min-width: 350px !important;
}
.wpforms-field-c4wp iframe {
width: 100% !important;
}
</style>
<!--
<script>
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="EjY6shL6jO55pw7LuKXETLkhvYAaGuqr";;analytics.SNIPPET_VERSION="4.15.3";
analytics.load("EjY6shL6jO55pw7LuKXETLkhvYAaGuqr");
analytics.page();
}}();
</script>-->
<!-- <script src="https://js.qualified.com/qualified.js?token=C8Zh5jUb7EKvA5Vm"></script> -->
<!-- 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-WQ6VGV2');</script>
<!-- End Google Tag Manager -->
<!-- HOTJAR-->
<!-- <script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:2683626,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script> -->
<!-- END HOTJAR-->
<!-- <script>
(function(w, q) {
w['QualifiedObject'] = q;
w[q] = w[q] || function() {
(w[q].q = w[q].q || []).push(arguments)
};
})(window, 'qualified')
</script> -->
<meta name="traceparent" content="00-a3932aa5fc6e8ea30000001789092946-a3932aa5fc6e8ea3-01"></head>
<body class="wp-singular post-template-default single single-post postid-521 single-format-standard wp-embed-responsive wp-theme-nylas elementor-default elementor-kit-37372">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WQ6VGV2"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div class="wrapper ">
<div class="main-header-box">
<header class="main-header ">
<div class="main-header-holder">
<strong class="main-logo">
<a href="https://www.nylas.com/">
<!-- <img src="https://www.nylas.com/wp-content/uploads/main-logo.svg"
alt="Nylas"> -->
<svg width="143" height="40" viewBox="0 0 143 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_962_839)">
<path d="M142.412 21.2841C142.027 20.5676 141.488 19.9445 140.834 19.459C140.14 18.9509 139.369 18.556 138.55 18.289C137.682 18.0021 136.788 17.7528 135.892 17.5505C134.891 17.3153 133.868 17.0578 132.85 16.7815C131.813 16.5016 130.951 16.1488 130.292 15.7314C130.049 15.6138 129.768 15.3692 129.768 14.8165C129.77 14.5954 129.824 14.3779 129.926 14.1815L129.944 14.1509C130.18 13.8217 130.55 13.5312 131.091 13.262C131.631 12.9927 132.412 12.8633 133.486 12.8633C134.333 12.8633 135.059 12.9809 135.642 13.209C136.164 13.4027 136.649 13.6843 137.075 14.0416C137.431 14.3473 137.737 14.7068 137.982 15.107C138.144 15.3774 138.29 15.6326 138.415 15.8678L142.149 13.4525C141.893 12.8859 141.576 12.3482 141.205 11.8485C140.716 11.1918 140.131 10.6109 139.471 10.1246C138.701 9.56151 137.848 9.12116 136.942 8.81934C135.962 8.4795 134.797 8.30664 133.484 8.30664C131.94 8.30664 130.64 8.51478 129.618 8.924C128.596 9.33322 127.763 9.83533 127.14 10.4104C126.564 10.9286 126.09 11.55 125.743 12.2424C125.464 12.7978 125.249 13.3828 125.102 13.9863C125.075 14.1474 125.046 14.3391 125.017 14.5366C124.991 14.7142 124.977 14.8934 124.976 15.0729C124.976 16.1241 125.24 17.012 125.762 17.7093C126.309 18.4357 126.995 19.0471 127.78 19.5084C128.619 20.0031 129.516 20.3922 130.451 20.6667C131.427 20.9572 132.361 21.2064 133.228 21.4075C134.072 21.611 134.88 21.8179 135.632 22.0237C136.306 22.192 136.948 22.4702 137.531 22.8468C137.984 23.1996 138.209 23.6135 138.209 24.0992C138.218 24.3375 138.167 24.5741 138.061 24.7881C137.955 25.002 137.798 25.1867 137.604 25.3257C137.222 25.601 136.797 25.8126 136.346 25.9524C135.88 26.1033 135.398 26.2023 134.91 26.2476C134.438 26.2923 134.044 26.3146 133.743 26.3146C132.95 26.3308 132.159 26.2394 131.39 26.043C130.845 25.8998 130.322 25.6843 129.834 25.4021C129.479 25.1971 129.16 24.9353 128.89 24.6272C128.722 24.431 128.569 24.2236 128.43 24.0063L128 23.3819L124.271 25.7949C124.613 26.3234 124.983 26.8337 125.38 27.3236C125.928 27.9941 126.57 28.583 127.285 29.0722C128.133 29.6508 129.059 30.105 130.036 30.4209C131.091 30.7737 132.337 30.956 133.739 30.956C134.769 30.9679 135.798 30.8669 136.806 30.6549C137.608 30.4846 138.387 30.2193 139.125 29.8647C139.723 29.5768 140.273 29.1997 140.757 28.7464C141.163 28.3607 141.528 27.9334 141.845 27.4717C142.529 26.4353 142.924 25.2367 142.992 23.9981C142.999 22.9233 142.802 22.0049 142.412 21.2841Z" fill="#4169E1"/>
<path d="M54.6917 8.13477C52.1153 8.13788 49.6453 9.15924 47.8235 10.9748C46.0016 12.7904 44.9768 15.252 44.9736 17.8196V30.5113H49.6262V17.8196C49.6262 16.4808 50.1599 15.1967 51.1099 14.25C52.0598 13.3033 53.3483 12.7714 54.6917 12.7714C56.0352 12.7714 57.3237 13.3033 58.2736 14.25C59.2236 15.1967 59.7573 16.4808 59.7573 17.8196V30.5113H64.4099V17.8196C64.4067 15.252 63.3819 12.7904 61.56 10.9748C59.7382 9.15924 57.2682 8.13788 54.6917 8.13477Z" fill="#4169E1"/>
<path d="M111.222 8.13477C109.431 8.13492 107.665 8.55377 106.065 9.35765C104.466 10.1615 103.078 11.328 102.013 12.7635C100.948 14.1989 100.236 15.8632 99.9339 17.6228C99.6315 19.3823 99.7475 21.1879 100.272 22.8947C100.797 24.6014 101.717 26.1617 102.957 27.4501C104.196 28.7385 105.722 29.7192 107.411 30.3133C109.101 30.9074 110.906 31.0984 112.683 30.871C114.459 30.6436 116.158 30.004 117.641 29.0038L118.022 28.7451V30.5089H122.675V19.5494C122.672 16.5232 121.464 13.6218 119.317 11.4819C117.17 9.34194 114.259 8.13819 111.222 8.13477ZM111.222 26.3262C109.877 26.3264 108.562 25.9291 107.443 25.1844C106.325 24.4397 105.453 23.3811 104.938 22.1426C104.423 20.904 104.288 19.5411 104.551 18.2262C104.813 16.9113 105.461 15.7034 106.412 14.7555C107.363 13.8075 108.575 13.1619 109.895 12.9004C111.214 12.6389 112.582 12.7732 113.824 13.2864C115.067 13.7996 116.129 14.6685 116.877 15.7833C117.624 16.8981 118.023 18.2087 118.022 19.5494C118.02 21.346 117.303 23.0685 116.028 24.3389C114.754 25.6093 113.025 26.324 111.222 26.3262Z" fill="#4169E1"/>
<path d="M94.7951 21.2841V0H90.1484V21.2841C90.1512 23.8094 91.1427 26.234 92.9117 28.0421C94.6808 29.8501 97.088 30.899 99.6211 30.9654V26.3206C98.3223 26.2573 97.0975 25.6995 96.1994 24.7622C95.3014 23.825 94.7987 22.58 94.7951 21.2841Z" fill="#4169E1"/>
<path d="M86.7883 8.58398H82.1995V21.3039C82.1995 23.4746 80.7918 25.4337 78.7776 26.0687C77.1575 26.579 75.4737 26.3192 74.1475 25.3537C73.5057 24.8848 72.9833 24.2722 72.6224 23.5653C72.2615 22.8584 72.0721 22.077 72.0696 21.2839V8.58398H67.417V21.2439C67.417 25.6324 70.2949 29.4753 74.4165 30.5948C76.9676 31.2862 79.6083 30.9887 81.8372 29.7552L82.1995 29.5541V30.3173C82.1975 31.6132 81.6963 32.8589 80.7993 33.7972C79.9023 34.7355 78.6781 35.2948 77.3794 35.3596V39.9998C79.9127 39.933 82.32 38.884 84.0892 37.0758C85.8585 35.2676 86.8501 32.8428 86.8532 30.3173V9.03906H86.681L86.7883 8.58398Z" fill="#4169E1"/>
<path d="M32.6844 5.55139C31.4962 4.36226 30.0832 3.41979 28.527 2.77853C26.9709 2.13726 25.3027 1.80994 23.6188 1.8155C21.9349 1.80981 20.2665 2.13707 18.7104 2.77834C17.1543 3.41962 15.7413 4.36216 14.5532 5.55139L1.44269 18.6158C1.1346 18.9241 0.962009 19.3417 0.962894 19.7768C0.963779 20.2119 1.13806 20.6289 1.44741 20.9359C1.75675 21.2429 2.17582 21.4149 2.61241 21.4141C3.04901 21.4132 3.46737 21.2395 3.77546 20.9312L16.8848 7.86677C18.6808 6.12697 21.092 5.16174 23.5966 5.17984C26.1012 5.19795 28.4981 6.19794 30.2686 7.96351C32.0392 9.72909 33.0411 12.1183 33.0578 14.6144C33.0744 17.1105 32.1044 19.5128 30.3575 21.3016L17.2482 34.3661C16.9392 34.6734 16.7653 35.0905 16.7649 35.5256C16.7644 35.9607 16.9374 36.3782 17.2458 36.6861C17.5542 36.9941 17.9728 37.1674 18.4094 37.1678C18.846 37.1683 19.2649 36.9958 19.5739 36.6885L32.6844 23.6205C35.0851 21.2225 36.4333 17.9734 36.4333 14.586C36.4333 11.1985 35.0851 7.94943 32.6844 5.55139Z" fill="#4169E1"/>
<path d="M30.8477 14.5814C30.8478 13.1562 30.4236 11.763 29.629 10.5781C28.8344 9.3931 27.705 8.46962 26.3836 7.92443C25.0623 7.37925 23.6084 7.23686 22.2058 7.51528C20.8033 7.7937 19.5151 8.48041 18.5042 9.48855L1.0857 26.8474C0.792938 27.158 0.633026 27.57 0.639859 27.996C0.646691 28.4221 0.819731 28.8287 1.1223 29.1298C1.42487 29.4309 1.8332 29.6027 2.26073 29.6089C2.68826 29.615 3.10139 29.4551 3.41257 29.1628L20.6399 12.0144L20.6671 11.9827C20.7202 11.9227 20.7721 11.8651 20.8299 11.8039C20.8877 11.7428 20.9632 11.6863 21.034 11.6205L21.073 11.5852C21.8129 10.9602 22.7582 10.6293 23.7278 10.6559C24.6973 10.6824 25.623 11.0646 26.3273 11.7291C27.0317 12.3936 27.4653 13.2938 27.545 14.2571C27.6246 15.2205 27.3449 16.1792 26.7592 16.9497L26.7474 16.9662C26.6425 17.1048 26.5286 17.2364 26.4064 17.3601C26.2786 17.4865 26.1426 17.6044 25.9993 17.7129L8.98787 34.7226C8.6793 35.0301 8.50596 35.4471 8.50596 35.882C8.50596 36.3169 8.6793 36.734 8.98787 37.0415C9.29643 37.349 9.71493 37.5217 10.1513 37.5217C10.5877 37.5217 11.0062 37.349 11.3147 37.0415L28.7321 19.6826C29.4059 19.0141 29.9399 18.219 30.303 17.3434C30.6662 16.4677 30.8514 15.5289 30.8477 14.5814Z" fill="#4169E1"/>
<path d="M21.9847 18.1574C21.1168 17.7706 20.4224 17.0786 20.0343 16.2136L19.9163 15.9561L0.674748 35.1329C0.306608 35.489 0.0721262 35.96 0.0104335 36.4676C-0.0208502 36.6917 -0.000793865 36.9199 0.0690973 37.1352C0.138988 37.3505 0.256899 37.5472 0.413978 37.7105C0.554816 37.8459 0.721192 37.9521 0.903476 38.0229C1.08576 38.0937 1.28034 38.1279 1.47594 38.1233C2.05612 38.1088 2.60722 37.8672 3.00988 37.4506L22.2432 18.275L21.9847 18.1574Z" fill="#4169E1"/>
</g>
<defs>
<clipPath id="clip0_962_839">
<rect width="143" height="40" fill="white"/>
</clipPath>
</defs>
</svg>
</a>
</strong>
<div class="main-nav-holder" style="background-image: url(https://www.nylas.com/wp-content/uploads/mobile-menu-bg.svg);">
<div class="main-nav-wrap">
<div class="main-nav">
<ul id="menu-main_menu" class=""><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10434 menu-item-has-children" id="menu-item-10434"><a href="https://www.nylas.com/products/">Products</a> <div class="main-menu-drop">
<div class="main-menu-drop-container">
<div class="drop-menu-list">
<div class="main-nav-columns">
<div class="item active">
<div class="subtitle">Products</div>
<ul style="display: block;">
<li>
<a href="/products/email-api/" ><img src="https://www.nylas.com/wp-content/uploads/email-menu-icon.svg" alt="">Email and Contacts API</a> <p>Unified bi-directional sync and parsing for any provider.</p>
</li>
<li>
<a href="/products/calendar-api/" ><img src="https://www.nylas.com/wp-content/uploads/calendar-menu-icon.svg" alt="">Calendar API & Scheduler</a> <p>Real-time availability and embeddable white-label booking.</p>
</li>
<li>
<a href="https://www.nylas.com/products/notetaker-api" ><img src="https://www.nylas.com/wp-content/uploads/notetaker-menu-icon.svg" alt="">Notetaker API</a> <p>Capture, transcribe, and extract structured data from meetings.</p>
</li>
<li>
<a href="https://www.nylas.com/products/agent-accounts" ><img src="https://www.nylas.com/wp-content/uploads/agent-menu-icon.svg" alt="">Agent Accounts</a> <p>A real inbox and calendar for every AI agent, in one API call.</p>
</li>
</ul>
</div>
</div>
<div class="products-menu-cta">
<span class="products-menu-cta__text">Connect to every major email and calendar provider</span>
<a class="products-menu-cta__link" href="/integrations/">Explore Integrations <svg width="16" height="14" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.3818 0.228882C10.8658 -0.142684 11.5599 -0.0523199 11.9322 0.430717L18 8.30347L11.9053 15.6029C11.5144 16.0711 10.8172 16.1344 10.3481 15.7442C9.87906 15.3541 9.81568 14.6583 10.2066 14.1901L14.2234 9.37932H1.10559C0.49499 9.37932 0 8.88529 0 8.27588C0 7.66646 0.49499 7.17243 1.10559 7.17243H14.3386L10.1796 1.77628C9.80731 1.29324 9.89785 0.600449 10.3818 0.228882Z" fill="currentColor"/></svg>
</a>
</div>
</div>
<div class="header-featured-blocks">
<div class="header-featured-content-blocks">
<div class="header-featured-content header-featured-content-1">
<div class="header-featured-content-item">
<div class="category">Blog</div>
<div class="image"
style="background-image: url('https://www.nylas.com/wp-content/uploads/Security-and-compliance-program-768x402.png')">
<a href="https://www.nylas.com/blog/communications-infrastructure-security-compliance/" ></a>
</div>
<a href="https://www.nylas.com/blog/communications-infrastructure-security-compliance/" ><h5>Nylas’ security &amp; compliance program for communication APIs</h5></a>
<div class="read-more"><a href="https://www.nylas.com/blog/communications-infrastructure-security-compliance/" target="_blank" >Learn more</a>&nbsp;<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10267 menu-item-has-children" id="menu-item-10267"><a href="https://www.nylas.com/solutions/">Solutions</a> <div class="main-menu-drop">
<div class="main-menu-drop-container">
<div class="drop-menu-list">
<div class="main-nav-columns">
<div class="item active">
<div class="subtitle"> </div>
<ul style="display: block;">
<li>
<a href="/solutions/sales-crm" ><img src="https://www.nylas.com/wp-content/uploads/sales-crm-menu-icon.svg" alt="">Sales & CRM </a> </li>
<li>
<a href="/solutions/recruiting-ats" ><img src="https://www.nylas.com/wp-content/uploads/recruiting-ats-menu-icon.svg" alt="">Recruiting & ATS </a> </li>
<li>
<a href="/solutions/healthcare" ><img src="https://www.nylas.com/wp-content/uploads/healthcare-menu-icon.svg" alt="">Healthcare</a> </li>
<li>
<a href="/solutions/financial/" ><img src="https://www.nylas.com/wp-content/uploads/financial-menu-icon.svg" alt="">Financial</a> </li>
</ul>
</div>
<div class="item">
<div class="subtitle"> </div>
<ul >
<li>
<a href="/solutions/legal" ><img src="https://www.nylas.com/wp-content/uploads/legal-menu-icon.svg" alt="">Legal</a> </li>
<li>
<a href="/solutions/real-estate" ><img src="https://www.nylas.com/wp-content/uploads/real-estate-menu-icon.svg" alt="">Real Estate</a> </li>
<li>
<a href="/solutions/education" ><img src="https://www.nylas.com/wp-content/uploads/education-menu-icon.svg" alt="">Education</a> </li>
<li>
<a href="/solutions/field-services" ><img src="https://www.nylas.com/wp-content/uploads/field-services-menu-icon.svg" alt="">Field Services</a> </li>
</ul>
</div>
</div>
<div class="products-menu-cta products-menu-cta--solutions">
<span class="products-menu-cta__text">Connect to every major email and calendar provider</span>
<a class="products-menu-cta__link" href="/case-studies/">Read Customer Stories <svg width="16" height="14" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.3818 0.228882C10.8658 -0.142684 11.5599 -0.0523199 11.9322 0.430717L18 8.30347L11.9053 15.6029C11.5144 16.0711 10.8172 16.1344 10.3481 15.7442C9.87906 15.3541 9.81568 14.6583 10.2066 14.1901L14.2234 9.37932H1.10559C0.49499 9.37932 0 8.88529 0 8.27588C0 7.66646 0.49499 7.17243 1.10559 7.17243H14.3386L10.1796 1.77628C9.80731 1.29324 9.89785 0.600449 10.3818 0.228882Z" fill="currentColor"/></svg>
</a>
</div>
</div>
<div class="header-featured-blocks">
<div class="header-featured-content-blocks">
<div class="header-featured-content header-featured-content-1">
<div class="header-featured-content-item">
<div class="image"
style="background-image: url('https://www.nylas.com/wp-content/uploads/Dana-logo-1-768x378.png')">
<a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" ></a>
</div>
<a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" ><h5>How Dana Intelligence gave its AI agent a real inbox to act from </h5></a>
<div class="read-more"><a href="https://www.nylas.com/case-study/dana-intelligence-agent-accounts/" target="_blank" ></a>&nbsp;<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9437 menu-item-has-children" id="menu-item-9437"><a href="https://developer.nylas.com/">Developers</a> <div class="main-menu-drop">
<div class="main-menu-drop-container">
<div class="drop-menu-list">
<div class="main-nav-columns">
<div class="item active">
<div class="subtitle">Documentation</div>
<ul style="display: block;">
<li>
<a href="https://developer.nylas.com/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/docs-menu-icon.svg" alt="">Docs</a> </li>
<li>
<a href="https://developer.nylas.com/docs/v3/sdks/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/sdks-menu-icon.svg" alt="">SDKs</a> </li>
<li>
<a href="https://developer.nylas.com/docs/v3/guides/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/tutorials-menu-icon.svg" alt="">Guides</a> </li>
<li>
<a href="https://www.nylas.com/integrations/" ><img src="https://www.nylas.com/wp-content/uploads/api-ref-icon.svg" alt="">Integrations</a> </li>
</ul>
</div>
<div class="item">
<div class="subtitle">Support</div>
<ul >
<li>
<a href="https://status-v3.nylas.com/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/api-menu-icon.svg" alt="">API status</a> </li>
<li>
<a href="https://developer.nylas.com/docs/changelogs/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/changelog-menu-icon.svg" alt="">Changelog</a> </li>
<li>
<a href="https://developer.nylas.com/docs/support/" target="_blank" ><img src="https://www.nylas.com/wp-content/uploads/support-menu-icon.svg" alt="">Support</a> </li>
</ul>
</div>
</div>
<div class="quick-links">
<a href="https://developer.nylas.com/docs/v3/getting-started/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"> <path d="M5.625 2.02246C5.43105 2.02246 5.23975 2.0676 5.06625 2.15429L2.22063 3.57742C2.11683 3.62929 2.02952 3.70903 1.96847 3.80771C1.90743 3.9064 1.87506 4.02013 1.875 4.13617V12.113C1.87474 12.2197 1.90177 12.3246 1.95353 12.4179C2.00529 12.5111 2.08005 12.5896 2.1707 12.6458C2.26135 12.702 2.36487 12.7341 2.47141 12.7389C2.57795 12.7438 2.68397 12.7213 2.77938 12.6737L5.06625 11.5299C5.23975 11.4432 5.43105 11.3981 5.625 11.3981C5.81896 11.3981 6.01025 11.4432 6.18375 11.5299L8.81625 12.8462C8.98975 12.9329 9.18105 12.978 9.375 12.978C9.56896 12.978 9.76025 12.9329 9.93375 12.8462L12.7794 11.423C12.8832 11.3712 12.9705 11.2914 13.0315 11.1927C13.0926 11.0941 13.1249 10.9803 13.125 10.8643V2.88679C13.1252 2.78019 13.098 2.67532 13.0462 2.58216C12.9944 2.48899 12.9197 2.41062 12.829 2.3545C12.7384 2.29838 12.6349 2.26637 12.5284 2.26152C12.4219 2.25667 12.316 2.27914 12.2206 2.32679L9.93375 3.47054C9.76025 3.55724 9.56896 3.60238 9.375 3.60238C9.18105 3.60238 8.98975 3.55724 8.81625 3.47054L6.18375 2.15429C6.01025 2.0676 5.81896 2.02246 5.625 2.02246ZM9.375 3.60238L9.375 12.9774M5.625 2.02246L5.625 11.3975" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>Quickstart Guides</a>
<a href="https://developer.nylas.com/docs/reference/api/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"><path d="M10 11.25L13.75 7.5L10 3.75M5 3.75L1.25 7.5L5 11.25" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>API References</a>
<a href="https://developer.nylas.com/docs/reference/ui/"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none"> <path d="M6.25 13.125V5C6.25 4.83424 6.18415 4.67527 6.06694 4.55806C5.94973 4.44085 5.79076 4.375 5.625 4.375H2.5C2.33424 4.375 2.17527 4.44085 2.05806 4.55806C1.94085 4.67527 1.875 4.83424 1.875 5V12.5C1.875 12.6658 1.94085 12.8247 2.05806 12.9419C2.17527 13.0592 2.33424 13.125 2.5 13.125H10C10.1658 13.125 10.3247 13.0592 10.4419 12.9419C10.5592 12.8247 10.625 12.6658 10.625 12.5V9.375C10.625 9.20924 10.5592 9.05027 10.4419 8.93306C10.3247 8.81585 10.1658 8.75 10 8.75H1.875M9.375 1.875H12.5C12.8452 1.875 13.125 2.15482 13.125 2.5V5.625C13.125 5.97018 12.8452 6.25 12.5 6.25H9.375C9.02982 6.25 8.75 5.97018 8.75 5.625V2.5C8.75 2.15482 9.02982 1.875 9.375 1.875Z" stroke="#212121" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/></svg>Component Libraries</a>
</div>
</div>
<div class="header-featured-blocks">
<div class="header-featured-content-blocks">
<div class="header-featured-content header-featured-content-1">
<div class="header-featured-content-item">
<div class="image"
style="background-image: url('https://www.nylas.com/wp-content/uploads/agentic-ai-768x441.png')">
<a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" ></a>
</div>
<a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" ><h5>The State of Agentic AI in 2026: What teams are actually shipping</h5></a>
<div class="read-more"><a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" target="_blank" >Read Report</a>&nbsp;<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48802 menu-item-has-children" id="menu-item-48802"><a href="https://www.nylas.com/enterprise/">Resources</a> <div class="main-menu-drop">
<div class="main-menu-drop-container">
<div class="drop-menu-list">
<div class="main-nav-columns">
<div class="item active">
<div class="subtitle"> </div>
<ul style="display: block;">
<li>
<a href="https://www.nylas.com/blog/" ><img src="https://www.nylas.com/wp-content/uploads/docs-menu-icon.svg" alt="">Blog</a> </li>
<li>
<a href="https://www.nylas.com/case-studies/" ><img src="https://www.nylas.com/wp-content/uploads/email-menu-icon.svg" alt="">Case Studies</a> </li>
<li>
<a href="https://www.nylas.com/leadership-team/" ><img src="https://www.nylas.com/wp-content/uploads/real-estate-menu-icon.svg" alt="">Company</a> </li>
<li>
<a href="https://www.nylas.com/company/jobs/" ><img src="https://www.nylas.com/wp-content/uploads/healthcare-menu-icon.svg" alt="">Careers</a> </li>
<li>
<a href="https://www.nylas.com/enterprise/" ><img src="https://www.nylas.com/wp-content/uploads/component-menu-icon.svg" alt="">Enterprise</a> </li>
</ul>
</div>
</div>
</div>
<div class="header-featured-blocks">
<div class="header-featured-content-blocks">
<div class="header-featured-content header-featured-content-1">
<div class="header-featured-content-item">
<div class="image"
style="background-image: url('https://www.nylas.com/wp-content/uploads/Introducing-Nylas-Agent-Accounts-768x402.png')">
<a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ></a>
</div>
<a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ><h5>Agent Accounts is generally available</h5></a>
<div class="read-more"><a href="https://www.nylas.com/blog/introducing-nylas-agent-accounts/" ></a>&nbsp;<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.43738 5.25039L5.99389 1.80691C5.70073 1.51374 5.70073 1.03843 5.99389 0.745264C6.28706 0.4521 6.76237 0.4521 7.05553 0.745264L11.7803 5.47006C12.0732 5.76295 12.0732 6.23783 11.7803 6.53072L7.05553 11.2555C6.76237 11.5487 6.28706 11.5487 5.99389 11.2555C5.70073 10.9624 5.70073 10.487 5.99389 10.1939L9.43738 6.75039H0.75C0.335786 6.75039 0 6.4146 0 6.00039C0 5.58618 0.335786 5.25039 0.75 5.25039H9.43738Z" fill="#30313D"/></svg></div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12080" id="menu-item-12080"><a href="/pricing/">Pricing</a></li>
</ul> </div>
<div class="main-header-links">
<div class="menu-header_additional_menu-container"><ul id="menu-header_additional_menu" class="main-nav-links"><li id="menu-item-12004" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12004"><a href="/contact-sales/">Contact sales</a></li>
<li id="menu-item-12073" class="button-link transparent menu-item menu-item-type-custom menu-item-object-custom menu-item-12073"><a target="_blank" href="https://dashboard-v3.nylas.com/login?_gl=1*1joyqh9*_ga*MTIxMzc0MDAyOC4xNjM2MDMyODAw*_ga_5LVXVXFW0C*MTY1MjM2NjM0OS42MC4xLjE2NTIzNjYzNTAuNTk">Log in</a></li>
</ul></div> <a href="https://dashboard-v3.nylas.com/register" target="_blank" class="button-link btn">Build for free</a> </div>
</div>
</div>
<button class="mobile-menu-opener"><i></i></button>
</div>
</header>
<script>
/* Make the description paragraph in the nav dropdowns clickable: the title
sits in an <a> but the description <p> is a sibling, so forward clicks on
the paragraph to the row's link (respecting target="_blank"). Delegated so
it covers Products/Solutions/Developers and the single-column dropdowns. */
(function () {
document.addEventListener('click', function (e) {
if (!e.target.closest) return;
var p = e.target.closest('.main-header .main-nav .main-menu-drop p');
if (!p) return;
var li = p.closest('li');
if (!li) return;
var link = li.querySelector('a[href]');
if (!link || !link.getAttribute('href')) return;
if (link.target === '_blank') {
window.open(link.href, '_blank', 'noopener');
} else {
window.location.href = link.href;
}
});
})();
</script>
</div>
<main class="main--bg main--no-padding">
<section class="blog-hero-section negative-indent">
<div class="main-container" >
<div class="breadcrumbs-wrap">
<ul class="breadcrumbs" typeof="BreadcrumbList" vocab="https://schema.org/">
<li><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to Nylas." href="https://www.nylas.com" class="home" ><span property="name">Nylas</span></a><meta property="position" content="1"></span></li><li><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to Blog." href="https://www.nylas.com/blog/" class="post-root post post-post" ><span property="name">Blog</span></a><meta property="position" content="2"></span></li><li><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the Blog Category archives." href="https://www.nylas.com/blog/topic/blog/" class="taxonomy category" ><span property="name">Blog</span></a><meta property="position" content="3"></span></li><li><span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the Engineering Category archives." href="https://www.nylas.com/blog/topic/engineering/" class="taxonomy category" ><span property="name">Engineering</span></a><meta property="position" content="4"></span></li><li><span property="name" class="post post-post current-item">Growing up with MySQL</span><meta property="url" content="https://www.nylas.com/blog/growing-up-with-mysql/"><meta property="position" content="5"></li> </ul>
</div>
<div class="hero-holder">
<div class="blog-press-release-content">
<div class="details-image">
<img fetchpriority="high" src="https://www.nylas.com/wp-content/uploads/2019/07/mysql_blog_header-1024x449.png" width="1024" height="449" alt="Growing up with MySQL - Nylas">
</div>
<h1>Growing up with MySQL</h1>
<div class="post-details">
<time datetime="2016-07-12">Dec 07, 2016</time>
<span class="post-details-dot">•</span> <span>15 min read</span> </div>
</div>
</div>
</div>
</div>
</section>
<div class="blog-press-release-details-section">
<div class="main-container">
<div class="inner sticky-element-wrap">
<div class="blog-press-release-sidebar sticky-element2">
<div class="sticky-element-inner2">
<div class="jump-to-section">
<div class="jump-to-section-label">
Jump to section
</div>
<ul><li><a href="#once-upon-a-time">Once upon a time…</a></li><li><a href="#then-came-the-users">Then came the users</a></li><li><a href="#fighting-fires">Fighting fires</a></li><li><a href="#why-mysql">Why MySQL?</a></li><li><a href="#time-to-scale">Time to scale</a></li><li><a href="#moving-off-rds">Moving off RDS</a></li><li><a href="#running-mysql-on-ec2">Running MySQL on EC2</a></li><li><a href="#failover-for-when-things-go-wrong">Failover for when things go wrong</a></li><li><a href="#how-we-sharded-the-application">How we sharded the application</a></li><li><a href="#minimizing-downtime-during-failover">Minimizing downtime during failover</a></li><li><a href="#proxysql-a-proxy-for-mysql">ProxySQL: a proxy for MySQL</a></li><li><a href="#migrating-existing-data">Migrating existing data</a></li><li><a href="#future-work">Future work</a></li></ul> <script>
document.addEventListener('DOMContentLoaded', () => {
const sections = [ ...document.querySelectorAll('.press-release-content h2[id]:not([id=""])') ].filter(section => ! section.closest('.agip-code-module'));
const navLinks = document.querySelectorAll('.jump-to-section ul li a');
const navSelectLinks = document.querySelectorAll('.jump-to-section-mobile select option');
const observerUpOptions = {
root: null,
rootMargin: '9999% 0px -70% 0px',
threshold: 0.5
};
const observerDownOptions = {
root: null,
rootMargin: '-30% 0px 9999% 0px',
threshold: 0.5
};
const createObserver = position => {
return (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const id = entry.target.id;
let navLink = document.querySelector(`.jump-to-section ul li a[href="#${id}"]`);
let navSelectOption = document.querySelector(`.jump-to-section-mobile select option[value="${id}"]`);
if (position === 'down') {
const navLinkIndex = [ ...navLinks ].indexOf(navLink) - 1;
if (navLinkIndex >= 0) {
navLink = navLinks[navLinkIndex];
navSelectOption = navSelectLinks[navLinkIndex];
}
}
navLinks.forEach(link => link.setAttribute('aria-current', 'false'));
navLink.setAttribute('aria-current', 'true');
document.querySelectorAll('.jump-to-section-mobile select').forEach(select => select.value = navSelectOption.value);
}
});
};
}
const observerUp = new IntersectionObserver(createObserver('up'), observerUpOptions);
const observerDown = new IntersectionObserver(createObserver('down'), observerDownOptions);
for (let i = 0; i < sections.length; i++) {
const section = sections[i];
observerUp.observe(section);
}
for (let i = sections.length - 1; i >= 0; i--) {
const section = sections[i];
observerDown.observe(section);
}
});
</script>
</div>
<div class="author">
<div class="avatar">
<a href="#popup-bio" class="popup-link">
<img src="https://secure.gravatar.com/avatar/d8770fe9625ca7c4601f13d9d0ab86565a6dac8cd6a77bfe2ada6d83c6837870?s=96&d=mm&r=g" width="96" height="96" alt="Author: wpengine">
</a>
</div>
<div class="author-info">
<div class="author-name">
<strong class="name">
<a href="#popup-bio" class="popup-link">wpengine</a>
</strong>
</div>
<div class="author-desc">
</div>
</div>
</div>
<div class="share-box">
<div class="share">
<span>Share</span>
<ul class="social">
<li>
<a href="#" class="prettySocial" data-type="linkedin" data-url="https://www.nylas.com/blog/growing-up-with-mysql/"
data-title="Growing up with MySQL">
<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2742_19949)">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M29.8876 8C31.506 8 32.8198 9.31391 32.8198 10.9322V29.0678C32.8198 30.6861 31.5059 32 29.8876 32H11.752C10.1337 32 8.81982 30.6861 8.81982 29.0678V10.9322C8.81982 9.31391 10.1337 8 11.752 8L29.8876 8ZM16.3414 27.8412V17.2607H12.8239V27.8412H16.3414ZM29.0229 27.8412V21.7737C29.0229 18.5237 27.2877 17.0119 24.9738 17.0119C23.108 17.0119 22.2722 18.038 21.8043 18.7587V17.2607H18.2877C18.3343 18.2535 18.2877 27.8412 18.2877 27.8412H21.8042V21.9323C21.8042 21.616 21.827 21.2998 21.9202 21.0738C22.174 20.4421 22.753 19.7878 23.7246 19.7878C24.9966 19.7878 25.5062 20.7584 25.5062 22.1802V27.8412H29.0229ZM14.6064 12.1588C13.403 12.1588 12.6167 12.95 12.6167 13.9871C12.6167 15.0023 13.3791 15.8153 14.5599 15.8153H14.5826C15.8091 15.8153 16.5725 15.0023 16.5725 13.9871C16.5498 12.9515 15.8112 12.1611 14.6064 12.1588Z"
fill="#293056" />
</g>
<defs>
<clipPath id="clip0_2742_19949">
<rect width="24" height="24" fill="white" transform="translate(8.81982 8)" />
</clipPath>
</defs>
</svg>
</a>
</li>
<li>
<a href="#" class="prettySocial" data-type="twitter" data-url="https://www.nylas.com/blog/growing-up-with-mysql/"
data-description="Growing up with MySQL">
<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2742_19951)">
<path
d="M22.6769 18.5078L29.9374 10.25H28.2175L21.9105 17.4187L16.8769 10.25H11.0698L18.6833 21.0914L11.0698 29.7499H12.7897L19.4457 22.1779L24.7627 29.7499H30.5698M13.4105 11.519H16.0527L28.2162 28.5432H25.5733"
fill="#293056" />
</g>
<defs>
<clipPath id="clip0_2742_19951">
<rect width="19.5" height="19.5" fill="white" transform="translate(11.0698 10.25)" />
</clipPath>
</defs>
</svg>
</a>
</li>
<li>
<a href="#" class="prettySocial" data-type="facebook" data-url="https://www.nylas.com/blog/growing-up-with-mysql/">
<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2742_19953)">
<path
d="M32.8198 20.0729C32.8198 13.4455 27.4472 8.07288 20.8198 8.07288C14.1924 8.07288 8.81982 13.4455 8.81982 20.0729C8.81982 26.0624 13.2081 31.0269 18.9448 31.9271V23.5416H15.8979V20.0729H18.9448V17.4291C18.9448 14.4216 20.7363 12.7604 23.4774 12.7604C24.7903 12.7604 26.1636 12.9948 26.1636 12.9948V15.9479H24.6504C23.1597 15.9479 22.6948 16.8729 22.6948 17.8218V20.0729H26.0229L25.4909 23.5416H22.6948V31.9271C28.4316 31.0269 32.8198 26.0624 32.8198 20.0729Z"
fill="#293056" />
</g>
<defs>
<clipPath id="clip0_2742_19953">
<rect width="24" height="24" fill="white" transform="translate(8.81982 8)" />
</clipPath>
</defs>
</svg>
</a>
</li>
</ul>
</div>
<!-- <a href="" class="button-link transparent" target="_blank">
</a> -->
</div>
</div>
</div>
<div class="jump-to-section-mobile-sticky">
<div class="jump-to-section-mobile">
<div class="jump-to-section-label">
Jump to section
</div>
<div class="jump-to-section-mobile-select">
<select onchange=" location.hash = '#' + this.value " class="post-anchor-select"><option value="once-upon-a-time">Once upon a time…</option><option value="then-came-the-users">Then came the users</option><option value="fighting-fires">Fighting fires</option><option value="why-mysql">Why MySQL?</option><option value="time-to-scale">Time to scale</option><option value="moving-off-rds">Moving off RDS</option><option value="running-mysql-on-ec2">Running MySQL on EC2</option><option value="failover-for-when-things-go-wrong">Failover for when things go wrong</option><option value="how-we-sharded-the-application">How we sharded the application</option><option value="minimizing-downtime-during-failover">Minimizing downtime during failover</option><option value="proxysql-a-proxy-for-mysql">ProxySQL: a proxy for MySQL</option><option value="migrating-existing-data">Migrating existing data</option><option value="future-work">Future work</option></select> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.57745 7.74408C3.90289 7.41864 4.43053 7.41864 4.75596 7.74408L10 12.9882L15.2441 7.74408C15.5696 7.41864 16.0972 7.41864 16.4226 7.74408C16.7481 8.06951 16.7481 8.59715 16.4226 8.92259L10.5893 14.7559C10.2639 15.0814 9.73622 15.0814 9.41079 14.7559L3.57745 8.92259C3.25201 8.59715 3.25201 8.06951 3.57745 7.74408Z" fill="#213571"/>
</svg>
</div>
</div>
</div>
<div class="press-release-content">
<p>Building an email system requires efficiently managing a huge amount of information essentially from day one. Our sync system has more data for a single user than most startup’s database of <em>everything</em>. As of November 2016, nearly 500k accounts have been synced by the Nylas Cloud system, and our datastore grows by gigabytes each day.</p>
<p><span id="more-521"></span></p>
<p>This post is about how we scaled our primary datastore by over 20x after launching Nylas N1, our flagship desktop mail app. We achieved this by deploying a recently-developed tool called ProxySQL and horizontally sharding our primary keyspace. We also moved off Amazon RDS to self-managed MySQL on EC2. Combined with other techniques, this has allowed us to achieve near-zero downtime even while performing large database operations, such as schema migration, replica promotion, and automatic failover.</p>
<h2 id="once-upon-a-time">Once upon a time…</h2>
<p>It was the summer of 2015. Sun was shining through the San Francisco fog. <a href="https://www.youtube.com/watch?v=QcIy9NiNbmo" target="_blank" rel="noopener noreferrer">Taylor Swift and Kendrick Lamar</a> were blasting on the radio. And the entire Nylas Cloud sync system was supported by just two sync machines, and one MySQL database managed by Amazon RDS. It was a simple design that we found easy to reason about and manage without a dedicated DBA. The Nylas ops team slept (mostly) soundly, and focused engineering work on improving our sync logic and telemetry.</p>
<p>We’d managed to get a surprising amount of performance from this configuration. Our team knew the dangers and distractions of premature optimization, and figured <strong>the “easiest” way to shard was to avoid it for as long as possible</strong>. So we maxed-out the disks, upgraded our instances, and compressed data to buy more time.</p>
<h2 id="then-came-the-users">Then came the users</h2>
<p>But this all changed on Monday October 5th, 2015. That morning we released Nylas N1, an open source email app with a beautiful UI and modern plugin-based architecture. Under the hood, N1 is powered by our cloud sync engine, which is also open source. We released the code on GitHub with a pre-built Mac binary that used our hosted sync engine. We didn’t expect what came next…</p>
<p>Like all products worthy of argument and opinions, N1 was posted on Hacker News. That meant within minutes, we had literally tens of thousands of excited new users. And with those new users came lots and lots of data!</p>
<p>In less than an hour, our MySQL database performance plummeted and API latency went through the roof. We experienced a significant outage, and decided to stop the signup flood via a backup invite system. We didn’t yet know the full extent of our sync system issues, but one thing was crystal clear: we needed to scale. A lot.</p>
<h2 id="fighting-fires">Fighting fires</h2>
<p>In the days following our launch of N1, we discovered dozens of individual and unique bottlenecks in our application code. We came face-to-face with the upper limits of Redis and MySQL’s insertion volume. And we even learned some interesting things about AWS network topologies.</p>
<p>But our largest bottleneck was our database. We worked day and night to fix things like leaking MySQL connections, subtly bad queries that wrecked performance, and ultra-long-running errant transactions. But we knew the long-term solution would require horizontally scaling our data layer to support the tens of thousands of new users. It was time to shard.</p>
<h2 id="why-mysql">Why MySQL?</h2>
<p>In 2013 when Nylas was founded, we picked MySQL not because of its features, but because it’s widely used at huge scale. Technologies like Cassandra, MongoDB, and Postgres were shiny and evolving rapidly, but MySQL was the one datastore we were confident could handle petabyte-scale. We’d seen it at companies like Facebook, Dropbox, Pinterest, and Uber. Decisions like this are actually extremely important to get right early on. Long-term, we knew using MySQL meant we could leverage the knowledge of many expert database engineers as we scaled. (Hint: and we did!)</p>
<p>Out the the box, MySQL is a bit raw, and our initial needs were simple. Because of this, we decided to use Amazon RDS, a hosted MySQL appliance. While RDS doesn’t give you root access on the MySQL host, it does automate a lot of the pieces of running MySQL robustly, like backups and point-release upgrades. Those backups saved our skin in the first few months, and let us move super fast.</p>
<h2 id="time-to-scale">Time to scale</h2>
<p>We’d already compressed long text columns for a 40% storage savings and upgraded our disk to the 6 TB maximum. But InnoDB has a <a href="http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.FileSize" target="_blank" rel="noopener noreferrer">size limitation of 2 TB per table</a> and there was no way our tens of thousands of new users would fit on this instance.</p>
<p>(Aside: We briefly considered Amazon Aurora, which is a MySQL-compatible datastore with an autoscaling storage layer that can grow up to 64TB. But even with Aurora, we’d have had to partition our data across multiple tables to get around the InnoDB limit, and eventually across multiple databases once beyond 64 TB. Plus, long-term we didn’t want to be this dependent on Amazon technology.)</p>
<p>We scaled by horizontally partitioning our data using a very simple scheme, and to create additional MySQL database clusters running Oracle’s stock MySQL on regular vanilla EC2 instances. We aimed for simplicity in this design, and therefore were able to implement these changes within just 3 weeks.</p>
<h2 id="moving-off-rds">Moving off RDS</h2>
<p>When scaling, we decided to move off RDS. This decision was based primarily on control and frustrating past experiences with the design quirks for RDS. It seems that RDS is not designed to be a solution that allows for zero downtime database operations.</p>
<p>RDS offers very limited support for different replication setups. It has a “multi-AZ” synchronous replication option, but enabling this creates a significant performance hit. We know this because we tried it once and this caused a 3 hour outage. Our only option was to call Amazon support and wait on hold while RDS engineers investigated.</p>
<p>We also looked at RDS’s ability to create asynchronous read replicas for a given master, but found that a replica can’t be promoted to a master without several minutes of downtime. This wasn’t acceptable to us. Plus, RDS doesn’t support chained replication (i.e. master → slave → slave), which we planned to use for splitting shards across database instances. And on and on.</p>
<p>By contrast, we had found EC2 to be incredibly reliable. We knew individual instances can still fail, but we could design a database architecture to be resilient to that failure case. We decided it was time to take off the RDS training wheels and run MySQL ourselves.</p>
<h2 id="running-mysql-on-ec2">Running MySQL on EC2</h2>
<p>Moving to MySQL on EC2 wasn’t entirely straightforward. We had to write our own scripts for managing many of the tasks that RDS formerly automated for us—like provisioning new servers, creating and promoting slaves, failing over when a master stops working properly, and creating and restoring backups.</p>
<p>We wrote these from scratch, but these days there are some awesome <a href="https://engineering.pinterest.com/blog/open-sourcing-pinterest-mysql-management-tools" target="_blank" rel="noopener noreferrer">open source tools</a> to help get you started.</p>
<p>One of our MySQL shard clusters typically consists of a master node and a slave node. The slave is kept up to date via the MySQL replication log, and is used for backups and non-critical reads (i.e. fine if it returns stale data).</p>
<p>During maintenance, such as migrating nodes to a different instance type, a cluster might have more than one slave. The extras not in production yet are marked with a “debug” EC2 tag, which excludes them from monitoring, backups and other services for active nodes.</p>
<h2 id="failover-for-when-things-go-wrong">Failover for when things go wrong</h2>
<p>Any high-availability database cluster must handle the situations where a master node ceases to work properly. This can happen when a database process crashes or hangs, the host becomes unreachable, an underlying hardware failure, or something else. The goal is to have a recovery, either manual or automatic, where a slave node is “promoted” to replace the master node, and begins receiving both reads and primary writes.</p>
<p>To achieve this, we first built a script that engineers could use to manually promote a slave node. Once we were confident that this process worked every time without potential for data loss, we integrated the script with the standard <a href="https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfailover.html" target="_blank" rel="noopener noreferrer"><code>mysqlfailover</code></a> tool, with some additional tooling for detecting which nodes are masters or slaves based on our EC2 tags. If a master node fails, mysqlfailover detects this through a health check mechanism and promotes a slave to be the new master. Our configuration of mysqlfailover also updates the EC2 tags to reflect the new promoted configuration.</p>
<p>This failover is automatic, but it still results in a notification to our engineering team. Later on, an engineer on our team will manually recover the failed node into a new slave for the cluster. If this cannot be done, such as in the case of corrupted data, the old master is decommissioned and a new slave is created from the most recent backup.</p>
<p>This has resulted in a large MySQL fleet that is very resilient to failure, and also a design that is easy to manage and reason about. It’s also given us the ability to use manually triggered failovers for routine operational tasks like seamlessly rolling out tricky migrations by running them on a slave instead of the master and then failing over to the slave.</p>
<h2 id="how-we-sharded-the-application">How we sharded the application</h2>
<p>When moving from a single database to multiple databases on multiple machines, you need to design a new mechanism for mapping object IDs to their respective machine. This is also important if your application references database rows by primary key in a secondary store, like Redis.</p>
<p>We solved this via a simple design: a table’s primary key value is a 64-bit integer where the upper bits contain the shard ID, and the lower bits are a shard-local autoincrementing counter.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="sql" >|&lt;--16bits--&gt;|&lt;--------48bits-------&gt;| +------------+-----------------------+ | shard id | autoincrement | +------------+-----------------------+</pre>
<p>This makes it incredibly easy to compute the shard ID from a primary key. It’s just a bitshift! A query for any object can be routed to the correct shard by primary key alone, which keeps things simple from the application’s perspective.</p>
<p>For example, our authentication layer is able to convert hashed access tokens into account IDs for API access. We were able to move the service to a sharded deployment with essentially no changes to this critical component.</p>
<p>Because the Nylas sync engine is open source, you can also go read <a href="https://github.com/nylas/sync-engine/blob/master/inbox/models/session.py#L106" target="_blank" rel="noopener noreferrer">the code</a> to see the exact details of how we implement sharded session management using SQLAlchemy.</p>
<h3>Creating new shards</h3>
<p>Each logical shard is a uniquely numbered MySQL schema, named e.g. mailsync_22. All shards have exactly the same table structure and multiple shards generally live on one database instance. (This allows database instances to be split in the case of overload—imagine cell mitosis, but for databases.)</p>
<p>When creating a new shard, it’s easy to compute the high-order bits via</p>
<pre class="EnlighterJSRAW" data-enlighter-language="sql">N = (shard_id&lt;&lt;48) + 1</pre>
<p>The auto increment value is set like this:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-linenumbers="true">ALTER TABLE mailsync_. AUTO_INCREMENT=N</pre>
<p>Rows inserted into the table will then have primary keys N, N+1, etc. Prior to sharding, our database tables had autoincrementing keys starting at 1. So they just became “shard 0” and required no other migration.</p>
<p>If you use this approach, beware of <a href="https://bugs.mysql.com/bug.php?id=199" target="_blank" rel="noopener noreferrer">MySQL bug #199</a>, which has been open for 13 years and counting! Your application code must safeguard against incorrect autoincrement values. <a href="https://github.com/nylas/sync-engine/blob/master/inbox/ignition.py#L170" target="_blank" rel="noopener noreferrer">Here’s how we do it at Nylas</a>.</p>
<h2 id="minimizing-downtime-during-failover">Minimizing downtime during failover</h2>
<p>After sharding our application, we noticed another problematic issue. Our mysqlfailover configuration used an <a href="http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-ip-addressing.html" target="_blank" rel="noopener noreferrer">Amazon VPC secondary IP address</a> as a virtual IP to handle the routing of application traffic to the master node. But detecting a master node failure and switching traffic using this virtual IP took about 10 minutes. All requests during this time would fail, resulting in a serious outage.</p>
<p>What we needed was seamless failover. Something similar to how HAProxy can hold requests as application servers reboot, but instead for MySQL.</p>
<p>Some folks have actually implemented a working solution using HAProxy accompanied by a highly available key-value store (like ZooKeeper) to track cluster membership. Others have used a MySQL clustering tool like <a href="https://github.com/outbrain/orchestrator" target="_blank" rel="noopener noreferrer">Orchestrator</a> or <a href="http://galeracluster.com/" target="_blank" rel="noopener noreferrer">Galera</a>.</p>
<p>But like the other components in our system, we wanted to use the simplest possible tool that would get the job done and be easy to reason about. Ideally without new services to maintain.</p>
<h2 id="proxysql-a-proxy-for-mysql">ProxySQL: a proxy for MySQL</h2>
<p>We achieved this using <a href="https://github.com/sysown/proxysql" target="_blank" rel="noopener noreferrer">ProxySQL</a>, a new open source high performance proxy created by René Cannaò. You can think of ProxySQL as essentially HAProxy but for SQL queries. Using ProxySQL, our failover downtime went from 10 minutes to 10 seconds.</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="/wp-content/blog-images/before_proxysql.png" target="_blank" rel="noopener noreferrer"><img decoding="async" style="border: 1px solid #cccccc; border-radius: 4px; width: 620px;" title="Failover without ProxySQL" src="/wp-content/blog-images/before_proxysql.png" alt="Failover without ProxySQL" width="620" data-constrained="true" /><br />
<small>Failover without ProxySQL (10 minute outage)</small></a></p>
<p style="text-align: center;"><a style="text-decoration: none;" href="/wp-content/blog-images/after_proxysql.png" target="_blank" rel="noopener noreferrer"><img decoding="async" style="border: 1px solid #ccc; border-radius: 4px;" src="/wp-content/blog-images/after_proxysql.png" alt="Failover without ProxySQL" /><br />
<small>Failover with ProxySQL (10 second outage)</small></a></p>
<p>We’ve also found many other significant benefits to using ProxySQL:</p>
<h3>Dynamic routing</h3>
<p>Our configuration of ProxySQL will detect read-only queries and route them to slave replicas, which helps optimize performance across a cluster.</p>
<h3>Connection multiplexing</h3>
<p>If you’re hitting the MySQL connection limit, you can use ProxySQL’s connection multiplexing to dramatically decreases the number of outbound connections to the actual database machine. Using a proxy instead of direct database connections will also simplify your application’s connection pooling.</p>
<h3>Rogue queries</h3>
<p>As a developer, it’s pretty easy to introduce regressions or errant queries that create long-running transactions which may hog resources. ProxySQL can be configured to auto-terminate queries or transactions above a threshold, preventing accidental performance degradation.</p>
<h3>Query statistics</h3>
<p>ProxySQL allows you to compare queries across application nodes, which is useful to understand how load is distributed across shards and on a per-host basis. Your application is only as fast as its slowest query, and ProxySQL can help you hunt that down.</p>
<p>In production, we run ProxySQL locally on every service that connects to sync databases—including internal dashboard tools and scripts. Running the proxy locally instead of centrally provides built-in redundancy, and, since we drive a lot of network traffic to our databases, prevents the proxy from becoming a network bottleneck. The tool has enabled us to dynamically move shards across database instances with as little as 12 seconds of outage per cluster.</p>
<p>ProxySQL has a number of powerful features that we haven’t started taking advantage of, such as traffic mirroring and query caching, which we hope to write about in future posts. We’re also working on suggested best practices for managing its configuration with Ansible (our tool of choice). Since ProxySQL keeps track of how to map shard names to hosts and other rules for routing queries in its configuration, it’s important to have an easy mechanism for keeping its configuration up-to-date across nodes. ProxySQL is young and not yet well-documented, but is commercially supported by its authors.</p>
<h2 id="migrating-existing-data">Migrating existing data</h2>
<p>In March 2016, we migrated shard 0 (RDS) to our “in-house” MySQL instances on EC2 via <a href="http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Exporting.NonRDSRepl.html" target="_blank" rel="noopener noreferrer">replication</a>. Migrating this legacy shard to EC2 allowed us to upgrade primary keys on our largest table (by rows) from 32 to 64 bits—an operation we could not have done using RDS. The table was on track to exhaust its primary keyspace – over 4 billion rows – within a couple months.</p>
<h2 id="future-work">Future work</h2>
<p>The Nylas cloud sync infrastructure continues to scale and grow quickly, and with this work complete on our database layer, we’ve shifted focus to scaling our application layer. Current projects include splitting the sync logic into microservices, and introducing new processing topologies with a central data backbone like <a href="http://kafka.apache.org/" target="_blank" rel="noopener noreferrer">Kafka</a>. We are also investigating a potential shift to denormalized schemas for our API storage layer to make our application development more flexible.</p>
<p>Thanks for reading! Have questions or comments? Let us know <a href="http://twitter.com/nylas/" target="_blank" rel="noopener noreferrer">on Twitter</a>!</p>
<p><em>Scaling and sharding the Nylas Cloud data layer in fall 2015 was an collaborative team project, including substantial work by Kavya Joshi, Eben Freeman, and René Cannaò.</em></p>
<p><em>Extra thanks to Jeff Rothschild, Peter Zaitsev, Vadim Tkachenko, &amp; Joe Gross for advice during this period, and also to Marty Weiner of Pinterest for their <a href="https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-our-mysql-fleet" target="_blank" rel="noopener noreferrer">scaling MySQL blog post</a>.</em></p>
</div>
</div>
</div>
</div>
<div class="blog-liked-section">
<div class="main-container">
<div class="blog-liked-heading">
<h2>Related resources</h2>
</div>
<div class="blog-liked-slider-wrapper">
<div class="blog-liked-slider">
<div class="blog-newsroom-item">
<div class="image">
<a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/">
<img src="https://www.nylas.com/wp-content/uploads/Frame-6-2-768x441.png" alt="">
</a>
</div>
<div class="categories">
<span class="category-item">
<a href="https://www.nylas.com/blog/tag/agentic-ai/"
title="Agentic AI">
Agentic AI </a>
</span>
</div>
<h5><a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/">The State of Agentic AI in 2026: What teams are actually shipping</a></h5>
<div class="post-excerpt">
<p>Agentic AI has moved past the whiteboard phase. In public conversations, the focus is still&#8230;</p>
</div>
<div class="post-footer">
<div class="post-details">
<time datetime="2026-12-02">Feb 12, 2026</time>
<span class="post-details-dot">•</span> <span>6 min read</span> </div>
<div class="read-more">
<a href="https://www.nylas.com/blog/the-state-of-agentic-ai-in-2026/" class="read-more-link">Read more
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<use xlink:href="#icon-arrow"></use>
</svg>
</a>
</div>
</div>
</div>
<div class="blog-newsroom-item">
<div class="image">
<a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-crm/">
<img src="https://www.nylas.com/wp-content/uploads/CRM-agent-768x402.png" alt="">
</a>
</div>
<div class="categories">
<span class="category-item">
<a href="https://www.nylas.com/blog/tag/building-ai-agents/"
title="Building AI Agents">
Building AI Agents </a>
</span>
</div>
<h5><a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-crm/">How to build an AI agent for your CRM</a></h5>
<div class="post-excerpt">
<p>In our CTO’s post, we argued that AI systems fail when the data they depend&#8230;</p>
</div>
<div class="post-footer">
<div class="post-details">
<time datetime="2025-16-12">Dec 16, 2025</time>
<span class="post-details-dot">•</span> <span>5 min read</span> </div>
<div class="read-more">
<a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-crm/" class="read-more-link">Read more
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<use xlink:href="#icon-arrow"></use>
</svg>
</a>
</div>
</div>
</div>
<div class="blog-newsroom-item">
<div class="image">
<a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-ats/">
<img src="https://www.nylas.com/wp-content/uploads/ATS-agent-768x402.png" alt="">
</a>
</div>
<div class="categories">
<span class="category-item">
<a href="https://www.nylas.com/blog/tag/building-ai-agents/"
title="Building AI Agents">
Building AI Agents </a>
</span>
</div>
<h5><a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-ats/">How to build an AI agent for your ATS</a></h5>
<div class="post-excerpt">
<p>In our CTO’s post, we argued that trustworthy communications data is the foundation for AI&#8230;</p>
</div>
<div class="post-footer">
<div class="post-details">
<time datetime="2025-16-12"></time>
<span class="post-details-dot">•</span> <span>5 min read</span> </div>
<div class="read-more">
<a href="https://www.nylas.com/blog/how-to-build-an-ai-agent-for-your-ats/" class="read-more-link">Read more
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<use xlink:href="#icon-arrow"></use>
</svg>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<defs>
<symbol id="icon-arrow" viewBox="0 0 16 16">
<path d="M2.5 7.50001C2.22386 7.50001 2 7.72386 2 8.00001C2 8.27615 2.22386 8.50001 2.5 8.50001L12.197 8.5L8.16552 12.1284C7.96026 12.3131 7.94362 12.6292 8.12835 12.8345C8.31308 13.0397 8.62923 13.0564 8.83448 12.8717L13.8345 8.37165C13.9398 8.27683 14 8.14175 14 8C14 7.85826 13.9398 7.72318 13.8345 7.62836L8.83448 3.12836C8.62923 2.94363 8.31308 2.96027 8.12835 3.16552C7.94362 3.37078 7.96026 3.68692 8.16552 3.87165L12.197 7.5L2.5 7.50001Z" fill="#4169E1"/>
</symbol>
</defs>
</svg>
</main>
<footer class="site-footer site-footer--2025">
<div class="main-container">
<div class="footer-top">
<div class="footer-nav">
<ul class="footer-menu">
<!-- Footer Info as first item in menu -->
<li class="footer-menu__info-item">
<div class="footer-info">
<a href="/" class="footer-logo">
<svg width="114" height="33" viewBox="0 0 114 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1433_328)">
<path d="M25.9908 4.71236C24.0672 2.78362 21.5086 1.72266 18.7827 1.72266C16.0568 1.72266 13.4951 2.78362 11.5746 4.71236L1.14782 15.1668C0.901448 15.4139 0.765625 15.7432 0.765625 16.0948C0.765625 16.4463 0.901448 16.7757 1.14782 17.0227C1.3942 17.2698 1.7227 17.4059 2.07332 17.4059C2.42393 17.4059 2.75243 17.2698 2.99881 17.0227L13.4224 6.56826C16.3758 3.60706 21.1865 3.60706 24.1398 6.56826C27.0932 9.53263 27.0963 14.3529 24.1398 17.3141L13.7162 27.7654C13.2076 28.2753 13.2076 29.1082 13.7162 29.6213C13.9626 29.8683 14.2911 30.0045 14.6417 30.0045C14.9923 30.0045 15.3208 29.8683 15.5672 29.6213L25.9908 19.17C27.9144 17.2413 28.9726 14.6759 28.9726 11.9428C28.9726 9.20959 27.9144 6.6411 25.9908 4.71553V4.71236Z" fill="white"/>
<path d="M24.5306 11.9422C24.5306 10.3998 23.9336 8.95245 22.8471 7.86615C20.6044 5.61753 16.9561 5.61753 14.7135 7.86615L0.862669 21.7506C0.616292 21.9976 0.480469 22.327 0.480469 22.6785C0.480469 23.03 0.616292 23.3594 0.862669 23.6064C1.10905 23.8535 1.43755 23.9897 1.78816 23.9897C2.13877 23.9897 2.46728 23.8535 2.71365 23.6064L16.4128 9.88673L16.4349 9.8614C16.476 9.81389 16.5202 9.76322 16.5644 9.71888C16.615 9.66821 16.6718 9.6207 16.7255 9.5732L16.7571 9.54469C17.9922 8.49639 19.8558 8.5724 20.9992 9.71888C22.1427 10.8654 22.2185 12.5914 21.2804 13.8361L21.2709 13.8487C21.173 13.9754 21.0877 14.0768 20.9992 14.1654C20.9139 14.2509 20.816 14.3365 20.677 14.4473L7.14843 28.0498C6.90206 28.2969 6.76623 28.6262 6.76623 28.9778C6.76623 29.3293 6.90206 29.6587 7.14843 29.9057C7.39481 30.1528 7.72331 30.2889 8.07393 30.2889C8.42454 30.2889 8.75304 30.1528 8.99942 29.9057L22.8502 16.0182C23.9336 14.9319 24.5338 13.4813 24.5338 11.9422H24.5306Z" fill="white"/>
<path d="M17.484 14.7999C17.1365 14.6416 16.827 14.4294 16.5648 14.1665C16.3026 13.9037 16.091 13.5933 15.9331 13.2449L15.8383 13.0391L0.537668 28.3803C0.237593 28.6812 0.0512314 29.0612 0.0101686 29.4476C-0.0308942 29.8403 0.0828181 30.1919 0.332354 30.4421C0.543985 30.6543 0.844059 30.7714 1.17256 30.7714C1.6053 30.7714 2.04751 30.5751 2.38865 30.233L17.6893 14.8918L17.484 14.7968V14.7999Z" fill="white"/>
<path d="M113.245 17.2984C112.932 16.7188 112.512 16.2279 111.988 15.8384C111.457 15.4425 110.847 15.1289 110.171 14.9041C109.48 14.6729 108.769 14.4765 108.058 14.3118C107.262 14.125 106.447 13.916 105.639 13.6974C104.814 13.4726 104.129 13.1907 103.605 12.8582C103.412 12.7663 103.188 12.5668 103.188 12.1266C103.188 11.9556 103.229 11.7877 103.314 11.6198L103.33 11.5945C103.513 11.3316 103.81 11.1004 104.243 10.8819C104.672 10.6666 105.294 10.562 106.147 10.562C106.82 10.562 107.398 10.6539 107.862 10.8376C108.324 11.0213 108.706 11.243 109.003 11.5027C109.296 11.7592 109.537 12.0474 109.723 12.3546C109.852 12.57 109.969 12.7758 110.067 12.9627L113.036 11.0308C112.856 10.6222 112.604 10.1915 112.281 9.74811C111.921 9.25088 111.46 8.78849 110.907 8.37044C110.355 7.95238 109.679 7.60084 108.898 7.32847C108.118 7.05611 107.193 6.91992 106.147 6.91992C104.922 6.91992 103.886 7.08778 103.074 7.41398C102.262 7.74336 101.599 8.14241 101.106 8.60163C100.613 9.06086 100.241 9.55492 99.9941 10.068C99.7446 10.5905 99.574 11.0593 99.4856 11.4647C99.4635 11.5945 99.4414 11.7434 99.4193 11.9049C99.3971 12.0569 99.3845 12.1994 99.3845 12.3324C99.3845 13.1749 99.5961 13.8843 100.01 14.4417C100.433 15.0149 100.973 15.4995 101.615 15.8795C102.262 16.2659 102.976 16.5795 103.737 16.8075C104.514 17.0387 105.257 17.2382 105.945 17.3997C106.618 17.5613 107.259 17.7291 107.856 17.8938C108.469 18.0616 108.977 18.2833 109.366 18.5525C109.726 18.8312 109.906 19.167 109.906 19.5533C109.906 19.9682 109.745 20.2976 109.426 20.5351C109.142 20.7442 108.807 20.9152 108.425 21.0355C108.055 21.1559 107.67 21.235 107.281 21.2731C106.905 21.3079 106.593 21.3269 106.353 21.3269C105.617 21.3269 104.985 21.254 104.483 21.1084C103.977 20.9627 103.56 20.7917 103.244 20.5953C102.925 20.3989 102.673 20.1899 102.496 19.9746C102.328 19.7719 102.205 19.604 102.129 19.4773L101.788 18.9769L98.8223 20.9057C99.0592 21.2762 99.3561 21.6879 99.7035 22.1282C100.098 22.6254 100.607 23.0973 101.22 23.528C101.832 23.9587 102.568 24.3229 103.409 24.608C104.249 24.893 105.238 25.0355 106.353 25.0355C107.265 25.0355 108.084 24.9532 108.791 24.7948C109.495 24.6333 110.118 24.4211 110.636 24.1614C111.151 23.9049 111.586 23.604 111.934 23.2651C112.285 22.9263 112.575 22.581 112.799 22.2453C113.336 21.4377 113.643 20.5035 113.712 19.4678C113.712 18.6064 113.554 17.8716 113.245 17.2952V17.2984Z" fill="white"/>
<path d="M43.491 6.7793C39.2299 6.7793 35.7617 10.2567 35.7617 14.5291V24.6827H39.4605V14.5291C39.4605 12.3027 41.2673 10.4911 43.4878 10.4911C45.7084 10.4911 47.5151 12.3027 47.5151 14.5291V24.6827H51.214V14.5291C51.214 10.2567 47.7457 6.7793 43.4847 6.7793H43.491Z" fill="white"/>
<path d="M88.4424 6.7793C83.4201 6.7793 79.3359 10.8743 79.3359 15.9099C79.3359 20.9456 83.4233 25.0406 88.4424 25.0406C90.2713 25.0406 92.037 24.499 93.5468 23.4729L93.85 23.267V24.6795H97.5489V15.9099C97.5489 10.8743 93.4647 6.7793 88.4424 6.7793ZM88.4424 21.332C85.4606 21.332 83.0347 18.8996 83.0347 15.9099C83.0347 12.9202 85.4606 10.4879 88.4424 10.4879C91.4242 10.4879 93.85 12.9202 93.85 15.9099C93.85 18.8996 91.4242 21.332 88.4424 21.332Z" fill="white"/>
<path d="M75.3824 17.2944V0.271484H71.6836V17.2944C71.6836 21.5003 75.0444 24.9366 79.217 25.0411V21.3293C77.0849 21.2279 75.3824 19.4576 75.3824 17.2944Z" fill="white"/>
<path d="M65.3648 7.14062V17.3164C65.3648 19.0519 64.2434 20.6196 62.642 21.1295C61.3532 21.5381 60.0108 21.3291 58.959 20.5563C57.9261 19.7962 57.3101 18.5801 57.3101 17.2974V7.14062H53.6113V17.2657C53.6113 20.778 55.9014 23.8532 59.1769 24.7463C61.2048 25.3006 63.3021 25.0599 65.0773 24.0749L65.3648 23.9134V24.5246C65.3648 26.6846 63.6622 28.455 61.5301 28.5595V32.2713C65.7027 32.1668 69.0636 28.7337 69.0636 24.5246V7.14062H65.3648Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1433_328">
<rect width="114" height="32" fill="white" transform="translate(0 0.271484)"/>
</clipPath>
</defs>
</svg>
</a>
<div class="social">
<ul>
<li>
<a href="https://github.com/nylas/" target="_blank"
rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_22_685)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9642 0.516388C5.34833 0.516388 0 5.90414 0 12.5695C0 17.8975 3.42686 22.4076 8.18082 24.0038C8.77518 24.1238 8.9929 23.7445 8.9929 23.4254C8.9929 23.1459 8.97331 22.1881 8.97331 21.1902C5.64514 21.9087 4.95208 19.7534 4.95208 19.7534C4.41722 18.3565 3.62473 17.9974 3.62473 17.9974C2.53543 17.2591 3.70408 17.2591 3.70408 17.2591C4.91241 17.3389 5.54645 18.4963 5.54645 18.4963C6.61592 20.3321 8.33927 19.8134 9.03257 19.494C9.13151 18.7157 9.44865 18.177 9.78539 17.8777C7.13094 17.5983 4.33812 16.5606 4.33812 11.9308C4.33812 10.6138 4.81322 9.53622 5.56604 8.69818C5.44727 8.39892 5.03118 7.16145 5.68506 5.5052C5.68506 5.5052 6.69527 5.18586 8.97306 6.74243C9.94827 6.47859 10.954 6.34437 11.9642 6.34324C12.9744 6.34324 14.0042 6.48308 14.9552 6.74243C17.2332 5.18586 18.2434 5.5052 18.2434 5.5052C18.8973 7.16145 18.481 8.39892 18.3622 8.69818C19.1349 9.53622 19.5904 10.6138 19.5904 11.9308C19.5904 16.5606 16.7976 17.5782 14.1233 17.8777C14.5592 18.2568 14.9353 18.9751 14.9353 20.1126C14.9353 21.729 14.9158 23.0262 14.9158 23.4251C14.9158 23.7445 15.1337 24.1238 15.7278 24.0041C20.4818 22.4073 23.9087 17.8975 23.9087 12.5695C23.9282 5.90414 18.5603 0.516388 11.9642 0.516388Z" fill="#B3B8D8"/>
</g>
<defs>
<clipPath id="clip0_22_685">
<rect width="24" height="24" fill="white" transform="translate(0 0.271484)"/>
</clipPath>
</defs>
</svg>
</a>
</li>
<li>
<a href="https://www.linkedin.com/company/nylas/" target="_blank"
rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_22_686)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.0678 0.271484C22.6861 0.271484 24 1.58539 24 3.2037V21.3393C24 22.9576 22.6861 24.2715 21.0678 24.2715H2.93222C1.31391 24.2715 0 22.9576 0 21.3393V3.2037C0 1.58539 1.31386 0.271484 2.93222 0.271484L21.0678 0.271484ZM7.52161 20.1126V9.53216H4.00411V20.1126H7.52161ZM20.2031 20.1126V14.0452C20.2031 10.7952 18.4679 9.28334 16.154 9.28334C14.2882 9.28334 13.4524 10.3095 12.9845 11.0302V9.53216H9.46786C9.5145 10.525 9.46786 20.1126 9.46786 20.1126H12.9844V14.2038C12.9844 13.8875 13.0072 13.5713 13.1004 13.3453C13.3542 12.7136 13.9332 12.0593 14.9048 12.0593C16.1767 12.0593 16.6864 13.0299 16.6864 14.4516V20.1126H20.2031ZM5.78662 4.43033C4.58316 4.43033 3.79688 5.22153 3.79688 6.25855C3.79688 7.27377 4.55925 8.08677 5.74008 8.08677H5.76277C6.98925 8.08677 7.7527 7.27377 7.7527 6.25855C7.72997 5.22298 6.99141 4.43258 5.78662 4.43033Z" fill="#B3B8D8"/>
</g>
<defs>
<clipPath id="clip0_22_686">
<rect width="24" height="24" fill="white" transform="translate(0 0.271484)"/>
</clipPath>
</defs>
</svg>
</a>
</li>
<li>
<a href="https://www.youtube.com/c/nylas" target="_blank"
rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M23.4986 6.49485C23.2226 5.46219 22.4094 4.64905 21.3768 4.37305C19.505 3.87149 12 3.87149 12 3.87149C12 3.87149 4.49498 3.87149 2.62317 4.37305C1.5907 4.64905 0.777375 5.46219 0.501422 6.49485C0 8.36647 0 12.2716 0 12.2716C0 12.2716 0 16.1767 0.501422 18.0481C0.777375 19.0808 1.5907 19.8942 2.62317 20.1701C4.49498 20.6715 12 20.6715 12 20.6715C12 20.6715 19.505 20.6715 21.3768 20.1701C22.4094 19.8942 23.2226 19.0808 23.4986 18.0481C24 16.1767 24 12.2716 24 12.2716C24 12.2716 24 8.36647 23.4986 6.49485ZM9.59986 15.8717V8.67154L15.8351 12.2716L9.59986 15.8717Z" fill="#B3B8D8"/>
</svg>
</a>
</li>
<li>
<a href="https://twitter.com/nylas" target="_blank"
rel="nofollow" aria-label=" link"><svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1433_350)">
<path d="M13.857 10.7793L21.1175 2.52148H19.3976L13.0907 9.69019L8.0571 2.52148H2.25L9.86345 13.3629L2.25 22.0214H3.9699L10.6259 14.4494L15.9429 22.0214H21.75M4.59065 3.79052H7.2329L19.3964 20.8147H16.7534" fill="#B3B8D8"/>
</g>
<defs>
<clipPath id="clip0_1433_350">
<rect width="19.5" height="19.5" fill="white" transform="translate(2.25 2.52148)"/>
</clipPath>
</defs>
</svg>
</a>
</li>
</ul>
</div>
</div>
</li>
<li>
<h6>Contact</h6>
<ul id="menu-footer_contact" class=""><li id="menu-item-38147" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38147"><a href="https://www.nylas.com/contact-sales/">Contact Sales</a></li>
<li id="menu-item-12070" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12070"><a href="https://developer.nylas.com/docs/support/">Support</a></li>
</ul> </li>
<li>
<h6>Products</h6>
<ul id="menu-footer_products" class=""><li id="menu-item-31331" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-31331"><a href="https://www.nylas.com/products/email-api/">Email API</a></li>
<li id="menu-item-31330" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-31330"><a href="https://www.nylas.com/products/calendar-api/">Calendar API</a></li>
<li id="menu-item-38042" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38042"><a href="https://www.nylas.com/products/scheduler/">Scheduler</a></li>
<li id="menu-item-40601" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40601"><a href="https://www.nylas.com/products/notetaker-api/">Notetaker API</a></li>
<li id="menu-item-48779" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48779"><a href="https://www.nylas.com/products/agent-accounts/">Agent Accounts</a></li>
<li id="menu-item-38005" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-38005"><a href="https://www.nylas.com/pricing/">Pricing</a></li>
</ul> </li>
<li>
<h6>Solutions</h6>
<ul id="menu-footer_solutions" class=""><li id="menu-item-48780" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48780"><a href="https://www.nylas.com/solutions/sales-crm/">Sales &#038; CRM</a></li>
<li id="menu-item-48781" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48781"><a href="https://www.nylas.com/solutions/recruiting-ats/">Recruiting &#038; ATS</a></li>
<li id="menu-item-48783" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48783"><a href="https://www.nylas.com/solutions/healthcare/">Healthcare</a></li>
<li id="menu-item-48787" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48787"><a href="https://www.nylas.com/solutions/financial/">Financial</a></li>
<li id="menu-item-48786" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48786"><a href="https://www.nylas.com/solutions/legal/">Legal</a></li>
<li id="menu-item-48784" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48784"><a href="https://www.nylas.com/solutions/real-estate/">Real Estate</a></li>
<li id="menu-item-48785" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48785"><a href="https://www.nylas.com/solutions/education/">Education</a></li>
<li id="menu-item-48782" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48782"><a href="https://www.nylas.com/solutions/field-services/">Field Services</a></li>
</ul> </li>
<li>
<h6>Developers</h6>
<ul id="menu-footer_developers" class=""><li id="menu-item-25028" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25028"><a href="https://dashboard-v3.nylas.com/register">Build for free</a></li>
<li id="menu-item-27943" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27943"><a href="https://developer.nylas.com/docs/v3/getting-started/">Docs</a></li>
<li id="menu-item-12077" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12077"><a href="https://developer.nylas.com/docs/v3/sdks/">SDKs</a></li>
<li id="menu-item-12078" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12078"><a href="https://developer.nylas.com/docs/dev-guide/">Guides</a></li>
<li id="menu-item-27945" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27945"><a href="https://status.nylas.com/">API status</a></li>
<li id="menu-item-27946" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27946"><a href="https://developer.nylas.com/docs/changelogs/">Changelog</a></li>
<li id="menu-item-12071" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12071"><a href="https://developer.nylas.com/docs/support/">Support</a></li>
<li id="menu-item-32159" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-32159"><a href="https://forums.nylas.com/">Developer forums</a></li>
<li id="menu-item-48776" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-48776"><a href="https://www.nylas.com/integrations/">Integrations</a></li>
<li id="menu-item-48943" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48943"><a href="https://www.nylas.com/resources/guides/">Learning Guides</a></li>
</ul> </li>
<li>
<h6>Company</h6>
<ul id="menu-footer_company" class=""><li id="menu-item-12048" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12048"><a href="https://www.nylas.com/leadership-team/">Company</a></li>
<li id="menu-item-12049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12049"><a href="https://www.nylas.com/company/jobs/">Careers</a></li>
<li id="menu-item-11224" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11224"><a href="https://www.nylas.com/newsroom/">Newsroom</a></li>
<li id="menu-item-48773" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48773"><a href="https://www.nylas.com/case-studies/">Customer Stories</a></li>
<li id="menu-item-48775" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-48775"><a href="https://www.nylas.com/events/">Events</a></li>
<li id="menu-item-12061" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-12061"><a href="https://www.nylas.com/blog/">Blog</a></li>
<li id="menu-item-42079" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42079"><a href="https://www.nylas.com/resources/podcasts/">Podcasts</a></li>
<li id="menu-item-43292" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-43292"><a href="https://www.nylas.com/security/">Security</a></li>
</ul> </li>
</ul>
</div>
</div>
<div class="footer-bottom">
<div class="wrap">
<p>© 2026 Nylas. All rights reserved.</p>
<ul id="menu-copyright" class="add-nav"><li id="menu-item-12088" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12088"><a rel="httpswwwnylascomlegalterms" href="https://www.nylas.com/legal/terms/">Terms of Use</a></li>
<li id="menu-item-12087" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-12087"><a rel="httpswwwnylascomprivacy-policy privacy-policy" href="https://www.nylas.com/privacy-policy/">Privacy Policy</a></li>
<li id="menu-item-26916" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26916"><a href="https://www.nylas.com/privacy-settings/">Privacy Settings</a></li>
<li id="menu-item-12086" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12086"><a rel="httpswwwnylascomlegalcopyright" href="https://www.nylas.com/legal/copyright/">Copyright Policy</a></li>
<li id="menu-item-39366" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-39366"><a target="_blank" href="https://opt-out.nylas.com/">Do Not Sell or Share My Personal Information</a></li>
</ul> </div>
</div>
</div>
</footer>
</div>
<div class="popups-wrap">
<div class="popup bio-popup" id="popup-bio">
<div class="popup-body">
<button class="popup-close"></button>
<div class="popup-holder jcf-scrollable">
<div class="inner">
<div class="popup-content">
<div class="photo">
<img src="https://secure.gravatar.com/avatar/d8770fe9625ca7c4601f13d9d0ab86565a6dac8cd6a77bfe2ada6d83c6837870?s=768&d=mm&r=g" alt="">
</div>
<div class="info">
<h3>wpengine</h3>
<ul class="social">
</ul>
<p>This is the "wpengine" admin user that our staff uses to gain access to your admin area to provide support and troubleshooting. It can only be accessed by a button in our secure log that auto generates a password and dumps that password after the staff member has logged in. We have taken extreme measures to ensure that our own user is not going to be misused to harm any of our clients sites.</p>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/nylas\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script>
( () => {
const lazyloadRunObserver = () => {
const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
entries.forEach( ( entry ) => {
if ( entry.isIntersecting ) {
let lazyloadBackground = entry.target;
if( lazyloadBackground ) {
lazyloadBackground.classList.add( 'e-lazyloaded' );
}
lazyloadBackgroundObserver.unobserve( entry.target );
}
});
}, { rootMargin: '200px 0px 200px 0px' } );
lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
lazyloadBackgroundObserver.observe( lazyloadBackground );
} );
};
const events = [
'DOMContentLoaded',
'elementor/lazyload/observe',
];
events.forEach( ( event ) => {
document.addEventListener( event, lazyloadRunObserver );
} );
} )();
</script>
<script type="text/javascript" src="https://www.nylas.com/.cloud/module/mcp-to-angie-connector/assets/dist/angie-mcp-init.js?ver=1.0.10" id="mcp-to-angie-connector-js" defer="defer" data-wp-strategy="defer"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/gwv-polyfill.1.1.0.js?ver=1.1.0" id="gwv-polyfill-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/gwv.base.umd.js?ver=1.1.0" id="gwv-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/slick.min.js?ver=6.8.8" id="slick-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlight.min.js?ver=6.8.8" id="highlight-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-line-numbers.min.js?ver=6.8.8" id="highlightjs-line-numbers-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-copy.min.js?ver=6.8.8" id="highlightjs-copy-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/highlightjs-curl.js?ver=6.8.8" id="highlightjs-curl-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/jcf.js?ver=6.8.8" id="jcf-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/jcf.select.js?ver=6.8.8" id="jcf-select-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/jcf.scrollable.js?ver=6.8.8" id="jcf-scrollable-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/build/js/build.js?ver=1781049825" id="build-js"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/themes/nylas/assets/js/jquery.prettySocial.js?ver=6.8.8" id="share-js"></script>
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=c4wp_onloadCallback&amp;render=explicit&amp;hl=en&amp;ver=7.6.2" id="c4wp-method-provider-js" defer="defer" data-wp-strategy="defer"></script>
<script type="text/javascript" id="c4wp-method-js-extra">
/* <![CDATA[ */
var c4wpConfig = {"ajax_url":"https:\/\/www.nylas.com\/wp-admin\/admin-ajax.php","captcha_version":"v2_checkbox","disable_submit":"","site_key":"6Lc0y7EZAAAAALZHVaVorwkfhjbNeCIo6SWoqXE_","size":"normal","theme":"light","badge":"bottomright","failure_action":"nothing","additional_js":"","fallback_js":"\"\\t\\t\\t\\n\\t\\t\\t\\\/* @v3-fallback-js:start *\\\/\\n\\t\\t\\tif ( typeof captcha_div == 'undefined' && form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '#additional-information-c4wp-c4wp-wc-checkout' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( ! captcha_div && form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '#order-c4wp-c4wp-wc-checkout' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( typeof captcha_div == 'undefined' ) {\\n\\t\\t\\t\\tvar captcha_div = form.querySelector( '.c4wp_captcha_field_div' );\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar parentElem = captcha_div.parentElement;\\n\\n\\t\\t\\tif ( ( form.classList.contains( 'c4wp-primed' ) ) || ( ! form.classList.contains( 'c4wp_verify_underway' ) && captcha_div.parentElement.getAttribute( 'data-c4wp-use-ajax' ) == 'true' ) ) {\\n\\n\\t\\t\\t\\tform.classList.add('c4wp_verify_underway' );\\n\\t\\t\\t\\tconst flagMarkup = '<input id=\\\"c4wp_ajax_flag\\\" type=\\\"hidden\\\" name=\\\"c4wp_ajax_flag\\\" value=\\\"c4wp_ajax_flag\\\">';\\n\\t\\t\\t\\tvar flagMarkupDiv = document.createElement('div');\\n\\t\\t\\t\\tflagMarkupDiv.innerHTML = flagMarkup.trim();\\n\\n\\t\\t\\t\\tform.appendChild( flagMarkupDiv );\\n\\t\\n\\t\\t\\t\\tvar nonce = captcha_div.parentElement.getAttribute( 'data-nonce' );\\n\\n\\t\\t\\t\\tvar formData = new FormData();\\n\\n\\t\\t\\t\\tformData.append( 'action', 'c4wp_ajax_verify' );\\n\\t\\t\\t\\tformData.append( 'nonce', nonce );\\n\\t\\t\\t\\tformData.append( 'response', data );\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tfetch( 'https:\\\/\\\/www.nylas.com\\\/wp-admin\\\/admin-ajax.php', {\\n\\t\\t\\t\\t\\tmethod: 'POST',\\n\\t\\t\\t\\t\\tbody: formData,\\n\\t\\t\\t\\t} ) \\\/\\\/ wrapped\\n\\t\\t\\t\\t\\t.then( \\n\\t\\t\\t\\t\\t\\tres => res.json()\\n\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t.then( data => {\\n\\t\\t\\t\\t\\t\\tif ( data['success'] ) {\\n\\n\\t\\t\\t\\t\\t\\t\\tform.classList.add( 'c4wp_verified' );\\n\\n\\t\\t\\t\\t\\t\\t\\tvar existingFlag = document.getElementById('c4wp_ajax_flag');\\n\\t\\t\\t\\t\\t\\t\\tif (existingFlag) {\\n\\t\\t\\t\\t\\t\\t\\t\\texistingFlag.value = data.data.token; \\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tconst flagMarkup = '<input id=\\\"c4wp_ajax_flag\\\" type=\\\"hidden\\\" name=\\\"c4wp_ajax_flag\\\" value=\\\"' + data.data.token + '\\\">';\\n\\t\\t\\t\\t\\t\\t\\t\\tvar flagMarkupDiv = document.createElement('div');\\n\\t\\t\\t\\t\\t\\t\\t\\tflagMarkupDiv.innerHTML = flagMarkup.trim();\\n\\t\\t\\t\\t\\t\\t\\t\\tform.appendChild( flagMarkupDiv );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/ Submit as usual.\\n\\t\\t\\t\\t\\t\\t\\tif ( foundSubmitBtn ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tfoundSubmitBtn.click();\\n\\t\\t\\t\\t\\t\\t\\t} else if ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( form ).find( '.wc-block-components-checkout-place-order-button:not(.c4wp-submit)' ).click(); \\n\\t\\t\\t\\t\\t\\t\\t} else {\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( typeof form.submit === 'function' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tform.submit();\\n\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tHTMLFormElement.prototype.submit.call(form);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/jQuery( '.nf-form-cont' ).trigger( 'nfFormReady' );\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( 'redirect' === 'nothing' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\twindow.location.href = '';\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( 'v2_checkbox' === 'nothing' ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcaptcha_div = captcha_div.parentElement;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\tcaptcha_div.innerHTML = '';\\n\\t\\t\\t\\t\\t\\t\\t\\tform.classList.add( 'c4wp_v2_fallback_active' );\\n\\t\\t\\t\\t\\t\\t\\t\\tflagMarkupDiv.firstChild.setAttribute( 'name', 'c4wp_v2_fallback' );\\n\\n\\t\\t\\t\\t\\t\\t\\t\\tvar c4wp_captcha = grecaptcha.render( captcha_div,{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'sitekey' : '',\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'size' : 'normal',\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'theme' : 'light',\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t'expired-callback' : function(){\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tgrecaptcha.reset( c4wp_captcha );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}); \\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( '.ninja-forms-field.c4wp-submit' ).prop( 'disabled', false );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( form.classList.contains( 'wc-block-checkout__form' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( form.parentElement.classList.contains( 'nf-form-layout' ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( '.ninja-forms-field.c4wp-submit' ).prop( 'disabled', false );\\n\\t\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\\/\\\/ Prevent further submission\\n\\t\\t\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} )\\n\\t\\t\\t\\t\\t.catch( err => console.error( err ) );\\n\\n\\t\\t\\t\\t\\\/\\\/ Prevent further submission\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\t\\\/* @v3-fallback-js:end *\\\/\\n\\t\\t\\t\\n\\t\\t\\t\"","flag_markup":"<input id=\"c4wp_ajax_flag\" type=\"hidden\" name=\"c4wp_ajax_flag\" value=\"c4wp_ajax_flag\">","field_markup":"<div class=\"c4wp_captcha_field\" style=\"margin-bottom: 10px;\" data-nonce=\"9272ff4ccf\" ><div id=\"c4wp_captcha_field_0\" class=\"c4wp_captcha_field_div\"><\/div><\/div>","redirect":"","failure_v2_site_key":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/advanced-nocaptcha-recaptcha/includes/methods/js/c4wp-v2_checkbox.js?ver=7.6.2" id="c4wp-method-js" defer="defer" data-wp-strategy="defer"></script>
<script type="text/javascript" src="https://www.nylas.com/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=nBGpNqTfHqCvwcY" id="enlighterjs-js"></script>
<script type="text/javascript" id="enlighterjs-js-after">
/* <![CDATA[ */
!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":2,"ampersandCleanup":true,"linehover":false,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":true,"theme":"enlighter","language":"generic","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console);
/* ]]> */
</script>
<script defer src="/.cloud/rum/otel-rum-exporter.js?v=1.0.1"></script>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a3932aa5fc6e8ea3',t:'MTc4OTA5Mjk0Ng=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"df67842450844fa185a3a8a88950c8ba","spa":2}' crossorigin="anonymous"></script>
</body>
</html><!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com
Retrieved 9220 objects (3 MB) from Redis using PhpRedis (v6.3.0).
-->