CINXE.COM
Conduct | Google Open Source
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google Open Source"> <meta property="og:type" content="website"><meta name="theme-color" content="#12b5cb"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/opensource/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500,700|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/touchicon-180.png"><link rel="canonical" href="https://opensource.google/conduct"><link rel="search" type="application/opensearchdescription+xml" title="Google Open Source" href="https://opensource.google/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://opensource.google/conduct" /><link rel="alternate" hreflang="x-default" href="https://opensource.google/conduct" /><title>Conduct | Google Open Source</title> <meta property="og:title" content="Conduct | Google Open Source"><meta property="og:url" content="https://opensource.google/conduct"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Conduct" } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="landing" theme="cyan" type="article" layout="full" pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner" data-nosnippet> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleOpenSource" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/lockup.svg" class="devsite-site-logo" alt="Google Open Source"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://opensource.google/events" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://opensource.google/events" track-type="nav" track-metadata-position="nav - events" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Events" track-name="events" > Events </a> </tab> <tab > <a href="https://opensource.google/projects" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://opensource.google/projects" track-type="nav" track-metadata-position="nav - projects" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Projects" track-name="projects" > Projects </a> </tab> <tab class="devsite-dropdown "> <a href="https://opensource.google/programs-and-services" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://opensource.google/programs-and-services" track-type="nav" track-metadata-position="nav - programs and services" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Programs and services" track-name="programs and services" > Programs and services </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Programs and services" track-type="nav" track-metadata-eventdetail="https://opensource.google/programs-and-services" track-metadata-position="nav - programs and services" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Programs and services" track-name="programs and services" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://opensource.google/organizations-we-support" track-type="nav" track-metadata-eventdetail="https://opensource.google/organizations-we-support" track-metadata-position="nav - programs and services" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Organizations we support </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://opensource.google/documentation/reference" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://opensource.google/documentation/reference" track-type="nav" track-metadata-position="nav - documentation" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Documentation" track-name="documentation" > Documentation </a> </tab> <tab > <a href="https://opensource.google/about" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://opensource.google/about" track-type="nav" track-metadata-position="nav - about" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: About" track-name="about" > About </a> </tab> <tab > <a href="//opensource.googleblog.com" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="//opensource.googleblog.com" track-type="nav" track-metadata-position="nav - blog" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" > Blog </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Google Open Source" tenant-name="Google Open Source" > <form class="devsite-search-form" action="https://opensource.google/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars hidden> <div class="devsite-book-nav-filter" hidden> <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleOpenSource" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/lockup.svg" class="devsite-site-logo" alt="Google Open Source"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/events" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Events" track-name="events" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Events" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Events </span> </a> </li> <li class="devsite-nav-item"> <a href="/projects" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Projects" track-name="projects" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Projects" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Projects </span> </a> </li> <li class="devsite-nav-item"> <a href="/programs-and-services" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Programs and services" track-name="programs and services" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Programs and services" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Programs and services </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Programs and services" track-name="programs and services" > <span class="devsite-nav-text" tooltip menu="Programs and services"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Programs and services"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/documentation/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Documentation" track-name="documentation" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Documentation" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Documentation </span> </a> </li> <li class="devsite-nav-item"> <a href="/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: About" track-name="about" data-category="Site-Wide Custom Events" data-label="Responsive Tab: About" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About </span> </a> </li> <li class="devsite-nav-item"> <a href="//opensource.googleblog.com" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="Programs and services" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/organizations-we-support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Organizations we support" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Organizations we support </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars disabled></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"><style> /* Styles inlined from /styles/styles.css */ .hero .hero-bold { font-weight: 500; } .benefits-row [class^=devsite-][icon-position=top] > div { margin: 0 auto; } .projects-description p, .featured-events-description p, .featured-blogs-description p, .os-project-hero p, .os-desc-left p, .os-hero p { max-width: 708px; } .end-padding-medium { padding-bottom: 64px; padding-top: 0; } .os-subheader-46.devsite-landing-row h2 { font-size: 46px; line-height: 40px; } .os-project-hero[class^=devsite-] [class^=devsite-] [class^=devsite-] h3 { font: 400 56px / 68px Google Sans; margin-bottom: 0; } .os-project-hero [class^=devsite-][size=xlarge], .os-project-hero [class^=devsite-][size=xlarge] img { height: 60px; width: 221px; } .os-no-padding-b { padding-bottom: 0; } .os-project-hero .button { font: 700 16px / 24px Roboto; } .os-project-hero.no-padding { padding-bottom: 0; padding-top: 0 } .os-project-columns-top .devsite-landing-row-group { grid: auto-flow / 3fr 1fr; } .os-project-columns-bottom .devsite-landing-row-group { grid: auto-flow / repeat(3, 1fr); } .os-project-columns .os-divider h3 { padding-top: 40px; } .os-project-columns .button { padding: 0; } .os-project-columns-bottom { padding: 16px 24px; } .os-divider { border-top: 1px solid #9aa0a6; } .os-project-source { border-radius: 8px; } .os-project-source [class^=devsite-] a:first-child { margin-left: 8px; } .os-project-source .devsite-landing-row-item-list-item-buttons a { display: block; text-align: start; } .os-project-source h4 { border-bottom: 1px solid #9aa0a6; font: 400 18px / 32px Google Sans; margin-top: 8px; padding-top: 8px; } .os-all-projects .os-margin-bottom-zero { margin-bottom: 0; } .os-margin-top-zero { margin-top:0; } /* Override core 'row-reverse' to left-align buttons in dynamic content cards. */ .os-featured-blogs .devsite-card-buttons { flex-direction: row; } [dynamic-card-style="card"] ul li, .os-project-card span:not(a) { border: 1px solid; border-radius: 5px; padding: 6px 8px 4px; background: none; } .os-project-hero.os-android-bg { margin-bottom: 96px; padding-bottom: 0; padding-top: 0; } .os-project-hero.bg-yellow[background] { background: #fff7dd; } .os-project-hero.bg-green-warm[background] { background: #dfffea; } .os-project-hero.bg-blue-cool[background]{ background: #e1eaff; } .os-project-hero.bg-red-warm[background]{ background: #ffdfee; } </style> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://opensource.google/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Open Source" > Google Open Source </a> </li> </ul> </div> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded disabled> </devsite-toc> <div class="devsite-article-body clearfix "> <section class="devsite-landing-row devsite-landing-row-1-up devsite-landing-row-67 devsite-landing-row-hero devsite-landing-row-no-image-background devsite-landing-row-padding-large hero os-custom-desc os-hero" background="grey" header-position="top" > <div class="devsite-landing-row-inner"> <div class="devsite-landing-row-group"> <div class="devsite-landing-row-item" description-position="bottom" > <div class="devsite-landing-row-item-media "> <figure class="devsite-landing-row-item-image"> <picture> <img alt="" src="https://opensource.google/static/images/about/os-anim-about.gif" srcset="https://opensource.google/static/images/about/os-anim-about.gif" sizes="(max-width: 600px) 100vw, (max-width: 840px) 50vw, 464px" fetchpriority="high"> </picture> </figure> </div> <div class="devsite-landing-row-item-description" > <div class="devsite-landing-row-item-body"> <h3 id="community-guidelines" data-text="Community Guidelines" class="hide-from-toc no-link" tabindex="0"> Community Guidelines </h3> </div> </div> </div> </div> </div> </section> <section class="devsite-landing-row devsite-landing-row-1-up devsite-landing-row-50 os-about-history os-custom-desc" header-position="top" > <div class="devsite-landing-row-inner"> <div class="devsite-landing-row-group"> <div class="devsite-landing-row-item devsite-landing-row-item-no-media" description-position="bottom" > <div class="devsite-landing-row-item-description" > <div class="devsite-landing-row-item-body"> <div class="devsite-landing-row-item-description-content"> <p>At Google, we recognize and celebrate the creativity and collaboration of open source contributors and the diversity of skills, experiences, cultures, and opinions they bring to the projects and communities they participate in.</p><p> Every one of Google's open source projects and communities are inclusive environments, based on treating all individuals respectfully, regardless of gender identity and expression, sexual orientation, disabilities, neurodiversity, physical appearance, body size, ethnicity, nationality, race, age, religion, or similar personal characteristic.</p><p> We value diverse opinions, but we value respectful behavior more.</p><p>Respectful behavior includes: <ul><li>Being considerate, kind, constructive, and helpful.</li><li>Not engaging in demeaning, discriminatory, harassing, hateful, sexualized, or physically threatening behavior, speech, and imagery.</li><li>Not engaging in unwanted physical contact.</li></ul></p><p>Some Google open source projects <a href="https://opensource.google/documentation/reference/releasing/preparing/#conduct">may adopt</a> an explicit project code of conduct, which may have additional detailed expectations for participants. Most of those projects will use our <a href="https://opensource.google/docs/releasing/template/CODE_OF_CONDUCT/">modified Contributor Covenant</a>.</p><h3 id="resolve-peacefully" data-text="Resolve peacefully" tabindex="-1">Resolve peacefully</h3><p>We do not believe that all conflict is necessarily bad; healthy debate and disagreement often yields positive results. However, it is never okay to be disrespectful.</p><p>If you see someone behaving disrespectfully, you are encouraged to address the behavior directly with those involved. Many issues can be resolved quickly and easily, and this gives people more control over the outcome of their dispute. If you are unable to resolve the matter for any reason, or if the behavior is threatening or harassing, report it. We are dedicated to providing an environment where participants feel welcome and safe.</p><h3 id="reporting-problems" data-text="Reporting problems" tabindex="-1">Reporting problems</h3><p>Some Google open source projects may adopt a project-specific code of conduct. In those cases, a Google employee will be identified as the Project Steward, who will receive and handle reports of code of conduct violations. In the event that a project hasn鈥檛 identified a Project Steward, you can report problems by emailing opensource@google.com.</p><p>We will investigate every complaint, but you may not receive a direct response. We will use our discretion in determining when and how to follow up on reported incidents, which may range from not taking action to permanent expulsion from the project and project-sponsored spaces. We will notify the accused of the report and provide them an opportunity to discuss it before any action is taken. The identity of the reporter will be omitted from the details of the report supplied to the accused. In potentially harmful situations, such as ongoing harassment or threats to anyone's safety, we may take action without notice.<p>This document was adapted from the <a href="https://indieweb.org/code-of-conduct">IndieWeb Code of Conduct.</a> </div> </div> </div> </div> </div> </div> </section> </div> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],[],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//www.youtube.com/googleopensource" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer YouTube Link" > YouTube </a> </li> <li class="devsite-footer-sites-item"> <a href="//x.com/GoogleOSS" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer X Link" > X </a> </li> <li class="devsite-footer-sites-item"> <a href="https://www.linkedin.com/showcase/googledevelopers/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer LinkedIn Link" > LinkedIn </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension5": false, "dimension3": "en", "dimension1": "Signed out", "dimension2": false, "dimension4": "en"}, "gaid": "UA-53341410-8", "metrics": {}, "purpose": 0}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [{"id": "G-Q7VJ8CW5GK", "purpose": 0}], "ga4p": [{"id": "G-Q7VJ8CW5GK", "purpose": 0}], "gtm": [], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Google Open Source", "signedIn": "False", "tenant": "opensource", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="D7lF/YdzkdgcXbs8MzsxhVnlSkwomi"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/js/app_loader.js', '[42,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07","https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource","https://opensource-dot-devsite-v2-prod-3p.appspot.com",1,null,["/_pwa/opensource/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/v630f393d749cf7dff36a03367007d65915d987bf69b5409e6d70ed7311ba2c07/opensource/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500,700|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","opensource.google","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["MiscFeatureFlags__emergency_css","MiscFeatureFlags__enable_framebox_badge_methods","Profiles__require_profile_eligibility_for_signin","Profiles__enable_join_program_group_endpoint","MiscFeatureFlags__enable_view_transitions","Cloud__enable_cloud_shell","Cloud__enable_cloud_shell_fte_user_flow","MiscFeatureFlags__enable_firebase_utm","Profiles__enable_public_developer_profiles","Analytics__enable_clearcut_logging","Profiles__enable_release_notes_notifications","Cloud__enable_legacy_calculator_redirect","Cloud__enable_free_trial_server_call","Cloud__enable_cloudx_ping","Cloud__enable_cloudx_experiment_ids","TpcFeatures__enable_unmirrored_page_left_nav","Search__enable_suggestions_from_borg","CloudShell__cloud_shell_button","OnSwitch__enable","Cloud__enable_cloud_facet_chat","Experiments__reqs_query_experiments","Cloud__enable_llm_concierge_chat","Profiles__enable_completecodelab_endpoint","Profiles__enable_page_saving","Profiles__enable_recognition_badges","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__enable_variable_operator_index_yaml","Profiles__enable_complete_playlist_endpoint","CloudShell__cloud_code_overflow_menu","Profiles__enable_stripe_subscription_management","Profiles__enable_completequiz_endpoint","MiscFeatureFlags__developers_footer_dark_image","BookNav__enable_tenant_cache_key","Search__enable_page_map","MiscFeatureFlags__developers_footer_image","Cloud__enable_cloud_dlp_service","Profiles__enable_awarding_url","DevPro__enable_cloud_innovators_plus","Profiles__enable_developer_profiles_callout","EngEduTelemetry__enable_engedu_telemetry","Search__enable_ai_eligibility_checks","MiscFeatureFlags__enable_explain_this_code","Concierge__enable_pushui","Search__enable_dynamic_content_confidential_banner","DevPro__enable_developer_subscriptions","MiscFeatureFlags__enable_project_variables","Profiles__enable_profile_collections","MiscFeatureFlags__enable_variable_operator","Profiles__enable_dashboard_curated_recommendations"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[42,"opensource","Google Open Source","opensource.google",null,"opensource-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1,null,1]],null,[58,null,null,null,null,null,"/images/lockup.svg",null,null,null,null,1,null,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],[1,1]],[[["UA-53341410-8"],["UA-53341410-20"],null,null,["UA-53341410-19"],null,null,[["G-Q7VJ8CW5GK"],null,null,[["G-Q7VJ8CW5GK",1]]],[["UA-53341410-8",1]],null,[["UA-53341410-19",1]],null,1],[[2,2],[1,1],[3,4],[4,5],[5,8]]],null,4],null,null,1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>