CINXE.COM
Expo Consultants — Infinite Red
<!DOCTYPE html><!-- Last Published: Thu Apr 03 2025 23:01:08 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="infinite.red" data-wf-page="65fb12cb8e6a8dd62b9d4ae9" data-wf-site="5e67db0c1e7a468249544a75" lang="en"><head><meta charset="utf-8"/><title>Expo Consultants — Infinite Red</title><meta content="Accelerate your React Native app development with Infinite Red, an official Expo Consultant Partner with over six years of expertise in Expo's tools and integrations." name="description"/><meta content="Expo Consultants — Infinite Red" property="og:title"/><meta content="Accelerate your React Native app development with Infinite Red, an official Expo Consultant Partner with over six years of expertise in Expo's tools and integrations." property="og:description"/><meta content="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66465469cdf8a7934c9673e8_Frame%20717.png" property="og:image"/><meta content="Expo Consultants — Infinite Red" property="twitter:title"/><meta content="Accelerate your React Native app development with Infinite Red, an official Expo Consultant Partner with over six years of expertise in Expo's tools and integrations." property="twitter:description"/><meta content="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66465469cdf8a7934c9673e8_Frame%20717.png" property="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="google-site-verification=Jmms0_XFcgBIDl9Ly7pfogukm_9GOpVAM36Uu59c71k" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/css/infinite-red-website.9c4de44fd.min.css" rel="stylesheet" type="text/css"/><style>@media (min-width:992px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="4e60f18a-c1d5-0347-e58a-e153f9dba2fc"] {opacity:0;}}</style><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({ google: { families: ["Montserrat:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic","Droid Serif:400,400italic,700,700italic","Merriweather:300,300italic,400,400italic,700,700italic,900,900italic"] }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5e96204b6085211e0c7f48f2_favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5e96204d92bbee4276b5761c_webclip.png" rel="apple-touch-icon"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-41822601-3"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'UA-41822601-3', {'anonymize_ip': false});</script><style> .container-scroll { scrollbar-width: none; /* Firefox 64 */ -ms-overflow-style: none; /* Internet Explorer 11 */ } .container-scroll::-webkit-scrollbar { /** WebKit */ display: none; } .team__collection__list { display: flex; flex-flow: row wrap; justify-content: space-between; } .team__collection__list::after { content: ""; flex: auto; } </style> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta name="google-site-verification" content="PziDawbND-UbE8RPHIApiyKHqLwhQqNCzyAYEmFW-Tc" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-41822601-9"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-41822601-9'); </script> <script type="text/javascript"> (function() { window._pa = window._pa || {}; // _pa.orderId = "myOrderId"; // OPTIONAL: attach unique conversion identifier to conversions // _pa.revenue = "19.99"; // OPTIONAL: attach dynamic purchase values to conversions // _pa.productId = "myProductId"; // OPTIONAL: Include product ID for use with dynamic ads var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true; pa.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + "//tag.perfectaudience.com/serve/5dcb4b56acb1888586000015.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(pa, s); })(); </script> <meta name="ahrefs-site-verification" content="b989772c57dd9a5233657e546e1671f8a09c12705f5bda677a2a437ada46bd23"> <style> .w-nav-link.w--current{ color: #e73536 !important; } .w__menu__link.w--current{ color: #e73536 !important; } .nav-dropdown__link.w--current{ color: #e73536 !important; } </style> </head><body><div data-animation="over-right" class="top-nav w-nav" data-easing2="ease" data-easing="ease" data-collapse="medium" data-w-id="48941a4f-8c15-7a61-3715-67421ac8b695" role="banner" data-no-scroll="1" data-duration="400" data-doc-height="1"><div class="top-nav-container"><div class="top-nav-wrapper"><a href="/" class="top-nav-brand w-inline-block"><div class="top-nav-brand-image w-embed"><?xml version="1.0" encoding="UTF-8"?> <svg width="93px" height="41px" viewBox="0 0 93 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 63.1 (92452) - https://sketch.com --> <title>logo-dark</title> <desc>Created with Sketch.</desc> <g id="Navigation" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Navigation/Top-Nav/-Transparent" transform="translate(-128.000000, -35.000000)"> <g id="Main-Nav"> <rect id="bounds" x="0" y="0" width="1440" height="111"></rect> <g id="Group" transform="translate(128.000000, 35.000000)"> <g id=".nav__logo--light"> <g id="IR-Logo"> <path d="M36.0800073,0.0610119048 C42.9412217,0.0610119048 48.5033343,5.70727865 48.5033343,12.6723024 C48.5033343,19.6373262 42.9412217,25.283593 36.0800073,25.283593 C29.2187929,25.283593 23.6566802,19.6373262 23.6566802,12.6723024 C23.6566802,5.70727865 29.2187929,0.0610119048 36.0800073,0.0610119048 Z M36.0800073,6.05258288 C32.4785269,6.05258288 29.5589506,9.0163321 29.5589506,12.6723024 C29.5589506,16.3282728 32.4785269,19.292022 36.0800073,19.292022 C39.6814876,19.292022 42.601064,16.3282728 42.601064,12.6723024 C42.601064,9.0163321 39.6814876,6.05258288 36.0800073,6.05258288 Z" id="infinity-left-circle" fill="#E73536"></path> <path d="M56.166766,0.0610119048 C63.0279804,0.0610119048 68.590093,5.70727865 68.590093,12.6723024 C68.590093,19.6373262 63.0279804,25.283593 56.166766,25.283593 C52.9181748,25.283593 49.9608105,24.0178383 47.7471521,21.9456543 C49.0744843,20.2188082 50.035948,18.189109 50.5152955,15.9759446 C51.640891,17.9578044 53.7503391,19.292022 56.166766,19.292022 C59.7682463,19.292022 62.6878227,16.3282728 62.6878227,12.6723024 C62.6878227,9.0163321 59.7682463,6.05258288 56.166766,6.05258288 C53.7340603,6.05258288 51.6124835,7.40483749 50.4916749,9.40927321 C49.997631,7.20099506 49.0222034,5.17810314 47.6836756,3.46012579 C49.9032037,1.35155427 52.8865199,0.0610119048 56.166766,0.0610119048 Z" id="infinity-right-circle" fill="#E73536"></path> <polygon id="Path-Copy-2" fill="currentColor" points="58.9649039 31.2751639 58.9649039 33.1898292 54.2453185 33.1898292 54.2453185 35.1733672 58.4902329 35.1733672 58.4902329 37.005385 54.2453185 37.005385 54.2453185 39.0026977 59.1140862 39.0026977 59.1140862 40.9035883 52.1296423 40.9035883 52.1296423 31.2751639"></polygon> <polygon id="Path-Copy-3" fill="currentColor" points="47.8422083 33.1347309 47.8422083 40.9035883 45.726532 40.9035883 45.726532 33.1347309 43.0412507 33.1347309 43.0412507 31.2751639 50.5274896 31.2751639 50.5274896 33.1347309"></polygon> <polygon id="Path-Copy-4" fill="currentColor" points="39.3544503 31.2751639 41.4701265 31.2751639 41.4701265 40.9035883 39.3544503 40.9035883"></polygon> <polygon id="Path-Copy-5" fill="currentColor" points="34.9258805 31.2751639 37.0415567 31.2751639 37.0415567 40.9035883 34.9258805 40.9035883 30.4097255 34.8703267 30.4097255 40.9035883 28.2940493 40.9035883 28.2940493 31.2751639 30.2741052 31.2751639 34.9258805 37.4737204"></polygon> <polygon id="Path-Copy-6" fill="currentColor" points="23.835593 31.2751639 25.9512692 31.2751639 25.9512692 40.9035883 23.835593 40.9035883"></polygon> <polygon id="Path-Copy-7" fill="currentColor" points="22.1143698 31.2751639 22.1143698 33.16228 17.7202731 33.16228 17.7202731 35.2422401 21.8973774 35.2422401 21.8973774 37.1293561 17.7202731 37.1293561 17.7202731 40.9035883 15.6045969 40.9035883 15.6045969 31.2751639"></polygon> <polygon id="Path-Copy-8" fill="currentColor" points="11.0902875 31.2751639 13.2059637 31.2751639 13.2059637 40.9035883 11.0902875 40.9035883 6.57413246 34.8703267 6.57413246 40.9035883 4.45845625 40.9035883 4.45845625 31.2751639 6.43851219 31.2751639 11.0902875 37.4737204"></polygon> <polygon id="Path-Copy-9" fill="currentColor" points="0 31.2751639 2.11567622 31.2751639 2.11567622 40.9035883 0 40.9035883"></polygon> <path d="M68.5843109,31.2751639 C70.0580585,31.2751639 71.1091051,31.5276952 71.7374822,32.0327653 C72.3658592,32.5378354 72.6800431,33.3505269 72.6800431,34.4708642 C72.6800431,36.0136237 72.0787992,37.0099743 70.8762935,37.4599458 L73.2767722,40.9035883 L70.672863,40.9035883 L68.5707489,37.8318592 L67.1060499,37.8318592 L67.1060499,40.9035883 L64.9903737,40.9035883 L64.9903737,31.2751639 L68.5843109,31.2751639 Z M68.6348799,33.1039121 L67.0481228,33.1039121 L67.0481228,35.9552481 L68.5941938,35.9552481 C69.3175056,35.9552481 69.8102543,35.8358697 70.0724548,35.5971092 C70.3346553,35.3583488 70.4657536,34.979552 70.4657536,34.4607072 C70.4657536,33.9418625 70.3301347,33.586023 70.0588928,33.3931781 C69.7876509,33.2003331 69.3129847,33.1039121 68.6348799,33.1039121 Z" id="Path-Copy-11" fill="currentColor"></path> <polygon id="Path-Copy-12" fill="currentColor" points="81.6856828 31.2751639 81.6856828 33.1898292 76.9660974 33.1898292 76.9660974 35.1733672 81.2110119 35.1733672 81.2110119 37.005385 76.9660974 37.005385 76.9660974 39.0026977 81.8348651 39.0026977 81.8348651 40.9035883 74.8504212 40.9035883 74.8504212 31.2751639"></polygon> <path d="M87.0314148,31.2751639 C88.722156,31.2751639 90.0195769,31.6952841 90.9237166,32.5355371 C91.8278562,33.37579 92.2799193,34.544321 92.2799193,36.0411651 C92.2799193,37.5380092 91.8391578,38.7226104 90.9576216,39.5950042 C90.0760855,40.4673979 88.7311979,40.9035883 86.9229186,40.9035883 L83.6815941,40.9035883 L83.6815941,31.2751639 L87.0314148,31.2751639 Z M87.0049791,33.1039121 L85.8250827,33.1039121 L85.8250827,38.9581043 L87.1677234,38.9581043 C88.1351528,38.9581043 88.8787965,38.7101645 89.3986768,38.2142775 C89.9185571,37.7183905 90.1784934,36.9975286 90.1784934,36.0516701 C90.1784934,35.1058115 89.9185571,34.3780624 89.3986768,33.8684007 C88.8787965,33.3587391 88.0809053,33.1039121 87.0049791,33.1039121 Z" id="Path-Copy-14" fill="currentColor"></path> </g> </g> </g> </g> </g> </g> </svg></div><div class="custom-js-right-click w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { const topNavBrand = document.querySelector('.top-nav-brand'); if (!topNavBrand) return topNavBrand.addEventListener('contextmenu', function (ev) { ev.preventDefault(); window.location.href = "/brand-assets" return false; }, false); }); </script></div></a><nav role="navigation" class="top-nav-menu w-nav-menu"><a href="/" class="top-nav-menu-link w-nav-link">Home</a><a href="/react-native" class="top-nav-menu-link w-nav-link">React native</a><a href="/expo" aria-current="page" class="top-nav-menu-link w-nav-link w--current">EXPO</a><a href="/work" class="top-nav-menu-link w-nav-link">Work</a><a href="/about" class="top-nav-menu-link w-nav-link">company</a><div data-hover="false" data-delay="400" data-w-id="45f2be38-41d3-ac34-36b4-3d0a0dec342d" class="dropdown w-dropdown"><div class="dropdown-toggle w-dropdown-toggle"><div class="top-nav-menu-link">Community</div></div><nav data-w-id="45f2be38-41d3-ac34-36b4-3d0a0dec3432" class="dropdown-list w-dropdown-list"><a href="/community/building-community" class="top-nav-menu-link w-nav-link">Building community</a><a href="/community/open-source" class="top-nav-menu-link w-nav-link">Open Source</a><a href="/community/podcasts" class="top-nav-menu-link w-nav-link">Podcasts</a><a href="/community/newsletters" class="top-nav-menu-link w-nav-link">Newsletters</a><a href="https://chainreactconf.com/" class="top-nav-menu-link w-nav-link">Chain React Conf</a></nav></div><a id="top-nav-community-dropdown-trigger" href="/community/building-community" class="top-nav-menu-link-w-icon hide-on-mobile w-inline-block"><div class="top-nav-menu-link">Community</div><div data-w-id="c14198b8-6711-9603-8e2b-b484f797fe93" class="icon--sm top-nav-menu-link-icon-caret w-embed"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"> <path stroke="currentColor" stroke-linecap="square" d="m18 10-5.98 5.98L6.03 10"/> </svg></div></a><a href="/contact?source=header" class="top-nav-menu-link w-nav-link">Contact us</a></nav></div><div data-w-id="c14198b8-6711-9603-8e2b-b484f797feb8" class="menu-button w-nav-button"><div class="menu-button-hamburger"><div data-w-id="c14198b8-6711-9603-8e2b-b484f797feba" class="menu-button-hamburger-line"></div><div data-w-id="c14198b8-6711-9603-8e2b-b484f797febc" class="menu-button-hamburger-line"></div><div data-w-id="c14198b8-6711-9603-8e2b-b484f797febb" class="menu-button-hamburger-line"></div></div></div></div><div id="top-nav-community-dropdown" data-w-id="53290218-fbdb-7f81-e737-5e8aa1c5677c" class="top-nav-dropdown hide-on-mobile"><div class="top-nav-wrapper"><div class="div-block-23"></div><div class="top-nav-menu"><a href="/community/building-community" class="top-nav-menu-link in-dropdown w-nav-link">Building community</a><a href="/community/open-source" class="top-nav-menu-link in-dropdown w-nav-link">Open Source</a><a href="/community/podcasts" class="top-nav-menu-link in-dropdown w-nav-link">Podcasts</a><a href="/community/talks" class="top-nav-menu-link in-dropdown w-nav-link">Talks</a><a href="/community/newsletters" class="top-nav-menu-link in-dropdown w-nav-link">Newsletters</a><a href="https://chainreactconf.com/" target="_blank" class="top-nav-menu-link-w-icon w-inline-block"><div class="top-nav-menu-link in-dropdown">Chain React Conf</div><div data-w-id="f15c6ff2-519f-6bb2-96d9-e0d8470998e8" class="icon--sm top-nav-menu-icon-link-external w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M7 17L17 7M17 7H8.53846M17 7V15.4615" stroke="currentColor" stroke-linecap="square" /> </svg></div></a></div></div></div><div class="top-nav-embed w-embed"><style> .top-nav-menu-link-w-icon > .icon--sm + .top-nav-menu-link { padding-left: 8px; padding-right: 0px; } .top-nav-menu-link-w-icon > .top-nav-menu-link:has(+ .icon--sm) { padding-right: 8px; padding-left: 0px; } .top-nav-menu-link-w-icon.w--current > .top-nav-menu-link, .top-nav-menu-link-w-icon.w--current > .icon--sm { color: var(--crimson) !important; } .top-nav .top-nav-menu > .top-nav-menu-link:hover, .top-nav .top-nav-menu > .top-nav-menu-link-w-icon:hover { opacity: 0.65; transition: opacity 200ms ease-in-out; } .top-nav:has(#top-nav-community-dropdown .w--current) #top-nav-community-dropdown { opacity: 1 !important; pointer-events: auto !important; } .top-nav #top-nav-community-dropdown { opacity: 0; transition: opacity 350ms ease-in-out 500ms; } .top-nav #top-nav-community-dropdown:not(.active) { pointer-events: none; } .top-nav:has(#top-nav-community-dropdown-trigger:hover) #top-nav-community-dropdown, .top-nav:has(#top-nav-community-dropdown:hover) #top-nav-community-dropdown { opacity: 1; transition-delay: 100ms; pointer-events: auto; } .top-nav .top-nav-brand-image { transition: color 350ms ease-in-out; } .top-nav:has(.menu-button.w--open) .top-nav-brand-image { color: var(--dark-slate) !important; } .top-nav:has(.menu-button.w--open) .nav-icon__bar, .top-nav:has(.menu-button.w--open) .menu-button-hamburger-line{ background: var(--dark-slate) !important; } .top-nav .nav-icon__bar, .top-nav .menu-button-hamburger-line { transition: background 350ms ease-in-out; } .top-nav:has(#top-nav-community-dropdown .w--current) #top-nav-community-dropdown-trigger * { color: var(--crimson) !important; } @media screen and (max-width: 991px) { .top-nav-menu-link { color: var(--dark-slate) !important; } .top-nav-menu-link.w--current { color: var(--crimson) !important; } } .nav-on-white .top-nav .top-nav-menu-link, .nav-on-white .top-nav .top-nav-brand-image, .nav-on-white .top-nav .icon--sm { color: var(--dark-slate); } .nav-on-white .top-nav .menu-button-hamburger-line { background: var(--dark-slate); } .nav-on-white .top-nav { background: rgba(255, 255, 255, 0.96); } .nav-on-white .top-nav .top-nav-dropdown { border-color: rgba(25, 16, 21, 0.1); background: rgba(255, 255, 255, 0.96); } </style></div><div class="top-nav-embed w-embed w-script"><script> const dropdownTargets = document.querySelectorAll("#top-nav-community-dropdown-trigger, #top-nav-community-dropdown") const dropdown = document.querySelector("#top-nav-community-dropdown") dropdownTargets.forEach(target => { let inactiveTimeout target.addEventListener("mouseover", ()=>{ clearTimeout(inactiveTimeout) dropdown.classList.add("active") }) target.addEventListener("mouseleave", ()=> { inactiveTimeout = setTimeout(()=>{ dropdown.classList.remove("active") },1500) }) }) </script></div></div><section class="expo-hero"><div class="expo-hero-gradient"></div><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-hero-wrapper"><div class="expo-hero-logo w-embed"><svg width="45" height="42" fill="none" xmlns="http://www.w3.org/2000/svg"><g filter="url(#a)"><rect x=".5" width="44" height="42" rx="8" fill="#fff" fill-opacity=".2" style="fill:#fff;fill-opacity:.2"/><g clip-path="url(#b)"><path d="M21.89 18.27c.19-.278.398-.313.566-.313.168 0 .447.035.637.312 1.49 2.03 3.95 6.075 5.765 9.06 1.184 1.945 2.093 3.44 2.28 3.63.7.714 1.66.27 2.218-.54.549-.798.7-1.358.7-1.955 0-.407-7.957-15.087-8.758-16.309-.77-1.175-1.022-1.472-2.34-1.472h-.988c-1.315 0-1.505.297-2.276 1.472-.801 1.222-8.76 15.902-8.76 16.308 0 .598.153 1.158.703 1.955.558.81 1.518 1.255 2.218.54.186-.19 1.095-1.684 2.279-3.63 1.815-2.984 4.267-7.029 5.758-9.06l-.001.001Z" fill="#fff" style="fill:#fff;fill-opacity:1"/></g></g><defs><clipPath id="b"><path fill="#fff" style="fill:#fff;fill-opacity:1" transform="translate(10.5 10)" d="M0 0h24v22H0z"/></clipPath><filter id="a" x="-12.5" y="-13" width="70" height="68" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feGaussianBlur in="BackgroundImageFix" stdDeviation="6.5"/><feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_1468_7401"/><feBlend in="SourceGraphic" in2="effect1_backgroundBlur_1468_7401" result="shape"/></filter></defs></svg></div><div class="expo-hero-heading-wrapper"><h1 class="expo-hero-heading">Infinite Red </h1><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="rgba( 213, 70, 63,50%)" class="expo-hero-heart"><path opacity="0.15" d="M4.3314 12.0474L12 20L19.6686 12.0474C20.5211 11.1633 21 9.96429 21 8.71405C21 6.11055 18.9648 4 16.4543 4C15.2487 4 14.0925 4.49666 13.24 5.38071L12 6.66667L10.76 5.38071C9.90749 4.49666 8.75128 4 7.54569 4C5.03517 4 3 6.11055 3 8.71405C3 9.96429 3.47892 11.1633 4.3314 12.0474Z" fill="currentColor"></path><path d="M4.3314 12.0474L12 20L19.6686 12.0474C20.5211 11.1633 21 9.96429 21 8.71405C21 6.11055 18.9648 4 16.4543 4C15.2487 4 14.0925 4.49666 13.24 5.38071L12 6.66667L10.76 5.38071C9.90749 4.49666 8.75128 4 7.54569 4C5.03517 4 3 6.11055 3 8.71405C3 9.96429 3.47892 11.1633 4.3314 12.0474Z" stroke="#e73536" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><h1 class="expo-hero-heading"> Expo</h1></div><h5 class="expo-hero-subheading">If you're considering <a href="https://expo.dev/" target="_blank" class="expo-hero-subheading-link">Expo</a> for your next React Native app, we have the expertise!</h5></div></div></section><section class="expo-intro"><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-intro-container"><div class="expo-intro-progress w-embed"><style> .expo-intro-progress svg { display: none; } @media (min-width: 768px) { .expo-intro-progress svg.expo-intro-progress-desktop { display: block; --expo-intro-progress-gutter: 11.72%; /* the svg has a horizontal padding to accomodate the traveling comet */ --expo-intro-progress-width: calc(100% + var(--expo-intro-progress-gutter) * 2); height: 100%; width: var(--expo-intro-progress-width); position: absolute; top: 0; left: calc(var(--expo-intro-progress-gutter) * -1); bottom: 0; } } @media (max-width: 767px) { .expo-intro-progress svg.expo-intro-progress-mobile { display: block; height: 100%; position: absolute; top: 0; left: calc(50% - 1px); bottom: 0; opacity: 0.5; } } </style> <svg class="expo-intro-progress-desktop" viewBox="0 0 772 1473" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none"> <path class="progress-path" d="M698 1V81C698 98.6731 683.673 113 666 113H106C88.327 113 74.0001 127.327 74.0001 145L74 1309C74 1326.67 88.3269 1341 106 1341H666C683.673 1341 698 1355.33 698 1373V1472" stroke="url(#paint0_linear_27_1913)" style="" stroke-width="2" stroke-linecap="round" /> <g class="progress-comet" filter="url(#filter0_f_27_1913)"> <path d="M386 1341H349.25H312.5" stroke="url(#paint1_linear_27_1913)" style="" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </g> <defs> <filter id="filter0_f_27_1913" x="310.5" y="1339" width="77.5" height="4" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_27_1913" /> </filter> <linearGradient id="paint0_linear_27_1913" x1="682" y1="-18.5" x2="739" y2="1505" gradientUnits="userSpaceOnUse"> <stop stop-color="#240707" stop-opacity="0.05" style="stop-color:#240707;stop-color:color(display-p3 0.1423 0.0264 0.0270);stop-opacity:0.05;" /> <stop offset="0.169372" stop-color="#240707" stop-opacity="0.26" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.26;" /> <stop offset="0.304131" stop-color="#240707" stop-opacity="0.39" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.39;" /> <stop offset="0.537045" stop-color="#240707" stop-opacity="0.24" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.24;" /> <stop offset="1" stop-color="#240707" stop-opacity="0.11" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.11;" /> </linearGradient> <linearGradient id="paint1_linear_27_1913" x1="386" y1="1338" x2="310.5" y2="1341" gradientUnits="userSpaceOnUse"> <stop stop-color="#E73536" style="stop-color:#E73536;stop-color:color(display-p3 0.9059 0.2078 0.2118);stop-opacity:1;" /> <stop offset="1" stop-color="#811E1E" stop-opacity="0" style="stop-color:none;stop-opacity:0;" /> </linearGradient> </defs> </svg> <svg class="expo-intro-progress-mobile" viewBox="0 0 4 2008" fill="none" xmlns="http://www.w3.org/2000/svg"> <g class="progress-comet" filter="url(#filter0_f_0_1)"> <path d="M2 1981.5L2 1944.75L2 1908" stroke="url(#paint0_linear_0_1)" style="" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </g> <path class="progress-path" d="M2 0.5V2007.5" stroke="url(#paint1_linear_0_1)" style="" stroke-width="2" /> <defs> <filter id="filter0_f_0_1" x="0" y="1906" width="4" height="77.5" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_0_1" /> </filter> <linearGradient id="paint0_linear_0_1" x1="5" y1="1981.5" x2="2" y2="1906" gradientUnits="userSpaceOnUse"> <stop stop-color="#E73536" style="stop-color:#E73536;stop-color:color(display-p3 0.9059 0.2078 0.2118);stop-opacity:1;" /> <stop offset="1" stop-color="#811E1E" stop-opacity="0" style="stop-color:none;stop-opacity:0;" /> </linearGradient> <linearGradient id="paint1_linear_0_1" x1="2.5" y1="0.5" x2="2.5" y2="2007.5" gradientUnits="userSpaceOnUse"> <stop stop-color="#240707" stop-opacity="0.05" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.05;" /> <stop offset="1" stop-color="#240707" stop-opacity="0.11" style="stop-color:#240707;stop-color:color(display-p3 0.1412 0.0275 0.0275);stop-opacity:0.11;" /> </linearGradient> </defs> </svg></div><div class="expo-intro-point w-embed"><svg viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="11" cy="11" r="11" fill="white" style="fill:white;fill-opacity:1;"/> <circle id="progress-cp1" cx="11" cy="11" r="6" stroke="#240707" style="stroke:#240707;stroke:color(display-p3 0.1412 0.0275 0.0275);stroke-opacity:1;" stroke-width="2"/> </svg></div><div class="expo-intro-point bottom w-embed"><svg viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="11" cy="11" r="11" fill="white" style="fill:white;fill-opacity:1;"/> <circle id="progress-cp4" cx="11" cy="11" r="6" stroke="#240707" style="stroke:#240707;stroke:color(display-p3 0.1412 0.0275 0.0275);stroke-opacity:1;" stroke-width="2"/> </svg></div><div class="expo-description-container"><div class="expo-description-content"><main class="expo-description-heading"><div class="expo-description-point w-embed"><svg viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="11" cy="11" r="11" fill="white" style="fill:white;fill-opacity:1;"/> <circle id="progress-cp2" cx="11" cy="11" r="6" stroke="#240707" style="stroke:#240707;stroke:color(display-p3 0.1412 0.0275 0.0275);stroke-opacity:1;" stroke-width="2"/> </svg></div><h2 class="expo-description-heading-text">Your React Native toolchain for</h2><h2 class="expo-description-heading-text accent"> rapid </h2><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="expo-description-heading-icon"><path d="M12 15L9 12M12 15C13.3968 14.4687 14.7369 13.7987 16 13M12 15V20C12 20 15.03 19.45 16 18C17.08 16.38 16 13 16 13M9 12C9.53214 10.6194 10.2022 9.29607 11 8.05C12.1652 6.18699 13.7876 4.65305 15.713 3.5941C17.6384 2.53514 19.8027 1.98637 22 2C22 4.72 21.22 9.5 16 13M9 12H4C4 12 4.55 8.97 6 8C7.62 6.92 11 8 11 8M4.5 16.5C3 17.76 2.5 21.5 2.5 21.5C2.5 21.5 6.24 21 7.5 19.5C8.21 18.66 8.2 17.37 7.41 16.59C7.02131 16.219 6.50929 16.0046 5.97223 15.988C5.43516 15.9714 4.91088 16.1537 4.5 16.5Z" stroke="currentColor" STYLE="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><h2 class="expo-description-heading-text"> application development</h2></main><p class="expo-description-description">Expo offers a wide range of tools for developing and testing React Native applications, and provides the user interface and service components typically found in third-party React Native components.<br/></p><div class="expo-description-images"><div class="expo-tiled-background expo-intro"><div class="expo-tiled-background-tiles"></div></div><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6613016d69be1c5f5fc08898_Ellipse%208.png" loading="lazy" sizes="(max-width: 479px) 93vw, (max-width: 767px) 95vw, (max-width: 991px) 73vw, 601px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6613016d69be1c5f5fc08898_Ellipse%208-p-500.png 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6613016d69be1c5f5fc08898_Ellipse%208-p-800.png 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6613016d69be1c5f5fc08898_Ellipse%208-p-1080.png 1080w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6613016d69be1c5f5fc08898_Ellipse%208.png 1323w" alt="" class="expo-radial-background"/><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/664558550ffe8318aec3801f_code.png" loading="lazy" data-w-id="3719f865-3737-1b27-d799-99eedf1c0f7b" alt="Screenshot of a React Native code snippet in app.tsx file, showing the use of hooks for audio functionality, importing modules from react-native and expo, and displaying UI components for playing audio tracks." class="expo-description-image-1"/><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/664420a7d3b4b5ebc878c3b0_Maps01%402x.png" loading="lazy" data-w-id="c4ddaf04-b954-d3c9-2680-cf9b6584f010" sizes="(max-width: 479px) 87vw, (max-width: 767px) 47vw, (max-width: 991px) 224.92288208007812px, 281px" alt="Mobile app screenshot displaying a React Native music player interface developed with Expo." srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/664420a7d3b4b5ebc878c3b0_Maps01%402x-p-500.png 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/664420a7d3b4b5ebc878c3b0_Maps01%402x.png 624w" class="expo-description-image-2"/></div><main class="expo-description-heading"><div class="expo-description-point w-embed"><svg viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="11" cy="11" r="11" fill="white" style="fill:white;fill-opacity:1;"/> <circle id="progress-cp3" cx="11" cy="11" r="6" stroke="#240707" style="stroke:#240707;stroke:color(display-p3 0.1412 0.0275 0.0275);stroke-opacity:1;" stroke-width="2"/> </svg></div><h2 class="expo-description-heading-text">Expo fills in a lot of important</h2><h2 class="expo-description-heading-text accent"> gaps </h2><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 27 8" fill="none" class="expo-description-heading-icon"><path d="M26 4L1 4M1 4L1 0.999999M1 4L1 7M26 1L26 7" stroke="currentColor" STYLE="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="2" stroke-linecap="round"></path></svg><h2 class="expo-description-heading-text"> in the React Native ecosystem</h2></main></div></div><div class="expo-facts-container"><div class="expo-fact"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 32 32" fill="none" class="expo-fact-icon"><path d="M6.66634 24.6666C6.66634 25.2859 6.66634 25.5955 6.70056 25.8554C6.93687 27.6503 8.3493 29.0628 10.1442 29.2991C10.4042 29.3333 10.7138 29.3333 11.333 29.3333H21.5997C23.8399 29.3333 24.96 29.3333 25.8156 28.8973C26.5683 28.5138 27.1802 27.9019 27.5637 27.1493C27.9997 26.2936 27.9997 25.1735 27.9997 22.9333V13.3176C27.9997 12.3392 27.9997 11.85 27.8892 11.3897C27.7912 10.9816 27.6295 10.5914 27.4102 10.2335C27.1629 9.82982 26.817 9.48391 26.1252 8.79211L21.8742 4.54114C21.1824 3.84934 20.8365 3.50343 20.4328 3.25607C20.0749 3.03675 19.6847 2.87513 19.2766 2.77715C18.8163 2.66663 18.3271 2.66663 17.3487 2.66663H11.333C10.7138 2.66663 10.4042 2.66663 10.1442 2.70085C8.3493 2.93715 6.93687 4.34959 6.70056 6.14452C6.66634 6.40445 6.66634 6.71407 6.66634 7.33329M11.9997 19.3333L15.333 16L11.9997 12.6666M6.66634 12.6666L3.33301 16L6.66634 19.3333" stroke="currentColor" STYLE="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><h6 class="expo-fact-heading">High-Quality Libraries</h6><p class="expo-fact-description">Expo publishes and maintains top-tier third-party libraries, enhancing the React Native ecosystem.</p></div><div class="expo-fact"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 33 32" fill="none" class="expo-fact-icon"><path d="M28.0003 9.7037L16.667 16M16.667 16L5.33362 9.7037M16.667 16L16.667 28.6667M28.667 21.4114V10.5886C28.667 10.1318 28.667 9.90334 28.5997 9.69961C28.5401 9.51937 28.4428 9.35393 28.3141 9.21434C28.1687 9.05656 27.9691 8.94563 27.5697 8.72376L17.703 3.24227C17.3249 3.0322 17.1358 2.92716 16.9356 2.88598C16.7584 2.84953 16.5756 2.84953 16.3984 2.88598C16.1982 2.92716 16.0091 3.0322 15.631 3.24228L5.76429 8.72376C5.36492 8.94563 5.16524 9.05656 5.01984 9.21435C4.8912 9.35393 4.79386 9.51938 4.73431 9.69961C4.66699 9.90334 4.66699 10.1318 4.66699 10.5886V21.4114C4.66699 21.8683 4.66699 22.0967 4.73431 22.3005C4.79386 22.4807 4.8912 22.6461 5.01984 22.7857C5.16524 22.9435 5.36492 23.0544 5.76429 23.2763L15.631 28.7578C16.0091 28.9679 16.1982 29.0729 16.3984 29.1141C16.5756 29.1505 16.7584 29.1505 16.9356 29.1141C17.1358 29.0729 17.3249 28.9679 17.703 28.7578L27.5697 23.2763C27.9691 23.0544 28.1687 22.9435 28.3141 22.7857C28.4428 22.6461 28.5401 22.4807 28.5997 22.3005C28.667 22.0967 28.667 21.8683 28.667 21.4114Z" stroke="currentColor" STYLE="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><h6 class="expo-fact-heading">Optimized Services</h6><p class="expo-fact-description">With services like EAS, Expo offers finely tuned solutions that streamline the development workflow.</p></div><div class="expo-fact"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 33 32" fill="none" class="expo-fact-icon"><path d="M29.6667 12H3M8.33333 23.3333L11.6667 20L8.33333 16.6667M15 23.3333L20.3333 23.3333M3 10.4L3 21.6C3 23.8402 3 24.9603 3.43597 25.816C3.81947 26.5686 4.43139 27.1805 5.18404 27.564C6.03968 28 7.15979 28 9.4 28H23.2667C25.5069 28 26.627 28 27.4826 27.564C28.2353 27.1805 28.8472 26.5686 29.2307 25.816C29.6667 24.9603 29.6667 23.8402 29.6667 21.6V10.4C29.6667 8.15979 29.6667 7.03969 29.2307 6.18404C28.8472 5.43139 28.2353 4.81947 27.4826 4.43598C26.627 4 25.5069 4 23.2667 4L9.4 4C7.15979 4 6.03969 4 5.18404 4.43597C4.43139 4.81947 3.81947 5.43139 3.43597 6.18404C3 7.03968 3 8.15979 3 10.4Z" stroke="currentColor" STYLE="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><h6 class="expo-fact-heading">Simplified Development</h6><p class="expo-fact-description">Expo provides tools that significantly ease the development process compared to using "vanilla" React Native.</p></div></div></div></div></section><section class="expo-partner"><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-partner-container"><div data-w-id="d3befe34-79ab-2c26-afc4-46117adfac17" style="opacity:0" class="expo-partner-media w-clearfix"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5f99f836f88eda103d3672d7_rn-team.jpg" loading="eager" sizes="(max-width: 479px) 100vw, 634px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5f99f836f88eda103d3672d7_rn-team-p-1080.jpeg 1080w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5f99f836f88eda103d3672d7_rn-team.jpg 1400w" alt="Collage of three photos showing the Infinite Red team in various settings." class="expo-partner-photo"/></div><div data-w-id="3fff2d34-c55e-7adb-d4a5-bf54ea996a66" style="opacity:0" class="expo-partner-content"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/661337a92a6aba8ccc250b28_Frame%2023%402x.png" loading="lazy" alt="Image displaying two logos side-by-side: on the left, the Expo logo featuring a white uppercase 'A' on a dark blue circular background; on the right, the Infinite Red logo with two white infinity symbols on a red circular background." class="expo-partner-logos"/><h3 class="expo-partner-heading">We’re Trusted Expo Consultants</h3><p class="expo-partner-description">We are one of the first official Expo Consultant Partners and have worked closely with their team, contributing to Expo libraries and using Expo in client projects, for over six years.<br/><br/>We have deep expertise with Expo’s build tools, EAS, custom dev clients, custom config plugins, native code integrations, and much more.</p><div class="expo-partner-podcast">Charlie Cheever, founder of Expo, recently came on our podcast. Give it a listen!</div><div class="expo-partner-podcast-list"><a href="https://open.spotify.com/episode/1I4gOrQcCDrHwuEs12yRvr?si=9FS2YgqrRP-eTWQn9dx66g" target="_blank" class="expo-partner-podcast-link w-inline-block"><div class="expo-partner-podcast-icon w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M18.3096 10.7895C14.8713 8.74755 9.19967 8.55981 5.91735 9.55613C5.39029 9.71597 4.83287 9.41843 4.67317 8.89136C4.51343 8.36403 4.81071 7.80704 5.33818 7.6468C9.10605 6.50299 15.3697 6.72397 19.328 9.07363C19.8021 9.35501 19.9576 9.96728 19.6766 10.4406C19.3954 10.9147 18.7826 11.071 18.3096 10.7895ZM18.1971 13.8138C17.9558 14.2053 17.444 14.3281 17.0531 14.0877C14.1865 12.3257 9.81541 11.8154 6.42405 12.8447C5.98423 12.9777 5.5197 12.7297 5.38621 12.2907C5.25359 11.8509 5.50173 11.3873 5.94066 11.2535C9.8149 10.078 14.6311 10.6473 17.9235 12.6705C18.3144 12.9113 18.4374 13.4234 18.1971 13.8138ZM16.8918 16.7183C16.7002 17.0327 16.2909 17.1312 15.9777 16.9396C13.4727 15.4087 10.3199 15.063 6.60695 15.9111C6.24917 15.9931 5.89263 15.7689 5.81101 15.4111C5.72909 15.0534 5.95239 14.6968 6.31106 14.6151C10.3742 13.6863 13.8597 14.0861 16.6712 15.8041C16.9847 15.9955 17.0834 16.405 16.8918 16.7183ZM11.9999 1.33325C6.10879 1.33325 1.33301 6.10888 1.33301 11.9998C1.33301 17.8913 6.10879 22.6666 11.9999 22.6666C17.8911 22.6666 22.6666 17.8913 22.6666 11.9998C22.6666 6.10888 17.8911 1.33325 11.9999 1.33325Z" fill="#1ED760" style="fill:#1ED760;fill:color(display-p3 0.1176 0.8431 0.3765);fill-opacity:1;"/> </svg></div><div class="expo-partner-podcast-label">Spotify</div></a><a href="https://podcasts.apple.com/us/podcast/rnr-287-special-guest-charlie-cheever/id1058647602?i=1000643999954" target="_blank" class="expo-partner-podcast-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66133a7ed84f1696cd8544cd_image%2032%402x.png" loading="lazy" alt="" class="expo-partner-podcast-icon"/><div class="expo-partner-podcast-label">Apple</div></a><a href="https://music.youtube.com/watch?v=jgYN75F1b-Y&si=QOM1yQEEeckBGQZc" target="_blank" class="expo-partner-podcast-link w-inline-block"><div class="expo-partner-podcast-icon w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12.2666 10.0605V14.1915H18.0072C17.7551 15.52 16.9987 16.6449 15.8641 17.4012L19.326 20.0873C21.3429 18.2256 22.5066 15.491 22.5066 12.2425C22.5066 11.4861 22.4388 10.7588 22.3127 10.0607L12.2666 10.0605Z" fill="#4285F4" style="fill:#4285F4;fill:color(display-p3 0.2588 0.5216 0.9569);fill-opacity:1;"/> <path d="M6.28862 14.0303L5.50785 14.628L2.74414 16.7806C4.49929 20.2618 8.09662 22.6668 12.2663 22.6668C15.1463 22.6668 17.5608 21.7164 19.3257 20.0874L15.8639 17.4013C14.9136 18.0413 13.7014 18.4292 12.2663 18.4292C9.49299 18.4292 7.13667 16.5577 6.29297 14.0364L6.28862 14.0303Z" fill="#34A853" style="fill:#34A853;fill:color(display-p3 0.2039 0.6588 0.3255);fill-opacity:1;"/> <path d="M2.74377 7.21948C2.01654 8.65458 1.59961 10.274 1.59961 12C1.59961 13.7261 2.01647 15.3456 2.74372 16.7807C2.74372 16.7904 6.29297 14.0267 6.29297 14.0267C6.07964 13.3867 5.95353 12.7079 5.95353 11.9999C5.95353 11.292 6.07964 10.6132 6.29297 9.97322L2.74377 7.21948Z" fill="#FBBC05" style="fill:#FBBC05;fill:color(display-p3 0.9843 0.7373 0.0196);fill-opacity:1;"/> <path d="M12.2665 5.58056C13.8374 5.58056 15.2338 6.12357 16.3489 7.17085L19.4035 4.11635C17.5513 2.39029 15.1466 1.33325 12.2665 1.33325C8.09681 1.33325 4.49931 3.72843 2.74414 7.21936L6.29315 9.97331C7.13675 7.45205 9.49315 5.58056 12.2665 5.58056Z" fill="#EA4335" style="fill:#EA4335;fill:color(display-p3 0.9176 0.2627 0.2078);fill-opacity:1;"/> </svg></div><div class="expo-partner-podcast-label">Google</div></a><a href="https://reactnativeradio.com/episodes/rnr-287-special-guest-charlie-cheever" target="_blank" class="expo-partner-podcast-link w-inline-block"><div class="expo-partner-podcast-icon w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M3 10L3 14M7.5 6L7.5 18M12 3V21M16.5 6V18M21 10V14" stroke="#E73536" style="stroke:#E73536;stroke:color(display-p3 0.9059 0.2078 0.2118);stroke-opacity:1;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg></div><div class="expo-partner-podcast-label">Web</div></a></div></div></div></div></section><section class="expo-reason"><div class="expo-tiled-background"><div class="expo-tiled-background-tiles"></div></div><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-reason-container"><div class="expo-reason-wrapper"><h2 class="expo-reason-heading">There’s a reason why we use Expo to build React Native Apps at Infinite Red</h2><p class="expo-reason-description">Infinite Red's consultants report high developer satisfaction, improved productivity, and lower stress levels when using Expo on their projects. All of those plus-sides make their way into an app that's top notch for you and your team.</p></div></div></div></section><section class="expo-reasons"><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-alternating-container"><div class="expo-alternating-row"><div class="expo-alternating-content"><h3 class="expo-alternating-heading">Ideal for new projects</h3><p class="expo-alternating-description">We recommend <a href="https://expo.dev/" target="_blank">Expo</a> specifically for new (greenfield) React Native applications. The Expo ecosystem, including <a href="https://expo.dev/eas" target="_blank">Expo Application Services</a> (EAS) for builds and deployments, integrates seamlessly with Ignite, a React Native starter kit or boilerplate, developed and maintained by Infinite Red.<br/></p></div><div class="expo-alternating-media"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442399c402892aa879eb66_img%402x.png" loading="lazy" sizes="(max-width: 479px) 93vw, (max-width: 767px) 96vw, (max-width: 991px) 95vw, (max-width: 1919px) 44vw, 562.984375px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442399c402892aa879eb66_img%402x-p-500.png 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442399c402892aa879eb66_img%402x-p-800.png 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442399c402892aa879eb66_img%402x.png 1126w" alt="Graphic illustration showing a terminal window with the command 'npx create-expo-app@latest' executed, resulting in a successful setup of a new project named 'MyCoolApp'. Surrounding the terminal are icons representing various Expo tools such as expo-barcode-scanner, expo-background-fetch, expo-location, app.json, and eas.json." class="expo-alternating-image"/></div></div><div class="expo-alternating-row"><div class="expo-alternating-content alternate"><h3 class="expo-alternating-heading">Faster time-to-market</h3><p class="expo-alternating-description">Expo significantly accelerates the development and deployment cycle of React Native apps. Its comprehensive suite of tools and services, including the <a href="https://expo.dev/go" target="_blank">Expo Go app</a> for immediate on-device testing and Expo Application Services (EAS) for simplified build and deployment processes, enables developers to iterate rapidly.</p></div><div class="expo-alternating-media alternate"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/65fb37110032cf15a4ae0bfe_Frame%20673%403x%20copy.jpg" loading="lazy" sizes="(max-width: 479px) 93vw, (max-width: 767px) 96vw, (max-width: 991px) 95vw, (max-width: 1919px) 44vw, 562.984375px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/65fb37110032cf15a4ae0bfe_Frame%20673%403x%20copy-p-500.jpg 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/65fb37110032cf15a4ae0bfe_Frame%20673%403x%20copy-p-800.jpg 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/65fb37110032cf15a4ae0bfe_Frame%20673%403x%20copy-p-1080.jpg 1080w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/65fb37110032cf15a4ae0bfe_Frame%20673%403x%20copy.jpg 1689w" alt="Graphic depiction of a terminal window showing the completion of app submission processes with the command 'eas submit', indicating successful submissions to the Play Store and the App Store. Above the terminal, icons for build and update processes are displayed, emphasizing the development cycle steps." class="expo-alternating-image"/></div></div><div class="expo-alternating-row"><div class="expo-alternating-content"><h3 class="expo-alternating-heading">Positive impact on developer experience</h3><p class="expo-alternating-description">Projects utilizing Expo are reported to have higher developer satisfaction and lower stress levels across Infinite Red, indicating a positive impact on productivity and well-being. This is a huge plus for your development team as well—they will love it.</p></div><div class="expo-alternating-media"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66464a9177aa8bd49e2b9d56_Frame%20673%402x.jpg" loading="lazy" sizes="(max-width: 479px) 93vw, (max-width: 767px) 96vw, (max-width: 991px) 95vw, (max-width: 1919px) 44vw, 562.984375px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66464a9177aa8bd49e2b9d56_Frame%20673%402x-p-500.jpg 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66464a9177aa8bd49e2b9d56_Frame%20673%402x-p-800.jpg 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66464a9177aa8bd49e2b9d56_Frame%20673%402x.jpg 1126w" alt="Infinite Red developer, Jon Major, focused on coding at his workspace. He is wearing a black Infinite Red T-shirt and a matching cap, seated in front of a computer with code visible on the screen, and video recording equipment set up nearby." class="expo-alternating-image"/></div></div><div class="expo-alternating-row"><div class="expo-alternating-content alternate"><h3 class="expo-alternating-heading">Cross-platform compatibility</h3><p class="expo-alternating-description">When an app has cross-platform compatibility, it reduces overhead in very measurable ways. From faster development time to a consistent user experience, this enables developers to write once and deploy across iOS and Android platforms efficiently. </p></div><div class="expo-alternating-media alternate"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442da1392bbf340ddc98dc_Frame%20674%402x.png" loading="lazy" sizes="(max-width: 479px) 93vw, (max-width: 767px) 96vw, (max-width: 991px) 95vw, (max-width: 1919px) 44vw, 562.984375px" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442da1392bbf340ddc98dc_Frame%20674%402x-p-500.png 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442da1392bbf340ddc98dc_Frame%20674%402x-p-800.png 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/66442da1392bbf340ddc98dc_Frame%20674%402x.png 1126w" alt="Graphic representation of Expo's cross-platform capabilities, displaying a consistent application interface on both a desktop monitor and two smartphones. The image showcases the adaptability of an app developed with Expo, maintaining visual and functional consistency across different devices and screen sizes." class="expo-alternating-image"/></div></div></div></div></section><section class="expo-exceptions"><div data-w-id="4e60f18a-c1d5-0347-e58a-e153f9dba2fc" class="w-layout-blockcontainer expo-container w-container"><div class="expo-exceptions-container"><div class="expo-exceptions-heading">...but there are exceptions where Expo doesn’t make sense</div><div class="expo-exceptions-content"><h6 class="expo-exceptions-content-heading">We don't recommend using Expo if:</h6><div class="expo-exceptions-content-row"><div class="expo-exceptions-icon w-embed"><svg viewBox="0 0 28 28" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17 11L11 17M11 11L17 17M24 14C24 19.5228 19.5228 24 14 24C8.47715 24 4 19.5228 4 14C4 8.47715 8.47715 4 14 4C19.5228 4 24 8.47715 24 14Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg></div><p class="expo-exceptions-text">Your target platforms include those not supported by Expo, like react-native-windows.</p></div><div class="expo-exceptions-content-row"><div class="expo-exceptions-icon w-embed"><svg viewBox="0 0 28 28" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17 11L11 17M11 11L17 17M24 14C24 19.5228 19.5228 24 14 24C8.47715 24 4 19.5228 4 14C4 8.47715 8.47715 4 14 4C19.5228 4 24 8.47715 24 14Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg></div><p class="expo-exceptions-text">You're involved in brownfield development, integrating React Native into an existing native application.</p></div><div class="expo-exceptions-content-row"><p class="expo-exceptions-text">...but don't worry, we have you covered! Check out our "vanilla" <a href="/react-native">React Native services</a>.</p></div></div></div></div></section><section class="praise-section"><h2 class="praise-heading">In the Media</h2><div class="custom-css-praise-marquee w-embed"><style> .praise-marquee-list-wrapper { display: none; } html.wf-design-mode .praise-marquee-list-wrapper { display: block; } </style></div><div data-marquee-rows="2" class="praise-marquee-list-wrapper w-dyn-list"><div role="list" class="praise-marquee w-dyn-items"><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://reactnativeradio.com/episodes/rnr-268-embarking-on-expo-sdk-48" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5ca76c7f48d9c303dc_664564a557e1c4d8d56142d9_yulolimum-capture-2024-05-15--18-42-46.png" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5ca76c7f48d9c303d6_637279ecf3d9cb20bce2a183_mazen.jpeg" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2"/></div><div class="praise-item-source"><div class="praise-item-name">Embarking on Expo SDK 48</div><div class="praise-item-handle">Robin & Mazen - Infinite Red</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c14_66455d60589edd61ffa6fc6f_yulolimum-capture-2024-05-15--18-10-51.png" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">In React Native Radio episode 268, Robin and Mazen go on an epic adventure walking through the updates that we get with Expo SDK 48.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://reactnativeradio.com/episodes/rnr-277-expo-launch-party" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5df3d19cf05972992d_664562059db8171b4fd28237_image_2024-05-15_183148410.png" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5df3d19cf059729939_66456531b87c3b60482ce9eb_yulolimum-capture-2024-05-15--18-45-07.png" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2"/></div><div class="praise-item-source"><div class="praise-item-name">Expo Launch Party</div><div class="praise-item-handle">Doug Lowder and Gabriel Donadel - Expo</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c14_66455d60589edd61ffa6fc6f_yulolimum-capture-2024-05-15--18-10-51.png" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">In React Native Radio episode 277, Robin and Mazen are joined by Doug Lowder and Gabriel Donadel from Expo, They discuss the recent updates and launches by Expo, including Rollouts for EAS Update, SSO, Expo Orbit, and more!</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://www.youtube.com/watch?v=sRLunWEzwHI" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c87f8452ce62b30cb_664562b09db06e3626b560da_yulolimum-capture-2024-05-15--18-34-27.png" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2 w-condition-invisible w-dyn-bind-empty"/></div><div class="praise-item-source"><div class="praise-item-name">Debugging should be easier</div><div class="praise-item-handle">Cedric van Putten @ App.js Conf.</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5bae4ea2e8d59755e5_66455e4fb87c3b6048290bb4_9I3BQkf5_400x400.jpeg" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">Expo's developer-centric approach helps you build apps quickly, but unexpected issues can hinder progress. To address this, Expo is expanding its debugging capabilities, making it easier to identify and fix issues, much like debugging on the web.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://www.youtube.com/watch?v=xHMu4oT6-SQ" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42-p-500.png 500w, https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42.png 624w" class="expo-us-testimonial-photo"/><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5cae4ea2e8d59755ec_6645650f2d7fc69c42542d41_yulolimum-capture-2024-05-15--18-44-35.png" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2"/></div><div class="praise-item-source"><div class="praise-item-name">Expo Community & Workflows</div><div class="praise-item-handle">Charlie Cheever & James Ide - Expo</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5bae4ea2e8d59755e5_66455e4fb87c3b6048290bb4_9I3BQkf5_400x400.jpeg" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">Charlie and James discuss the growing Expo community, shifting from 'Expo vs React Native' to 'Expo and React Native', and introducing new workflow features for faster development and collaboration.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://reactnativeradio.com/episodes/rnr-261-whats-the-deal-with-eas" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5ca76c7f48d9c303d6_637279ecf3d9cb20bce2a183_mazen.jpeg" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5ca76c7f48d9c303dc_664564a557e1c4d8d56142d9_yulolimum-capture-2024-05-15--18-42-46.png" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2"/></div><div class="praise-item-source"><div class="praise-item-name">What's the deal with EAS?</div><div class="praise-item-handle">Mazen & Robin - Infinite Red</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c14_66455d60589edd61ffa6fc6f_yulolimum-capture-2024-05-15--18-10-51.png" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">In React Native Radio episode 261, Robin and Mazen discuss EAS (Expo Application Services), and how it's revolutionized RN tooling. You'll hear much mention of a mysterious Frank in this episode. That's Frank Calise, one of our developers here at IR and resident Expo Wizard.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://reactnativeradio.com/episodes/rnr-287-special-guest-charlie-cheever" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42-p-500.png 500w, https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c21_66455dd400b04eee1b92bf3b_yulolimum-capture-2024-05-15--18-13-42.png 624w" class="expo-us-testimonial-photo"/><img src="" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2 w-condition-invisible w-dyn-bind-empty"/></div><div class="praise-item-source"><div class="praise-item-name">React Native Radio #287</div><div class="praise-item-handle">Charlie Cheever - Expo</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c88535de569c47c14_66455d60589edd61ffa6fc6f_yulolimum-capture-2024-05-15--18-10-51.png" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">Jamon and Robin talk with Expo co-founder Charlie Cheever about his early programming days, his time working at Facebook (now Meta), and the beginnings Expo. It even has a wild story about Charlie's run-in with (wait for it!) Mark Zuckerberg. Yes... That Mark Zuckerberg.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://www.youtube.com/watch?v=608r8etX_cg" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5cceb3116080467478_66455f4898a3bd58ca0e76d0_wGfn72X__400x400.jpeg" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2 w-condition-invisible w-dyn-bind-empty"/></div><div class="praise-item-source"><div class="praise-item-name">Write Once, Route Everywhere: File System-based Navigation for Native Apps</div><div class="praise-item-handle">Evan Bacon @ App.js Conf.</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5bae4ea2e8d59755e5_66455e4fb87c3b6048290bb4_9I3BQkf5_400x400.jpeg" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">Introducing Expo Router, a file system-based router that simplifies navigation for universal React apps. Easily create nested UIs, deep links, and dynamic routes by organizing files and exporting React components. Expo Router enables native experiences on every platform, leveraging React Navigation.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://www.youtube.com/watch?v=4oW16m6TRgA" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c87f8452ce62b3009_6645609598a3bd58ca0f4e59_LDFMYGSQ_400x400.jpeg" loading="lazy" alt="" class="expo-us-testimonial-photo"/><img src="" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2 w-condition-invisible w-dyn-bind-empty"/></div><div class="praise-item-source"><div class="praise-item-name">Trying out Over the Air Updates with expo-update</div><div class="praise-item-handle">Jamon Holmgren - Infinite Red</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c87f8452ce62b300e_664560d843bfb9a07acf4d50_yulolimum-capture-2024-05-15--18-26-37.png" loading="lazy" alt="" class="praise-item-platform"/></div><p class="praise-item-text">Jamon integrates expo-updates with a fresh Ignite app in the latest React Native Live.</p></a></div><div role="listitem" class="praise-item w-dyn-item"><a target="_blank" href="https://www.youtube.com/watch?v=YufZFVL-BJc" class="praise-item-wrapper w-inline-block"><div class="praise-item-header"><div class="praise-item-photos"><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5b2bca53436d036d9e_66455b8ed61f2665b1aafb3b_641dd1d634e58316a79b22b6_keith-kurak-p-500.jpeg" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5b2bca53436d036d9e_66455b8ed61f2665b1aafb3b_641dd1d634e58316a79b22b6_keith-kurak-p-500-p-500.jpeg 500w, https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5b2bca53436d036d9e_66455b8ed61f2665b1aafb3b_641dd1d634e58316a79b22b6_keith-kurak-p-500.jpeg 500w" class="expo-us-testimonial-photo"/><img src="" loading="lazy" alt="" class="expo-us-testimonial-photo expo-us-testimonial-photo-2 w-condition-invisible w-dyn-bind-empty"/></div><div class="praise-item-source"><div class="praise-item-name">Not your grandparents' Expo</div><div class="praise-item-handle">Keith Kurak @ Chain React Conf.</div></div><img src="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c2bca53436d036dab_66455bead9cfcc3afcc3947a_unnamed.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c2bca53436d036dab_66455bead9cfcc3afcc3947a_unnamed-p-500.png 500w, https://cdn.prod.website-files.com/5e696c156810060ef59d768e/6789aa5c2bca53436d036dab_66455bead9cfcc3afcc3947a_unnamed.png 512w" class="praise-item-platform"/></div><p class="praise-item-text">Learn how today's Expo adapts as you need to customize your native projects, speeds up local development, and provides complex build setups to a simple configuration file.</p></a></div></div></div></section><section class="expo-boilerplate"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 829 446" fill="none" class="expo-boilerplate-backdrop"><path fill-rule="evenodd" clip-rule="evenodd" d="M503.038 1.08011C493.328 2.88932 485.498 11.1807 483.969 21.2726C482.204 32.915 490.712 45.0446 502.334 47.4536C526.334 52.4298 541.493 22.6217 523.144 6.53263C516.949 1.10068 511.238 -0.448674 503.038 1.08011ZM606.613 2.19314C598.287 3.35055 590.815 4.84469 590.008 5.51272C586.784 8.18484 585.666 13.0386 584.454 29.6225C583.758 39.1503 582.903 49.7111 582.554 53.0913L581.918 59.2368L573.821 59.9947C562.358 61.0676 560.581 62.8 559.42 74.0374C557.105 96.4376 557.077 99.0101 559.112 101.517C560.933 103.759 561.492 103.836 569.171 102.896C573.643 102.348 577.499 102.075 577.739 102.289C577.98 102.502 576.772 117.909 575.054 136.526C571.326 176.923 570.998 194.912 573.84 203.049C576.564 210.845 581.178 216.793 587.285 220.378C592.173 223.248 593.185 223.421 604.406 223.323C615.29 223.227 617.319 222.866 627.636 219.18C648.956 211.565 659.156 205.243 659.156 199.644C659.156 197.055 655.568 178.797 653.691 171.84C653.106 169.668 651.875 167.603 650.957 167.25C650.038 166.898 646.494 168.018 643.081 169.739C630.542 176.06 623.688 176.237 620.982 170.307C619.233 166.474 625.074 98.4698 627.309 96.6444C628.109 95.9893 634.748 94.82 642.063 94.0448C649.376 93.2707 656.435 92.2432 657.748 91.7625C661.819 90.2726 663.196 85.6462 664.556 68.8881C666.272 47.7189 667.227 48.7085 647.411 51.1251C639.261 52.119 632.019 52.9246 631.317 52.9159C630.437 52.9051 630.193 51.1305 630.534 47.2165C633.569 12.2353 634.044 3.70894 633.058 1.86725C631.681 -0.702023 627.018 -0.644645 606.613 2.19314ZM761.066 35.0599C736.218 40.1519 713.521 55.2751 698.93 76.4616C692.779 85.3896 685.794 100.863 682.876 112.017C680.814 119.902 680.357 124.407 680.366 136.811C680.378 152.223 681.089 156.551 685.443 167.668C692.387 185.397 704.894 198.419 720.952 204.641C725.269 206.313 730.226 207.094 738.908 207.468C753.769 208.108 764.538 205.699 778.954 198.509C789.567 193.216 803.52 182.315 806.127 177.279C807.591 174.452 807.587 173.748 806.085 170.623C805.161 168.7 801.49 163.716 797.928 159.548C794.365 155.379 791.444 151.656 791.436 151.272C791.429 150.889 790.654 150.282 789.718 149.923C787.834 149.201 784.449 150.663 781.122 153.635C777.62 156.764 767.491 161.901 761.139 163.77C740.696 169.786 726.581 161.165 725.043 141.725C724.708 137.479 722.862 138.223 743.719 134.195C789.095 125.433 820.812 103.424 823.741 78.6671C826.254 57.4124 814.739 40.4399 794.176 35.0924C786.377 33.0644 770.876 33.0493 761.066 35.0599ZM506.29 68.6791C489.06 71.0881 488.292 71.3025 485.42 74.5084C483.78 76.3393 482.439 79.0753 482.439 80.5878C482.439 82.1004 479.51 116.767 475.929 157.625C470.003 225.246 469.567 232.138 471.075 234.437C473.079 237.492 472.208 237.494 494.72 234.388C517.783 231.206 517.871 231.141 519.297 216.316C520.578 202.983 523.915 164.666 527.965 116.781C529.751 95.6407 531.465 76.5222 531.773 74.2951C532.203 71.1823 531.827 69.7423 530.152 68.0695C527.609 65.5295 529.092 65.4916 506.29 68.6791ZM48.4641 73.011C38.4519 74.3384 29.1206 75.7102 27.7264 76.0599C22.2536 77.4317 21.8557 79.4639 18.4114 123.528C16.6312 146.317 14.4499 173.731 13.5652 184.45C12.6817 195.169 9.75661 231.954 7.06683 266.195C4.37597 300.435 1.68403 333.836 1.08341 340.418C-0.5374 358.179 -0.366104 364.414 1.77618 365.611C3.98676 366.846 44.0017 356.793 46.7468 354.312C47.755 353.4 49.0885 351.35 49.7108 349.756C50.3321 348.161 52.3432 327.611 54.1786 304.089C57.8452 257.119 65.8007 156.789 69.7611 107.578C71.2681 88.8575 71.9088 75.4244 71.3494 74.3092C69.5432 70.7081 66.9412 70.5608 48.4641 73.011ZM776.969 74.9902C778.359 76.6034 779.496 79.2929 779.496 80.9657C779.496 83.8944 776.46 88.8532 773.016 91.5459C766.961 96.2838 747.183 103.15 733.691 105.2C728.792 105.944 728.684 105.311 732.359 97.4261C735.966 89.6891 742.49 82.0765 749.491 77.436C756.728 72.6386 761.189 71.3025 768.567 71.7226C773.381 71.9965 774.899 72.5866 776.969 74.9902ZM372.995 83.8619C360.271 87.2779 346.824 95.3408 334.938 106.681C325.306 115.87 326.177 116.006 323 104.807C322.25 102.162 320.781 99.0794 319.736 97.9566C317.958 96.0467 317.253 96.0034 308.798 97.2897C303.826 98.0454 298.917 99.0967 297.887 99.6262C293.74 101.759 293.612 102.629 288.4 164.42C281.959 240.756 280.804 254.055 280.335 257.321C279.663 261.996 282.94 265.594 287.133 264.783C288.711 264.477 297.32 263.159 306.264 261.851C317.92 260.148 323.094 258.931 324.528 257.557C326.948 255.24 327.204 253.142 331.729 198.525C333.604 175.897 335.704 156.164 336.396 154.675C338.448 150.258 346.711 140.047 351.055 136.562C357.953 131.025 364.263 128.401 371.855 127.912C381.045 127.32 385.434 129.599 389.202 136.918C391.726 141.823 391.908 143.226 391.843 157.362C391.805 165.71 390.217 188.742 388.313 208.543C384.608 247.074 384.679 248.871 389.909 248.871C391.203 248.871 400.233 247.643 409.975 246.142C430.553 242.973 431.826 242.214 432.973 232.458C435.679 209.45 439.48 158.802 439.541 144.931C439.604 130.649 439.256 126.912 437.203 119.846C431.859 101.448 421.432 89.3069 406.726 84.3589C398.716 81.664 382.094 81.4193 372.995 83.8619ZM237.963 108.874C233.789 109.76 229.458 111.292 228.339 112.28C227.219 113.266 224.641 117.704 222.609 122.142C220.577 126.579 218.704 130.42 218.447 130.677C218.189 130.934 216.242 129.62 214.118 127.758C205.708 120.385 194.712 116.575 182.129 116.676C147.205 116.955 113.298 146.496 99.9883 188.239C95.5412 202.185 94.8549 206.972 94.8625 223.969C94.8679 236.633 95.3406 242.478 96.789 247.788C102.948 270.377 117.662 286.866 136.053 291.787C143.312 293.729 153.803 293.638 161.822 291.562C168.475 289.841 181.232 283.943 186.8 280.015C188.474 278.834 190.114 278.139 190.444 278.469C191.222 279.246 188.544 313.037 187.62 314.094C187.235 314.534 171.942 318.775 153.635 323.516C114.011 333.78 109.111 335.867 97.5631 347.398C85.2493 359.693 80.2188 371.94 80.2188 389.623C80.2188 411.506 90.8088 431.779 106.019 439.011C131.004 450.891 161.842 447.479 188.408 429.896C209.848 415.706 221.665 395.486 230.262 358.283L233.626 343.725L256.393 338.142C284.342 331.287 298.761 327.909 300.064 327.909C300.608 327.909 297.926 338.19 294.103 350.756C290.28 363.323 287.44 373.892 287.792 374.242C288.143 374.593 290.003 374.337 291.926 373.671C295.074 372.582 401.26 337.81 441.783 324.599C472.786 314.492 509.96 303.063 510.401 303.503C510.644 303.746 503.233 321.703 493.931 343.407C484.629 365.111 477.018 383.17 477.018 383.539C477.018 385.011 479.611 383.828 497.205 374.323C522.485 360.665 528.769 357.562 552.367 347.086C563.696 342.056 575.161 336.928 577.844 335.691C585.383 332.215 635.938 309.651 645.062 305.69C649.534 303.748 660.755 298.763 669.997 294.615C679.239 290.465 702.657 279.988 722.036 271.335C741.415 262.681 767.76 250.882 780.58 245.113C793.401 239.344 809.605 232.129 816.592 229.08C823.578 226.03 829.16 223.402 828.996 223.237C828.832 223.073 823.604 223.693 817.378 224.613C766.244 232.174 644.553 265.905 579.26 290.617C570.601 293.895 562.06 297.328 560.28 298.247C558.5 299.166 556.791 299.665 556.481 299.356C556.172 299.047 557.877 294.261 560.271 288.72C562.664 283.179 568.088 270.65 572.324 260.877C576.56 251.105 579.781 242.865 579.482 242.568C578.521 241.606 531.256 255.083 488.944 268.382C461.231 277.092 399.01 296.976 372.427 305.616C358.729 310.069 347.322 313.513 347.079 313.271C346.837 313.029 349.215 304.279 352.365 293.827C355.514 283.375 357.777 274.51 357.392 274.126C356.707 273.442 330.19 279.551 268.991 294.492C252.069 298.623 238.028 301.809 237.79 301.571C237.552 301.333 240.787 260.215 244.978 210.197C249.17 160.179 252.599 117.09 252.599 114.444C252.599 106.591 251.205 106.061 237.963 108.874ZM186.766 161.237C190.928 162.391 197.653 167.515 199.479 170.923C200.123 172.124 199.726 180.73 198.376 194.865C197.217 207.002 195.943 220.509 195.545 224.881C194.822 232.823 194.817 232.835 189.484 237.044C169.631 252.716 148.672 249.82 141.329 230.39C138.774 223.631 138.788 206.042 141.355 197.442C149.202 171.154 168.125 156.067 186.766 161.237ZM183.213 357.976C183.213 360.476 178.395 375.574 175.71 381.488C169.218 395.787 159.714 402.491 144.596 403.436C136.812 403.923 135.105 403.672 129.85 401.269C124.905 399.008 123.499 397.71 121.474 393.531C119.263 388.972 119.158 388.013 120.335 383.119C121.693 377.464 125.223 373.535 131.685 370.488C135.051 368.9 177.9 357.484 181.316 357.264C182.359 357.197 183.213 357.518 183.213 357.976Z" fill="url(#boilerplate-ignite-linear)"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M503.038 1.08011C493.328 2.88932 485.498 11.1807 483.969 21.2726C482.204 32.915 490.712 45.0446 502.334 47.4536C526.334 52.4298 541.493 22.6217 523.144 6.53263C516.949 1.10068 511.238 -0.448674 503.038 1.08011ZM606.613 2.19314C598.287 3.35055 590.815 4.84469 590.008 5.51272C586.784 8.18484 585.666 13.0386 584.454 29.6225C583.758 39.1503 582.903 49.7111 582.554 53.0913L581.918 59.2368L573.821 59.9947C562.358 61.0676 560.581 62.8 559.42 74.0374C557.105 96.4376 557.077 99.0101 559.112 101.517C560.933 103.759 561.492 103.836 569.171 102.896C573.643 102.348 577.499 102.075 577.739 102.289C577.98 102.502 576.772 117.909 575.054 136.526C571.326 176.923 570.998 194.912 573.84 203.049C576.564 210.845 581.178 216.793 587.285 220.378C592.173 223.248 593.185 223.421 604.406 223.323C615.29 223.227 617.319 222.866 627.636 219.18C648.956 211.565 659.156 205.243 659.156 199.644C659.156 197.055 655.568 178.797 653.691 171.84C653.106 169.668 651.875 167.603 650.957 167.25C650.038 166.898 646.494 168.018 643.081 169.739C630.542 176.06 623.688 176.237 620.982 170.307C619.233 166.474 625.074 98.4698 627.309 96.6444C628.109 95.9893 634.748 94.82 642.063 94.0448C649.376 93.2707 656.435 92.2432 657.748 91.7625C661.819 90.2726 663.196 85.6462 664.556 68.8881C666.272 47.7189 667.227 48.7085 647.411 51.1251C639.261 52.119 632.019 52.9246 631.317 52.9159C630.437 52.9051 630.193 51.1305 630.534 47.2165C633.569 12.2353 634.044 3.70894 633.058 1.86725C631.681 -0.702023 627.018 -0.644645 606.613 2.19314ZM761.066 35.0599C736.218 40.1519 713.521 55.2751 698.93 76.4616C692.779 85.3896 685.794 100.863 682.876 112.017C680.814 119.902 680.357 124.407 680.366 136.811C680.378 152.223 681.089 156.551 685.443 167.668C692.387 185.397 704.894 198.419 720.952 204.641C725.269 206.313 730.226 207.094 738.908 207.468C753.769 208.108 764.538 205.699 778.954 198.509C789.567 193.216 803.52 182.315 806.127 177.279C807.591 174.452 807.587 173.748 806.085 170.623C805.161 168.7 801.49 163.716 797.928 159.548C794.365 155.379 791.444 151.656 791.436 151.272C791.429 150.889 790.654 150.282 789.718 149.923C787.834 149.201 784.449 150.663 781.122 153.635C777.62 156.764 767.491 161.901 761.139 163.77C740.696 169.786 726.581 161.165 725.043 141.725C724.708 137.479 722.862 138.223 743.719 134.195C789.095 125.433 820.812 103.424 823.741 78.6671C826.254 57.4124 814.739 40.4399 794.176 35.0924C786.377 33.0644 770.876 33.0493 761.066 35.0599ZM506.29 68.6791C489.06 71.0881 488.292 71.3025 485.42 74.5084C483.78 76.3393 482.439 79.0753 482.439 80.5878C482.439 82.1004 479.51 116.767 475.929 157.625C470.003 225.246 469.567 232.138 471.075 234.437C473.079 237.492 472.208 237.494 494.72 234.388C517.783 231.206 517.871 231.141 519.297 216.316C520.578 202.983 523.915 164.666 527.965 116.781C529.751 95.6407 531.465 76.5222 531.773 74.2951C532.203 71.1823 531.827 69.7423 530.152 68.0695C527.609 65.5295 529.092 65.4916 506.29 68.6791ZM48.4641 73.011C38.4519 74.3384 29.1206 75.7102 27.7264 76.0599C22.2536 77.4317 21.8557 79.4639 18.4114 123.528C16.6312 146.317 14.4499 173.731 13.5652 184.45C12.6817 195.169 9.75661 231.954 7.06683 266.195C4.37597 300.435 1.68403 333.836 1.08341 340.418C-0.5374 358.179 -0.366104 364.414 1.77618 365.611C3.98676 366.846 44.0017 356.793 46.7468 354.312C47.755 353.4 49.0885 351.35 49.7108 349.756C50.3321 348.161 52.3432 327.611 54.1786 304.089C57.8452 257.119 65.8007 156.789 69.7611 107.578C71.2681 88.8575 71.9088 75.4244 71.3494 74.3092C69.5432 70.7081 66.9412 70.5608 48.4641 73.011ZM776.969 74.9902C778.359 76.6034 779.496 79.2929 779.496 80.9657C779.496 83.8944 776.46 88.8532 773.016 91.5459C766.961 96.2838 747.183 103.15 733.691 105.2C728.792 105.944 728.684 105.311 732.359 97.4261C735.966 89.6891 742.49 82.0765 749.491 77.436C756.728 72.6386 761.189 71.3025 768.567 71.7226C773.381 71.9965 774.899 72.5866 776.969 74.9902ZM372.995 83.8619C360.271 87.2779 346.824 95.3408 334.938 106.681C325.306 115.87 326.177 116.006 323 104.807C322.25 102.162 320.781 99.0794 319.736 97.9566C317.958 96.0467 317.253 96.0034 308.798 97.2897C303.826 98.0454 298.917 99.0967 297.887 99.6262C293.74 101.759 293.612 102.629 288.4 164.42C281.959 240.756 280.804 254.055 280.335 257.321C279.663 261.996 282.94 265.594 287.133 264.783C288.711 264.477 297.32 263.159 306.264 261.851C317.92 260.148 323.094 258.931 324.528 257.557C326.948 255.24 327.204 253.142 331.729 198.525C333.604 175.897 335.704 156.164 336.396 154.675C338.448 150.258 346.711 140.047 351.055 136.562C357.953 131.025 364.263 128.401 371.855 127.912C381.045 127.32 385.434 129.599 389.202 136.918C391.726 141.823 391.908 143.226 391.843 157.362C391.805 165.71 390.217 188.742 388.313 208.543C384.608 247.074 384.679 248.871 389.909 248.871C391.203 248.871 400.233 247.643 409.975 246.142C430.553 242.973 431.826 242.214 432.973 232.458C435.679 209.45 439.48 158.802 439.541 144.931C439.604 130.649 439.256 126.912 437.203 119.846C431.859 101.448 421.432 89.3069 406.726 84.3589C398.716 81.664 382.094 81.4193 372.995 83.8619ZM237.963 108.874C233.789 109.76 229.458 111.292 228.339 112.28C227.219 113.266 224.641 117.704 222.609 122.142C220.577 126.579 218.704 130.42 218.447 130.677C218.189 130.934 216.242 129.62 214.118 127.758C205.708 120.385 194.712 116.575 182.129 116.676C147.205 116.955 113.298 146.496 99.9883 188.239C95.5412 202.185 94.8549 206.972 94.8625 223.969C94.8679 236.633 95.3406 242.478 96.789 247.788C102.948 270.377 117.662 286.866 136.053 291.787C143.312 293.729 153.803 293.638 161.822 291.562C168.475 289.841 181.232 283.943 186.8 280.015C188.474 278.834 190.114 278.139 190.444 278.469C191.222 279.246 188.544 313.037 187.62 314.094C187.235 314.534 171.942 318.775 153.635 323.516C114.011 333.78 109.111 335.867 97.5631 347.398C85.2493 359.693 80.2188 371.94 80.2188 389.623C80.2188 411.506 90.8088 431.779 106.019 439.011C131.004 450.891 161.842 447.479 188.408 429.896C209.848 415.706 221.665 395.486 230.262 358.283L233.626 343.725L256.393 338.142C284.342 331.287 298.761 327.909 300.064 327.909C300.608 327.909 297.926 338.19 294.103 350.756C290.28 363.323 287.44 373.892 287.792 374.242C288.143 374.593 290.003 374.337 291.926 373.671C295.074 372.582 401.26 337.81 441.783 324.599C472.786 314.492 509.96 303.063 510.401 303.503C510.644 303.746 503.233 321.703 493.931 343.407C484.629 365.111 477.018 383.17 477.018 383.539C477.018 385.011 479.611 383.828 497.205 374.323C522.485 360.665 528.769 357.562 552.367 347.086C563.696 342.056 575.161 336.928 577.844 335.691C585.383 332.215 635.938 309.651 645.062 305.69C649.534 303.748 660.755 298.763 669.997 294.615C679.239 290.465 702.657 279.988 722.036 271.335C741.415 262.681 767.76 250.882 780.58 245.113C793.401 239.344 809.605 232.129 816.592 229.08C823.578 226.03 829.16 223.402 828.996 223.237C828.832 223.073 823.604 223.693 817.378 224.613C766.244 232.174 644.553 265.905 579.26 290.617C570.601 293.895 562.06 297.328 560.28 298.247C558.5 299.166 556.791 299.665 556.481 299.356C556.172 299.047 557.877 294.261 560.271 288.72C562.664 283.179 568.088 270.65 572.324 260.877C576.56 251.105 579.781 242.865 579.482 242.568C578.521 241.606 531.256 255.083 488.944 268.382C461.231 277.092 399.01 296.976 372.427 305.616C358.729 310.069 347.322 313.513 347.079 313.271C346.837 313.029 349.215 304.279 352.365 293.827C355.514 283.375 357.777 274.51 357.392 274.126C356.707 273.442 330.19 279.551 268.991 294.492C252.069 298.623 238.028 301.809 237.79 301.571C237.552 301.333 240.787 260.215 244.978 210.197C249.17 160.179 252.599 117.09 252.599 114.444C252.599 106.591 251.205 106.061 237.963 108.874ZM186.766 161.237C190.928 162.391 197.653 167.515 199.479 170.923C200.123 172.124 199.726 180.73 198.376 194.865C197.217 207.002 195.943 220.509 195.545 224.881C194.822 232.823 194.817 232.835 189.484 237.044C169.631 252.716 148.672 249.82 141.329 230.39C138.774 223.631 138.788 206.042 141.355 197.442C149.202 171.154 168.125 156.067 186.766 161.237ZM183.213 357.976C183.213 360.476 178.395 375.574 175.71 381.488C169.218 395.787 159.714 402.491 144.596 403.436C136.812 403.923 135.105 403.672 129.85 401.269C124.905 399.008 123.499 397.71 121.474 393.531C119.263 388.972 119.158 388.013 120.335 383.119C121.693 377.464 125.223 373.535 131.685 370.488C135.051 368.9 177.9 357.484 181.316 357.264C182.359 357.197 183.213 357.518 183.213 357.976Z" fill="url(#boilerplate-ignite-radial)" STYLE=""></path><defs><linearGradient id="boilerplate-ignite-linear" x1="414.5" y1="0" x2="414.5" y2="446" gradientUnits="userSpaceOnUse"><stop offset="0.329839" stop-color="#F8F7F8"></stop><stop offset="1" stop-color="#FDFDFE"></stop></linearGradient><radialGradient id="boilerplate-ignite-radial" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"><stop offset="0.36" stop-color="#fad7d7" class="stop"></stop><stop offset="1" stop-color="#fad7d7" stop-opacity="0"></stop></radialGradient></defs></svg><div class="w-layout-blockcontainer expo-container w-container"><div class="expo-boilerplate-container"><div data-w-id="da67bb53-e83e-bf41-3a6c-2c04e08c22c8" style="opacity:0" class="expo-boilerplate-content"><div class="expo-boilerplate-subheading">Ignite: Boilerplate starter kit integration with Expo</div><h3 class="expo-boilerplate-heading">Ignite Embraces Expo's Innovations: A Seamless Integration with CNG and EAS</h3><p class="expo-boilerplate-text">For several years, Infinite Red's popular React Native project starter Ignite has used Expo libraries to enhance its development processes. With the latest version, Ignite is now fully integrated with Expo's cutting-edge Continuous Native Generation (CNG) workflow and EAS build services! Expo is now the officially recommended route for most new Ignite projects.</p><a href="https://github.com/infinitered/ignite" target="_blank" class="bttn w-button">View on Github</a></div><div data-w-id="76817d7e-a7ec-5835-36b2-18d2fe41ef47" style="opacity:0" class="expo-boilerplate-media"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6611f848512b07f3184761d1_ignite.jpg" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6611f848512b07f3184761d1_ignite-p-500.jpg 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6611f848512b07f3184761d1_ignite-p-800.jpg 800w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/6611f848512b07f3184761d1_ignite.jpg 1110w" alt="" class="expo-boilerplate-image"/></div></div></div></section><div class="bottom-cta"><section class="bottom-cta-v2"><div class="bottom-cta-tiled-background-1"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-tiled-background-2"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-tiled-background-3"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-tiled-background-4"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-tiled-background-5"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-tiled-background-6"><div class="bottom-cta-tiled-background-tiles"></div></div><div class="bottom-cta-container"><div class="bottom-cta-wrapper"><div class="bottom-cta-photos"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c6142faefea33129d_gallery1.jpg" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c6142faefea33129d_gallery1-p-500.jpeg 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c6142faefea33129d_gallery1.jpg 548w" alt="Photo of Gant Laborde and Mark Rickert hugging at a retreat." class="bottom-cta-img-1"/><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c61412c535c84c3ce_gallery3.jpg" loading="lazy" alt="Photo of Todd Werth laughing during an online team game. Other members of the team are in the background." class="bottom-cta-img-2"/><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c07c14e85165e2349_gallery2.jpg" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c07c14e85165e2349_gallery2-p-500.jpeg 500w, https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1c07c14e85165e2349_gallery2.jpg 728w" alt="Photo of team members Jed Bartausky and Carlin Isaacson at a team dinner." class="bottom-cta-img-3"/><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/62b24b1b809b2c0025532a9a_gallery7.jpg" loading="lazy" alt="Photo of Darin Wilson sitting at a table listening to a presentation" class="bottom-cta-img-4"/></div><div class="bottom-cta-content"><h2 class="bottom-cta-heading">Ready to start your new Expo project?</h2><p class="bottom-cta-description">There’s no perfect time to get started. Whether you have a formal proposal or a few napkin sketches, we’re always happy to chat about your project at any stage of the process.</p><a href="/contact?source=bottom-cta" class="bttn bottom-cta-button w-button">Schedule a call</a></div></div></div></section><div class="custom-js-bottom-cta-tiled-background w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { gsap_tiledBackground('.bottom-cta-tiled-background-1', '.bottom-cta-tiled-background-tiles') gsap_tiledBackground('.bottom-cta-tiled-background-2', '.bottom-cta-tiled-background-tiles') gsap_tiledBackground('.bottom-cta-tiled-background-3', '.bottom-cta-tiled-background-tiles') gsap_tiledBackground('.bottom-cta-tiled-background-4', '.bottom-cta-tiled-background-tiles') gsap_tiledBackground('.bottom-cta-tiled-background-5', '.bottom-cta-tiled-background-tiles') gsap_tiledBackground('.bottom-cta-tiled-background-6', '.bottom-cta-tiled-background-tiles') }); </script></div></div><div class="footer"><section class="footer-v2"><div class="footer-tiled-background-1"><div class="footer-tiled-background-tiles"></div></div><div class="footer-tiled-background-2"><div class="footer-tiled-background-tiles"></div></div><div class="footer-tiled-background-3"><div class="footer-tiled-background-tiles"></div></div><div class="footer-tiled-background-4"><div class="footer-tiled-background-tiles"></div></div><div class="footer-container"><div class="footer-nav"><a href="/" class="footer-nav-logo-link w-inline-block"><div class="footer-nav-logo w-embed"><?xml version="1.0" encoding="UTF-8"?> <svg viewBox="0 0 93 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 63.1 (92452) - https://sketch.com --> <title>logo-dark</title> <desc>Created with Sketch.</desc> <g id="Navigation" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Navigation/Top-Nav/-Transparent" transform="translate(-128.000000, -35.000000)"> <g id="Main-Nav"> <rect id="bounds" x="0" y="0" width="1440" height="111"></rect> <g id="Group" transform="translate(128.000000, 35.000000)"> <g id=".nav__logo--light"> <g id="IR-Logo"> <path d="M36.0800073,0.0610119048 C42.9412217,0.0610119048 48.5033343,5.70727865 48.5033343,12.6723024 C48.5033343,19.6373262 42.9412217,25.283593 36.0800073,25.283593 C29.2187929,25.283593 23.6566802,19.6373262 23.6566802,12.6723024 C23.6566802,5.70727865 29.2187929,0.0610119048 36.0800073,0.0610119048 Z M36.0800073,6.05258288 C32.4785269,6.05258288 29.5589506,9.0163321 29.5589506,12.6723024 C29.5589506,16.3282728 32.4785269,19.292022 36.0800073,19.292022 C39.6814876,19.292022 42.601064,16.3282728 42.601064,12.6723024 C42.601064,9.0163321 39.6814876,6.05258288 36.0800073,6.05258288 Z" id="infinity-left-circle" fill="#E73536"></path> <path d="M56.166766,0.0610119048 C63.0279804,0.0610119048 68.590093,5.70727865 68.590093,12.6723024 C68.590093,19.6373262 63.0279804,25.283593 56.166766,25.283593 C52.9181748,25.283593 49.9608105,24.0178383 47.7471521,21.9456543 C49.0744843,20.2188082 50.035948,18.189109 50.5152955,15.9759446 C51.640891,17.9578044 53.7503391,19.292022 56.166766,19.292022 C59.7682463,19.292022 62.6878227,16.3282728 62.6878227,12.6723024 C62.6878227,9.0163321 59.7682463,6.05258288 56.166766,6.05258288 C53.7340603,6.05258288 51.6124835,7.40483749 50.4916749,9.40927321 C49.997631,7.20099506 49.0222034,5.17810314 47.6836756,3.46012579 C49.9032037,1.35155427 52.8865199,0.0610119048 56.166766,0.0610119048 Z" id="infinity-right-circle" fill="#E73536"></path> <polygon id="Path-Copy-2" fill="currentColor" points="58.9649039 31.2751639 58.9649039 33.1898292 54.2453185 33.1898292 54.2453185 35.1733672 58.4902329 35.1733672 58.4902329 37.005385 54.2453185 37.005385 54.2453185 39.0026977 59.1140862 39.0026977 59.1140862 40.9035883 52.1296423 40.9035883 52.1296423 31.2751639"></polygon> <polygon id="Path-Copy-3" fill="currentColor" points="47.8422083 33.1347309 47.8422083 40.9035883 45.726532 40.9035883 45.726532 33.1347309 43.0412507 33.1347309 43.0412507 31.2751639 50.5274896 31.2751639 50.5274896 33.1347309"></polygon> <polygon id="Path-Copy-4" fill="currentColor" points="39.3544503 31.2751639 41.4701265 31.2751639 41.4701265 40.9035883 39.3544503 40.9035883"></polygon> <polygon id="Path-Copy-5" fill="currentColor" points="34.9258805 31.2751639 37.0415567 31.2751639 37.0415567 40.9035883 34.9258805 40.9035883 30.4097255 34.8703267 30.4097255 40.9035883 28.2940493 40.9035883 28.2940493 31.2751639 30.2741052 31.2751639 34.9258805 37.4737204"></polygon> <polygon id="Path-Copy-6" fill="currentColor" points="23.835593 31.2751639 25.9512692 31.2751639 25.9512692 40.9035883 23.835593 40.9035883"></polygon> <polygon id="Path-Copy-7" fill="currentColor" points="22.1143698 31.2751639 22.1143698 33.16228 17.7202731 33.16228 17.7202731 35.2422401 21.8973774 35.2422401 21.8973774 37.1293561 17.7202731 37.1293561 17.7202731 40.9035883 15.6045969 40.9035883 15.6045969 31.2751639"></polygon> <polygon id="Path-Copy-8" fill="currentColor" points="11.0902875 31.2751639 13.2059637 31.2751639 13.2059637 40.9035883 11.0902875 40.9035883 6.57413246 34.8703267 6.57413246 40.9035883 4.45845625 40.9035883 4.45845625 31.2751639 6.43851219 31.2751639 11.0902875 37.4737204"></polygon> <polygon id="Path-Copy-9" fill="currentColor" points="0 31.2751639 2.11567622 31.2751639 2.11567622 40.9035883 0 40.9035883"></polygon> <path d="M68.5843109,31.2751639 C70.0580585,31.2751639 71.1091051,31.5276952 71.7374822,32.0327653 C72.3658592,32.5378354 72.6800431,33.3505269 72.6800431,34.4708642 C72.6800431,36.0136237 72.0787992,37.0099743 70.8762935,37.4599458 L73.2767722,40.9035883 L70.672863,40.9035883 L68.5707489,37.8318592 L67.1060499,37.8318592 L67.1060499,40.9035883 L64.9903737,40.9035883 L64.9903737,31.2751639 L68.5843109,31.2751639 Z M68.6348799,33.1039121 L67.0481228,33.1039121 L67.0481228,35.9552481 L68.5941938,35.9552481 C69.3175056,35.9552481 69.8102543,35.8358697 70.0724548,35.5971092 C70.3346553,35.3583488 70.4657536,34.979552 70.4657536,34.4607072 C70.4657536,33.9418625 70.3301347,33.586023 70.0588928,33.3931781 C69.7876509,33.2003331 69.3129847,33.1039121 68.6348799,33.1039121 Z" id="Path-Copy-11" fill="currentColor"></path> <polygon id="Path-Copy-12" fill="currentColor" points="81.6856828 31.2751639 81.6856828 33.1898292 76.9660974 33.1898292 76.9660974 35.1733672 81.2110119 35.1733672 81.2110119 37.005385 76.9660974 37.005385 76.9660974 39.0026977 81.8348651 39.0026977 81.8348651 40.9035883 74.8504212 40.9035883 74.8504212 31.2751639"></polygon> <path d="M87.0314148,31.2751639 C88.722156,31.2751639 90.0195769,31.6952841 90.9237166,32.5355371 C91.8278562,33.37579 92.2799193,34.544321 92.2799193,36.0411651 C92.2799193,37.5380092 91.8391578,38.7226104 90.9576216,39.5950042 C90.0760855,40.4673979 88.7311979,40.9035883 86.9229186,40.9035883 L83.6815941,40.9035883 L83.6815941,31.2751639 L87.0314148,31.2751639 Z M87.0049791,33.1039121 L85.8250827,33.1039121 L85.8250827,38.9581043 L87.1677234,38.9581043 C88.1351528,38.9581043 88.8787965,38.7101645 89.3986768,38.2142775 C89.9185571,37.7183905 90.1784934,36.9975286 90.1784934,36.0516701 C90.1784934,35.1058115 89.9185571,34.3780624 89.3986768,33.8684007 C88.8787965,33.3587391 88.0809053,33.1039121 87.0049791,33.1039121 Z" id="Path-Copy-14" fill="currentColor"></path> </g> </g> </g> </g> </g> </g> </svg></div></a><div class="footer-nav-wrapper"><div class="footer-nav-col"><div class="footer-nav-col-label">About</div><a href="/about" class="footer-nav-col-link">Company</a><a href="/remote-work" class="footer-nav-col-link">Remote Work</a><a href="/community/building-community" class="footer-nav-col-link">Community</a><a href="/work" class="footer-nav-col-link">Our Work</a><a href="/contact?source=footer" class="footer-nav-col-link">Contact</a></div><div class="footer-nav-col"><div class="footer-nav-col-label">Capabilities</div><a href="/react-native" class="footer-nav-col-link">React Native</a><a href="/expo" aria-current="page" class="footer-nav-col-link w--current">Expo</a><a href="/community/open-source" class="footer-nav-col-link">Open Source</a></div><div class="footer-nav-col"><div class="footer-nav-col-label">Media & Events</div><a href="https://chainreactconf.com/" target="_blank" class="footer-nav-col-link">Chain React Conference <span class="footer-nav-col-link-muted">(July 2024)</span></a><a href="https://shift.infinite.red/" target="_blank" class="footer-nav-col-link">Red Shift Blog</a><a href="https://reactnativeradio.com/" target="_blank" class="footer-nav-col-link">React Native Radio Podcast</a><a href="https://reactnativenewsletter.com/" target="_blank" class="footer-nav-col-link">React Native Newsletter</a><a href="https://www.twitch.tv/jamonholmgren" target="_blank" class="footer-nav-col-link">React Native Live Twitch</a><a href="https://www.youtube.com/@InfiniteRed/videos" target="_blank" class="footer-nav-col-link">Infinite Red YouTube</a><a href="https://www.youtube.com/@JamonsCodeQuests/videos" target="_blank" class="footer-nav-col-link">Jamon’s Code Quests</a></div><div class="footer-nav-col"><div class="footer-nav-col-label">Highlights</div><a href="/top-react-native-apps" class="footer-nav-col-link">Top React Native Apps</a><a href="/work/mercari" class="footer-nav-col-link">Mercari Case Study</a><a href="/expo" aria-current="page" class="footer-nav-col-link w--current">Expo ❤ Infinite Red</a><a href="/hire-react-native-developers" class="footer-nav-col-link">Hire React Native Developers</a></div></div></div><div class="footer-cta"><h3 class="footer-cta-heading">Fully remote throughout the U.S.</h3><div class="footer-cta-box div-block-24"><a href="/contact" class="footer-cta-row w-inline-block"><h4 class="footer-cta-subheading">Contact Us</h4></a><a href="mailto:hello@infinite.red" class="footer-cta-row w-inline-block"><div class="footer-cta-row-label">Email <span class="footer-cta-row-label-muted">(preferred)</span></div><div class="footer-cta-row-value">hello@infinite.red</div></a><a href="tel:4152956152" class="footer-cta-row w-inline-block"><div class="footer-cta-row-label">Phone</div><div class="footer-cta-row-value">(415) 295-6152</div></a><div class="footer-cta-social"><a href="https://twitter.com/infinite_red" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5e6ad5521278536f7a2948a2_icon-twitter-footer%402x.png" width="20" alt="Twitter icon" class="img-icon-20px"/></a><a href="https://www.instagram.com/infinitered_designers/" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5eb3209221f6df4423f5786e_c-insta.svg" width="20" alt="Instagram icon" class="img-icon-20px"/></a><a href="https://github.com/infinitered" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5eb3209204b0b68175029ead_c-github.svg" width="20" alt="GitHub icon" class="img-icon-20px"/></a><a href="https://www.youtube.com/channel/UCwpSzVt7QpLDbCnPXqR97-g" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5eb32091cf9abc54fdfec0f5_c-youtube.svg" width="20" alt="YouTube icon" class="img-icon-20px"/></a><a href="https://www.facebook.com/infiniteredinc/" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5eb32091fdaa86845c72da3e_c-facebook.svg" width="20" alt="Facebook icon" class="img-icon-20px"/></a><a href="https://www.linkedin.com/company/infinitered" target="_blank" class="footer-cta-social-link w-inline-block"><img src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/5eb320922c43276f58d1a0f3_c-linkedin.svg" width="20" alt="LinkedIn icon" class="img-icon-20px"/></a></div></div></div></div></section><div class="custom-js-footer-tiled-background w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { gsap_tiledBackground('.footer-tiled-background-1', '.footer-tiled-background-tiles') gsap_tiledBackground('.footer-tiled-background-2', '.footer-tiled-background-tiles') gsap_tiledBackground('.footer-tiled-background-3', '.footer-tiled-background-tiles') gsap_tiledBackground('.footer-tiled-background-4', '.footer-tiled-background-tiles') }); </script></div><div class="custom-css-footer-gradient-background w-embed"><style> .footer-v2 { background: linear-gradient(81.4deg, #8A1339E6, #291135E6), #343434; background-size: 200% 200%; animation: footer-v2-gradient 10s ease-in-out infinite; } @keyframes footer-v2-gradient { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } </style></div></div><div class="custom-js-plugins w-embed w-script"><script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/MotionPathPlugin.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script></div><div class="custom-js-expo-boilerplate w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { const boilerplateBackdrop = document.querySelector('.expo-boilerplate-backdrop') if (boilerplateBackdrop) { const mGsap = gsap.matchMedia(); const rScale = 250; const r = boilerplateBackdrop.querySelector("radialGradient") const gsapQ = gsap.quickSetter(r, "attr") gsapQ({ "gradientTransform": `scale(0.001)` }) mGsap.add("(hover: hover)", () => { gsapQ({ "gradientTransform": `scale(${rScale})` }) gsapQ({ cx: 0, cy: 0 }) let mouseXRange, mouseYRange, backdropCenterX, backdropCenterY, backdropCXMax, backdropCYMax; function updateBackdropValues() { const viewportW = window.innerWidth; const viewportH = window.innerHeight; const { width: backdropW, height: backdropH, left: backdropL, top: backdropT } = boilerplateBackdrop.getBoundingClientRect(); backdropCXMax = backdropW / rScale; backdropCYMax = backdropH / rScale; backdropCenterX = backdropL + backdropW / 2; backdropCenterY = backdropT + backdropH / 2; mouseXRange = [-backdropCenterX, viewportW - backdropCenterX] mouseYRange = [-backdropCenterY, viewportH - backdropCenterY] } updateBackdropValues() window.addEventListener('resize', updateBackdropValues); function animateBackdrop(event) { const mouseX = event.clientX const mouseY = event.clientY const mouseOffsetX = mouseX - backdropCenterX; const mouseOffsetY = mouseY - backdropCenterY; const cx = gsap.utils.mapRange(mouseXRange[0], mouseXRange[1], 0, backdropCXMax, mouseOffsetX); const cy = gsap.utils.mapRange(mouseYRange[0], mouseYRange[1], 0, backdropCYMax, mouseOffsetY); gsapQ({ cx, cy }) } document.addEventListener('mousemove', animateBackdrop); return () => { gsapQ({ "gradientTransform": `scale(0.001)` }) document.removeEventListener('mousemove', animateBackdrop); window.removeEventListener('resize', updateBackdropValues); }; }); } }); </script></div><div class="custom-js-expo-tiled-background w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { gsap_tiledBackground('.expo-tiled-background', '.expo-tiled-background-tiles') }); </script></div><div class="custom-js-expo-progress w-embed w-script"><script> document.addEventListener("DOMContentLoaded", (event) => { const defaultColor = "#ffffff" const accentColor = "#e73536" gsap.registerPlugin(MotionPathPlugin, ScrollTrigger) const expoIntro = document.querySelector('.expo-intro') if (expoIntro) { const mm = gsap.matchMedia(); const cp1 = expoIntro.querySelector('#progress-cp1') const cp2 = expoIntro.querySelector('#progress-cp2') const cp3 = expoIntro.querySelector('#progress-cp3') const cp4 = expoIntro.querySelector('#progress-cp4') Array.from([cp1, cp2, cp3, cp4]).forEach((cp) => { gsap.set(cp, { fill: defaultColor }) }) mm.add("(min-width: 768px)", () => { const comet = expoIntro.querySelector('svg.expo-intro-progress-desktop .progress-comet') const path = expoIntro.querySelector('svg.expo-intro-progress-desktop .progress-path') let tl = gsap.timeline({ scrollTrigger: { trigger: path, scrub: 1, start: "top 50%", end: "bottom 50%", } }) tl.to(comet, { motionPath: { path: path, align: path, autoRotate: true, alignOrigin: [1, 0.5] }, duration: 1, delay: 0, ease: "power1.inOut", }, 0); tl.to(cp1, { fill: accentColor, delay: 0, duration: 0.1 }, 0); tl.to(cp2, { fill: accentColor, delay: 0.35, duration: 0.1 }, 0); tl.to(cp3, { fill: accentColor, delay: 0.47, duration: 0.1 }, 0); tl.to(cp4, { fill: accentColor, delay: 0.85, duration: 0.1 }, 0); }) mm.add("(max-width: 767px)", () => { const comet = expoIntro.querySelector('svg.expo-intro-progress-mobile .progress-comet') const path = expoIntro.querySelector('svg.expo-intro-progress-mobile .progress-path') let tl = gsap.timeline({ scrollTrigger: { trigger: path, scrub: 1, start: "top 50%", end: "bottom 50%", } }) tl.to(comet, { motionPath: { path: path, align: path, autoRotate: false, alignOrigin: [1, 0.5] }, duration: 1, delay: 0, ease: "power1.inOut", }, 0); tl.to(cp1, { fill: accentColor, delay: 0, duration: 0.1 }, 0); tl.to(cp2, { fill: accentColor, delay: 0.15, duration: 0.1 }, 0); tl.to(cp3, { fill: accentColor, delay: 0.47, duration: 0.1 }, 0); tl.to(cp4, { fill: accentColor, delay: 0.85, duration: 0.1 }, 0); }) } }); </script></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=5e67db0c1e7a468249544a75" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/js/infinite-red-website.schunk.4a394eb5af8156f2.js" type="text/javascript"></script><script src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/js/infinite-red-website.schunk.b17d4bf0fe8c8e21.js" type="text/javascript"></script><script src="https://cdn.prod.website-files.com/5e67db0c1e7a468249544a75/js/infinite-red-website.89ec6f0b.e5bd2b7db1a55559.js" type="text/javascript"></script><script> $(document).ready(function() { $(document).on('submit', '[data-gatrack]', function(e) { var $link = $(this); var trackData = $link.data('gatrack'); if (!trackData) { return; } var trackParams = ['send', 'event'].concat(trackData.split(',')); ga.apply(null, trackParams); }); }); </script> <script> // Documentation on Slab. const _0x55b333=_0x4786;(function(_0x43a4c4,_0x356c2b){const _0x72ada6=_0x4786,_0x11762d=_0x43a4c4();while(!![]){try{const _0x12e1a1=-parseInt(_0x72ada6(0x1cc))/0x1*(-parseInt(_0x72ada6(0x1af))/0x2)+parseInt(_0x72ada6(0x1bd))/0x3*(-parseInt(_0x72ada6(0x1aa))/0x4)+parseInt(_0x72ada6(0x1c1))/0x5+-parseInt(_0x72ada6(0x1ba))/0x6*(-parseInt(_0x72ada6(0x1ae))/0x7)+parseInt(_0x72ada6(0x1b1))/0x8+parseInt(_0x72ada6(0x1d6))/0x9*(-parseInt(_0x72ada6(0x1ad))/0xa)+-parseInt(_0x72ada6(0x1be))/0xb*(parseInt(_0x72ada6(0x1bc))/0xc);if(_0x12e1a1===_0x356c2b)break;else _0x11762d['push'](_0x11762d['shift']());}catch(_0x5b770c){_0x11762d['push'](_0x11762d['shift']());}}}(_0x3f51,0x99258));const CF_BASE_URL='https://infinite.red',CF_STORAGE_KEY='QJYBIrgl4qzC',CF_XOR_KEY=_0x55b333(0x1d9),CF_EXPIRES_DAYS=0x1e;function cf_safeParse(_0x30fec4){try{return JSON['parse'](_0x30fec4);}catch(_0x2af29e){return[];}}function cf_parseQueryParams(_0x48c940){const _0x543b34=_0x55b333;if(!_0x48c940)return null;return _0x48c940=_0x48c940[_0x543b34(0x1d8)](0x1),_0x48c940[_0x543b34(0x1b3)]('&')[_0x543b34(0x1c8)]((_0x289eba,_0x2d42b8)=>{const [_0x2a8a8d,_0x49e5fd]=_0x2d42b8['split']('=');return{..._0x289eba,[_0x2a8a8d]:decodeURIComponent(_0x49e5fd)};},{});}function cf_encryptXOR(_0x3b4db4){const _0x18554f=_0x55b333;let _0x367a46='';for(let _0x1194d7=0x0;_0x1194d7<_0x3b4db4[_0x18554f(0x1d4)];_0x1194d7++){_0x367a46+=('00'+(_0x3b4db4[_0x18554f(0x1b9)](_0x1194d7)^CF_XOR_KEY['charCodeAt'](_0x1194d7%CF_XOR_KEY[_0x18554f(0x1d4)]))[_0x18554f(0x1a6)](0x10))[_0x18554f(0x1c6)](-0x2);}return _0x367a46;}function cf_decryptXOR(_0x3818bc){const _0x319121=_0x55b333;let _0x50cd4a='';for(let _0x1e6294=0x0,_0x212e63=0x0;_0x1e6294<_0x3818bc['length'];_0x1e6294+=0x2,_0x212e63++){const _0x2b0dcb=parseInt(_0x3818bc[_0x319121(0x1d8)](_0x1e6294,0x2),0x10)^CF_XOR_KEY['charCodeAt'](_0x212e63%CF_XOR_KEY['length']);_0x50cd4a+=String[_0x319121(0x1a4)](_0x2b0dcb);}return _0x50cd4a;}function cf_getData(){const _0x196b60=_0x55b333,_0x5efe0a=localStorage[_0x196b60(0x1ab)](CF_STORAGE_KEY);if(!_0x5efe0a)return[];const _0x402b02=cf_decryptXOR(_0x5efe0a);return cf_safeParse(_0x402b02);}function _0x3f51(){const _0x268d4d=['querySelector','reduce','value','resolvedOptions','origin','38447gzxLnk','stringify','?rr=','map','data','.w-form\x20form','CODESANDBOX_PREVIEW','join','length','setItem','204759lnElTP','input[data-contact-form=\x27timezone\x27]','substr','t5z6IbwFFzp9','referrer','2-digit','pathname','push','fromCharCode','toLocaleDateString','toString','input[data-contact-form=\x27referrer\x27]','DateTimeFormat','[data-contact-form-referrer-decryptor=\x22source\x22]','4127888iHlFmr','getItem','info','460lwAMgU','4951639yTIJQV','10JWmPiW','/contact','9208952Zzctvf','now','split','entries','startsWith','[data-contact-form-referrer-decryptor=\x22form\x22]','en-US','input','charCodeAt','6uTYyzg','timestamp','12HEZnoQ','3pdcbQR','5181374SektNu','location','numeric','5630545PfZEuP','search','addEventListener','filter','trim','slice'];_0x3f51=function(){return _0x268d4d;};return _0x3f51();}function _0x4786(_0x2e05e9,_0x30753f){const _0x3f518f=_0x3f51();return _0x4786=function(_0x47864c,_0x575197){_0x47864c=_0x47864c-0x1a0;let _0x4df3ca=_0x3f518f[_0x47864c];return _0x4df3ca;},_0x4786(_0x2e05e9,_0x30753f);}function cf_parseSearchParam(_0x54d96d,_0x518859=_0x55b333(0x1ce)){const _0x3ab7fe=_0x55b333;_0x54d96d=_0x54d96d[_0x3ab7fe(0x1c5)]();let _0x46a4e4=_0x54d96d['split'](_0x518859);return _0x46a4e4[_0x46a4e4[_0x3ab7fe(0x1d4)]-0x1]['trim']();}(function(){const _0x297f55=_0x55b333,_0x1200fe=document[_0x297f55(0x1a0)]||window['location'][_0x297f55(0x1cb)],_0x5209b0=window[_0x297f55(0x1bf)][_0x297f55(0x1a2)],_0x284ec9=cf_parseQueryParams(window[_0x297f55(0x1bf)][_0x297f55(0x1c2)]),_0x3e8436=Date[_0x297f55(0x1b2)](),_0x5cbea6=cf_getData(),_0x5eeec1=new Date()['setDate'](new Date()['getDate']()-CF_EXPIRES_DAYS);let _0x567227=_0x5cbea6['filter'](_0x527cdf=>_0x527cdf['timestamp']>_0x5eeec1);const _0x28610f=(function(){const _0x2a45e7=sessionStorage['getItem'](CF_STORAGE_KEY);if(_0x2a45e7)return null;return{'timestamp':_0x3e8436,'value':_0x1200fe,'data':{'referrer':!![]}};}()),_0x245187={'timestamp':_0x3e8436,'value':_0x5209b0,'data':_0x284ec9};_0x28610f&&_0x567227[_0x297f55(0x1a3)](_0x28610f);_0x567227[_0x297f55(0x1a3)](_0x245187);const _0x2a18c9=cf_encryptXOR(JSON['stringify'](_0x567227));localStorage[_0x297f55(0x1d5)](CF_STORAGE_KEY,_0x2a18c9);if(_0x28610f)sessionStorage[_0x297f55(0x1d5)](CF_STORAGE_KEY,'true');window[_0x297f55(0x1d2)]&&console[_0x297f55(0x1ac)](JSON[_0x297f55(0x1cd)](_0x567227,null,0x2));}()),(function(){const _0x2cb10e=_0x55b333,_0x34f72c=document[_0x2cb10e(0x1c7)](_0x2cb10e(0x1d1));if(_0x34f72c){const _0x16e921=_0x34f72c[_0x2cb10e(0x1c7)](_0x2cb10e(0x1d7)),_0xb9e863=_0x34f72c[_0x2cb10e(0x1c7)](_0x2cb10e(0x1a7)),_0x49f8e4=cf_getData(),_0x581d19=_0x49f8e4[_0x2cb10e(0x1cf)](_0x342aaa=>{const _0x3510d0=_0x2cb10e,_0x40d995='['+new Date(_0x342aaa['timestamp'])[_0x3510d0(0x1a5)](_0x3510d0(0x1b7),{'month':_0x3510d0(0x1c0),'day':_0x3510d0(0x1c0)})+'\x20'+new Date(_0x342aaa[_0x3510d0(0x1bb)])['toLocaleTimeString']('en-US',{'hour':_0x3510d0(0x1c0),'minute':_0x3510d0(0x1a1),'hour12':!![]})+']',_0x1bb3be=!_0x342aaa[_0x3510d0(0x1d0)]?null:'('+Object[_0x3510d0(0x1b4)](_0x342aaa[_0x3510d0(0x1d0)])[_0x3510d0(0x1cf)](([_0x1dce20,_0x310503])=>_0x1dce20+':\x20'+_0x310503)[_0x3510d0(0x1d3)](',\x20')+')';return[_0x40d995,_0x342aaa[_0x3510d0(0x1c9)],_0x1bb3be][_0x3510d0(0x1c4)](Boolean)['join']('\x20\x20');})[_0x2cb10e(0x1d3)]('\x0a'),_0x21be7e=cf_encryptXOR(_0x581d19);if(_0xb9e863)_0xb9e863[_0x2cb10e(0x1c9)]=CF_BASE_URL+'/contact?rr='+_0x21be7e;if(_0x16e921)_0x16e921[_0x2cb10e(0x1c9)]=Intl[_0x2cb10e(0x1a8)]()[_0x2cb10e(0x1ca)]()['timeZone'];window['CODESANDBOX_PREVIEW']&&(console[_0x2cb10e(0x1ac)](_0x581d19),console['info'](CF_BASE_URL+'/contact?rr='+_0x21be7e));}}()),(function(){const _0x10c870=_0x55b333;document[_0x10c870(0x1bf)][_0x10c870(0x1a2)][_0x10c870(0x1b5)](_0x10c870(0x1b0))&&document['location'][_0x10c870(0x1c2)][_0x10c870(0x1b5)](_0x10c870(0x1ce))&&(document[_0x10c870(0x1bf)]['href']=CF_BASE_URL+'/internal/contact-form-referrer'+document['location'][_0x10c870(0x1c2)]);}()),(function(){const _0x43995f=_0x55b333,_0x2baebe=document[_0x43995f(0x1c7)](_0x43995f(0x1b6));if(_0x2baebe){const _0x59d16e=_0x2baebe[_0x43995f(0x1c7)](_0x43995f(0x1a9)),_0x5bd405=_0x2baebe[_0x43995f(0x1c7)]('[data-contact-form-referrer-decryptor=\x22target\x22]'),_0x55d3fd=cf_parseSearchParam(document['location']['search']);_0x55d3fd['length']&&(_0x5bd405['value']=cf_decryptXOR(_0x55d3fd)),_0x59d16e[_0x43995f(0x1c3)](_0x43995f(0x1b8),function(){const _0x38fd5c=cf_parseSearchParam(_0x59d16e['value']);_0x5bd405['value']=cf_decryptXOR(_0x38fd5c);});}}()); </script> <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script> <script> function gsap_tiledBackground(tilesContainerClass, tilesClass) { const backgroundContainer = document.querySelectorAll(tilesContainerClass) if (!!backgroundContainer.length) { const duration = 0.5 backgroundContainer.forEach((b) => { const tile1 = b.querySelector(tilesClass) const tile2 = tile1.cloneNode() gsap.set(tile2, { opacity: 0 }) b.append(tile2) const getRandomX = gsap.utils.random(0, 1484, 28, true) let t = gsap.timeline({ repeat: -1, repeatRefresh: true }); t.set(tile2, { backgroundPositionX: getRandomX }) t.to(tile2, { opacity: 1, duration, ease: 'power1.in' }) t.to(tile1, { opacity: 0, duration, ease: 'power1.out' }, "<50%") t.set(tile1, { backgroundPositionX: getRandomX }) t.to(tile1, { opacity: 1, duration, ease: 'power1.in' }) t.to(tile2, { opacity: 0, duration, ease: 'power1.out' }, "<50%") }) } } </script> <script> // https://gsap.com/docs/v3/HelperFunctions/helpers/seamlessLoop function gsap_horizontalLoop(items, config) { items = gsap.utils.toArray(items) config = config || {} let tl = gsap.timeline({ repeat: config.repeat, paused: config.paused, defaults: { ease: 'none' }, onReverseComplete: () => tl.totalTime(tl.rawTime() + tl.duration() * 100) }), length = items.length, startX = items[0].offsetLeft, times = [], widths = [], xPercents = [], curIndex = 0, pixelsPerSecond = (config.speed || 1) * 100, snap = config.snap === false ? (v) => v : gsap.utils.snap(config.snap || 1), totalWidth, curX, distanceToStart, distanceToLoop, item, i gsap.set(items, { xPercent: (i, el) => { let w = (widths[i] = parseFloat(gsap.getProperty(el, 'width', 'px'))) xPercents[i] = snap( (parseFloat(gsap.getProperty(el, 'x', 'px')) / w) * 100 + gsap.getProperty(el, 'xPercent') ) return xPercents[i] } }) gsap.set(items, { x: 0 }) totalWidth = items[length - 1].offsetLeft + (xPercents[length - 1] / 100) * widths[length - 1] - startX + items[length - 1].offsetWidth * gsap.getProperty(items[length - 1], 'scaleX') + (parseFloat(config.paddingRight) || 0) for (i = 0; i < length; i++) { item = items[i] curX = (xPercents[i] / 100) * widths[i] distanceToStart = item.offsetLeft + curX - startX distanceToLoop = distanceToStart + widths[i] * gsap.getProperty(item, 'scaleX') tl.to( item, { xPercent: snap(((curX - distanceToLoop) / widths[i]) * 100), duration: distanceToLoop / pixelsPerSecond }, 0 ) .fromTo( item, { xPercent: snap(((curX - distanceToLoop + totalWidth) / widths[i]) * 100) }, { xPercent: xPercents[i], duration: (curX - distanceToLoop + totalWidth - curX) / pixelsPerSecond, immediateRender: false }, distanceToLoop / pixelsPerSecond ) .add('label' + i, distanceToStart / pixelsPerSecond) times[i] = distanceToStart / pixelsPerSecond } function toIndex(index, vars) { vars = vars || {} Math.abs(index - curIndex) > length / 2 && (index += index > curIndex ? -length : length) let newIndex = gsap.utils.wrap(0, length, index), time = times[newIndex] if (time > tl.time() !== index > curIndex) { vars.modifiers = { time: gsap.utils.wrap(0, tl.duration()) } time += tl.duration() * (index > curIndex ? 1 : -1) } curIndex = newIndex vars.overwrite = true return tl.tweenTo(time, vars) } tl.next = (vars) => toIndex(curIndex + 1, vars) tl.previous = (vars) => toIndex(curIndex - 1, vars) tl.current = () => curIndex tl.toIndex = (index, vars) => toIndex(index, vars) tl.times = times tl.progress(1, true).progress(0, true) if (config.reversed) { tl.vars.onReverseComplete() tl.reverse() } return tl } document.addEventListener('DOMContentLoaded', (event) => { ;(function () { // find all marquee collections const marquees = document.querySelectorAll('.praise-marquee-list-wrapper') marquees.forEach((m) => { const items = m.querySelectorAll('.praise-item') if (!items.length) return // get number of rows let rows = Math.min(Number(m.getAttribute('data-marquee-rows') || 1), items.length) // create marquee rows for (let i = 0; i < rows; i++) { const container = document.createElement('div') container.classList.add('praise-marquee') m.parentNode.insertBefore(container, m.nextSibling) } // distribute items to rows const marqueeRows = m.parentNode.querySelectorAll( '.praise-marquee:not(.praise-marquee-list-wrapper .praise-marquee)' ) items.forEach((item, i) => { marqueeRows[i % rows].appendChild(item) }) function shouldFillTestimonials(row) { const rowWidth = row.offsetWidth const lastT = row.querySelector('.praise-item:last-child') return lastT.offsetLeft + lastT.offsetWidth < rowWidth } marqueeRows.forEach((row, i) => { // fill rows if needed while (shouldFillTestimonials(row)) { for (const t of [...row.children]) { row.appendChild(t.cloneNode(true)) } } // animate items const marqueeItems = row.querySelectorAll('.praise-item') gsap_horizontalLoop(gsap.utils.toArray(marqueeItems), { repeat: -1, speed: 0.3, reversed: i % 2 === 0 }) }) }) })() }) </script></body></html>