CINXE.COM
Google I/O 2025
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <link rel="icon" type="image/x-icon" href="/2025/assets/images/icons/favicon.ico"> <link rel="icon" type="image/svg+xml" sizes="16x16" href="/2025/assets/images/icons/favicon-grey-16x16.svg"> <link rel="icon" type="image/svg+xml" sizes="32x32" href="/2025/assets/images/icons/favicon-grey-32x32.svg"> <link rel="icon" type="image/svg+xml" sizes="96x96" href="/2025/assets/images/icons/favicon-grey-96x96.svg"> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/2025/assets/images/icons/favicon-apple-touch-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/2025/assets/images/icons/favicon-android-chrome-192x192.png"> <link rel="icon" type="image/png" sizes="512x512" href="/2025/assets/images/icons/favicon-android-chrome-512x512.png"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes shrink-to-fit=no"> <title>Google I/O 2025</title> <meta name="description" content="Don't miss Google I/O, featuring product launches, innovations, and insights. Tune in for the live keynotes and sessions."> <meta property="og:image" content="https://io.google/2025/assets/images/io25-og-image.jpg"> <meta property="og:image:type" content="image/jpeg"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630"> <meta property="twitter:card" content="summary_large_image" /> <meta property="twitter:url" content="https://io.google/2025" /> <meta property="twitter:title" content="Google I/O 2025" /> <meta name="twitter:image" content="https://io.google/2025/assets/images/io25-og-image.jpg"> <meta name="google-site-verification" content="pl2Pa1UarAxg1aeq1CwIY_CBQQgfEkYPPhnVxQUs_xw" /> <script type="module" src="/2025/js/ssr-utils/lit-hydrate-support.js"></script> <script type="module" src="/2025/js/ssr-utils/is-land.js"></script> <script src="/2025/assets/js/developer_profiles_api_v0.2.2.js" defer></script> <script type="module" src="/2025/js/pages/global.js"></script> <script type="module">"use strict";(()=>{var d;function s(){var o;return d===void 0&&(d=!!(!((o=new DOMParser().parseFromString('<div><template shadowrootmode="open"></template></div>',"text/html",{includeShadowRoots:!0}).querySelector("div"))===null||o===void 0)&&o.shadowRoot)),d}var m=o=>o.parentElement===null,h=o=>o.tagName==="TEMPLATE",p=o=>o.nodeType===Node.ELEMENT_NODE;var i=o=>{var l;if(s())return;let r=[],e=o.firstElementChild;for(;e!==o&&e!==null;)if(h(e))r.push(e),e=e.content;else if(e.firstElementChild!==null)e=e.firstElementChild;else if(p(e)&&e.nextElementSibling!==null)e=e.nextElementSibling;else{let t;for(;e!==o&&e!==null;)if(m(e)){t=r.pop();let a=t.parentElement,n=t.getAttribute("shadowrootmode");if(e=t,n==="open"||n==="closed"){let f=t.hasAttribute("shadowrootdelegatesfocus");try{a.attachShadow({mode:n,delegatesFocus:f}).append(t.content)}catch{}}else t=void 0}else{let a=e.nextElementSibling;if(a!=null){e=a,t!==void 0&&t.parentElement.removeChild(t);break}let n=(l=e.parentElement)===null||l===void 0?void 0:l.nextElementSibling;if(n!=null){e=n,t!==void 0&&t.parentElement.removeChild(t);break}e=e.parentElement,t!==void 0&&(t.parentElement.removeChild(t),t=void 0)}}};HTMLTemplateElement.prototype.hasOwnProperty("shadowRoot")||i(document.body);document.body.removeAttribute("dsd-pending");})();</script> <script> window.dataLayer = window.dataLayer || []; function glueCookieNotificationBarLoaded() { (function (w, d, s, l, i) { w['dataLayer'] = w['dataLayer'] || []; w['dataLayer'].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); const f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; if (f.parentNode) { f.parentNode.insertBefore(j, f); } })(window, document, 'script', 'dataLayer', 'GTM-MNH554N'); } </script> <noscript><style>body[dsd-pending] {display: block !important;}</style></noscript> <link rel="preload" as="style" href="/2025/assets/css/global.css"> <link rel="stylesheet" href="/2025/assets/css/global.css"> <style> .glue-cookie-notification-bar__accept,.glue-cookie-notification-bar__reject{font-size:1rem;line-height:1.5;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;border:1px solid transparent;border-radius:48px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;font-family:Google Sans,Arial,Helvetica,sans-serif;font-weight:500;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;letter-spacing:.5px;margin:8px 0;max-width:380px;min-height:48px;min-width:96px;overflow:hidden;padding:12px 24px 12px 24px;text-align:center;text-decoration:none;-webkit-transition:background-color .2s,box-shadow .2s,color .2s;transition:background-color .2s,box-shadow .2s,color .2s;vertical-align:middle}[lang=ar] .glue-cookie-notification-bar__accept,[lang=ar] .glue-cookie-notification-bar__reject{font-family:Google Sans,Google Sans Arabic,Arial,Helvetica,sans-serif}[lang=ja] .glue-cookie-notification-bar__accept,[lang=ja] .glue-cookie-notification-bar__reject{font-family:Google Sans,Google Sans Japanese,Noto Sans JP,Arial,Helvetica,sans-serif}[lang=ko] .glue-cookie-notification-bar__accept,[lang=ko] .glue-cookie-notification-bar__reject{font-family:Google Sans,Google Sans Korean,Noto Sans KR,Arial,Helvetica,sans-serif}[lang=zh-CN] .glue-cookie-notification-bar__accept,[lang=zh-CN] .glue-cookie-notification-bar__reject{font-family:Google Sans,Google Sans Simplified Chinese,Noto Sans SC,Arial,Helvetica,sans-serif}[lang=zh-TW] .glue-cookie-notification-bar__accept,[lang=zh-TW] .glue-cookie-notification-bar__reject{font-family:Google Sans,Google Sans Traditional Chinese,Noto Sans TC,Arial,Helvetica,sans-serif}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept,.glue-cookie-notification-bar__reject{-webkit-transition:none;transition:none}}.glue-cookie-notification-bar__accept:focus,.glue-cookie-notification-bar__reject:focus{outline:2px solid transparent;-webkit-transition:none;transition:none}.glue-cookie-notification-bar__accept,.glue-cookie-notification-bar__reject{background-color:#1a73e8;color:#fff}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept,.glue-cookie-notification-bar__reject{forced-color-adjust:none;background:buttonText;border-color:buttonFace;color:buttonFace}.glue-cookie-notification-bar__accept svg,.glue-cookie-notification-bar__reject svg{fill:buttonFace}}.glue-cookie-notification-bar__accept:visited,.glue-cookie-notification-bar__reject:visited{background-color:#1a73e8;color:#fff}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept:visited,.glue-cookie-notification-bar__reject:visited{forced-color-adjust:none;background:buttonText;border-color:buttonFace;color:buttonFace}.glue-cookie-notification-bar__accept:visited svg,.glue-cookie-notification-bar__reject:visited svg{fill:buttonFace}}.glue-cookie-notification-bar__accept:hover,.glue-cookie-notification-bar__reject:hover{box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15);background-color:#185abc}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept:hover,.glue-cookie-notification-bar__reject:hover{forced-color-adjust:none;background:buttonFace;border-color:buttonText;color:buttonText}.glue-cookie-notification-bar__accept:hover svg,.glue-cookie-notification-bar__reject:hover svg{fill:buttonText}}.glue-cookie-notification-bar__accept:focus,.glue-cookie-notification-bar__reject:focus{background-color:#185abc;border-color:#fff;box-shadow:0 0 0 2px #185abc}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept:focus,.glue-cookie-notification-bar__reject:focus{forced-color-adjust:none;background:buttonFace;border-color:buttonText;color:buttonText;outline:2px solid highlight}.glue-cookie-notification-bar__accept:focus svg,.glue-cookie-notification-bar__reject:focus svg{fill:buttonText}}.glue-cookie-notification-bar__accept:active,.glue-cookie-notification-bar__reject:active{box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15);background-color:#185abc;border:1px solid transparent}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar__accept:active,.glue-cookie-notification-bar__reject:active{forced-color-adjust:none;background:buttonFace;border-color:buttonText;color:buttonText}.glue-cookie-notification-bar__accept:active svg,.glue-cookie-notification-bar__reject:active svg{fill:buttonText}}.glue-cookie-notification-bar__more{background:transparent;border-radius:4px;color:#1a73e8;display:inline;overflow:hidden;text-decoration:underline;-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.glue-cookie-notification-bar__more:active,.glue-cookie-notification-bar__more:focus,.glue-cookie-notification-bar__more:hover{color:#174ea6}.glue-cookie-notification-bar__more:visited{color:#681da8}.glue-cookie-notification-bar__more:active,.glue-cookie-notification-bar__more:focus,.glue-cookie-notification-bar__more:hover{cursor:pointer;outline:none}.glue-cookie-notification-bar__more:hover{background-color:rgba(26,115,232,.04)}.glue-cookie-notification-bar__more:focus{outline:2px solid transparent;background-color:rgba(26,115,232,.12);box-shadow:0 0 0 2px #1a73e8;z-index:1}.glue-cookie-notification-bar__more:active{background-color:rgba(26,115,232,.1);box-shadow:none;outline:2px auto Highlight;outline:5px auto -webkit-focus-ring-color}.glue-cookie-notification-bar__more img{border:0}.glue-cookie-notification-bar{box-shadow:0 2px 3px 0 rgba(60,64,67,.3),0 6px 10px 4px rgba(60,64,67,.15);background:#fff;bottom:0;-moz-box-sizing:border-box;box-sizing:border-box;display:grid;font-size:1rem;grid-gap:8px;grid-template-columns:auto auto;left:0;padding:8px;position:fixed;width:100%;z-index:1000}.glue-cookie-notification-bar[aria-hidden=true]{display:none}@media (min-width:600px){.glue-cookie-notification-bar{grid-template-columns:1fr auto;justify-items:flex-end}}@media (min-width:1024px){.glue-cookie-notification-bar{grid-template-columns:1fr auto auto}}@media (-ms-high-contrast:active),(forced-colors:active){.glue-cookie-notification-bar{border-top:1px solid transparent}}@media print{.glue-cookie-notification-bar{display:none}}.glue-cookie-notification-bar__text{font-family:Google Sans Text,Roboto,Arial,Helvetica,sans-serif;font-size:1.125em;line-height:1.5555555556;font-weight:400;letter-spacing:normal;align-self:center;color:#5f6368;grid-column:span 2;justify-self:flex-start;margin:0;padding:4px 12px}[lang=ar] .glue-cookie-notification-bar__text{font-family:Google Sans Text,Google Sans Arabic,Roboto,Arial,Helvetica,sans-serif}[lang=ja] .glue-cookie-notification-bar__text{font-family:Google Sans Text,Google Sans Japanese,Noto Sans JP,Roboto,Arial,Helvetica,sans-serif}[lang=ko] .glue-cookie-notification-bar__text{font-family:Google Sans Text,Google Sans Korean,Noto Sans KR,Roboto,Arial,Helvetica,sans-serif}[lang=zh-CN] .glue-cookie-notification-bar__text{font-family:Google Sans Text,Google Sans Simplified Chinese,Noto Sans SC,Roboto,Arial,Helvetica,sans-serif}[lang=zh-TW] .glue-cookie-notification-bar__text{font-family:Google Sans Text,Google Sans Traditional Chinese,Noto Sans TC,Roboto,Arial,Helvetica,sans-serif}@media (min-width:1024px){.glue-cookie-notification-bar__text{grid-column:span 1}}.glue-cookie-notification-bar__text,.glue-cookie-notification-bar__text *{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;text-rendering:auto}.glue-cookie-notification-bar__more{border-bottom:0;font-weight:inherit;letter-spacing:inherit}.glue-cookie-notification-bar__accept,.glue-cookie-notification-bar__reject{font-size:1em;cursor:pointer;margin:auto 0 0;max-width:unset}.glue-cookie-notification-bar__accept:last-child{grid-column:span 2}.glue-cookie-notification-bar-control[aria-hidden=true]{display:none}button.glue-cookie-notification-bar-control.glue-footer__link{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;border-radius:4px;padding:0}@media (-ms-high-contrast:active),(forced-colors:active){button.glue-cookie-notification-bar-control.glue-footer__link{color:linkText}button.glue-cookie-notification-bar-control.glue-footer__link:focus{outline:2px solid transparent}}.glue-footer__global-links-list-item[aria-hidden=true],.h-c-footer__global-links-list-item[aria-hidden=true]{display:none} </style> <script> window.iodata = {}; window.iodata.vars = {"WEB_PHASE":"phase1","OAUTH2_CLIENT_ID":"724256043927-qqf2lu66l75hjqeg5po2mopuprg9ee0e.apps.googleusercontent.com","OAUTH2_API_KEY":"AIzaSyC9IlQdWjbDHPruCQ8p2erAH1SwsAldZnQ","API_KEY":"AIzaSyC9IlQdWjbDHPruCQ8p2erAH1SwsAldZnQ","YOUTUBE_API_KEY":"AIzaSyC9IlQdWjbDHPruCQ8p2erAH1SwsAldZnQ","GOOGLE_ANALYTICS_KEY":"GTM-MNH554N","DEVPROFILES_ENDPOINT":"https://developers.googleapis.com","WEB_PATH_PREFIX":"2025"}; window.iodata.flags = {"svd_redirect":false,"sessions_available":false,"authentication":true,"registration":true,"routes":{"home":true,"about":true,"community":true,"register":true,"speakers":false,"explore":false,"auth":true,"sandbox":true,"global":true},"analytics":true,"speakers_available":false,"topics_available":false,"post_drop":false,"wagtail_images_available":false,"community_io_connect":false,"community_io_extended":false}; </script> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://storage.googleapis.com"/> <link rel="preconnect" href="https://apis.google.com"/> <link rel="preload" as="style" href="https://fonts.googleapis.com/icon?family=Google+Sans:400,500%7CGoogle+Sans+Display:400,500%7CGoogle+Sans+Text:400|Roboto:400,500|Roboto+Mono:400&display=swap" /> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Google+Sans:400,500%7CGoogle+Sans+Display:400,500%7CGoogle+Sans+Text:400|Roboto:400,500|Roboto+Mono:400&display=swap" /> </head> <body dsd-pending> <!-- Glue Cookie Notification Bar --> <script src="https://www.gstatic.com/glue/cookienotificationbar/cookienotificationbar.min.js" data-glue-cookie-notification-bar-category="2A" data-glue-cookie-notification-bar-site-id="io.google.com/2025"> </script> <!-- End Glue Cookie Notification Bar --> <div class="relative"> <!-- Add skip link as first focusable element --> <a href="#main-content" class="sr-only"> Skip to main content </a> <header class="relative z-[3]"> <nav class="mx-auto px-5 md:px-10" role="navigation" aria-label="Main navigation"> <div class="flex items-center"> <!-- Hamburger Button --> <button class="md:hidden inline-flex justify-center items-center w-6 h-6 mr-4" aria-label="Open website menu" id="hamburger-button" tabindex="0" > <img src="/2025/assets/images/hamburger.svg" class="hidden" alt="" aria-hidden="true" /> <img src="/2025/assets/images/hamburger-dark.svg" class="block" alt="" aria-hidden="true" /> </button> <!-- Hamburger Menu --> <hamburger-menu></hamburger-menu> <!-- Logo --> <div class="flex-shrink-0 py-[17px] md:py-[21px]"> <a href="/2025/" class="flex items-center" aria-label="Home Page"> <img src="/2025/assets/images/Logo.svg" class="h-8 w-auto hidden hcm-hide" alt="" aria-hidden="true" fetchpriority="high" width="147" height="32" > <img src="/2025/assets/images/Logo-white.svg" class="h-8 w-auto block hcm-hide" alt="" aria-hidden="true" fetchpriority="high" width="147" height="32" > <img src="/2025/assets/images/Logo.svg" class="h-8 w-auto hcm-show light-image" alt="" aria-hidden="true" fetchpriority="high" width="147" height="32" > <img src="/2025/assets/images/Logo-white.svg" class="h-8 w-auto hcm-show dark-image" alt="" aria-hidden="true" fetchpriority="high" width="147" height="32" > </a> </div> <!-- Navigation Menu --> <div class="flex flex-1 items-center justify-end md:justify-between"> <div class="ml-10 hidden md:flex"> <a href="/2025/community" aria-label="Community" aria-current="" class="underline-offset-4 decoration-[1.5px] decoration-gray-700 text-white decoration-white px-3 py-2 rounded-md text-sm font-medium " data-analytic-event="main_nav_select" data-analytic-event-params='{"menu_item": "Community"}'> Community </a> <a href="/2025/about" aria-label="About" aria-current="" class="underline-offset-4 decoration-[1.5px] decoration-gray-700 text-white decoration-white px-3 py-2 rounded-md text-sm font-medium " data-analytic-event="main_nav_select" data-analytic-event-params='{"menu_item": "About"}'> About </a> </div> <div class="flex items-center"> <google-signin colorClass="underline-offset-4 decoration-[1.5px] decoration-gray-700 text-white decoration-white"></google-signin> <profile-pic></profile-pic> <register-button ctaPosition="header" customClass="hidden md:block ml-4 !bg-white !text-grey-900 py-[10px] px-[20px] text-[16px]" text="Register now" > </register-button> </div> </div> </div> </nav> </header> <!-- Add ID to main content --> <main id="main-content"> <script type="module" src="/2025/js/pages/home-page.js"></script> <div class="relative bg-blue-200 mt-[-78px]"> <div class="home-hero-container py-[45px] md:pt-[78px] pb-0 overflow-hidden text-md:min-h-[100vh]"> <img aria-hidden="true" class="absolute top-[13px] left-[-118px] sm:left-[-60px] md:left-0 sm:top-[45px] md:top-[78px] h-[150px] lg-md:h-[291px] w-auto z-[2] fade-in-left" src="/2025/assets/images/io25-home-hero-cloud-left.webp" fetchpriority="high" alt="" /> <video aria-hidden="true" class="absolute right-[-60px] top-[45px] md:top-[78px] h-[150px] ml:h-[255px] w-auto hidden md:block fade-in-right" autoplay="true" muted="true" fetchpriority="high" alt="" playsinline="true" > <source src="/2025/assets/animations/io25-home-hero-dev.webm" type="video/webm" /> </video> <lit-island import="/2025/js/hydration-entrypoints/index.js"> <home-hero><template shadowroot="open" shadowrootmode="open"><!--lit-part yigtZ/u0Bw8=--> <!--lit-node 0--><link rel="stylesheet" href="/2025/assets/css/global.css" /> <div class="flex flex-col items-center w-full fade-in-down px-4 md:px-0 relative z-[1] min-h-[513px]" > <h1 class="sm:l-h1 md:l-h1 text-white w-full sm:w-[80%] pt-[22px] pb-4 md:pt-0 text-center mt-[60px] sm:mt-[80px] md:mt-[86px] ml:mt-[156px] max-w-[925px] z-[1] md:z-0" > Get ready for <span translate="no" style="white-space: pre;"> Google I/O </span> </h1> <p class="sm:l-p1 md:l-p1 text-center w-full max-w-[925px] mb-7 text-md:mb-10" > <!--lit-part K5RFhdAZqCU=--> <!--lit-node 0--><span class=" flex flex-col items-center space-y-2 animate-pulse" > <span class="h-4 bg-gray-200 rounded-full w-3/4"></span> <span class="h-4 bg-gray-200 rounded-full w-1/2"></span> </span> <!--lit-node 3--><span class="sm:w-[89%] hidden" > Join us on May 20-21 for livestreamed keynotes, sessions, and more. </span> <!--lit-node 4--><span class="hidden hidden" > Join us online May 20-21. Update your <span translate="no"> Google </span> Developer profile to get content recommendations just for you. </span> <!--/lit-part--> </p> <div class="min-h-52"><!--lit-part gLhha6qGS68=--> <!--lit-node 0--><span class="block animate-pulse"> <span class="h-[60px] w-[200px] bg-gray-200 rounded-lg block"></span> </span> <!--lit-node 2--><a aria-label="Update your Google Developer Profile" class="shadow-cta-white text-[20px] py-[14px] px-5 z-[1] tracking-[0.2px] text-md:text-[28px] text-md:tracking-[0.28px] text-md:px-6 text-md:py-[22px] relative cta-primary hidden " href="https://developers.google.com/profile/u/me/settings#interests" target="__blank" rel="noopener noreferrer" > Update profile </a> <register-button text="Register now" ctaPosition="hero" customClass="shadow-cta-white text-[20px] py-[14px] tracking-[0.2px] px-6 z-[1] text-md:text-[28px] text-md:tracking-[0.28px] text-md:px-6 text-md:py-[22px] relative" > </register-button> <!--/lit-part--></div> </div> <!--/lit-part--></template></home-hero> </lit-island> <video aria-hidden="true" class="absolute left-[-50px] bottom-0 w-[200px] h-auto md:h-[256px] md:w-auto ml:h-[322px] hidden md:block fade-in-left home-l-io" autoplay="true" muted="true" fetchpriority="high" alt="" playsinline="true" > <source src="/2025/assets/animations/io25-home-hero-io.webm" type="video/webm" /> </video> <img aria-hidden="true" class="absolute right-[-65px] sm:right-0 bottom-[65px] w-auto h-[190px] md:h-[250px] lg-md:h-[380px] fade-in-right z-[0] home-r-cloud" src="/2025/assets/images/io25-home-hero-cloud-right.webp" fetchpriority="high" alt="" /> </div> <lit-island import="/2025/js/hydration-entrypoints/index.js"> <countdown-timer><template shadowroot="open" shadowrootmode="open"><!--lit-part NZ3b6upwWOs=--> <!--lit-node 0--><link rel="stylesheet" href="/2025/assets/css/global.css" /> <div class="flex items-center flex-col z-[2] relative mt-[-100px] md:mt-0" > <h2 class="md:l-h3 sm:l-h4 text-center mb-5 md:mb-16 px-4" aria-hidden="true" > Let the countdown begin </h2> <!--lit-node 3--><div class="flex flex-wrap items-center justify-center gap-2 text-md:gap-[1.5rem] text-blue-600" role="timer" tabindex="0" aria-label="0 days, 0 hours, 0 minutes, and 0 seconds remaining until the event" aria-role="text" > <div class="flex flex-col item-center bg-white rounded-2xl justify-center countdown-box" aria-hidden="true" > <p class="countdown-time"><!--lit-part-->0<!--/lit-part--></p> <p class="countdown-label" translate="no">Days</p> </div> <div class="flex flex-col item-center bg-white rounded-2xl justify-center countdown-box" aria-hidden="true" > <p class="countdown-time"><!--lit-part-->0<!--/lit-part--></p> <p class="countdown-label" translate="no">Hours</p> </div> <div class="flex flex-col item-center bg-white rounded-2xl justify-center countdown-box" aria-hidden="true" > <p class="countdown-time"><!--lit-part-->0<!--/lit-part--></p> <p class="countdown-label" translate="no">Minutes</p> </div> <div class="flex flex-col item-center bg-white rounded-2xl justify-center countdown-box" aria-hidden="true" > <p class="countdown-time"><!--lit-part-->0<!--/lit-part--></p> <p class="countdown-label" translate="no">Seconds</p> </div> </div> </div> <!--/lit-part--></template></countdown-timer> </lit-island> <div class="relative hidden ml:block"> <img src="/2025/assets/images/io25-home-cloud-r-2.webp" class="absolute right-0 top-0 w-[321px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-l-2.webp" class="absolute top-[40px] w-[421px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-l-3.webp" class="absolute top-[605px] left-0 ml-[-15px] w-[697px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-l-4.webp" class="absolute top-[1340px] left-0 ml-[60px] w-[291px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-l-5.webp" class="absolute top-[1867px] left-0 ml-[-15px] w-[311px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-r-3.webp" class="absolute right-0 top-[1150px] w-[895px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-r-4.webp" class="absolute right-0 top-[2200px] w-[243px]" aria-hidden="true" /> <img src="/2025/assets/images/io25-home-cloud-c.webp" class="absolute right-[50%] top-[2200px] w-[243px]" aria-hidden="true" /> </div> <div class="flex flex-col gap-8 md:gap-20 ml:gap-[120px] px-4 ml:px-6 mt-8 md:mt-20 ml:mt-[120px]"> <div class="flex flex-col gap-5 md:gap-10 items-center md:px-[26px]"> <div class="w-full flex flex-col-reverse items-start md:flex-row justify-between border-[0.5px] rounded-[20px] backdrop-blur-[7.5px] px-6 pt-6 pb-8 md:p-[40px] relative overflow-hidden max-w-[1204px] md:items-center md:gap-24 bg-white/[0.6] overflow-visible" data-aos="fade-in" data-aos-duration="1000" > <div class="flex flex-col gap-6 md:w-1/2"> <p class="text-[50px] text-md:text-[100px] leading-[100%] text-md:leading-[90%] tracking-[-1.5px] text-md:tracking-[-4px] font-medium" style="hyphens: auto; hyphenate-limit-chars: 10; -webkit-hyphenate-limit-before: 10;" > Join a community group </p> <p class="text-[20px] leading-[120%] mb-2 mt-2">Connect with developers and groups near you.</p> <a role="link" class="cta-primary text-[20px] leading-[100%]" aria-label="Join a community Group" href="/2025/community" data-analytic-event="cta_community" data-analytic-event-params='{"cta_position": "body"}' > Get started </a> </div> <div class="flex justify-center md:justify-end md:mt-0 text-md:w-1/2 relative lg:translate-x-[300px] opacity-0" id="home-chat" > <img src="/2025/assets/images/io25-home-community-mobile.webp" alt="" class="md:hidden h-[164px] w-[141px] md:w-auto md:h-[300px] md:h-[464px] mb-4 mt-[-1.5rem] md:m-0 object-contain card-asset_img" aria-hidden="true" /> <video class="hidden md:block h-[164px] w-[141px] md:w-auto md:h-[300px] md:h-[464px] card-asset_vid " muted="true" aria-hidden="true" playsinline="true" > <source src="/2025/assets/animations/io25-home-chat.webm" type="video/webm"> </video> </div> </div> <div class="w-full flex flex-col-reverse items-start md:flex-row-reverse justify-between border-[0.5px] rounded-[20px] backdrop-blur-[7.5px] px-6 pt-6 pb-8 md:p-[40px] relative overflow-hidden max-w-[1204px] md:items-center md:gap-24 bg-white/[0.6] md:pl-0 overflow-visible text-md:min-h-[544px]" data-aos="fade-in" data-aos-duration="1000" > <div class="flex flex-col gap-6 md:w-1/2"> <p class="text-[50px] text-md:text-[100px] leading-[100%] text-md:leading-[90%] tracking-[-1.5px] text-md:tracking-[-4px] font-medium" style="hyphens: auto; hyphenate-limit-chars: 10; -webkit-hyphenate-limit-before: 10;" > Solve the<span translate="no"> <span style="white-space: nowrap;">I/O</span> puzzle</span> </p> <p class="text-[20px] leading-[120%] mb-2 mt-2">Guide, reflect, and split beams of light to illuminate beacons and advance through new challenges.</p> <a role="link" class="cta-primary text-[20px] leading-[100%]" aria-label="Solve the I/O Puzzle" href="/2025/puzzle" data-analytic-event="cta_svd" data-analytic-event-params='{"cta_position": "body"}' > Get started </a> </div> <div class="flex justify-center md:justify-end md:mt-0 text-md:w-1/2 relative items-center md:w-1/2 lg:translate-x-[-300px] opacity-0" id="home-svd" > <img src="/2025/assets/images/io25-home-svd-mobile.webp" alt="" class="md:hidden w-[308px] max-w-[308px] md:absolute left-[-54px] h-auto md:h-[465px] md:w-auto md:max-w-[420px] text-md:min-w-[530px] object-contain card-asset_img" aria-hidden="true" /> <video class="hidden md:block md:absolute left-[-54px] w-[274px] h-auto md:h-[465px] md:w-auto md:max-w-[420px] text-md:min-w-[530px] card-asset_vid " muted="true" aria-hidden="true" playsinline="true" > <source src="/2025/assets/animations/io25-home-svd.webm" type="video/webm"> </video> </div> </div> </div> <div class="z-[2]"> <h2 class="text-[34px] leading-[116%] tracking-[-1.7px] font-medium md:l-h3 text-center mb-6 ml:mb-16"> Start building today </h2> <div class="flex flex-wrap text-md:flex-row gap-x-8 gap-y-10 justify-center"> <div class="w-full max-w-[416px] h-[375px] sm:min-h-[375px] flex flex-col rounded-[20px] px-8 py-9 md:p-[40px] relative backdrop-blur-[7.5px] bg-white/[0.6] text-md:h-[417px] md:pb-0" data-aos="fade-in" data-aos-duration="500" data-aos-delay="200" > <div class="flex flex-col gap-4 z-20"> <h3 class="text-[42px] font-medium leading-[110%] tracking-[-1.26px] md:l-h4"><span translate="no">Gemma open model</span></h3> <p class="text-[20px] leading-[140%] md:leading-[120%] md:l-p2 mb-2">Innovate with Google鈥檚 advanced, lightweight, customizable open models.</p> <a class="cta-primary py-[10px] px-[20px] mb-[70px] text-md:mb-[150px] text-[20px] leading-[100%] z-20" aria-label="Gemma Open Models (opens in new tab)." href="https://ai.google.dev/gemma" data-analytic-event="content_card_select" data-analytic-event-params='{"cardName": "Gemma open models"}' target="_blank" rel="noopener noreferrer" > Get started </a> </div> <img class="absolute h-[157.859px] sm:h-[200px] text-md:h-[250px] -bottom-10 text-md:-bottom-[60px] right-2 text-md:right-0 z-10" src="/2025/assets/images/io25-home-card-sm-gemma.webp" aria-hidden="true" alt="" loading="lazy" /> </div> <div class="w-full max-w-[416px] h-[375px] sm:min-h-[375px] flex flex-col rounded-[20px] px-8 py-9 md:p-[40px] relative backdrop-blur-[7.5px] bg-white/[0.6] text-md:h-[417px] md:pb-0" data-aos="fade-in" data-aos-duration="500" data-aos-delay="200" > <div class="flex flex-col gap-4 z-20"> <h3 class="text-[42px] font-medium leading-[110%] tracking-[-1.26px] md:l-h4"><span translate="no">Google AI Studio</span></h3> <p class="text-[20px] leading-[140%] md:leading-[120%] md:l-p2 mb-2">Explore and build using our most capable AI models with a simple API key.</p> <a class="cta-primary py-[10px] px-[20px] mb-[70px] text-md:mb-[150px] text-[20px] leading-[100%] z-20" aria-label="Google AI Studio (opens in new tab)." href="https://aistudio.google.com/app/prompts/new_chat" data-analytic-event="content_card_select" data-analytic-event-params='{"cardName": "Google AI Studio"}' target="_blank" rel="noopener noreferrer" > Get started </a> </div> <img class="absolute h-[150px] sm:h-[200px] text-md:h-[259px] bottom-[-34px] md:bottom-[-54px] right-2 md:-right-4 text-md:right-1 z-10" src="/2025/assets/images/io25-home-card-sm-ai.webp" aria-hidden="true" alt="" loading="lazy" /> </div> <div class="w-full max-w-[416px] h-[375px] sm:min-h-[375px] flex flex-col rounded-[20px] px-8 py-9 md:p-[40px] relative backdrop-blur-[7.5px] bg-white/[0.6] text-md:h-[417px] md:pb-0" data-aos="fade-in" data-aos-duration="500" data-aos-delay="200" > <div class="flex flex-col gap-4 z-20"> <h3 class="text-[42px] font-medium leading-[110%] tracking-[-1.26px] md:l-h4"><span translate="no">NotebookLM</span></h3> <p class="text-[20px] leading-[140%] md:leading-[120%] md:l-p2 mb-2">Try out the ultimate personalized AI research assistant.</p> <a class="cta-primary py-[10px] px-[20px] mb-[70px] text-md:mb-[150px] text-[20px] leading-[100%] z-20" aria-label="NotebookLM (opens in new tab)." href="https://notebooklm.google/" data-analytic-event="content_card_select" data-analytic-event-params='{"cardName": "NotebookLM"}' target="_blank" rel="noopener noreferrer" > Get started </a> </div> <img class="absolute h-[125px] sm:h-[180px] text-md:h-[246px] -bottom-4 md:-bottom-10 right-5 md:-right-5 z-10" src="/2025/assets/images/io25-home-card-sm-notebooklm.webp" aria-hidden="true" alt="" loading="lazy" /> </div> </div> </div> </div> <div class="relative home-bottom-img-container"> <img aria-hidden="true" alt="" class="h-[582px] w-auto md:h-auto md:w-full object-cover object-right" src="/2025/assets/images/io25-home-bottom.webp" width="1728" height="1055" loading="lazy" /> </div> </div> <div class="bg-gray-900"> <div class="w-full items-center md:justify-center flex flex-col px-8 md:px-[40px] relative h-[657px] md:h-[627px] overflow-hidden black-dark-gray-gradient"> <img aria-hidden="true" alt="" class="md:hidden w-[239px] z-[1] mt-12" src="/2025/assets/images/Logo-white.svg" width="138" height="30" loading="lazy" /> <div class="flex justify-center text-md:justify-between lg:justify-center lg:gap-10 items-center z-[1] relative w-full "> <img aria-hidden="true" alt="" class="absolute md:relative top-[25px] md:top-0 left-[-70px] sm:left-0 h-[250px] ml:h-[300px] lg:h-[468px] w-auto" src="/2025/assets/images/io25-home-lg-card-io.webp" width="476" height="468" loading="lazy" /> <img aria-hidden="true" alt="" class="hidden md:block w-[239px] ml:w-[293px] h-auto shrink-0" src="/2025/assets/images/Logo-white.svg" width="293" height="64" loading="lazy" /> <img aria-hidden="true" alt="" class="absolute md:relative top-[25px] md:top-0 right-[-70px] sm:right-0 h-[250px] ml:h-[300px] lg:h-[499px] w-auto" src="/2025/assets/images/io25-home-lg-card-25.webp" width="509" height="499" loading="lazy" /> </div> <img src="/2025/assets/images/io25-home-lg-card-bg.webp" class="absolute h-full w-auto lg:w-full lg:h-auto bottom-0 right-0 object-cover" aria-hidden="true" alt="" width="1728" height="752" loading="lazy" /> </div> </div> <registered-toast></registered-toast> </main> <footer class="absolute bottom-0 w-full z-[2] py-10"> <div class="mx-auto px-5 md:px-10"> <div class="flex flex-col md:flex-row md:items-center md:justify-between space-y-6 md:space-y-0"> <nav class="flex flex-col md:flex-row md:items-center space-y-4 md:space-y-0 md:gap-x-6 text-base font-medium text-white" role="navigation" aria-label="Navigation" > <a href="/2025/puzzle" class="underline-offset-4 decoration-[1.5px] decoration-gray-700" aria-label="I/O Puzzle"><span translate="no">I/O Puzzle</span></a> <a href="https://policies.google.com/" class="underline-offset-4 decoration-[1.5px] decoration-gray-700" aria-label="Privacy & Terms (opens in new tab)" target="_blank" rel="noopener noreferrer" translate="no">Privacy & terms</a> <a href="/2025/about" class="underline-offset-4 decoration-[1.5px] decoration-gray-700 " aria-label="FAQ">FAQ</a> </nav> <div class="flex" aria-label="Social media links"> <a href="https://www.youtube.com/user/GoogleDevelopers" aria-label="Google's YouTube Page (opens in new tab)" target="_blank" rel="noopener noreferrer" class="w-12 h-12 flex items-center"> <img src="/2025/assets/images/youtube-white.svg" alt="YouTube icon" class="h-6 w-6 hcm-hide" alt="" aria-hidden="true" loading="lazy"> <img src="/2025/assets/images/youtube.svg" alt="YouTube icon" class="h-6 w-6 hcm-show" alt="" aria-hidden="true" loading="lazy"> </a> <a href="https://www.instagram.com/googlefordevs/" aria-label="Google's Instragram Page (opens in new tab)" target="_blank" rel="noopener noreferrer" class="w-12 h-12 flex items-center"> <img src="/2025/assets/images/instagram-white.svg" alt="Instagram icon" class="h-6 w-6 hcm-hide" alt="" aria-hidden="true" loading="lazy"> <img src="/2025/assets/images/instagram.svg" alt="Instagram icon" class="h-6 w-6 hcm-show" alt="" aria-hidden="true" loading="lazy"> </a> <a href="https://www.linkedin.com/showcase/googledevelopers/" aria-label="Google's LinkedIn Page (opens in new tab)" target="_blank" rel="noopener noreferrer" class="w-12 h-12 flex items-center"> <img src="/2025/assets/images/linkedIn-white.svg" alt="LinkedIn icon" class="h-6 w-6 hcm-hide" alt="" aria-hidden="true" loading="lazy"> <img src="/2025/assets/images/linkedIn.svg" alt="LinkedIn icon" class="h-6 w-6 hcm-show" alt="" aria-hidden="true" loading="lazy"> </a> <a href="https://twitter.com/googledevs" aria-label="Google's X Page (opens in new tab)" target="_blank" rel="noopener noreferrer" class="w-12 h-12 flex items-center"> <img src="/2025/assets/images/x-white.svg" alt="X icon" class="h-6 w-6 hcm-hide" alt="" aria-hidden="true" loading="lazy"> <img src="/2025/assets/images/x.svg" alt="X icon" class="h-6 w-6 hcm-show" alt="" aria-hidden="true" loading="lazy"> </a> <a href="https://developers.googleblog.com/en/" aria-label="developers.googleblog.com (opens in new tab)" target="_blank" rel="noopener noreferrer" class="w-12 h-12 flex items-center"> <img src="/2025/assets/images/devsite-white.svg" alt="Devsite icon" class="h-6 w-6 hcm-hide" alt="" aria-hidden="true" loading="lazy"> <img src="/2025/assets/images/devsite.svg" alt="Devsite icon" class="h-6 w-6 hcm-show" alt="" aria-hidden="true" loading="lazy"> </a> </div> </div> </div> </footer> <insufficient-scope-modal></insufficient-scope-modal> <not-eligible-modal></not-eligible-modal> <registration-success-modal></registration-success-modal> </div> </body> </html>