CINXE.COM
Get started with Cloud Firestore | Firebase
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.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="Firebase"> <meta property="og:type" content="website"><meta name="theme-color" content="#a8c7fa"><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/firebase/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|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/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/css/app.css"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/css/dark-theme.css" disabled> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png"><link rel="canonical" href="https://firebase.google.com/docs/firestore/quickstart"><link rel="search" type="application/opensearchdescription+xml" title="Firebase" href="https://firebase.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://firebase.google.com/docs/firestore/quickstart" /><link rel="alternate" hreflang="x-default" href="https://firebase.google.com/docs/firestore/quickstart" /><link rel="alternate" hreflang="ar" href="https://firebase.google.com/docs/firestore/quickstart?hl=ar" /><link rel="alternate" hreflang="bn" href="https://firebase.google.com/docs/firestore/quickstart?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://firebase.google.com/docs/firestore/quickstart?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://firebase.google.com/docs/firestore/quickstart?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://firebase.google.com/docs/firestore/quickstart?hl=fa" /><link rel="alternate" hreflang="fr" href="https://firebase.google.com/docs/firestore/quickstart?hl=fr" /><link rel="alternate" hreflang="de" href="https://firebase.google.com/docs/firestore/quickstart?hl=de" /><link rel="alternate" hreflang="he" href="https://firebase.google.com/docs/firestore/quickstart?hl=he" /><link rel="alternate" hreflang="hi" href="https://firebase.google.com/docs/firestore/quickstart?hl=hi" /><link rel="alternate" hreflang="id" href="https://firebase.google.com/docs/firestore/quickstart?hl=id" /><link rel="alternate" hreflang="it" href="https://firebase.google.com/docs/firestore/quickstart?hl=it" /><link rel="alternate" hreflang="ja" href="https://firebase.google.com/docs/firestore/quickstart?hl=ja" /><link rel="alternate" hreflang="ko" href="https://firebase.google.com/docs/firestore/quickstart?hl=ko" /><link rel="alternate" hreflang="pl" href="https://firebase.google.com/docs/firestore/quickstart?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://firebase.google.com/docs/firestore/quickstart?hl=pt-br" /><link rel="alternate" hreflang="pt" href="https://firebase.google.com/docs/firestore/quickstart?hl=pt" /><link rel="alternate" hreflang="ru" href="https://firebase.google.com/docs/firestore/quickstart?hl=ru" /><link rel="alternate" hreflang="es" href="https://firebase.google.com/docs/firestore/quickstart?hl=es" /><link rel="alternate" hreflang="es-419" href="https://firebase.google.com/docs/firestore/quickstart?hl=es-419" /><link rel="alternate" hreflang="th" href="https://firebase.google.com/docs/firestore/quickstart?hl=th" /><link rel="alternate" hreflang="tr" href="https://firebase.google.com/docs/firestore/quickstart?hl=tr" /><link rel="alternate" hreflang="vi" href="https://firebase.google.com/docs/firestore/quickstart?hl=vi" /><title>Get started with Cloud Firestore | Firebase</title> <meta property="og:title" content="Get started with Cloud Firestore | Firebase"><meta property="og:url" content="https://firebase.google.com/docs/firestore/quickstart"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Documentation", "item": "https://firebase.google.com/docs" },{ "@type": "ListItem", "position": 2, "name": "Firestore", "item": "https://firebase.google.com/docs/firestore" },{ "@type": "ListItem", "position": 3, "name": "Get started with Cloud Firestore", "item": "https://firebase.google.com/docs/firestore/quickstart" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="firebase-icy-theme" type="guide" appearance layout="docs" concierge='closed' display-toc 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" keep-tabs-visible> <div class="devsite-header--inner nocontent"> <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="firebase" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Firebase"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" class="devsite-site-logo" alt="Firebase"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </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 class="devsite-dropdown "> <a href="https://firebase.google.com/products-build" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/products-build" track-type="nav" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > Build </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-build" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" 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 firebase-dropdown firebase-dropdown--primary firebase-build"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Build</li> <li class="devsite-nav-description">Get to market quickly and securely with products that can scale globally </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products-build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-build" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build" tooltip > <div class="devsite-nav-item-title"> Go to Build </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--secondary firebase-build"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Build Products</li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-check" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-check" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> App Check </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> App Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/auth" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/auth" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Authentication </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/functions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/functions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Cloud Functions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/storage" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/storage" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Cloud Storage </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/data-connect" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/data-connect" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Data Connect </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/extensions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/extensions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Extensions </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/ml" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/ml" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Firebase ML </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/firestore" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/firestore" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Firestore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/genkit" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/genkit" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Genkit </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/realtime-database" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/realtime-database" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Realtime Database </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/vertex-ai-in-firebase" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/vertex-ai-in-firebase" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Vertex AI in Firebase </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/generative-ai" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/generative-ai" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Generative AI </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/products-run" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/products-run" track-type="nav" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > Run </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-run" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" 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 firebase-dropdown firebase-dropdown--primary firebase-run"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Run</li> <li class="devsite-nav-description">Run your app with confidence and deliver the best experience for your users </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products-run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-run" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run" tooltip > <div class="devsite-nav-item-title"> Go to Run </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--secondary"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Run Products</li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/ab-testing" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/ab-testing" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> A/B Testing </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-distribution" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-distribution" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> App Distribution </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/cloud-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/cloud-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Cloud Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/crashlytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/crashlytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Crashlytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/analytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/analytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Google Analytics </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/in-app-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/in-app-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> In-App Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/performance" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/performance" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Performance Monitoring </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/remote-config" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/remote-config" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Remote Config </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/test-lab" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/test-lab" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Test Lab </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/solutions" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/solutions" track-type="nav" track-metadata-position="nav - solutions" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Solutions" track-name="solutions" > Solutions </a> </tab> <tab > <a href="https://firebase.google.com/pricing" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/pricing" track-type="nav" track-metadata-position="nav - pricing" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Pricing" track-name="pricing" > Pricing </a> </tab> <tab class="devsite-dropdown devsite-active "> <a href="https://firebase.google.com/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs" track-type="nav" track-metadata-position="nav - docs" track-metadata-module="primary nav" aria-label="Docs, selected" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" > Docs </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Docs" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs" track-metadata-position="nav - docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" 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://firebase.google.com/docs" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Overview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/guides" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Fundamentals </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/build" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Build </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/run" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Run </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/reference" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/reference" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Reference </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/samples" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/samples" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Samples </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/community" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/community" track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Community" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" 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://firebase.google.com/community/learn" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/learn" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Learn </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/community/events" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/events" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Events </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/community/stories" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/stories" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Stories </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/support" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/support" track-type="nav" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" > Support </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Firestore" tenant-name="Firebase" > <form class="devsite-search-form" action="https://firebase.google.com/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-appearance-selector></devsite-appearance-selector> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt" >Português</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//console.firebase.google.com" data-category="Site-Wide Custom Events" data-label="Site header link" > Go to console </a> <devsite-user enable-profiles fp-auth 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 "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" aria-label="Lower header breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://firebase.google.com/docs" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Firebase Documentation" > Documentation </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/firestore" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Firestore" > Firestore </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://firebase.google.com/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs" track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/docs/guides" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-type="nav" track-metadata-position="nav - fundamentals" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" > Fundamentals </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Fundamentals" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-metadata-position="nav - fundamentals" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" 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://firebase.google.com/docs/ios/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ios/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Apple platforms (iOS+) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/android/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/android/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/web/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/web/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Web </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/flutter/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/flutter/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Flutter </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/cpp/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/cpp/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - C++ </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/unity/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/unity/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Unity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/admin/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/admin/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Server environments </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/projects/learn-more" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/projects/learn-more" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Manage Firebase projects </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/libraries" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/libraries" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Supported platforms & frameworks </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/emulator-suite" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/emulator-suite" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Use Emulator Suite </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/gemini-in-firebase" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/gemini-in-firebase" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> AI assistance with Gemini in Firebase </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-active "> <a href="https://firebase.google.com/docs/build" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/build" track-type="nav" track-metadata-position="nav - build" track-metadata-module="primary nav" aria-label="Build, selected" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > Build </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/build" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" 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://firebase.google.com/docs/emulator-suite" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/emulator-suite" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Emulator Suite </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/auth" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/auth" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Authentication </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-check" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-check" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Check </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/data-connect" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/data-connect" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Data Connect </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/firestore" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/firestore" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Firestore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/database" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/database" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Realtime Database </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/storage" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/storage" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Storage </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/rules" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/rules" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Security Rules </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/functions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/functions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Cloud Functions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/extensions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/extensions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Extensions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/vertex-ai" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/vertex-ai" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Vertex AI in Firebase </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/genkit" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/genkit" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Genkit </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ml" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ml" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> ML </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/docs/run" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/run" track-type="nav" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > Run </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/run" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" 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://firebase.google.com/docs/test-lab" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/test-lab" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Test Lab </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-distribution" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-distribution" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Distribution </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/crashlytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/crashlytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Crashlytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/perf-mon" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/perf-mon" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Performance Monitoring </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/remote-config" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/remote-config" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Remote Config </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ab-testing" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ab-testing" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> A/B Testing </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/analytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/analytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Analytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/cloud-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/cloud-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Cloud Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/in-app-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/in-app-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> In-App Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/dynamic-links" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/dynamic-links" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Dynamic Links </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/admob" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/admob" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google AdMob </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ads" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ads" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Ads </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/docs/reference" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/reference" track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://firebase.google.com/docs/samples" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/samples" track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <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="firebase" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Firebase"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" class="devsite-site-logo" alt="Firebase"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </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="/products-build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build </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: Build" track-name="build" > <span class="devsite-nav-text" tooltip menu="Build"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Build"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/products-run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Run </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: Run" track-name="run" > <span class="devsite-nav-text" tooltip menu="Run"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Run"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/solutions" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Solutions" track-name="solutions" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Solutions" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Solutions </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/pricing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Pricing" track-name="pricing" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Pricing" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Pricing </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Docs" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Docs </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: Docs" track-name="docs" > <span class="devsite-nav-text" tooltip menu="Docs"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Docs"> </span> </span> </li> </ul> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/guides" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Fundamentals" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Fundamentals </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" > <span class="devsite-nav-text" tooltip menu="Fundamentals"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Fundamentals"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/build" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Build </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > <span class="devsite-nav-text" tooltip menu="Build"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Build"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/run" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Run </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > <span class="devsite-nav-text" tooltip menu="Run"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Run"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/community" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </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: Community" track-name="community" > <span class="devsite-nav-text" tooltip menu="Community"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Community"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Support </span> </a> </li> <li class="devsite-nav-item"> <a href="//console.firebase.google.com" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to console </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/docs/build" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/build" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/build" ><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Emulator Suite</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/emulator-suite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Connect your app and prototype</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/emulator-suite/connect_and_prototype" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_and_prototype" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_and_prototype" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/connect_auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_auth" ><span class="devsite-nav-text" tooltip>Connect to the Authentication emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/connect_rtdb" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_rtdb" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_rtdb" ><span class="devsite-nav-text" tooltip>Connect to the Realtime Database emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/connect_firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_firestore" ><span class="devsite-nav-text" tooltip>Connect to the Firestore emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/connect_storage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_storage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_storage" ><span class="devsite-nav-text" tooltip>Connect to the Cloud Storage for Firebase emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/use_hosting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/use_hosting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/use_hosting" ><span class="devsite-nav-text" tooltip>Use the Hosting emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/use_app_hosting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/use_app_hosting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/use_app_hosting" ><span class="devsite-nav-text" tooltip>Use the App Hosting emulator</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/emulator-suite/connect_functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/connect_functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/connect_functions" ><span class="devsite-nav-text" tooltip>Connect to the Cloud Functions emulator</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/emulator-suite/use_extensions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/use_extensions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/use_extensions" ><span class="devsite-nav-text" tooltip>Use the Extensions emulator</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/emulator-suite/install_and_configure" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/emulator-suite/install_and_configure" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/emulator-suite/install_and_configure" ><span class="devsite-nav-text" tooltip>Install, configure and integrate</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Authentication</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/where-to-start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/where-to-start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/where-to-start" ><span class="devsite-nav-text" tooltip>Where do I start?</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/users" ><span class="devsite-nav-text" tooltip>Users in Firebase Projects</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>iOS+</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/ios/firebaseui" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/firebaseui" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/firebaseui" ><span class="devsite-nav-text" tooltip>Sign in with a pre-built UI</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/email-link-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/email-link-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/email-link-auth" ><span class="devsite-nav-text" tooltip>Email Link Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/email-link-migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/email-link-migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/email-link-migration" ><span class="devsite-nav-text" tooltip>Email Link Migration</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/google-signin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/google-signin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/google-signin" ><span class="devsite-nav-text" tooltip>Google</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/facebook-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/facebook-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/facebook-login" ><span class="devsite-nav-text" tooltip>Facebook Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/apple" ><span class="devsite-nav-text" tooltip>Sign in with Apple</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/twitter-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/twitter-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/twitter-login" ><span class="devsite-nav-text" tooltip>Twitter Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/github-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/github-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/github-auth" ><span class="devsite-nav-text" tooltip>GitHub</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/microsoft-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/microsoft-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/microsoft-oauth" ><span class="devsite-nav-text" tooltip>Microsoft</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/yahoo-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/yahoo-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/yahoo-oauth" ><span class="devsite-nav-text" tooltip>Yahoo</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/game-center" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/game-center" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/game-center" ><span class="devsite-nav-text" tooltip>Game Center Sign-in</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/openid-connect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/openid-connect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/openid-connect" ><span class="devsite-nav-text" tooltip>OpenID Connect</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/single-sign-on" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/single-sign-on" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/single-sign-on" ><span class="devsite-nav-text" tooltip>Enabling cross-app authentication with shared Keychain</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/multi-factor" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/multi-factor" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/multi-factor" ><span class="devsite-nav-text" tooltip>SMS Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/totp-mfa" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/totp-mfa" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/totp-mfa" ><span class="devsite-nav-text" tooltip>TOTP Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/passing-state-in-email-actions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/passing-state-in-email-actions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/passing-state-in-email-actions" ><span class="devsite-nav-text" tooltip>Passing State in Email Actions</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/ios/errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/ios/errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/ios/errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Android</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/android/firebaseui" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/firebaseui" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/firebaseui" ><span class="devsite-nav-text" tooltip>Sign in with a pre-built UI</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/email-link-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/email-link-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/email-link-auth" ><span class="devsite-nav-text" tooltip>Email Link Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/email-link-migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/email-link-migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/email-link-migration" ><span class="devsite-nav-text" tooltip>Email Link Migration</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/google-signin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/google-signin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/google-signin" ><span class="devsite-nav-text" tooltip>Google</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/facebook-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/facebook-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/facebook-login" ><span class="devsite-nav-text" tooltip>Facebook Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/apple" ><span class="devsite-nav-text" tooltip>Sign in with Apple</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/twitter-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/twitter-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/twitter-login" ><span class="devsite-nav-text" tooltip>Twitter</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/github-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/github-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/github-auth" ><span class="devsite-nav-text" tooltip>GitHub</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/microsoft-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/microsoft-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/microsoft-oauth" ><span class="devsite-nav-text" tooltip>Microsoft</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/yahoo-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/yahoo-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/yahoo-oauth" ><span class="devsite-nav-text" tooltip>Yahoo</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/play-games" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/play-games" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/play-games" ><span class="devsite-nav-text" tooltip>Play Games Sign-in</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/openid-connect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/openid-connect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/openid-connect" ><span class="devsite-nav-text" tooltip>OpenID Connect</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/multi-factor" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/multi-factor" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/multi-factor" ><span class="devsite-nav-text" tooltip>SMS Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/totp-mfa" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/totp-mfa" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/totp-mfa" ><span class="devsite-nav-text" tooltip>TOTP Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/android/passing-state-in-email-actions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/android/passing-state-in-email-actions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/android/passing-state-in-email-actions" ><span class="devsite-nav-text" tooltip>Passing State in Email Actions</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Flutter</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/flutter/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/email-link-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/email-link-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/email-link-auth" ><span class="devsite-nav-text" tooltip>Email Link Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/federated-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/federated-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/federated-auth" ><span class="devsite-nav-text" tooltip>Federated Identity & Social</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/multi-factor" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/multi-factor" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/multi-factor" ><span class="devsite-nav-text" tooltip>Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/passing-state-in-email-actions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/passing-state-in-email-actions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/passing-state-in-email-actions" ><span class="devsite-nav-text" tooltip>Passing State in Email Actions</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/flutter/errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/flutter/errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/flutter/errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Web</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/web/firebaseui" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/firebaseui" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/firebaseui" ><span class="devsite-nav-text" tooltip>Sign in with a pre-built UI</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/email-link-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/email-link-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/email-link-auth" ><span class="devsite-nav-text" tooltip>Email Link Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/google-signin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/google-signin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/google-signin" ><span class="devsite-nav-text" tooltip>Google</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/facebook-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/facebook-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/facebook-login" ><span class="devsite-nav-text" tooltip>Facebook Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/apple" ><span class="devsite-nav-text" tooltip>Sign in with Apple</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/twitter-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/twitter-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/twitter-login" ><span class="devsite-nav-text" tooltip>Twitter</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/github-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/github-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/github-auth" ><span class="devsite-nav-text" tooltip>GitHub</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/microsoft-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/microsoft-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/microsoft-oauth" ><span class="devsite-nav-text" tooltip>Microsoft</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/yahoo-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/yahoo-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/yahoo-oauth" ><span class="devsite-nav-text" tooltip>Yahoo</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/openid-connect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/openid-connect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/openid-connect" ><span class="devsite-nav-text" tooltip>OpenID Connect</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/saml" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/saml" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/saml" ><span class="devsite-nav-text" tooltip>SAML</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/multi-factor" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/multi-factor" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/multi-factor" ><span class="devsite-nav-text" tooltip>SMS Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/totp-mfa" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/totp-mfa" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/totp-mfa" ><span class="devsite-nav-text" tooltip>TOTP Multi-factor Auth</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/custom-dependencies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/custom-dependencies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/custom-dependencies" ><span class="devsite-nav-text" tooltip>Customize Dependencies</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/cordova" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/cordova" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/cordova" ><span class="devsite-nav-text" tooltip>OAuth Sign-In for Cordova</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/chrome-extension" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/chrome-extension" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/chrome-extension" ><span class="devsite-nav-text" tooltip>Sign in users from a Chrome extension</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/auth-state-persistence" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/auth-state-persistence" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/auth-state-persistence" ><span class="devsite-nav-text" tooltip>Auth State Persistence</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/passing-state-in-email-actions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/passing-state-in-email-actions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/passing-state-in-email-actions" ><span class="devsite-nav-text" tooltip>Passing State in Email Actions</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/auth/web/service-worker-sessions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/service-worker-sessions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/service-worker-sessions" ><span class="devsite-nav-text" tooltip>Service Worker Sessions</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/auth/web/redirect-best-practices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/web/redirect-best-practices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/web/redirect-best-practices" ><span class="devsite-nav-text" tooltip>Best practices for signInWithRedirect flows</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/cpp/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/google-signin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/google-signin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/google-signin" ><span class="devsite-nav-text" tooltip>Google</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/auth/cpp/play-games" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/play-games" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/play-games" ><span class="devsite-nav-text" tooltip>Play Games Sign-in</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/github-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/github-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/github-auth" ><span class="devsite-nav-text" tooltip>GitHub</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/facebook-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/facebook-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/facebook-login" ><span class="devsite-nav-text" tooltip>Facebook Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/apple" ><span class="devsite-nav-text" tooltip>Sign in with Apple</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/twitter-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/twitter-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/twitter-login" ><span class="devsite-nav-text" tooltip>Twitter Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/microsoft-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/microsoft-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/microsoft-oauth" ><span class="devsite-nav-text" tooltip>Microsoft</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/yahoo-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/yahoo-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/yahoo-oauth" ><span class="devsite-nav-text" tooltip>Yahoo</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/cpp/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/cpp/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/cpp/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/unity/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/password-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/password-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/password-auth" ><span class="devsite-nav-text" tooltip>Password Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/google-signin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/google-signin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/google-signin" ><span class="devsite-nav-text" tooltip>Google</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/auth/unity/play-games" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/play-games" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/play-games" ><span class="devsite-nav-text" tooltip>Play Games Sign-in</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/github-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/github-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/github-auth" ><span class="devsite-nav-text" tooltip>GitHub Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/facebook-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/facebook-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/facebook-login" ><span class="devsite-nav-text" tooltip>Facebook Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/apple" ><span class="devsite-nav-text" tooltip>Sign in with Apple</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/twitter-login" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/twitter-login" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/twitter-login" ><span class="devsite-nav-text" tooltip>Twitter Login</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/microsoft-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/microsoft-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/microsoft-oauth" ><span class="devsite-nav-text" tooltip>Microsoft</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/yahoo-oauth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/yahoo-oauth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/yahoo-oauth" ><span class="devsite-nav-text" tooltip>Yahoo</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/phone-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/phone-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/phone-auth" ><span class="devsite-nav-text" tooltip>Phone Number</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/custom-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/custom-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/custom-auth" ><span class="devsite-nav-text" tooltip>Use a Custom Auth System</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/anonymous-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/anonymous-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/anonymous-auth" ><span class="devsite-nav-text" tooltip>Anonymous Authentication</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/unity/account-linking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/unity/account-linking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/unity/account-linking" ><span class="devsite-nav-text" tooltip>Link Multiple Auth Providers</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Admin</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/auth/admin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/manage-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/manage-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/manage-users" ><span class="devsite-nav-text" tooltip>Manage Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/import-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/import-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/import-users" ><span class="devsite-nav-text" tooltip>Import Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/create-custom-tokens" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/create-custom-tokens" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/create-custom-tokens" ><span class="devsite-nav-text" tooltip>Create Custom Tokens</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/verify-id-tokens" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/verify-id-tokens" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/verify-id-tokens" ><span class="devsite-nav-text" tooltip>Verify ID Tokens</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/manage-mfa-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/manage-mfa-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/manage-mfa-users" ><span class="devsite-nav-text" tooltip>Manage Multi-factor Users</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/manage-sessions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/manage-sessions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/manage-sessions" ><span class="devsite-nav-text" tooltip>Manage User Sessions</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/manage-cookies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/manage-cookies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/manage-cookies" ><span class="devsite-nav-text" tooltip>Manage Session Cookies</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/custom-claims" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/custom-claims" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/custom-claims" ><span class="devsite-nav-text" tooltip>Control Access with Custom Claims</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/email-action-links" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/email-action-links" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/email-action-links" ><span class="devsite-nav-text" tooltip>Generating Email Action Links</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/admin/errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/admin/errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/admin/errors" ><span class="devsite-nav-text" tooltip>Errors</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/auth/configure-oauth-rest-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/configure-oauth-rest-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/configure-oauth-rest-api" ><span class="devsite-nav-text" tooltip>Configure OAuth identity providers programmatically</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/custom-email-handler" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/custom-email-handler" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/custom-email-handler" ><span class="devsite-nav-text" tooltip>Customize the Email Action Handler</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/extend-with-blocking-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/extend-with-blocking-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/extend-with-blocking-functions" ><span class="devsite-nav-text" tooltip>Extend with blocking functions</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/email-custom-domain" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/email-custom-domain" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/email-custom-domain" ><span class="devsite-nav-text" tooltip>Email Custom Domains</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/case-studies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/case-studies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/case-studies" ><span class="devsite-nav-text" tooltip>Case Studies</span></a></li><li class="devsite-nav-item"><a href="/docs/auth/limits" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/auth/limits" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/auth/limits" ><span class="devsite-nav-text" tooltip>Usage Limits</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>App Check</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-check" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Get started</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Default providers</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-check/ios/devicecheck-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/ios/devicecheck-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/ios/devicecheck-provider" ><span class="devsite-nav-text" tooltip>iOS+ (DeviceCheck)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/ios/app-attest-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/ios/app-attest-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/ios/app-attest-provider" ><span class="devsite-nav-text" tooltip>iOS+ (App Attest)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/android/play-integrity-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/android/play-integrity-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/android/play-integrity-provider" ><span class="devsite-nav-text" tooltip>Android (Play Integrity)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/android/safetynet-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/android/safetynet-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/android/safetynet-provider" ><span class="devsite-nav-text" tooltip>Android (SafetyNet, deprecated)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/web/recaptcha-enterprise-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/web/recaptcha-enterprise-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/web/recaptcha-enterprise-provider" ><span class="devsite-nav-text" tooltip>Web (reCAPTCHA Enterprise)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/web/recaptcha-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/web/recaptcha-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/web/recaptcha-provider" ><span class="devsite-nav-text" tooltip>Web (reCAPTCHA v3)</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/flutter/default-providers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/flutter/default-providers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/flutter/default-providers" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/unity/default-providers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/unity/default-providers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/unity/default-providers" ><span class="devsite-nav-text" tooltip>Unity</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/cpp/default-providers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/cpp/default-providers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/cpp/default-providers" ><span class="devsite-nav-text" tooltip>C++</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Custom providers</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-check/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/custom-provider" ><span class="devsite-nav-text" tooltip>Server implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/ios/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/ios/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/ios/custom-provider" ><span class="devsite-nav-text" tooltip>iOS+ client implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/android/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/android/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/android/custom-provider" ><span class="devsite-nav-text" tooltip>Android client implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/web/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/web/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/web/custom-provider" ><span class="devsite-nav-text" tooltip>Web client implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/unity/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/unity/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/unity/custom-provider" ><span class="devsite-nav-text" tooltip>Unity client implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/cpp/custom-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/cpp/custom-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/cpp/custom-provider" ><span class="devsite-nav-text" tooltip>C++ client implementation</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Debug & test providers</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-check/ios/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/ios/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/ios/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider in iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/android/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/android/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/android/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider in Android</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/web/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/web/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/web/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider in web apps</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/flutter/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/flutter/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/flutter/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider with Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/unity/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/unity/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/unity/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider in Unity apps</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/cpp/debug-provider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/cpp/debug-provider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/cpp/debug-provider" ><span class="devsite-nav-text" tooltip>Use the debug provider with C++</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Monitor request metrics</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-check/monitor-metrics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/monitor-metrics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/monitor-metrics" ><span class="devsite-nav-text" tooltip>Standard Google services</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/monitor-functions-metrics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/monitor-functions-metrics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/monitor-functions-metrics" ><span class="devsite-nav-text" tooltip>Cloud Functions for Firebase</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Enable enforcement</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-check/enable-enforcement" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/enable-enforcement" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/enable-enforcement" ><span class="devsite-nav-text" tooltip>Standard Google services</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/cloud-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/cloud-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/cloud-functions" ><span class="devsite-nav-text" tooltip>Cloud Functions for Firebase</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Protect custom resources</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Send tokens from the client</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-check/ios/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/ios/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/ios/custom-resource" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/android/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/android/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/android/custom-resource" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/web/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/web/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/web/custom-resource" ><span class="devsite-nav-text" tooltip>Web</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/flutter/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/flutter/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/flutter/custom-resource" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/unity/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/unity/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/unity/custom-resource" ><span class="devsite-nav-text" tooltip>Unity</span></a></li><li class="devsite-nav-item"><a href="/docs/app-check/cpp/custom-resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/cpp/custom-resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/cpp/custom-resource" ><span class="devsite-nav-text" tooltip>C++</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/app-check/custom-resource-backend" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-check/custom-resource-backend" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-check/custom-resource-backend" ><span class="devsite-nav-text" tooltip>Verify tokens on the backend</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Data Connect</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/data-connect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/pricing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/pricing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/pricing" ><span class="devsite-nav-text" tooltip>Pricing and billing</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/quickstart" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/quickstart-local" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/quickstart-local" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/quickstart-local" ><span class="devsite-nav-text" tooltip>Get started (local development)</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Design schemas and operations</span> </div></li><li class="devsite-nav-item"><a href="/docs/data-connect/schemas-queries-mutations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/schemas-queries-mutations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/schemas-queries-mutations" ><span class="devsite-nav-text" tooltip>Understand GraphQL schemas, queries, and mutations</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/authorization-and-security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/authorization-and-security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/authorization-and-security" ><span class="devsite-nav-text" tooltip>Secure operations with authorization</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Develop and test with Data Connect</span> </div></li><li class="devsite-nav-item"><a href="/docs/data-connect/data-seeding-bulk-operations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/data-seeding-bulk-operations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/data-seeding-bulk-operations" ><span class="devsite-nav-text" tooltip>Seed test data and perform bulk operations</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/web-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/web-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/web-sdk" ><span class="devsite-nav-text" tooltip>Generate Web SDKs</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/android-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/android-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/android-sdk" ><span class="devsite-nav-text" tooltip>Generate Android SDKs</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/ios-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/ios-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/ios-sdk" ><span class="devsite-nav-text" tooltip>Generate iOS SDKs</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/flutter-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/flutter-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/flutter-sdk" ><span class="devsite-nav-text" tooltip>Generate Flutter SDKs</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/data-connect-emulator-suite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/data-connect-emulator-suite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/data-connect-emulator-suite" ><span class="devsite-nav-text" tooltip>Use the Data Connect emulator for CI/CD</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Manage Data Connect projects</span> </div></li><li class="devsite-nav-item"><a href="/docs/data-connect/manage-schemas-and-connectors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/manage-schemas-and-connectors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/manage-schemas-and-connectors" ><span class="devsite-nav-text" tooltip>Manage schemas and connectors</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/manage-services-and-databases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/manage-services-and-databases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/manage-services-and-databases" ><span class="devsite-nav-text" tooltip>Manage services and databases</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/admin-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/admin-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/admin-sdk" ><span class="devsite-nav-text" tooltip>Run privileged operations with the Firebase Admin SDK</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Data Connect solutions</span> </div></li><li class="devsite-nav-item"><a href="/docs/data-connect/solutions-vector-similarity-search" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/solutions-vector-similarity-search" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/solutions-vector-similarity-search" ><span class="devsite-nav-text" tooltip>Perform vector similarity search</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/ai-assistance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/ai-assistance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/ai-assistance" ><span class="devsite-nav-text" tooltip>Use AI assistance for queries and mutations</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>GraphQL language reference guides</span> </div></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/directive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/directive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/directive" ><span class="devsite-nav-text" tooltip>Directives reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/query" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/query" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/query" ><span class="devsite-nav-text" tooltip>Queries reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/mutation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/mutation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/mutation" ><span class="devsite-nav-text" tooltip>Mutations reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/object" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/object" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/object" ><span class="devsite-nav-text" tooltip>Objects reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/input_object" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/input_object" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/input_object" ><span class="devsite-nav-text" tooltip>Input objects reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/scalar" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/scalar" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/scalar" ><span class="devsite-nav-text" tooltip>Scalars reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/data-connect/gql/enum" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/data-connect/gql/enum" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/data-connect/gql/enum" ><span class="devsite-nav-text" tooltip>Enums reference</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Additional reference guides</span> </div></li><li class="devsite-nav-item"><a href="/docs/data-connect/cli-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/cli-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/cli-reference" ><span class="devsite-nav-text" tooltip>CLI reference</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/configuration-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/configuration-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/configuration-reference" ><span class="devsite-nav-text" tooltip>Configuration and security reference</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/cel-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/cel-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/cel-reference" ><span class="devsite-nav-text" tooltip>Common Expression Language (CEL) reference</span></a></li><li class="devsite-nav-item"><a href="/docs/data-connect/cloud-audit-logging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/data-connect/cloud-audit-logging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/data-connect/cloud-audit-logging" ><span class="devsite-nav-text" tooltip>Cloud Audit Logging reference</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Cloud Firestore</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/quickstart" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Understand Cloud Firestore</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/rtdb-vs-firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/rtdb-vs-firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/rtdb-vs-firestore" ><span class="devsite-nav-text" tooltip>Compare Cloud Firestore and Realtime Database</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/data-model" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/data-model" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/data-model" ><span class="devsite-nav-text" tooltip>Data model</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/data-types" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/data-types" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/data-types" ><span class="devsite-nav-text" tooltip>Data types</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/client/libraries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/client/libraries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/client/libraries" ><span class="devsite-nav-text" tooltip>SDKs and client libraries</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/index-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/index-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/index-overview" ><span class="devsite-nav-text" tooltip>Index types</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/locations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/locations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/locations" ><span class="devsite-nav-text" tooltip>Database locations</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/bundles" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/bundles" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/bundles" ><span class="devsite-nav-text" tooltip>Data bundles</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-databases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-databases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-databases" ><span class="devsite-nav-text" tooltip>Manage databases</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Add and manage data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/structure-data" ><span class="devsite-nav-text" tooltip>Structure data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/add-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/add-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/add-data" ><span class="devsite-nav-text" tooltip>Add data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/transactions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/transactions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/transactions" ><span class="devsite-nav-text" tooltip>Transactions and batched writes</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/transaction-data-contention" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/transaction-data-contention" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/transaction-data-contention" ><span class="devsite-nav-text" tooltip>Data contention in transaction</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/delete-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/delete-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/delete-data" ><span class="devsite-nav-text" tooltip>Delete data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/using-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/using-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/using-console" ><span class="devsite-nav-text" tooltip>Manage Cloud Firestore with the Firebase console</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/export-import" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/export-import" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/export-import" ><span class="devsite-nav-text" tooltip>Export and import data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/ttl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/ttl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/ttl" ><span class="devsite-nav-text" tooltip>Manage data retention with time-to-live policies</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/dataflow-connector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/dataflow-connector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/dataflow-connector" ><span class="devsite-nav-text" tooltip>Process data in bulk with Dataflow</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/move-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/move-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/move-data" ><span class="devsite-nav-text" tooltip>Move data between projects</span></a></li><li class="devsite-nav-item devsite-nav-preview"><a href="/docs/firestore/manage-data/bulk-delete" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/bulk-delete" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/bulk-delete" ><span class="devsite-nav-text" tooltip>Bulk delete data</span><span class="devsite-nav-icon material-icons" data-icon="preview" data-title="Preview" aria-hidden="true"></span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Read data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/query-data/get-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/get-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/get-data" ><span class="devsite-nav-text" tooltip>Get data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/listen" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/listen" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/listen" ><span class="devsite-nav-text" tooltip>Get real-time updates</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/queries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/queries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/queries" ><span class="devsite-nav-text" tooltip>Perform simple and compound queries</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/order-limit-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/order-limit-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/order-limit-data" ><span class="devsite-nav-text" tooltip>Order and limit data</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Query with range & inequality filters on multiple fields</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/query-data/multiple-range-fields" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/multiple-range-fields" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/multiple-range-fields" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/multiple-range-optimize-indexes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/multiple-range-optimize-indexes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/multiple-range-optimize-indexes" ><span class="devsite-nav-text" tooltip>Optimize your queries</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/aggregation-queries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/aggregation-queries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/aggregation-queries" ><span class="devsite-nav-text" tooltip>Summarize data with aggregation queries</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/query-cursors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/query-cursors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/query-cursors" ><span class="devsite-nav-text" tooltip>Paginate data with query cursors</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/manage-data/enable-offline" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/manage-data/enable-offline" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/manage-data/enable-offline" ><span class="devsite-nav-text" tooltip>Access data offline</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/vector-search" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/vector-search" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/vector-search" ><span class="devsite-nav-text" tooltip>Search with vector embeddings</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-data/indexing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-data/indexing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-data/indexing" ><span class="devsite-nav-text" tooltip>Manage indexes</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Secure and validate data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/security/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/rules-structure" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/rules-structure" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/rules-structure" ><span class="devsite-nav-text" tooltip>Structure Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/rules-conditions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/rules-conditions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/rules-conditions" ><span class="devsite-nav-text" tooltip>Writing conditions for Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/insecure-rules" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/insecure-rules" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/insecure-rules" ><span class="devsite-nav-text" tooltip>Fix insecure rules</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/test-rules-emulator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/test-rules-emulator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/test-rules-emulator" ><span class="devsite-nav-text" tooltip>Test your Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/rules-query" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/rules-query" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/rules-query" ><span class="devsite-nav-text" tooltip>Securely query data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/security/rules-fields" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/security/rules-fields" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/security/rules-fields" ><span class="devsite-nav-text" tooltip>Control access per field</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Solutions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/solutions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions using Firebase Extensions</span> </div></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/firestore/solutions/bigquery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/bigquery" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/bigquery" ><span class="devsite-nav-text" tooltip>Integrate with BigQuery</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/firestore/solutions/ai-chatbot" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/ai-chatbot" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/ai-chatbot" ><span class="devsite-nav-text" tooltip>Implement an AI-driven chatbot</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/firestore/solutions/enriched-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/enriched-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/enriched-text" ><span class="devsite-nav-text" tooltip>Enrich handling of text</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/firestore/solutions/enriched-media" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/enriched-media" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/enriched-media" ><span class="devsite-nav-text" tooltip>Enhance value of media</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions using guided custom implementations</span> </div></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/generative-ai-index" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/generative-ai-index" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/generative-ai-index" ><span class="devsite-nav-text" tooltip>Develop generative AI features</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/firestore-lite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/firestore-lite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/firestore-lite" ><span class="devsite-nav-text" tooltip>Firestore Lite Web SDK</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/aggregation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/aggregation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/aggregation" ><span class="devsite-nav-text" tooltip>Write-time aggregations</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/counters" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/counters" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/counters" ><span class="devsite-nav-text" tooltip>Distributed counters</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/search" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/search" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/search" ><span class="devsite-nav-text" tooltip>Full-text search</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/presence" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/presence" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/presence" ><span class="devsite-nav-text" tooltip>Build presence</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/role-based-access" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/role-based-access" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/role-based-access" ><span class="devsite-nav-text" tooltip>Secure data access for users and groups</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/delete-collections" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/delete-collections" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/delete-collections" ><span class="devsite-nav-text" tooltip>Delete data with a callable Cloud Function</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/schedule-export" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/schedule-export" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/schedule-export" ><span class="devsite-nav-text" tooltip>Schedule data exports</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/shard-timestamp" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/shard-timestamp" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/shard-timestamp" ><span class="devsite-nav-text" tooltip>Sharded timestamps</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/geoqueries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/geoqueries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/geoqueries" ><span class="devsite-nav-text" tooltip>Geo queries</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/serve-bundles" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/serve-bundles" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/serve-bundles" ><span class="devsite-nav-text" tooltip>Serve bundled Firestore content from a CDN</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Usage, limits, and pricing</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/quotas" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/quotas" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/quotas" ><span class="devsite-nav-text" tooltip>Usage and limits</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/monitor-usage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/monitor-usage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/monitor-usage" ><span class="devsite-nav-text" tooltip>Monitor usage</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/query-explain" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/query-explain" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/query-explain" ><span class="devsite-nav-text" tooltip>Explain query performance</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/reference/query-explain-report-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/reference/query-explain-report-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/reference/query-explain-report-reference" ><span class="devsite-nav-text" tooltip>Query Explain report reference</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/pricing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/pricing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/pricing" ><span class="devsite-nav-text" tooltip>Understand Cloud Firestore billing</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/billing-example" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/billing-example" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/billing-example" ><span class="devsite-nav-text" tooltip>Example Cloud Firestore costs</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/storage-size" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/storage-size" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/storage-size" ><span class="devsite-nav-text" tooltip>Understand storage size calculations</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Backups and point-in-time recovery</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/disaster-recovery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/disaster-recovery" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/disaster-recovery" ><span class="devsite-nav-text" tooltip>Disaster recovery planning</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Scheduled backups</span> </div></li><li class="devsite-nav-item"><a href="/docs/firestore/backups" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/backups" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/backups" ><span class="devsite-nav-text" tooltip>Create a backup schedule and restore data</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/restore-in-place" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/restore-in-place" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/restore-in-place" ><span class="devsite-nav-text" tooltip>Perform an in-place restore</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Point-in-time recovery (PITR)</span> </div></li><li class="devsite-nav-item"><a href="/docs/firestore/pitr" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/pitr" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/pitr" ><span class="devsite-nav-text" tooltip>PITR overview</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/use-pitr" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/use-pitr" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/use-pitr" ><span class="devsite-nav-text" tooltip>Work with PITR</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Techniques and best practices</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/best-practices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/best-practices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/best-practices" ><span class="devsite-nav-text" tooltip>Best practices for Cloud Firestore</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/solutions/swift-codable-data-mapping" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/solutions/swift-codable-data-mapping" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/solutions/swift-codable-data-mapping" ><span class="devsite-nav-text" tooltip>Map data with Swift Codable</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/understand-reads-writes-scale" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/understand-reads-writes-scale" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/understand-reads-writes-scale" ><span class="devsite-nav-text" tooltip>Understand reads and writes at scale</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/real-time_queries_at_scale" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/real-time_queries_at_scale" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/real-time_queries_at_scale" ><span class="devsite-nav-text" tooltip>Understand real-time queries at scale</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Cloud Firestore integrations</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/use-rest-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/use-rest-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/use-rest-api" ><span class="devsite-nav-text" tooltip>Use the Cloud Firestore REST API</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/firestore-for-rtdb" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/firestore-for-rtdb" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/firestore-for-rtdb" ><span class="devsite-nav-text" tooltip>Use Cloud Firestore and Realtime Database</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/extend-with-functions-2nd-gen" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/extend-with-functions-2nd-gen" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/extend-with-functions-2nd-gen" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions for Firebase (2nd gen)</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/library-integrations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/library-integrations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/library-integrations" ><span class="devsite-nav-text" tooltip>Third-party library integrations</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>API reference</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/reference/android/com/google/firebase/firestore/package-summary" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/android/com/google/firebase/firestore/package-summary" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/android/com/google/firebase/firestore/package-summary" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/swift/firebasefirestore/api/reference/Classes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/swift/firebasefirestore/api/reference/Classes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/swift/firebasefirestore/api/reference/Classes" ><span class="devsite-nav-text" tooltip>Swift</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/ios/firebasefirestore/api/reference/Classes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/ios/firebasefirestore/api/reference/Classes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/ios/firebasefirestore/api/reference/Classes" ><span class="devsite-nav-text" tooltip>Objective-C</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/js/firestore_" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/js/firestore_" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/js/firestore_" ><span class="devsite-nav-text" tooltip>Web</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://pub.dev/documentation/cloud_firestore/latest/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://pub.dev/documentation/cloud_firestore/latest/" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://pub.dev/documentation/cloud_firestore/latest/" ><span class="devsite-nav-text" tooltip>Flutter</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/reference/functions/firebase-functions.firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/functions/firebase-functions.firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/functions/firebase-functions.firestore" ><span class="devsite-nav-text" tooltip>Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="//googleapis.dev/nodejs/firestore/latest/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //googleapis.dev/nodejs/firestore/latest/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//googleapis.dev/nodejs/firestore/latest/" ><span class="devsite-nav-text" tooltip>Node.js</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/admin/java/reference/com/google/firebase/cloud/FirestoreClient" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/admin/java/reference/com/google/firebase/cloud/FirestoreClient" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/admin/java/reference/com/google/firebase/cloud/FirestoreClient" ><span class="devsite-nav-text" tooltip>Java</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/admin/python/firebase_admin.firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/admin/python/firebase_admin.firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/admin/python/firebase_admin.firestore" ><span class="devsite-nav-text" tooltip>Python</span></a></li><li class="devsite-nav-item"><a href="//godoc.org/cloud.google.com/go/firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //godoc.org/cloud.google.com/go/firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="//godoc.org/cloud.google.com/go/firestore" ><span class="devsite-nav-text" tooltip>Go</span></a></li><li class="devsite-nav-item"><a href="//googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Firestore/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Firestore/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Firestore/" ><span class="devsite-nav-text" tooltip>C#</span></a></li><li class="devsite-nav-item"><a href="//googleapis.github.io/google-cloud-php/#/docs/cloud-firestore/latest/firestore/readme" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //googleapis.github.io/google-cloud-php/#/docs/cloud-firestore/latest/firestore/readme" track-type="bookNav" track-name="click" track-metadata-eventdetail="//googleapis.github.io/google-cloud-php/#/docs/cloud-firestore/latest/firestore/readme" ><span class="devsite-nav-text" tooltip>PHP</span></a></li><li class="devsite-nav-item"><a href="//googleapis.github.io/google-cloud-ruby/docs/google-cloud-firestore/latest/Google/Firestore/V1beta1" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //googleapis.github.io/google-cloud-ruby/docs/google-cloud-firestore/latest/Google/Firestore/V1beta1" track-type="bookNav" track-name="click" track-metadata-eventdetail="//googleapis.github.io/google-cloud-ruby/docs/google-cloud-firestore/latest/Google/Firestore/V1beta1" ><span class="devsite-nav-text" tooltip>Ruby</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/cpp/namespace/firebase/firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/cpp/namespace/firebase/firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/cpp/namespace/firebase/firestore" ><span class="devsite-nav-text" tooltip>C++</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/unity/namespace/firebase/firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/unity/namespace/firebase/firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/unity/namespace/firebase/firestore" ><span class="devsite-nav-text" tooltip>Unity</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/reference/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/reference/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/reference/rest" ><span class="devsite-nav-text" tooltip>REST</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/reference/rpc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/reference/rpc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/reference/rpc" ><span class="devsite-nav-text" tooltip>RPC</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Samples</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/firestore/client/samples-ios" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/client/samples-ios" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/client/samples-ios" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/client/samples-android" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/client/samples-android" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/client/samples-android" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/firestore/client/samples-web" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/firestore/client/samples-web" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/firestore/client/samples-web" ><span class="devsite-nav-text" tooltip>Web</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Realtime Database</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rtdb-vs-firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rtdb-vs-firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rtdb-vs-firestore" ><span class="devsite-nav-text" tooltip>Choose a Database</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>iOS+</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/ios/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/ios/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/ios/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/ios/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/ios/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/ios/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/ios/read-and-write" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/ios/read-and-write" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/ios/read-and-write" ><span class="devsite-nav-text" tooltip>Read and Write Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/ios/lists-of-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/ios/lists-of-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/ios/lists-of-data" ><span class="devsite-nav-text" tooltip>Work with Lists of Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/ios/offline-capabilities" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/ios/offline-capabilities" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/ios/offline-capabilities" ><span class="devsite-nav-text" tooltip>Enable Offline Capabilities</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Android</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/android/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/android/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/android/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/android/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/android/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/android/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/android/read-and-write" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/android/read-and-write" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/android/read-and-write" ><span class="devsite-nav-text" tooltip>Read and Write Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/android/lists-of-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/android/lists-of-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/android/lists-of-data" ><span class="devsite-nav-text" tooltip>Work with Lists of Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/android/offline-capabilities" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/android/offline-capabilities" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/android/offline-capabilities" ><span class="devsite-nav-text" tooltip>Enable Offline Capabilities</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Web</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/web/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/web/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/web/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/web/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/web/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/web/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/web/read-and-write" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/web/read-and-write" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/web/read-and-write" ><span class="devsite-nav-text" tooltip>Read and Write Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/web/lists-of-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/web/lists-of-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/web/lists-of-data" ><span class="devsite-nav-text" tooltip>Work with Lists of Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/web/offline-capabilities" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/web/offline-capabilities" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/web/offline-capabilities" ><span class="devsite-nav-text" tooltip>Enable Offline Capabilities</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Flutter</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/flutter/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/flutter/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/flutter/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/flutter/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/flutter/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/flutter/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/flutter/read-and-write" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/flutter/read-and-write" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/flutter/read-and-write" ><span class="devsite-nav-text" tooltip>Read and Write Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/flutter/lists-of-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/flutter/lists-of-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/flutter/lists-of-data" ><span class="devsite-nav-text" tooltip>Work with Lists of Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/flutter/offline-capabilities" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/flutter/offline-capabilities" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/flutter/offline-capabilities" ><span class="devsite-nav-text" tooltip>Enable Offline Capabilities</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Admin</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/admin/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/admin/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/admin/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/admin/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/admin/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/admin/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/admin/save-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/admin/save-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/admin/save-data" ><span class="devsite-nav-text" tooltip>Save Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/admin/retrieve-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/admin/retrieve-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/admin/retrieve-data" ><span class="devsite-nav-text" tooltip>Retrieve Data</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>REST</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/rest/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rest/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rest/save-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/save-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/save-data" ><span class="devsite-nav-text" tooltip>Save Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rest/retrieve-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/retrieve-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/retrieve-data" ><span class="devsite-nav-text" tooltip>Retrieve Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rest/auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/auth" ><span class="devsite-nav-text" tooltip>Authenticate REST Requests</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/cpp/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/cpp/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/cpp/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/cpp/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/cpp/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/cpp/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/cpp/save-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/cpp/save-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/cpp/save-data" ><span class="devsite-nav-text" tooltip>Save Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/cpp/retrieve-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/cpp/retrieve-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/cpp/retrieve-data" ><span class="devsite-nav-text" tooltip>Retrieve Data</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/unity/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/unity/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/unity/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/unity/structure-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/unity/structure-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/unity/structure-data" ><span class="devsite-nav-text" tooltip>Structure Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/unity/save-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/unity/save-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/unity/save-data" ><span class="devsite-nav-text" tooltip>Save Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/unity/retrieve-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/unity/retrieve-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/unity/retrieve-data" ><span class="devsite-nav-text" tooltip>Retrieve Data</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Security & Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/security" ><span class="devsite-nav-text" tooltip>Understand Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/database/security/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/security/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/security/get-started" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/database/security/core-syntax" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/security/core-syntax" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/security/core-syntax" ><span class="devsite-nav-text" tooltip>Structure Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/database/security/rules-conditions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/security/rules-conditions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/security/rules-conditions" ><span class="devsite-nav-text" tooltip>Write Conditions for Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/database/security/indexing-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/security/indexing-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/security/indexing-data" ><span class="devsite-nav-text" tooltip>Index Data</span></a></li><li class="devsite-nav-item"><a href="/docs/database/rest/app-management" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/rest/app-management" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/rest/app-management" ><span class="devsite-nav-text" tooltip>Manage Rules via REST</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Usage and Performance</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/database/usage/billing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/billing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/billing" ><span class="devsite-nav-text" tooltip>Understand Billing</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/limits" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/limits" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/limits" ><span class="devsite-nav-text" tooltip>Realtime Database Limits</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/monitor-usage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/monitor-usage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/monitor-usage" ><span class="devsite-nav-text" tooltip>Monitor Database Usage</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/monitor-performance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/monitor-performance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/monitor-performance" ><span class="devsite-nav-text" tooltip>Monitor Database Performance</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/sharding" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/sharding" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/sharding" ><span class="devsite-nav-text" tooltip>Scale with Multiple Databases</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/profile" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/profile" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/profile" ><span class="devsite-nav-text" tooltip>Profile Your Database</span></a></li><li class="devsite-nav-item"><a href="/docs/database/usage/optimize" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/usage/optimize" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/usage/optimize" ><span class="devsite-nav-text" tooltip>Optimize Database Performance</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/database/locations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/locations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/locations" ><span class="devsite-nav-text" tooltip>Locations</span></a></li><li class="devsite-nav-item"><a href="/docs/database/backups" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/backups" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/backups" ><span class="devsite-nav-text" tooltip>Automated Backups</span></a></li><li class="devsite-nav-item"><a href="/docs/database/manage-data-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/manage-data-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/manage-data-console" ><span class="devsite-nav-text" tooltip>View & edit data in console</span></a></li><li class="devsite-nav-item"><a href="/docs/database/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/database/video-series" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/database/video-series" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/database/video-series" ><span class="devsite-nav-text" tooltip>Video series: Firebase for SQL Developers</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Storage</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>iOS+</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/ios/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/list-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/list-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/list-files" ><span class="devsite-nav-text" tooltip>List Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/ios/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/ios/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/ios/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Android</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/android/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/list-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/list-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/list-files" ><span class="devsite-nav-text" tooltip>List Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/android/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/android/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/android/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Web</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/web/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/list-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/list-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/list-files" ><span class="devsite-nav-text" tooltip>List Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/web/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/web/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/web/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Flutter</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/flutter/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/list-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/list-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/list-files" ><span class="devsite-nav-text" tooltip>List Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/flutter/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/flutter/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/flutter/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Admin</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/admin/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/admin/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/admin/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/cpp/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/cpp/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/cpp/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/cpp/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/unity/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/start" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/create-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/create-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/create-reference" ><span class="devsite-nav-text" tooltip>Create a Reference</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/upload-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/upload-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/upload-files" ><span class="devsite-nav-text" tooltip>Upload Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/download-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/download-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/download-files" ><span class="devsite-nav-text" tooltip>Download Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/file-metadata" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/file-metadata" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/file-metadata" ><span class="devsite-nav-text" tooltip>Use File Metadata</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/delete-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/delete-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/delete-files" ><span class="devsite-nav-text" tooltip>Delete Files</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/unity/handle-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/unity/handle-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/unity/handle-errors" ><span class="devsite-nav-text" tooltip>Handle Errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Security & Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storage/security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/security" ><span class="devsite-nav-text" tooltip>Understand Security</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/security/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/security/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/security/get-started" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/security/core-syntax" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/security/core-syntax" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/security/core-syntax" ><span class="devsite-nav-text" tooltip>Structure Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/security/rules-conditions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/security/rules-conditions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/security/rules-conditions" ><span class="devsite-nav-text" tooltip>Write Conditions for Security Rules</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/storage/locations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/locations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/locations" ><span class="devsite-nav-text" tooltip>Locations</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/monitor-storage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/monitor-storage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/monitor-storage" ><span class="devsite-nav-text" tooltip>Monitor activity</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/manage-stored-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/manage-stored-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/manage-stored-files" ><span class="devsite-nav-text" tooltip>Manage stored files in console</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/gcp-integration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/gcp-integration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/gcp-integration" ><span class="devsite-nav-text" tooltip>Integrate with Google Cloud</span></a></li><li class="devsite-nav-item"><a href="/docs/storage/faqs-storage-changes-announced-sept-2024" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storage/faqs-storage-changes-announced-sept-2024" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storage/faqs-storage-changes-announced-sept-2024" ><span class="devsite-nav-text" tooltip>FAQs about pricing plan changes</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Security Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/rules" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Understand Security Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/rules/rules-language" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/rules-language" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/rules-language" ><span class="devsite-nav-text" tooltip>Security Rules language</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/rules-behavior" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/rules-behavior" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/rules-behavior" ><span class="devsite-nav-text" tooltip>How Security Rules work</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/rules-and-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/rules-and-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/rules-and-auth" ><span class="devsite-nav-text" tooltip>Security Rules and Firebase Authentication</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Write Security Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/rules/basics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/basics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/basics" ><span class="devsite-nav-text" tooltip>Basic Security Rules</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/insecure-rules" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/insecure-rules" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/insecure-rules" ><span class="devsite-nav-text" tooltip>Avoid insecure rules</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/data-validation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/data-validation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/data-validation" ><span class="devsite-nav-text" tooltip>Data validation</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Test Security Rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/rules/emulator-setup" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/emulator-setup" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/emulator-setup" ><span class="devsite-nav-text" tooltip>Set up the emulator</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/unit-tests" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/unit-tests" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/unit-tests" ><span class="devsite-nav-text" tooltip>Build unit tests</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/emulator-reports" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/emulator-reports" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/emulator-reports" ><span class="devsite-nav-text" tooltip>Generate test reports</span></a></li><li class="devsite-nav-item"><a href="/docs/rules/simulator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/simulator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/simulator" ><span class="devsite-nav-text" tooltip>Quickly validate Security Rules</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/rules/manage-deploy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/rules/manage-deploy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/rules/manage-deploy" ><span class="devsite-nav-text" tooltip>Manage and deploy Security Rules</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>App Hosting</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-hosting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Discover</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-hosting/about-app-hosting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/about-app-hosting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/about-app-hosting" ><span class="devsite-nav-text" tooltip>How App Hosting works</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/build" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/build" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/build" ><span class="devsite-nav-text" tooltip>The App Hosting build process</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/costs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/costs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/costs" ><span class="devsite-nav-text" tooltip>App Hosting costs</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/product-comparison" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/product-comparison" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/product-comparison" ><span class="devsite-nav-text" tooltip>Related serverless solutions</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Get started</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-hosting/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/get-started" ><span class="devsite-nav-text" tooltip>Deploy a basic app</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/multiple-environments" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/multiple-environments" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/multiple-environments" ><span class="devsite-nav-text" tooltip>Deploy multiple environments</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/monorepos" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/monorepos" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/monorepos" ><span class="devsite-nav-text" tooltip>Deploy a monorepo app</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Develop</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-hosting/configure" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/configure" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/configure" ><span class="devsite-nav-text" tooltip>Configure and manage backends</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/custom-domain" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/custom-domain" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/custom-domain" ><span class="devsite-nav-text" tooltip>Connect a custom domain</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/apphosting/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/apphosting/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/apphosting/rest" ><span class="devsite-nav-text" tooltip>API Reference</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Monitor, log and debug</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-hosting/rollouts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/rollouts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/rollouts" ><span class="devsite-nav-text" tooltip>Manage rollouts and releases</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/emulate" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/emulate" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/emulate" ><span class="devsite-nav-text" tooltip>Test your app locally</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/logging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/logging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/logging" ><span class="devsite-nav-text" tooltip>Write and view logs</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/troubleshooting" ><span class="devsite-nav-text" tooltip>FAQ and troubleshooting</span></a></li><li class="devsite-nav-item"><a href="/docs/app-hosting/cloud-audit-logging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-hosting/cloud-audit-logging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-hosting/cloud-audit-logging" ><span class="devsite-nav-text" tooltip>Cloud Audit Logging</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Hosting</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/hosting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/use-cases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/use-cases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/use-cases" ><span class="devsite-nav-text" tooltip>Explore use cases</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/quickstart" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/hosting/test-preview-deploy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/test-preview-deploy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/test-preview-deploy" ><span class="devsite-nav-text" tooltip>Test, preview, then deploy</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/hosting/github-integration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/github-integration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/github-integration" ><span class="devsite-nav-text" tooltip>Deploy via GitHub pull requests</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/multisites" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/multisites" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/multisites" ><span class="devsite-nav-text" tooltip>Share project resources across multiple sites</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/custom-domain" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/custom-domain" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/custom-domain" ><span class="devsite-nav-text" tooltip>Connect a custom domain</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/full-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/full-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/full-config" ><span class="devsite-nav-text" tooltip>Configure hosting behavior</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/i18n-rewrites" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/i18n-rewrites" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/i18n-rewrites" ><span class="devsite-nav-text" tooltip>Configure i18n rewrites</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/reserved-urls" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/reserved-urls" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/reserved-urls" ><span class="devsite-nav-text" tooltip>Add SDKs using reserved URLs</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Serve dynamic content and host microservices</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/hosting/serverless-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/serverless-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/serverless-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/functions" ><span class="devsite-nav-text" tooltip>Use Cloud Functions for Firebase</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/cloud-run" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/cloud-run" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/cloud-run" ><span class="devsite-nav-text" tooltip>Use Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/manage-cache" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/manage-cache" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/manage-cache" ><span class="devsite-nav-text" tooltip>Manage cache behavior</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Integrate web frameworks</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/hosting/frameworks/frameworks-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/frameworks/frameworks-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/frameworks/frameworks-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/frameworks/angular" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/frameworks/angular" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/frameworks/angular" ><span class="devsite-nav-text" tooltip>Integrate Angular Universal</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/frameworks/nextjs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/frameworks/nextjs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/frameworks/nextjs" ><span class="devsite-nav-text" tooltip>Integrate Next.js</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/frameworks/flutter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/frameworks/flutter" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/frameworks/flutter" ><span class="devsite-nav-text" tooltip>Integrate Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/frameworks/express" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/frameworks/express" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/frameworks/express" ><span class="devsite-nav-text" tooltip>Integrate other frameworks with Express.js</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/hosting/manage-hosting-resources" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/manage-hosting-resources" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/manage-hosting-resources" ><span class="devsite-nav-text" tooltip>Manage live & preview channels, releases, and versions</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/hosting/web-request-logs-and-metrics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/web-request-logs-and-metrics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/web-request-logs-and-metrics" ><span class="devsite-nav-text" tooltip>Monitor web request data with Cloud Logging</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/usage-quotas-pricing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/usage-quotas-pricing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/usage-quotas-pricing" ><span class="devsite-nav-text" tooltip>Usage, quotas, and pricing</span></a></li><li class="devsite-nav-item"><a href="/docs/hosting/api-deploy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/hosting/api-deploy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/hosting/api-deploy" ><span class="devsite-nav-text" tooltip>Deploy using the REST API</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Cloud Functions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/version-comparison" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/version-comparison" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/version-comparison" ><span class="devsite-nav-text" tooltip>1st and 2nd gen version comparison</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/use-cases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/use-cases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/use-cases" ><span class="devsite-nav-text" tooltip>Explore use cases</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/2nd-gen-upgrade" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/2nd-gen-upgrade" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/2nd-gen-upgrade" ><span class="devsite-nav-text" tooltip>Upgrade to 2nd gen</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Call functions directly</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions/callable" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/callable" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/callable" ><span class="devsite-nav-text" tooltip>Call functions from your app</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/oncallgenkit" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/oncallgenkit" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/oncallgenkit" ><span class="devsite-nav-text" tooltip>Invoke Genkit flows from your app</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/http-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/http-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/http-events" ><span class="devsite-nav-text" tooltip>Call functions via HTTP requests</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/task-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/task-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/task-functions" ><span class="devsite-nav-text" tooltip>Enqueue functions with Cloud Tasks</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/schedule-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/schedule-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/schedule-functions" ><span class="devsite-nav-text" tooltip>Run functions on a schedule</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Trigger background functions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions/alert-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/alert-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/alert-events" ><span class="devsite-nav-text" tooltip>Firebase Alert triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/custom-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/custom-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/custom-events" ><span class="devsite-nav-text" tooltip>Custom event/extension triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/auth-blocking-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/auth-blocking-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/auth-blocking-events" ><span class="devsite-nav-text" tooltip>Blocking Auth triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/auth-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/auth-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/auth-events" ><span class="devsite-nav-text" tooltip>Authentication triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/analytics-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/analytics-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/analytics-events" ><span class="devsite-nav-text" tooltip>Analytics triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/firestore-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/firestore-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/firestore-events" ><span class="devsite-nav-text" tooltip>Cloud Firestore triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/database-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/database-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/database-events" ><span class="devsite-nav-text" tooltip>Realtime Database triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/rc-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/rc-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/rc-events" ><span class="devsite-nav-text" tooltip>Remote Config triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/gcp-storage-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/gcp-storage-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/gcp-storage-events" ><span class="devsite-nav-text" tooltip>Cloud Storage triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/pubsub-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/pubsub-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/pubsub-events" ><span class="devsite-nav-text" tooltip>Pub/Sub triggers</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/test-lab-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/test-lab-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/test-lab-events" ><span class="devsite-nav-text" tooltip>Test Lab triggers</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Write functions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions/manage-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/manage-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/manage-functions" ><span class="devsite-nav-text" tooltip>Manage deployment and runtime options</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/typescript" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/typescript" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/typescript" ><span class="devsite-nav-text" tooltip>Write functions in TypeScript</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/terminate-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/terminate-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/terminate-functions" ><span class="devsite-nav-text" tooltip>Sync, async, and promises</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/retries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/retries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/retries" ><span class="devsite-nav-text" tooltip>Retry asynchronous functions</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/config-env" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/config-env" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/config-env" ><span class="devsite-nav-text" tooltip>Configure your environment</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/organize-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/organize-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/organize-functions" ><span class="devsite-nav-text" tooltip>Organize functions</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/handle-dependencies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/handle-dependencies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/handle-dependencies" ><span class="devsite-nav-text" tooltip>Handling dependencies</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/networking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/networking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/networking" ><span class="devsite-nav-text" tooltip>Optimizing networking</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/tips" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/tips" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/tips" ><span class="devsite-nav-text" tooltip>Tips & tricks</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Test functions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions/local-emulator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/local-emulator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/local-emulator" ><span class="devsite-nav-text" tooltip>Run functions locally</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/unit-testing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/unit-testing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/unit-testing" ><span class="devsite-nav-text" tooltip>Unit testing functions</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/local-shell" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/local-shell" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/local-shell" ><span class="devsite-nav-text" tooltip>Test functions interactively</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Monitor functions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/functions/writing-and-viewing-logs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/writing-and-viewing-logs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/writing-and-viewing-logs" ><span class="devsite-nav-text" tooltip>Write and view logs</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/reporting-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/reporting-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/reporting-errors" ><span class="devsite-nav-text" tooltip>Report errors</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>API Reference</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/reference/functions/2nd-gen/node/firebase-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/functions/2nd-gen/node/firebase-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/functions/2nd-gen/node/firebase-functions" ><span class="devsite-nav-text" tooltip>Node.js 2nd gen</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/functions/firebase-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/functions/firebase-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/functions/firebase-functions" ><span class="devsite-nav-text" tooltip>Node.js 1st gen</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/functions/test/test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/functions/test/test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/functions/test/test" ><span class="devsite-nav-text" tooltip>Node.js Test SDK</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/functions/2nd-gen/python" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/functions/2nd-gen/python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/functions/2nd-gen/python" ><span class="devsite-nav-text" tooltip>Python</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/callable-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/callable-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/callable-reference" ><span class="devsite-nav-text" tooltip>Protocol specification for https.onCall</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/functions/functions-and-firebase" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/functions-and-firebase" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/functions-and-firebase" ><span class="devsite-nav-text" tooltip>Cloud Run functions and Firebase</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/locations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/locations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/locations" ><span class="devsite-nav-text" tooltip>Cloud Functions locations</span></a></li><li class="devsite-nav-item"><a href="/docs/functions/quotas" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/functions/quotas" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/functions/quotas" ><span class="devsite-nav-text" tooltip>Quotas and limits</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Extensions</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/extensions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/samples" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/samples" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/samples" ><span class="devsite-nav-text" tooltip>Use case examples</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Use an extension in your project</span> </div></li><li class="devsite-nav-item"><a href="/docs/extensions/overview-use-extensions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/overview-use-extensions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/overview-use-extensions" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/install-extensions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/install-extensions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/install-extensions" ><span class="devsite-nav-text" tooltip>Install an extension</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/manage-installed-extensions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/manage-installed-extensions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/manage-installed-extensions" ><span class="devsite-nav-text" tooltip>Manage installed extensions</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/permissions-granted-to-extension" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/permissions-granted-to-extension" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/permissions-granted-to-extension" ><span class="devsite-nav-text" tooltip>Permissions granted to an extension</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/manifest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/manifest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/manifest" ><span class="devsite-nav-text" tooltip>Manage configurations with manifests</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Extensions by Firebase</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Trigger Email</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/extensions/official/firestore-send-email" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/firestore-send-email" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/firestore-send-email" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/official/firestore-send-email/templates" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/firestore-send-email/templates" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/firestore-send-email/templates" ><span class="devsite-nav-text" tooltip>Use Handlebars templates</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/official/firestore-send-email/delivery-status" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/firestore-send-email/delivery-status" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/firestore-send-email/delivery-status" ><span class="devsite-nav-text" tooltip>Manage delivery status</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Delete User Data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/extensions/official/delete-user-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/delete-user-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/delete-user-data" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Firestore Bundle Builder</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/extensions/official/firestore-bundle-builder" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/firestore-bundle-builder" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/firestore-bundle-builder" ><span class="devsite-nav-text" tooltip>Get Started</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/official/firestore-bundle-builder/reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/official/firestore-bundle-builder/reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/official/firestore-bundle-builder/reference" ><span class="devsite-nav-text" tooltip>Reference</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/storage-resize-images#resize-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/storage-resize-images#resize-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/storage-resize-images#resize-images" ><span class="devsite-nav-text" tooltip>Resize Images</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/firestore-bigquery-export#export-collections-to-bigquery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/firestore-bigquery-export#export-collections-to-bigquery" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/firestore-bigquery-export#export-collections-to-bigquery" ><span class="devsite-nav-text" tooltip>Export Collections to BigQuery</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/firestore-translate-text#translate-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/firestore-translate-text#translate-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/firestore-translate-text#translate-text" ><span class="devsite-nav-text" tooltip>Translate Text</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/firestore-counter#distributed-counter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/firestore-counter#distributed-counter" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/firestore-counter#distributed-counter" ><span class="devsite-nav-text" tooltip>Distributed Counter</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/firestore-shorten-urls-bitly#shorten-urls" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/firestore-shorten-urls-bitly#shorten-urls" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/firestore-shorten-urls-bitly#shorten-urls" ><span class="devsite-nav-text" tooltip>Shorten URLs</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/firebase/extensions/tree/master/rtdb-limit-child-nodes#limit-child-nodes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/firebase/extensions/tree/master/rtdb-limit-child-nodes#limit-child-nodes" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/firebase/extensions/tree/master/rtdb-limit-child-nodes#limit-child-nodes" ><span class="devsite-nav-text" tooltip>Limit Child Nodes</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Build & publish extensions</span> </div></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/functions" ><span class="devsite-nav-text" tooltip>Write functions</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/parameters" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/parameters" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/parameters" ><span class="devsite-nav-text" tooltip>Set up parameters</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/lifecycle-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/lifecycle-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/lifecycle-events" ><span class="devsite-nav-text" tooltip>Handle lifecycle events</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/user-hooks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/user-hooks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/user-hooks" ><span class="devsite-nav-text" tooltip>Add user hooks</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/access" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/access" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/access" ><span class="devsite-nav-text" tooltip>Set up appropriate access</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/user-documentation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/user-documentation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/user-documentation" ><span class="devsite-nav-text" tooltip>Create user documentation</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/register" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/register" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/register" ><span class="devsite-nav-text" tooltip>Register as a publisher</span></a></li><li class="devsite-nav-item"><a href="/docs/extensions/publishers/upload-and-publish" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/publishers/upload-and-publish" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/publishers/upload-and-publish" ><span class="devsite-nav-text" tooltip>Publish an extension</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/extensions/reference/extension-yaml" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/extensions/reference/extension-yaml" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/extensions/reference/extension-yaml" ><span class="devsite-nav-text" tooltip>Reference for extension.yaml</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/terms/extensions/publisher" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /terms/extensions/publisher" track-type="bookNav" track-name="click" track-metadata-eventdetail="/terms/extensions/publisher" ><span class="devsite-nav-text" tooltip>Firebase Extensions Publisher Agreement</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>BUILD WITH AI</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Vertex AI in Firebase (Gemini API)</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/vertex-ai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Learn about the API & models</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/gemini-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/gemini-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/gemini-api" ><span class="devsite-nav-text" tooltip>Gemini API</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/gemini-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/gemini-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/gemini-models" ><span class="devsite-nav-text" tooltip>Gemini models</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/input-file-requirements" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/input-file-requirements" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/input-file-requirements" ><span class="devsite-nav-text" tooltip>Supported file types & requirements</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Use capabilities of the SDKs</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/text-gen-from-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/text-gen-from-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/text-gen-from-text" ><span class="devsite-nav-text" tooltip>Generate text (text-only input)</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/text-gen-from-multimodal" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/text-gen-from-multimodal" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/text-gen-from-multimodal" ><span class="devsite-nav-text" tooltip>Generate text (multimodal input)</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/structured-output" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/structured-output" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/structured-output" ><span class="devsite-nav-text" tooltip>Generate structured output (JSON)</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/chat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/chat" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/chat" ><span class="devsite-nav-text" tooltip>Multi-turn chat</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/function-calling" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/function-calling" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/function-calling" ><span class="devsite-nav-text" tooltip>Function calling</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/count-tokens" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/count-tokens" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/count-tokens" ><span class="devsite-nav-text" tooltip>Count tokens & billable characters</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/ref-docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/ref-docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/ref-docs" ><span class="devsite-nav-text" tooltip>SDK reference docs</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Control content generation</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/control-content-gen" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/control-content-gen" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/control-content-gen" ><span class="devsite-nav-text" tooltip>Overview of options</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/prompt-design" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/prompt-design" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/prompt-design" ><span class="devsite-nav-text" tooltip>Prompt design</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/model-parameters" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/model-parameters" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/model-parameters" ><span class="devsite-nav-text" tooltip>Model parameters</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/safety-settings" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/safety-settings" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/safety-settings" ><span class="devsite-nav-text" tooltip>Safety settings</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/system-instructions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/system-instructions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/system-instructions" ><span class="devsite-nav-text" tooltip>System instructions</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Get ready for production</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/production-checklist" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/production-checklist" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/production-checklist" ><span class="devsite-nav-text" tooltip>Production checklist</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/app-check" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/app-check" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/app-check" ><span class="devsite-nav-text" tooltip>Prevent API abuse with App Check</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/locations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/locations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/locations" ><span class="devsite-nav-text" tooltip>Set a location</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/monitoring" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/monitoring" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/monitoring" ><span class="devsite-nav-text" tooltip>Monitor costs, usage, & metrics</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/pricing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/pricing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/pricing" ><span class="devsite-nav-text" tooltip>Pricing</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/quotas" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/quotas" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/quotas" ><span class="devsite-nav-text" tooltip>Quotas</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/solutions/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/solutions/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/solutions/overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/solutions/cloud-storage" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/solutions/cloud-storage" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/solutions/cloud-storage" ><span class="devsite-nav-text" tooltip>Include large files in requests with Cloud Storage</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/solutions/remote-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/solutions/remote-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/solutions/remote-config" ><span class="devsite-nav-text" tooltip>Dynamically update your app with Remote Config</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Additional information</span> </div></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/migrate-to-vertex-ai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/migrate-to-vertex-ai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/migrate-to-vertex-ai" ><span class="devsite-nav-text" tooltip>Migrate from Google AI to Vertex AI</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/migrate-to-ga" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/migrate-to-ga" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/migrate-to-ga" ><span class="devsite-nav-text" tooltip>Migrate to GA version of Vertex AI in Firebase</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/data-governance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/data-governance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/data-governance" ><span class="devsite-nav-text" tooltip>Data governance & Responsible AI</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/faq-and-troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/faq-and-troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/faq-and-troubleshooting" ><span class="devsite-nav-text" tooltip>FAQ and troubleshooting</span></a></li><li class="devsite-nav-item"><a href="/docs/vertex-ai/feedback" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/vertex-ai/feedback" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/vertex-ai/feedback" ><span class="devsite-nav-text" tooltip>Give feedback</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Genkit</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/genkit" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/migrating-from-0.9" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/migrating-from-0.9" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/migrating-from-0.9" ><span class="devsite-nav-text" tooltip>Migrate from Genkit 0.9 to 1.0</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/api-stability" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/api-stability" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/api-stability" ><span class="devsite-nav-text" tooltip>API Stability Channels</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/devtools" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/devtools" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/devtools" ><span class="devsite-nav-text" tooltip>Developer tools</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>API reference</span> </div></li><li class="devsite-nav-item"><a href="https://js.api.genkit.dev/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://js.api.genkit.dev/" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://js.api.genkit.dev/" ><span class="devsite-nav-text" tooltip>Genkit JS API reference</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Codelabs</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/codelabs/codelab-chat-with-a-pdf" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/codelabs/codelab-chat-with-a-pdf" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/codelabs/codelab-chat-with-a-pdf" ><span class="devsite-nav-text" tooltip>Chat with a PDF file</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Building AI workflows</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/models" ><span class="devsite-nav-text" tooltip>Generating content</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/context" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/context" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/context" ><span class="devsite-nav-text" tooltip>Passing information through context</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/flows" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/flows" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/flows" ><span class="devsite-nav-text" tooltip>Creating flows</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/dotprompt" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/dotprompt" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/dotprompt" ><span class="devsite-nav-text" tooltip>Managing prompts with Dotprompt</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/chat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/chat" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/chat" ><span class="devsite-nav-text" tooltip>Persistent chat sessions</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Tools</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/genkit/tool-calling" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/tool-calling" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/tool-calling" ><span class="devsite-nav-text" tooltip>Tool calling</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/interrupts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/interrupts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/interrupts" ><span class="devsite-nav-text" tooltip>Pause generation using interrupts</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/genkit/rag" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/rag" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/rag" ><span class="devsite-nav-text" tooltip>Retrieval-augmented generation (RAG)</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/multi-agent" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/multi-agent" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/multi-agent" ><span class="devsite-nav-text" tooltip>Multi-agent systems</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/evaluation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/evaluation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/evaluation" ><span class="devsite-nav-text" tooltip>Evaluation</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/local-observability" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/local-observability" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/local-observability" ><span class="devsite-nav-text" tooltip>Observe local metrics</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/errors/types" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/errors/types" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/errors/types" ><span class="devsite-nav-text" tooltip>Error Types</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Deploying AI workflows</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/firebase" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/firebase" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/firebase" ><span class="devsite-nav-text" tooltip>Deploy with Firebase</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/cloud-run" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/cloud-run" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/cloud-run" ><span class="devsite-nav-text" tooltip>Deploy with Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/deploy-node" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/deploy-node" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/deploy-node" ><span class="devsite-nav-text" tooltip>Deploy to any Node.js platform</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/auth" ><span class="devsite-nav-text" tooltip>Authorization and integrity</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Observing AI workflows</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/observability/getting-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/observability/getting-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/observability/getting-started" ><span class="devsite-nav-text" tooltip>Getting Started</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/observability/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/observability/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/observability/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Writing plugins</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/plugin-authoring" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugin-authoring" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugin-authoring" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugin-authoring-evaluator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugin-authoring-evaluator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugin-authoring-evaluator" ><span class="devsite-nav-text" tooltip>Writing an Evaluator Plugin</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Official plugins</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/google-genai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/google-genai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/google-genai" ><span class="devsite-nav-text" tooltip>Google AI for Developers</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/vertex-ai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/vertex-ai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/vertex-ai" ><span class="devsite-nav-text" tooltip>Google Cloud Vertex AI</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/ollama" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/ollama" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/ollama" ><span class="devsite-nav-text" tooltip>Ollama</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/chroma" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/chroma" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/chroma" ><span class="devsite-nav-text" tooltip>Chroma DB</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/pinecone" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/pinecone" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/pinecone" ><span class="devsite-nav-text" tooltip>Pinecone</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/templates/pgvector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/templates/pgvector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/templates/pgvector" ><span class="devsite-nav-text" tooltip>pgvector (code template)</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/firebase" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/firebase" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/firebase" ><span class="devsite-nav-text" tooltip>Firebase</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit/plugins/google-cloud" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/plugins/google-cloud" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/plugins/google-cloud" ><span class="devsite-nav-text" tooltip>Google Cloud</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/genkit/nextjs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/nextjs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/nextjs" ><span class="devsite-nav-text" tooltip>Using Genkit with Next.js</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/genkit/migrating-from-0.5" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/migrating-from-0.5" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/migrating-from-0.5" ><span class="devsite-nav-text" tooltip>Migrate from Genkit 0.5 to 0.9</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/genkit/feedback" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit/feedback" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit/feedback" ><span class="devsite-nav-text" tooltip>Connect with us</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-alpha"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Genkit (Go alpha)</span><span class="devsite-nav-icon material-icons" data-icon="alpha" data-title="Alpha" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/genkit-go/get-started-go" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/get-started-go" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/get-started-go" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Building AI workflows</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit-go/models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/models" ><span class="devsite-nav-text" tooltip>Generating content</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/flows" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/flows" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/flows" ><span class="devsite-nav-text" tooltip>Creating flows</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/auth" ><span class="devsite-nav-text" tooltip>Adding authentication to flows</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/prompts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/prompts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/prompts" ><span class="devsite-nav-text" tooltip>Prompting models</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/dotprompt" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/dotprompt" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/dotprompt" ><span class="devsite-nav-text" tooltip>Managing prompts</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/rag" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/rag" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/rag" ><span class="devsite-nav-text" tooltip>Retrieval-augmented generation (RAG)</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/monitoring" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/monitoring" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/monitoring" ><span class="devsite-nav-text" tooltip>Observability & monitoring</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Deploying AI workflows</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit-go/cloud-run" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/cloud-run" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/cloud-run" ><span class="devsite-nav-text" tooltip>Deploy with Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/deploy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/deploy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/deploy" ><span class="devsite-nav-text" tooltip>Deploy with any hosting service</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Writing plugins</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugin-authoring" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugin-authoring" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugin-authoring" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugin-authoring-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugin-authoring-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugin-authoring-models" ><span class="devsite-nav-text" tooltip>Writing a model plugin</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugin-authoring-telemetry" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugin-authoring-telemetry" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugin-authoring-telemetry" ><span class="devsite-nav-text" tooltip>Writing a telemetry plugin</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Official plugins</span> </div></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugins/google-genai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugins/google-genai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugins/google-genai" ><span class="devsite-nav-text" tooltip>Google AI for Developers</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugins/vertex-ai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugins/vertex-ai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugins/vertex-ai" ><span class="devsite-nav-text" tooltip>Google Cloud Vertex AI</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugins/ollama" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugins/ollama" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugins/ollama" ><span class="devsite-nav-text" tooltip>Ollama</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugins/pinecone" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugins/pinecone" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugins/pinecone" ><span class="devsite-nav-text" tooltip>Pinecone</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/pgvector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/pgvector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/pgvector" ><span class="devsite-nav-text" tooltip>pgvector (code template)</span></a></li><li class="devsite-nav-item"><a href="/docs/genkit-go/plugins/google-cloud" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/genkit-go/plugins/google-cloud" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/genkit-go/plugins/google-cloud" ><span class="devsite-nav-text" tooltip>Google Cloud</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Reference</span> </div></li><li class="devsite-nav-item devsite-nav-external"><a href="https://pkg.go.dev/github.com/firebase/genkit/go" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://pkg.go.dev/github.com/firebase/genkit/go" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://pkg.go.dev/github.com/firebase/genkit/go" ><span class="devsite-nav-text" tooltip>Genkit packages</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Firebase ML</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/codelabs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/codelabs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/codelabs" ><span class="devsite-nav-text" tooltip>Codelabs</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Custom Models</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Use a custom model</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/use-custom-models" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/ios/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/use-custom-models" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/use-custom-models" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/flutter/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/flutter/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/flutter/use-custom-models" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/ml/manage-hosted-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/manage-hosted-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/manage-hosted-models" ><span class="devsite-nav-text" tooltip>Deploy & manage custom models</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Migrate from the legacy API</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/migrate-from-legacy-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/migrate-from-legacy-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/migrate-from-legacy-api" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/migrate-from-legacy-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/migrate-from-legacy-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/migrate-from-legacy-api" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Use Cloud Vision APIs</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize text</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/recognize-text" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/ios/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/recognize-text" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/recognize-text" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Label images</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/label-images" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/ios/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/label-images" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/label-images" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize landmarks</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/recognize-landmarks" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/ios/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/recognize-landmarks" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/recognize-landmarks" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Advanced Topics</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>A/B test two versions of a model</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/ab-test-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/ab-test-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/ab-test-models" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/ab-test-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/ab-test-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/ab-test-models" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Prepare for Production</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Protect your Cloud credentials</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/secure-api-key" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/secure-api-key" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/secure-api-key" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/secure-api-key" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/secure-api-key" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/secure-api-key" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>(Deprecated) Cloud Vision & Cloud AutoML Vision Edge</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Deprecated Vision SDKs</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize text</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/recognize-text-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/recognize-text-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/recognize-text-deprecated" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/recognize-text-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/recognize-text-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/recognize-text-deprecated" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Label images</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/label-images-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/label-images-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/label-images-deprecated" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/label-images-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/label-images-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/label-images-deprecated" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize landmarks</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/recognize-landmarks-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/recognize-landmarks-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/recognize-landmarks-deprecated" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/recognize-landmarks-deprecated" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/recognize-landmarks-deprecated" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/recognize-landmarks-deprecated" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Deprecated Cloud AutoML Vision Edge</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-deprecated"><a href="/docs/ml/automl-image-labeling" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/automl-image-labeling" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/automl-image-labeling" ><span class="devsite-nav-text" tooltip>Overview</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-deprecated"><a href="/docs/ml/train-image-labeler" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/train-image-labeler" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/train-image-labeler" ><span class="devsite-nav-text" tooltip>Train image labeling models</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Label images with your models</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/label-images-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/label-images-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/label-images-with-automl" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/label-images-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/label-images-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/label-images-with-automl" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-deprecated"><a href="/docs/ml/train-object-detector" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/train-object-detector" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/train-object-detector" ><span class="devsite-nav-text" tooltip>Train object detection models</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Detect objects with your models</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml/ios/detect-objects-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/ios/detect-objects-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/ios/detect-objects-with-automl" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/ml/android/detect-objects-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/android/detect-objects-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/android/detect-objects-with-automl" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-deprecated"><a href="/docs/ml/migrate-automl-datasets" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml/migrate-automl-datasets" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml/migrate-automl-datasets" ><span class="devsite-nav-text" tooltip>Migrate datasets</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Legacy Documentation</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>ML Kit for Firebase</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Vision</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize text</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/recognize-text" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/recognize-text" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/recognize-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/recognize-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/recognize-text" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Detect faces</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/detect-faces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/detect-faces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/detect-faces" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/face-detection-concepts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/face-detection-concepts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/face-detection-concepts" ><span class="devsite-nav-text" tooltip>Concepts</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/detect-faces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/detect-faces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/detect-faces" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/detect-faces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/detect-faces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/detect-faces" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Scan barcodes</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/read-barcodes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/read-barcodes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/read-barcodes" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/read-barcodes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/read-barcodes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/read-barcodes" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/read-barcodes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/read-barcodes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/read-barcodes" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Label images</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/label-images" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/label-images" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/label-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/label-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/label-images" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Detect and track objects</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/object-detection" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/object-detection" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/object-detection" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/detect-objects" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/detect-objects" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/detect-objects" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/detect-objects" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/detect-objects" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/detect-objects" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Recognize landmarks</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/recognize-landmarks" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/recognize-landmarks" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/recognize-landmarks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/recognize-landmarks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/recognize-landmarks" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>AutoML Vision Edge</span> </div></li><li class="devsite-nav-item"><a href="/docs/ml-kit/automl-image-labeling" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/automl-image-labeling" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/automl-image-labeling" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/train-image-labeler" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/train-image-labeler" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/train-image-labeler" ><span class="devsite-nav-text" tooltip>Train image labeling models</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Label images with your models</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/label-images-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/label-images-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/label-images-with-automl" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/label-images-with-automl" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/label-images-with-automl" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/label-images-with-automl" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/ml-kit/migrate-automl-datasets" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/migrate-automl-datasets" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/migrate-automl-datasets" ><span class="devsite-nav-text" tooltip>Migrate datasets</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Natural Language</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Identify the language of text</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/identify-languages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/identify-languages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/identify-languages" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/identify-languages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/identify-languages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/identify-languages" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/identify-languages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/identify-languages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/identify-languages" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Translate text</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/translation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/translation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/translation" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/translate-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/translate-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/translate-text" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/translate-text" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/translate-text" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/translate-text" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/translation-terms" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/translation-terms" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/translation-terms" ><span class="devsite-nav-text" tooltip>Usage guidelines</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Generate smart replies</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/generate-smart-replies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/generate-smart-replies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/generate-smart-replies" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/generate-smart-replies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/generate-smart-replies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/generate-smart-replies" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/generate-smart-replies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/generate-smart-replies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/generate-smart-replies" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Custom Models</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Use a custom model</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/use-custom-models" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/use-custom-models" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/use-custom-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/use-custom-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/use-custom-models" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/ml-kit/manage-hosted-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/manage-hosted-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/manage-hosted-models" ><span class="devsite-nav-text" tooltip>Manage hosted custom models</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Use a custom TensorFlow Lite build</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/use-custom-tflite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/use-custom-tflite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/use-custom-tflite" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/use-custom-tflite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/use-custom-tflite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/use-custom-tflite" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Advanced Topics</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>A/B test two versions of a model</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/ab-test-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/ab-test-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/ab-test-models" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/ab-test-models" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/ab-test-models" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/ab-test-models" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Prepare for Production</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Reduce app package size</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/android/reduce-app-size" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/reduce-app-size" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/reduce-app-size" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Protect your Cloud credentials</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ml-kit/ios/secure-api-key" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/ios/secure-api-key" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/ios/secure-api-key" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/ml-kit/android/secure-api-key" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ml-kit/android/secure-api-key" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ml-kit/android/secure-api-key" ><span class="devsite-nav-text" tooltip>Android</span></a></li></ul></div></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>RELATED PRODUCTS</span> </div></li> <li class="devsite-nav-item"><a href="//firebase.google.com/docs/cloud-messaging/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //firebase.google.com/docs/cloud-messaging/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//firebase.google.com/docs/cloud-messaging/" ><span class="devsite-nav-text" tooltip>Cloud Messaging</span></a></li> <li class="devsite-nav-item"><a href="//firebase.google.com/docs/remote-config/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //firebase.google.com/docs/remote-config/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//firebase.google.com/docs/remote-config/" ><span class="devsite-nav-text" tooltip>Remote Config</span></a></li> </ul> <ul class="devsite-nav-list" menu="Build" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build </span> </span> </li> <li class="devsite-nav-item"> <a href="/products-build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to Build" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to Build </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build Products </span> </span> </li> <li class="devsite-nav-item"> <a href="/products/app-check" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Check" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Check </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/app-hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/auth" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authentication" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authentication </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/functions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Functions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Functions </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/storage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Storage" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Storage </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/data-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data Connect" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data Connect </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extensions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extensions </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firebase ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firebase ML </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/firestore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firestore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firestore </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/genkit" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Genkit" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Genkit </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/realtime-database" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Realtime Database" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Realtime Database </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/vertex-ai-in-firebase" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Vertex AI in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Vertex AI in Firebase </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/generative-ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Generative AI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Generative AI </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Run" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Run </span> </span> </li> <li class="devsite-nav-item"> <a href="/products-run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to Run" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to Run </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Run Products </span> </span> </li> <li class="devsite-nav-item"> <a href="/products/ab-testing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: A/B Testing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > A/B Testing </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/app-distribution" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Distribution" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Distribution </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/cloud-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/crashlytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Crashlytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Crashlytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/analytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Analytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Analytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/in-app-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: In-App Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > In-App Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/performance" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance Monitoring" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance Monitoring </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/remote-config" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Remote Config" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Remote Config </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/test-lab" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Test Lab" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Test Lab </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Docs" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/guides" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Fundamentals" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Fundamentals </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Run </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Community" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/community/learn" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn </span> </a> </li> <li class="devsite-nav-item"> <a href="/community/events" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Events" track-type="navMenu" 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="/community/stories" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Stories" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Stories </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Fundamentals" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/ios/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Apple platforms (iOS+)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Apple platforms (iOS+) </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/android/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/web/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Web </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/flutter/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Flutter" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Flutter </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/cpp/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - C++" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - C++ </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/unity/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Unity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Unity </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/admin/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Server environments" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Server environments </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/projects/learn-more" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Manage Firebase projects" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Manage Firebase projects </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/libraries" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Supported platforms & frameworks" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Supported platforms & frameworks </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/emulator-suite" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Use Emulator Suite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Use Emulator Suite </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/gemini-in-firebase" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: AI assistance with Gemini in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > AI assistance with Gemini in Firebase </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Build" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/emulator-suite" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Emulator Suite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Emulator Suite </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/auth" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authentication" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authentication </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-check" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Check" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Check </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/data-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data Connect" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data Connect </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/firestore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firestore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firestore </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/database" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Realtime Database" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Realtime Database </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/storage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Storage" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Storage </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/rules" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Security Rules" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Security Rules </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/functions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Functions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Functions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extensions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extensions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/vertex-ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Vertex AI in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Vertex AI in Firebase </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/genkit" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Genkit" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Genkit </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > ML </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Run" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/test-lab" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Test Lab" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Test Lab </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-distribution" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Distribution" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Distribution </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/crashlytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Crashlytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Crashlytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/perf-mon" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance Monitoring" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance Monitoring </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/remote-config" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Remote Config" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Remote Config </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ab-testing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: A/B Testing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > A/B Testing </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/analytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Analytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Analytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/cloud-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/in-app-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: In-App Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > In-App Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/dynamic-links" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Dynamic Links" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Dynamic Links </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/admob" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google AdMob" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google AdMob </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ads" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Ads" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Ads </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"><style> /* Styles inlined from /styles/docs.css */ .center { text-align: center } /* Used in AdMob code examples */ .oldcode { opacity: .40; /* IE 8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); /* IE <= 7 */ filter:alpha(opacity=40); } .newcode { font-weight: bold; } /* Device Screenshots */ .deviceshot { max-width: 700px; max-height: 400px; } /* Start Changelog styles */ .badge { position: relative; top: -3px; border-radius: 16px; display: inline-block; width: 110px; height: 32px; line-height: 32px; margin-right: 10px; text-transform: uppercase; font-size: 13px; font-weight: 700; text-align: center; color: var(--tenant-inverted-text-color); } .checklist > ul { padding-left: 125px; } .checklist > ul > li { list-style-type: none; margin-bottom: 22px; } .changelog > ul { padding-left: 0; } .changelog > ul > li { list-style-type: none; margin-bottom: 22px; } .firebase-support-release-page .changelog > ul { list-style-type: none; padding-left: 125px; } .firebase-release-roundup .changelog > ul { list-style-type: disc outside; padding-left: 40px; } .firebase-release-roundup .changelog > ul > li { list-style-type: disc outside; margin-bottom: 12px; } .generic-android::before, .generic-ios::before, .generic-mobile::before, .generic-web::before, .generic-flutter::before, .generic-unity::before, .generic-cpp::before, .generic-all::before, .release-changed::before, .release-deprecated::before, .release-feature::before, .release-fixed::before, .release-important::before, .release-issue::before, .release-removed::before, .release-unchanged::before, .release-android::before, .release-android-bom::before, .release-ios::before, .release-javascript::before, .release-flutter::before, .release-unity::before, .release-cpp::before, .release-admin::before, .release-functions::before, .release-cli::before, .release-rules::before { display: block; float: left; width: 110px; height: 32px; margin-left: -125px; margin-right: 10px; border-radius: 16px; text-transform: uppercase; font-size: 13px; font-weight: 700; text-align: center; color: var(--tenant-inverted-text-color); } .generic-android::before { content: "Android"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .generic-ios::before { text-transform: none; content: "iOS+"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #003fdd; } .generic-mobile::before { content: "Mobile"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #f4b400; } .generic-web::before { content: "Web"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7e57c2; } .generic-flutter::before { content: "Flutter"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #29b6f6; } .generic-unity::before { content: "Unity"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7f6545; } .generic-cpp::before { content: "C++"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ff8c00; } .generic-all::before { content: "All"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ccc; } .release-changed::before { content: "changed"; background-color: #ff6961; padding-top: 4px; } .release-deprecated::before { content: "deprecated"; background-color: #d70015; padding-top: 4px; } .release-feature::before { content: "feature"; background-color: #0f9d58; padding-top: 4px; } .release-fixed::before { content: "fixed"; background-color: #4285f4; padding-top: 4px; } .release-important::before { content: "important"; background-color: #d70015; padding-top: 4px; } .release-issue::before { content: "issue"; background-color: #d70015; padding-top: 4px; } .release-removed::before { content: "removed"; background-color: #546e7a; padding-top: 4px; } .release-unchanged::before { content: "no change"; background-color: #ccc; padding-top: 4px; } .release-android::before { content: "Android"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .release-android-bom::before { content: "Android BoM"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .release-ios::before { text-transform: none; content: "iOS+"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #003fdd; } .release-javascript::before { content: "JavaScript"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7e57c2; } .release-flutter::before { content: "Flutter"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #29b6f6; } .release-unity::before { content: "Unity"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7f6545; } .release-cpp::before { content: "C++"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ff8c00; } .release-admin::before { content: "Admin"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #909090; } .release-functions::before { content: "Functions"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #2c384a; } .release-cli::before { text-transform: none; content: "CLI"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #f4b400; } .release-rules::before { content: "Rules"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #002991; } /* End Changelog styles */ /* Docs Overview page styles */ .docs-android, .docs-ios, .docs-web, .docs-cpp, .docs-unity { height: 64px; width: 64px; margin: 10px 16px 0 -16px; } .firebase-docs-overview .devsite-landing-row h2 { margin: 80px 0 -40px; } .devsite-landing-row-3-up .docs-landing-row-item { width: calc((100% - 80px)/2); display: inline-block; } .docs-landing-icon { font-size: 48px; height: 48px; margin: 11px; width: 48px; } .firebase-reference-list { display: -ms-flex; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: 0 0 40px; padding: 0; } .firebase-reference-list-item { -ms-flex: 0 0 50%; flex: 0 0 50%; margin: 40px 0 0; padding: 0; } .firebase-reference-list-item > a { -ms-flex-align: center; align-items: center; display: -ms-flex; display: flex; } .firebase-reference-list-item > a:not(:hover) h3 { color: var(--tenant-primary-text-color); } .firebase-reference-list-item > a:not(:hover) li, .firebase-reference-list-item > a:not(:hover) p { color: var(--tenant-secondary-text-color); } .firebase-reference-list-item .docs-landing-icon { -ms-flex-align: center; align-items: center; background-color: var(--tenant-docs-landing-icon-background, #f5f5f5); border-radius: 50%; -ms-flex: 0 0 88px; flex: 0 0 88px; height: 88px; -ms-justify-content: center; justify-content: center; margin: 0 16px 0 0; padding: 20px; } .firebase-reference-list-item h3 { -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 18px; line-height: 28px; margin: 0; } .firebase-reference-list-item ul { list-style: none; padding: 0; } .docs-android, .docs-ios, .docs-web, .docs-cpp, .docs-unity { height: 88px; width: auto; } .firebase-reference-list-item.docs-android .docs-landing-icon { color: #00bfa5; } .firebase-reference-list-item.docs-cpp .docs-landing-icon { color: #fd8c09; } .firebase-reference-list-item.docs-ios .docs-landing-icon { color: #16aaca; } .firebase-reference-list-item.docs-unity .docs-landing-icon { color: #000; } .firebase-reference-list-item.docs-web .docs-landing-icon { color: #c52062; } .firebase-reference-list-item.docs-http .docs-landing-icon { color: #3f51b5; } @media (max-width: 1000px) { .firebase-reference-list { -ms-flex-direction: column; flex-direction: column; } } /* end Docs Overview page styles */ /* Full-page platform selector for Crashlytics docs */ /* Note: h3 in selector content must include hide-from-toc */ .full-page-selector, .full-page-selector-content { border: none; font-size: inherit; } .full-page-selector > .kd-buttonbar { margin: 32px 0; } .full-page-selector > section { display: none; } .full-page-selector-content > .selected { padding: 0; font-size: inherit; } .full-page-selector-content > .kd-buttonbar { display: none; } .select-page { display: none; } .select-page + .ds-selector-tabs, .after-selection ~ .ds-selector-tabs { border: none; font-size: inherit; } .select-page + .ds-selector-tabs > .kd-buttonbar { margin: 32px 0; } .select-page + .ds-selector-tabs > section { display: none; } .after-selection ~ .ds-selector-tabs > .selected { padding: 0; font-size: inherit; } .after-selection ~ .ds-selector-tabs > section p { line-height: 24px; } .after-selection ~ .ds-selector-tabs > .kd-buttonbar { display: none; } /* End full-page platform selector */ /* Custom beta and alpha indicators */ .devsite-nav-icon[data-icon="alpha"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M13.2,15c-0.3-0.9-0.6-1.7-0.9-2.6L12.1,12c0-0.1-0.1-0.3-0.1-0.4c-1.2,2.1-2.4,2.9-4.5,2.9C4.8,14.5,3,12.6,3,9s1.8-5.5,4.5-5.5c2.1,0,3.4,0.8,4.5,2.9L12.1,6l0.1-0.4c0.4-1.1,0.7-1.9,0.9-2.6h2.2c-0.4,0.8-0.7,1.7-1.2,3.2L14,6.6c-0.3,0.8-0.5,1.6-0.8,2.4c0.3,0.7,0.6,1.5,0.8,2.4l0.1,0.4c0.5,1.5,0.8,2.4,1.2,3.2C15.4,15,13.2,15,13.2,15z M7.5,5.5C5.9,5.5,5,6.5,5,9s0.9,3.5,2.5,3.5C9,12.5,9.9,11.6,11,9C9.9,6.4,9,5.5,7.5,5.5z' fill='%2354617d'/></svg>); } .color-scheme--dark .devsite-nav-icon[data-icon="alpha"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M13.2,15c-0.3-0.9-0.6-1.7-0.9-2.6L12.1,12c0-0.1-0.1-0.3-0.1-0.4c-1.2,2.1-2.4,2.9-4.5,2.9C4.8,14.5,3,12.6,3,9s1.8-5.5,4.5-5.5c2.1,0,3.4,0.8,4.5,2.9L12.1,6l0.1-0.4c0.4-1.1,0.7-1.9,0.9-2.6h2.2c-0.4,0.8-0.7,1.7-1.2,3.2L14,6.6c-0.3,0.8-0.5,1.6-0.8,2.4c0.3,0.7,0.6,1.5,0.8,2.4l0.1,0.4c0.5,1.5,0.8,2.4,1.2,3.2C15.4,15,13.2,15,13.2,15z M7.5,5.5C5.9,5.5,5,6.5,5,9s0.9,3.5,2.5,3.5C9,12.5,9.9,11.6,11,9C9.9,6.4,9,5.5,7.5,5.5z' fill='%239eabc3'/></svg>); } .devsite-nav-icon[data-icon="beta"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M12.2,7.7c1.8,1.2,2.3,3.7,1.1,5.6c-0.7,1.1-2,1.8-3.3,1.8H7v2H5V4c0-1.1,0.9-2,2-2h2.5C11.4,2,13,3.6,13,5.5C13,6.3,12.7,7.1,12.2,7.7z M7,13h3c1.1,0,2-0.9,2-2s-0.9-2-2-2H7V13z M7,7h2.5C10.3,7,11,6.3,11,5.5S10.3,4,9.5,4H7V7z' fill='%2354617d'/></svg>); } .color-scheme--dark .devsite-nav-icon[data-icon="beta"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M12.2,7.7c1.8,1.2,2.3,3.7,1.1,5.6c-0.7,1.1-2,1.8-3.3,1.8H7v2H5V4c0-1.1,0.9-2,2-2h2.5C11.4,2,13,3.6,13,5.5C13,6.3,12.7,7.1,12.2,7.7z M7,13h3c1.1,0,2-0.9,2-2s-0.9-2-2-2H7V13z M7,7h2.5C10.3,7,11,6.3,11,5.5S10.3,4,9.5,4H7V7z' fill='%239eabc3'/></svg>); } .firebase-platform-label { font: 500 12px/24px Roboto,sans-serif; } /* Full-page platform selector dropdown */ /* Note: use menu variables in _elements.html file */ .full-page-selector-dropdown { border: none; position: relative; float: left; display: inline-block; } .full-page-selector-dropdown > .ds-selector-tabs { display: none; position: absolute; min-width: 160px; z-index: 1; } .full-page-selector-dropdown:hover .ds-selector-tabs { display: block; margin: 0; } .full-page-selector-dropdown:hover .kd-tabbutton { display: block; border: none; height: inherit; text-align: left; } .full-page-selector-dropdown:hover .kd-buttonbar { border: none; height: inherit; } .full-page-selector-dropdown h3:hover { color: var(--tenant-inverted-text-color); background-color: #039be5; } .full-page-selector-dropdown:hover .devsite-overflow-menu-button { display: none; } img.white-bg { padding: 5px; border-radius: 2px; background-color: #fff; } </style> <div class="devsite-banner devsite-banner-announcement nocontent" > <div class="devsite-banner-message"> <div class="devsite-banner-message-text"> <style> .devsite-banner-announcement a:link:not(.button), .devsite-banner-announcement a:visited:not(.button) { background: 0; } .devsite-banner-announcement a:hover, .devsite-banner-announcement a:focus { text-decoration: none; } .devsite-banner-announcement .devsite-banner-message-text { margin: 0 auto; } </style> Firebase is back at Cloud Next on April 9 - 11. <a href="https://cloud.withgoogle.com/next/25?utm_source=firebase&utm_medium=&utm_campaign=svd_firesite_banner&utm_content=">Register now.</a> </div> </div> </div> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://firebase.google.com/" 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="Firebase" > Firebase </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Firebase Documentation" > Documentation </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/firestore" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Firestore" > Firestore </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/build" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Build </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Firestore" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-feedback-url="https://firebase.google.com/support/contact/bugs-features/" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Get started with Cloud Firestore </h1> <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> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <!-- The following is at site root, /third_party/devsite/firebase/en/ --> <p></p> <p>This quickstart shows you how to set up <span class="notranslate">Cloud Firestore</span>, add data, then view the data you just added in the Firebase console.</p> <h2 id="create" data-text="Create a Cloud Firestore database" tabindex="-1">Create a <span class="notranslate">Cloud Firestore</span> database</h2> <ol> <li><p>If you haven't already, create a Firebase project: In the <a href="//console.firebase.google.com/"><span class="notranslate">Firebase</span> console</a>, click <strong>Add project</strong>, then follow the on-screen instructions to create a Firebase project or to add Firebase services to an existing <span class="notranslate">Google Cloud</span> project.</p></li> <li><p>Open your project in the <span class="notranslate">Firebase</span> console. In the left panel, expand <strong>Build</strong> and then select <a href="https://console.firebase.google.com/project/_/firestore/" class="gc-analytics-event external" data-category="firebasedb_test_0220" data-label="console_firestore_creation_event_test_0220"><b>Firestore database</b></a>.</p></li> <li><p>Click <strong>Create database</strong>.</p></li> <li><p>Select a <a href="/docs/firestore/locations#types">location</a> for your database.</p> <p>If you aren't able to select a location, then your project's <a href="/docs/firestore/locations#default-cloud-location">"location for default <span class="notranslate">Google Cloud</span> resources"</a> has already been set. Some of your project's resources (like the default <span class="notranslate">Cloud Firestore</span> instance) share a common location dependency, and their location can be set either during project creation or when setting up another service that shares this location dependency.</p></li> <li><p>Select a starting mode for your <span class="notranslate"><span class="notranslate">Cloud Firestore</span> Security Rules</span>:</p> <dl> <dt>Test mode</dt> <dd><p>Good for getting started with the mobile and web client libraries, but allows anyone to read and overwrite your data. After testing, <strong>make sure to review the <a href="#secure_your_data">Secure your data</a> section.</strong></p></dd> <dd><p>To get started with the web, Apple platforms, or Android SDK, select test mode.</p></dd> <dt>Locked mode</dt> <dd><p>Denies all reads and writes from mobile and web clients. Your authenticated application servers (C#, Go, Java, Node.js, PHP, Python, or Ruby) can still access your database.</p></dd> <dd><p>To get started with the C#, Go, Java, Node.js, PHP, Python, or Ruby server client library, select locked mode.</p></dd> </dl> <p>Your initial set of <span class="notranslate"><span class="notranslate">Cloud Firestore</span> Security Rules</span> will apply to your default <span class="notranslate">Cloud Firestore</span> database. If you create multiple databases for your project, you can deploy <span class="notranslate"><span class="notranslate">Cloud Firestore</span> Security Rules</span> for each database.</p></li> <li><p>Click <strong>Create</strong>.</p></li> </ol> <aside class="note"> <strong><span class="notranslate">Cloud Firestore</span> and <span class="notranslate">App Engine</span>:</strong> You can't use both <span class="notranslate">Cloud Firestore</span> and <span class="notranslate">Datastore</span> in the same project, which might affect apps using <span class="notranslate">App Engine</span>. Try using <span class="notranslate">Cloud Firestore</span> with a different project. </aside> <p>When you enable <span class="notranslate">Cloud Firestore</span>, it also enables the API in the <a href="https://console.cloud.google.com/projectselector/apis/api/firestore.googleapis.com/overview">Cloud API Manager</a>.</p> <h2 id="set_up_your_development_environment" data-text="Set up your development environment" tabindex="-1">Set up your development environment</h2> <p>Add the required dependencies and client libraries to your app.</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h3 translate="no" id="web" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="modular API" class="notranslate">Web</span></span></h3> <ol> <li>Follow the instructions to <a href="//firebase.google.com/docs/web/setup?sdk_version=v9">add Firebase to your Web app</a>. </li> <li> The <span class="notranslate">Cloud Firestore</span> SDK is available as an npm package. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Objective-C"><span class="devsite-syntax-n">npm</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">install</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-mf">@11.3.1</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">save</span></pre></devsite-code> You'll need to import both Firebase and <span class="notranslate">Cloud Firestore</span>. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">initializeApp</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/app"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">getFirestore</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span></pre></devsite-code> </li> </ol> <aside class="note"> Looking for a compact Firestore library, and only need simple REST/CRUD capabilities? Try the <a href="https://firebase.google.com/docs/firestore/solutions/firestore-lite"> Firestore Lite SDK</a>, available only via npm. </aside> </section> <section> <h3 translate="no" id="web_1" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="namespaced API" class="notranslate">Web</span></span></h3> <ol> <li>Follow the instructions to <a href="//firebase.google.com/docs/web/setup">add Firebase to your Web app</a>. </li> <li>Add the Firebase and <span class="notranslate">Cloud Firestore</span> libraries to your app: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only"><script src="https://www.gstatic.com/firebasejs/11.3.1/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/11.3.1/firebase-firestore-compat.js"></script></pre></devsite-code> The <span class="notranslate">Cloud Firestore</span> SDK is also available as an npm package. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Objective-C"><span class="devsite-syntax-n">npm</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">install</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-mf">@11.3.1</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">save</span></pre></devsite-code> You'll need to manually require both Firebase and <span class="notranslate">Cloud Firestore</span>. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/compat/app"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Required</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">side</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">effects</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span></pre></devsite-code> </li> </ol> </section> <section> <h5 id="ios+" data-text="iOS+" tabindex="-1">iOS+</h5> <p> Follow the instructions to <a href="//firebase.google.com/docs/ios/setup">add Firebase to your Apple app</a>. </p> <p>Use Swift Package Manager to install and manage Firebase dependencies.</p> <aside class="note">Visit <a href="https://firebase.google.com/docs/ios/installation-methods">our installation guide</a> to learn about the different ways you can add Firebase SDKs to your Apple project, including importing frameworks directly and using CocoaPods. </aside> <ol> <li>In Xcode, with your app project open, navigate to <b>File > Swift Packages > Add Package Dependency</b>.</li> <li>When prompted, add the Firebase Apple platforms SDK repository:</li> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only"> https://github.com/firebase/firebase-ios-sdk </pre></devsite-code> <aside class="note"> <b>Note:</b> New projects should use the default (latest) SDK version, but you can choose an older version if needed. </aside> <li>Choose the Firestore library.</li> <li> When finished, Xcode will automatically begin resolving and downloading your dependencies in the background. </li> </ol> </section> <section> <h5 id="android" data-text="Android" tabindex="-1">Android</h5> <ol> <li>Follow the instructions to <a href="//firebase.google.com/docs/android/setup">add Firebase to your Android app</a>.</li> <li>Using the <a href="//firebase.google.com/docs/android/learn-more#bom">Firebase Android BoM</a>, declare the dependency for the <span class="notranslate">Cloud Firestore</span> library for Android in your <b>module (app-level) Gradle file</b> (usually <code translate="no" dir="ltr">app/build.gradle.kts</code> or <code translate="no" dir="ltr">app/build.gradle</code>). <div></div><devsite-code><pre class="devsite-click-to-copy devsite-code-highlight" translate="no" dir="ltr" is-upgraded syntax="Carbon"><span class="devsite-syntax-nx">dependencies</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><strong><span class="devsite-syntax-c1">// Import the BoM for the Firebase platform</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">platform</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"com.google.firebase:firebase-bom:33.9.0"</span><span class="devsite-syntax-p">))</span></strong> <span class="devsite-syntax-w"> </span><strong><span class="devsite-syntax-c1">// Declare the dependency for the <span class="notranslate">Cloud Firestore</span> library</span></strong> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// When using the BoM, you don't specify versions in Firebase library dependencies</span> <span class="devsite-syntax-w"> </span><strong><span class="devsite-syntax-nx">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"com.google.firebase:firebase-firestore"</span><span class="devsite-syntax-p">)</span></strong> <span class="devsite-syntax-p">}</span></pre></devsite-code> <p>By using the <a href="//firebase.google.com/docs/android/learn-more#bom">Firebase Android BoM</a>, your app will always use compatible versions of the Firebase Android libraries. </p> <div> <devsite-expandable> <p class="showalways"><em>(Alternative)</em> Declare Firebase library dependencies <em>without</em> using the <span class="notranslate">BoM</span> </p> <p>If you choose not to use the <span class="notranslate">Firebase BoM</span>, you must specify each Firebase library version in its dependency line. </p> <p><strong>Note that if you use <em>multiple</em> Firebase libraries in your app, we highly recommend using the <span class="notranslate">BoM</span> to manage library versions, which ensures that all versions are compatible.</strong> </p> <div></div><devsite-code><pre class="devsite-click-to-copy devsite-code-highlight" translate="no" dir="ltr" is-upgraded syntax="Carbon"><span class="devsite-syntax-nx">dependencies</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><strong><span class="devsite-syntax-c1">// Declare the dependency for the <span class="notranslate">Cloud Firestore</span> library</span></strong> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// When NOT using the BoM, you must specify versions in Firebase library dependencies</span> <span class="devsite-syntax-w"> </span><strong><span class="devsite-syntax-nx">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"com.google.firebase:firebase-firestore:25.1.2"</span><span class="devsite-syntax-p">)</span></strong> <span class="devsite-syntax-p">}</span></pre></devsite-code> </devsite-expandable> </div> <p><b>Looking for a Kotlin-specific library module?</b> Starting with the <a href="//firebase.google.com/support/release-notes/android#2023-10-10">October 2023 release</a>, both Kotlin and Java developers can depend on the main library module (for details, see the <a href="//firebase.google.com/docs/android/kotlin-migration">FAQ about this initiative</a>). </p> </li> </ol> </section> <section> <h3 translate="no" id="dart" data-text="Dart" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Flutter" class="notranslate">Dart</span></span></h3> <ol> <li>If you haven't already, <a href="/docs/flutter/setup">configure and initialize Firebase</a> in your Flutter app.</li> <li>From the root of your Flutter project, run the following command to install the plugin: <div></div><devsite-code><pre class="devsite-terminal devsite-click-to-copy" translate="no" dir="ltr" is-upgraded>flutter pub add cloud_firestore</pre></devsite-code></li> <li>Once complete, rebuild your Flutter application: <div></div><devsite-code><pre class="devsite-terminal devsite-click-to-copy" translate="no" dir="ltr" is-upgraded>flutter run</pre></devsite-code></li> <li><b>Optional:</b> Improve iOS & macOS build times by including the pre-compiled framework. <p>Currently, the Firestore SDK for iOS depends on code that can take upwards of 5 minutes to build in Xcode. To reduce build times significantly, you can use a pre-compiled version by adding this line to the <code translate="no" dir="ltr">target 'Runner' do</code> block in your Podfile:</p> <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>target 'Runner' do use_frameworks! use_modular_headers! <b> pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '<var translate="no">IOS_SDK_VERSION</var>' </b> flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do inherit! :search_paths end end</pre></devsite-code> <p>Replace <var translate="no">IOS_SDK_VERSION</var> with the version of the Firebase iOS SDK specified in <code translate="no" dir="ltr">firebase_core</code>'s <a href="https://github.com/firebase/flutterfire/blob/master/packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb#L3" class="external"><code translate="no" dir="ltr">firebase_sdk_version.rb</code></a> file. If you're not using the latest version of <code translate="no" dir="ltr">firebase_core</code>, look for this file in your local Pub package cache (usually <code translate="no" dir="ltr">~/.pub-cache</code>).</p> <p>Additionally, ensure that you have upgraded CocoaPods to 1.9.1 or higher: <div></div><devsite-code><pre class="devsite-terminal devsite-click-to-copy" translate="no" dir="ltr" is-upgraded>gem install cocoapods</pre></devsite-code></p> <p>For more information see the <a href="https://github.com/FirebaseExtended/flutterfire/issues/2751">issue on GitHub</a>.</p> </li> </ol> </section> <section> <h5 id="java" data-text="Java" tabindex="-1">Java</h5> <ol> <!--Start firesite instructions --> <li>Add the Firebase Admin SDK to your app: <ul><li> <b>Using Gradle:</b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-n">compile</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-n">com</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">google</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">firebase</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">admin</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-mf">1.32.0</span><span class="devsite-syntax-err">'</span></pre></devsite-code> </li> <li> <b>Using Maven:</b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><<span class="devsite-syntax-n">dependency</span><span class="devsite-syntax-o">></span> <span class="devsite-syntax-w"> </span><<span class="devsite-syntax-n">groupId</span><span class="devsite-syntax-o">></span><span class="devsite-syntax-n">com</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">google</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">firebase</span><<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">groupId</span><span class="devsite-syntax-o">></span> <span class="devsite-syntax-w"> </span><<span class="devsite-syntax-n">artifactId</span><span class="devsite-syntax-o">></span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">admin</span><<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">artifactId</span><span class="devsite-syntax-o">></span> <span class="devsite-syntax-w"> </span><<span class="devsite-syntax-n">version</span><span class="devsite-syntax-o">></span><span class="devsite-syntax-mf">1.32.0</span><<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">version</span><span class="devsite-syntax-o">></span> <<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">dependency</span><span class="devsite-syntax-o">></span> <span class="devsite-syntax-w"> </span></pre></devsite-code> </li></ul> </li> <li>Follow the instructions below to initialize <span class="notranslate">Cloud Firestore</span> with the proper credentials in your environment.</li> <!--Start cloudsite instructions --> </li> </ol> </section> <section> <h5 id="python" data-text="Python" tabindex="-1">Python</h5> <ol> <!-- Start firesite instructions --> <li>Add the Firebase Admin SDK to your Python app: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-n">pip</span> <span class="devsite-syntax-n">install</span> <span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">upgrade</span> <span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">admin</span></pre></devsite-code> </li> <li>Follow the instructions below to initialize <span class="notranslate">Cloud Firestore</span> with the proper credentials in your environment.</li> <!-- Start cloudsite instructions --> </ol> </section> <section> <h5 id="c++" data-text="C++" tabindex="-1">C++</h5> <ol> <li>Follow the instructions to <a href="//firebase.google.com/docs/cpp/setup">add Firebase to your C++ project</a>.</li> <li><strong>C++ interface for Android.</strong></li> <ul> <li><strong>Gradle dependencies.</strong> Add the following to your module (app-level) Gradle file (usually <code translate="no" dir="ltr">app/build.gradle</code>): <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C++"><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">android</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">defaultConfig</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">externalNativeBuild</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cmake</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">arguments</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">apply</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">from</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebaseCpp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dependencies</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// earlier entries</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">auth</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firestore</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span></pre></devsite-code> </li> <li><strong>Binary dependencies.</strong> Similarly, the recommended way to get the binary dependencies is to add the following to your <code translate="no" dir="ltr">CMakeLists.txt</code> file: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C++"><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">add_subdirectory</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">$</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">FIREBASE_CPP_SDK_DIR</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">bin</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">EXCLUDE_FROM_ALL</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">firebase_libs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebase_auth</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebase_firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firebase_app</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-cp"># Replace the target name below with the actual name of your target,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-cp"># for example, "native-lib".</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">target_link_libraries</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">$</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">YOUR_TARGET_NAME_HERE</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"${firebase_libs}"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span></pre></devsite-code> </li> </ul> <li>To set up <strong>desktop integration</strong>, see <a href="//firebase.google.com/docs/cpp/setup#desktop-workflow">Add Firebase to your C++ project</a>.</li> </ol> </section> <section> <h5 id="unity" data-text="Unity" tabindex="-1">Unity</h5> <ol> <li>Follow the instructions to <a href="//firebase.google.com/docs/unity/setup">add Firebase to your Unity project</a>.</li> <li>Use the Unity interface to configure your project to minify Android builds.</li> <p> You must minify the build to avoid the message <code translate="no" dir="ltr">Error while merging dex archives</code>. </p> <ul> <li> The option can be found in <strong>Player Settings > Android > Publishing Settings > Minify</strong>. </li> <li> The options may differ in different versions of Unity so refer to the official <a href="https://docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html#minify">Unity documentation</a> and the <a href="https://firebase.google.com/docs/unity/build-debug-guide#single_dex_issues_and_minification_mandatory_if_using_cloud_firestore">Firebase Unity Build Debug Guide</a>. </li> <li> If, after enabling minification, the number of referenced methods still exceeds the limit, another option is to enable <code translate="no" dir="ltr">multidex</code> in: <ul> <li> <code translate="no" dir="ltr">mainTemplate.gradle</code> if <strong>Custom Gradle Template</strong> under <strong>Player Settings</strong> is enabled </li> <li> or, the module-level <code translate="no" dir="ltr">build.gradle</code> file, if you use Android Studio to build the exported project. </li> </ul> </li> </ul> </ol> </section> <section> <h5 id="node.js" data-text="Node.js" tabindex="-1">Node.js</h5> <ol> <li> Add the Firebase Admin SDK to your app: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">npm</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">install</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-nx">admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-nx">save</span></pre></devsite-code> </li> <li> Follow the instructions below to initialize <span class="notranslate">Cloud Firestore</span> with the proper credentials in your environment. </li> </ol> </section> <section> <h5 id="go" data-text="Go" tabindex="-1">Go</h5> <ol> <!-- Start firesite instructions --> <li>Add the Firebase Admin SDK to your Go app: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Go"><span class="devsite-syntax-k">go</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">get</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">google</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">com</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-k">go</span></pre></devsite-code> </li> <li>Follow the instructions below to initialize <span class="notranslate">Cloud Firestore</span> with the proper credentials in your environment.</li> <!-- Start cloudsite instructions --> </li> </ol> </section> <section> <h5 id="php" data-text="PHP" tabindex="-1">PHP</h5> <ol> <li> The <span class="notranslate">Cloud Firestore</span> server client libraries (Java, Node.js, Python, Go, PHP, C#, and Ruby) use <a href="https://cloud.google.com/docs/authentication/production">Google Application Default Credentials</a> for authentication. <ul> <li> To authenticate from your development environment, set the <code translate="no" dir="ltr">GOOGLE_APPLICATION_CREDENTIALS</code> environment variable to point to a JSON service account key file. You can create a key file on the <a href="https://console.cloud.google.com/projectselector/apis/credentials">API Console Credentials page</a>. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PHP"><span class="devsite-syntax-x">export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"</span></pre></devsite-code> </li> <li> In your production environment, you do not need to authenticate if you run your application on App Engine or Compute Engine, using the same project that you use for <span class="notranslate">Cloud Firestore</span>. Otherwise, <a href="https://cloud.google.com/docs/authentication/getting-started">set up a service account</a>. </li> </ul> </li> <li> Install and enable the <a href="https://cloud.google.com/php/grpc">gRPC extension</a> for PHP, which you will need to use the client library. </li> <li> Add the Cloud Firestore PHP library to your app: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PHP"><span class="devsite-syntax-x">composer require google/cloud-firestore</span></pre></devsite-code> </li> </ol> </section> <section> <h5 id="c" data-text="C#" tabindex="-1">C#</h5> <ol> <li> The <span class="notranslate">Cloud Firestore</span> server client libraries (Java, Node.js, Python, Go, PHP, C#, and Ruby) use <a href="https://cloud.google.com/docs/authentication/production">Google Application Default Credentials</a> for authentication. <ul> <li> To authenticate from your development environment, set the <code translate="no" dir="ltr">GOOGLE_APPLICATION_CREDENTIALS</code> environment variable to point to a JSON service account key file. You can create a key file on the <a href="https://console.cloud.google.com/projectselector/apis/credentials">API Console Credentials page</a>. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C#"><span class="devsite-syntax-n">export</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GOOGLE_APPLICATION_CREDENTIALS</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s">"path/to/your/keyfile.json"</span></pre></devsite-code> </li> <li> In your production environment, you do not need to authenticate if you run your application on App Engine or Compute Engine, using the same project that you use for <span class="notranslate">Cloud Firestore</span>. Otherwise, <a href="https://cloud.google.com/docs/authentication/getting-started">set up a service account</a>. </li> </ul> </li> <li> Add the Cloud Firestore C# library to your app in your <code translate="no" dir="ltr">.csproj</code> file: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C#"><<span class="devsite-syntax-n">ItemGroup</span>> <span class="devsite-syntax-w"> </span><<span class="devsite-syntax-n">PackageReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Include</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s">"Google.Cloud.Firestore"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Version</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s">"1.1.0-beta01"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">/</span>> <<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">ItemGroup</span>></pre></devsite-code> </li> <li> Add the following to your <code translate="no" dir="ltr">Program.cs</code> file: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C#"><span class="devsite-syntax-k">using</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">Google.Cloud.Firestore</span><span class="devsite-syntax-p">;</span></pre></devsite-code> </li> </ol> </section> <section> <h5 id="ruby" data-text="Ruby" tabindex="-1">Ruby</h5> <ol> <li> The <span class="notranslate">Cloud Firestore</span> server client libraries (Java, Node.js, Python, Go, PHP, C#, and Ruby) use <a href="https://cloud.google.com/docs/authentication/production">Google Application Default Credentials</a> for authentication. <ul> <li> To authenticate from your development environment, set the <code translate="no" dir="ltr">GOOGLE_APPLICATION_CREDENTIALS</code> environment variable to point to a JSON service account key file. You can create a key file on the <a href="https://console.cloud.google.com/projectselector/apis/credentials">API Console Credentials page</a>. <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Ruby"><span class="devsite-syntax-n">export</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-no">GOOGLE_APPLICATION_CREDENTIALS</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"path/to/your/keyfile.json"</span></pre></devsite-code> </li> <li> In your production environment, you do not need to authenticate if you run your application on App Engine or Compute Engine, using the same project that you use for <span class="notranslate">Cloud Firestore</span>. Otherwise, <a href="https://cloud.google.com/docs/authentication/getting-started">set up a service account</a>. </li> </ul> </li> <li> Add the Cloud Firestore Ruby library to your app in your <code translate="no" dir="ltr">Gemfile</code>: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Ruby"><span class="devsite-syntax-n">gem</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"google-cloud-firestore"</span></pre></devsite-code> </li> <li> Install dependencies from your <code translate="no" dir="ltr">Gemfile</code> using: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Ruby"><span class="devsite-syntax-n">bundle</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">install</span></pre></devsite-code> </li> </ol> </section> </div> <h2 id="optional_prototype_and_test_with" data-text="(Optional) Prototype and test with Firebase Local Emulator Suite" tabindex="-1">(Optional) Prototype and test with <span class="notranslate">Firebase Local Emulator Suite</span></h2> <p>For mobile developers, before talking about how your app writes to and reads from <span class="notranslate">Cloud Firestore</span>, let's introduce a set of tools you can use to prototype and test <span class="notranslate">Cloud Firestore</span> functionality: <span class="notranslate">Firebase Local Emulator Suite</span>. If you're trying out different data models, optimizing your security rules, or working to find the most cost-effective way to interact with the back-end, being able to work locally without deploying live services can be a great idea.</p> <p>A <span class="notranslate">Cloud Firestore</span> emulator is part of the <span class="notranslate">Local Emulator Suite</span>, which enables your app to interact with your emulated database content and config, as well as optionally your emulated project resources (functions, other databases, and security rules).</p> <p>Using the <span class="notranslate">Cloud Firestore</span> emulator involves just a few steps:</p> <ol> <li>Adding a line of code to your app's test config to connect to the emulator.</li> <li>From the root of your local project directory, running <code translate="no" dir="ltr">firebase emulators:start</code>.</li> <li>Making calls from your app's prototype code using a <span class="notranslate">Cloud Firestore</span> platform SDK as usual.</li> </ol> <p>A detailed <a href="/docs/emulator-suite/connect_and_prototype?database=Firestore">walkthrough involving <span class="notranslate">Cloud Firestore</span> and <span class="notranslate">Cloud Functions</span></a> is available. You should also have a look at the <a href="/docs/emulator-suite"><span class="notranslate">Local Emulator Suite</span> introduction</a>.</p> <h2 id="initialize" data-text="Initialize Cloud Firestore" tabindex="-1">Initialize <span class="notranslate">Cloud Firestore</span></h2> <p>Initialize an instance of <span class="notranslate">Cloud Firestore</span>:</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h3 translate="no" id="web_2" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="modular API" class="notranslate">Web</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy devsite-code-highlight" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">initializeApp</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/app"</span><span class="devsite-syntax-p">;</span> <strong><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">getFirestore</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span></strong> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Replace</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">following</span> <span class="devsite-syntax-k">with</span> <span class="devsite-syntax-n">your</span> <span class="devsite-syntax-n">app</span><span class="devsite-syntax-s1">'s Firebase project configuration</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">See</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">https</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-n">support</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">com</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">answer</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-mi">7015592</span> <span class="devsite-syntax-n">const</span> <span class="devsite-syntax-n">firebaseConfig</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">{</span> <var translate="no"><span class="devsite-syntax-n">FIREBASE_CONFIGURATION</span></var> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Initialize</span> <span class="devsite-syntax-n">Firebase</span> <span class="devsite-syntax-n">const</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">initializeApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">firebaseConfig</span><span class="devsite-syntax-p">);</span> <strong> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Initialize</span> <span class="notranslate"><span class="devsite-syntax-n">Cloud</span> <span class="devsite-syntax-n">Firestore</span></span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">a</span> <span class="devsite-syntax-n">reference</span> <span class="devsite-syntax-n">to</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">service</span> <span class="devsite-syntax-n">const</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">getFirestore</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">app</span><span class="devsite-syntax-p">);</span> </strong></pre></devsite-code> <p> Replace <var translate="no">FIREBASE_CONFIGURATION</var> with your web app's <a href="https://support.google.com/firebase/answer/7015592"><code translate="no" dir="ltr">firebaseConfig</code></a>. </p> <p> To persist data when the device loses its connection, see the <a href="/docs/firestore/manage-data/enable-offline">Enable Offline Data</a> documentation. </p> </section> <section> <h3 translate="no" id="web_3" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="namespaced API" class="notranslate">Web</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy devsite-code-highlight" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/app"</span><span class="devsite-syntax-p">;</span> <strong><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span></strong> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Replace</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">following</span> <span class="devsite-syntax-k">with</span> <span class="devsite-syntax-n">your</span> <span class="devsite-syntax-n">app</span><span class="devsite-syntax-s1">'s Firebase project configuration</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">See</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">https</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-n">support</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">com</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">answer</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-mi">7015592</span> <span class="devsite-syntax-n">const</span> <span class="devsite-syntax-n">firebaseConfig</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">{</span> <var translate="no"><span class="devsite-syntax-n">FIREBASE_CONFIGURATION</span></var> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Initialize</span> <span class="devsite-syntax-n">Firebase</span> <span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initializeApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">firebaseConfig</span><span class="devsite-syntax-p">);</span> <strong> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Initialize</span> <span class="notranslate"><span class="devsite-syntax-n">Cloud</span> <span class="devsite-syntax-n">Firestore</span></span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">a</span> <span class="devsite-syntax-n">reference</span> <span class="devsite-syntax-n">to</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">service</span> <span class="devsite-syntax-n">const</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">();</span> </strong></pre></devsite-code> <p> Replace <var translate="no">FIREBASE_CONFIGURATION</var> with your web app's <a href="https://support.google.com/firebase/answer/7015592"><code translate="no" dir="ltr">firebaseConfig</code></a>. </p> <p> To persist data when the device loses its connection, see the <a href="/docs/firestore/manage-data/enable-offline">Enable Offline Data</a> documentation. </p> </section> <section> <h5 id="swift" data-text="Swift" tabindex="-1"><devsite-analytics-scope category="appleplat_objc_snippet_usage" label="firestore_initialize_swift" action="click">Swift</devsite-analytics-scope></h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">FirebaseCore</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">FirebaseFirestore</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/swift/firestore-smoketest/AppDelegate.swift" data-region-tag="default_firestore" is-upgraded syntax="Swift"><span class="devsite-syntax-n">FirebaseApp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">configure</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-kd">let</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/swift/firestore-smoketest/AppDelegate.swift#L31-L33" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/swift/firestore-smoketest/AppDelegate.swift#default_firestore" ><span class="devsite-syntax-n">AppDelegate</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">swift</span></a></div></pre></devsite-code> </section> <section> <h5 id="objective-c" data-text="Objective-C" tabindex="-1"><devsite-analytics-scope category="appleplat_objc_snippet_usage" label="firestore_initialize_objc" action="click">Objective-C</devsite-analytics-scope></h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-nd">@import</span> <span class="devsite-syntax-n">FirebaseCore</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-nd">@import</span> <span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Use</span> <span class="devsite-syntax-n">Firebase</span> <span class="devsite-syntax-n">library</span> <span class="devsite-syntax-n">to</span> <span class="devsite-syntax-n">configure</span> <span class="devsite-syntax-n">APIs</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">FIRApp</span> <span class="devsite-syntax-n">configure</span><span class="devsite-syntax-p">];</span> </pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/AppDelegate.m" data-region-tag="default_firestore" is-upgraded syntax="Objective-C"><span class="devsite-syntax-n">FIRFirestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-n">defaultFirestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">FIRFirestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">];</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/objc/firestore-smoketest-objc/AppDelegate.m#L32-L32" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/AppDelegate.m#default_firestore" ><span class="devsite-syntax-n">AppDelegate</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">m</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="kotlin" data-text="Kotlin" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Kotlin</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><span class="devsite-syntax-c1">// Access a <span class="notranslate">Cloud Firestore</span> instance from your Activity</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt" data-region-tag="get_firestore_instance" is-upgraded syntax="Kotlin"><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">firestore<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#L108-L108" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#get_firestore_instance" >DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">kt</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="java_1" data-text="Java" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Java</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// Access a <span class="notranslate">Cloud Firestore</span> instance from your Activity</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java" data-region-tag="get_firestore_instance" is-upgraded syntax="Java"><span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getInstance</span><span class="devsite-syntax-p">();</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#L130-L130" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#get_firestore_instance" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="dart_1" data-text="Dart" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Flutter" class="notranslate">Dart</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Dart"><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">instance</span><span class="devsite-syntax-p">;</span></pre></devsite-code> </section> <section> <h5 id="java_2" data-text="Java" tabindex="-1">Java</h5> The <span class="notranslate">Cloud Firestore</span> SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see <a href="https://firebase.google.com/docs/admin/setup#initialize-sdk">Initialize the Admin SDK</a>. <li> <b>Initialize on <span class="notranslate">Google Cloud</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.auth.oauth2.GoogleCredentials</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.cloud.firestore.Firestore</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.firebase.FirebaseApp</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.firebase.FirebaseOptions</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-c1">// Use the application default credentials</span> <span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getApplicationDefault</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">Builder</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setCredentials</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setProjectId</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">projectId</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">FirebaseApp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">initializeApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirestoreClient</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getFirestore</span><span class="devsite-syntax-p">();</span></pre></devsite-code> </li> <li> <b>Initialize on your own server</b> <p> To use the Firebase Admin SDK on your own server, use a <a href="https://cloud.google.com/compute/docs/authentication">service account</a>.</p> <p>Go to <a href="https://console.cloud.google.com/iam-admin/serviceaccounts"><b>IAM & admin > Service accounts</b></a> in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK: </p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.auth.oauth2.GoogleCredentials</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.cloud.firestore.Firestore</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.firebase.FirebaseApp</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.firebase.FirebaseOptions</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-c1">// Use a service account</span> <span class="devsite-syntax-n">InputStream</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serviceAccount</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FileInputStream</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"<var translate="no">path/to/serviceAccount.json</var>"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">fromStream</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">serviceAccount</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">Builder</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setCredentials</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">FirebaseApp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">initializeApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirestoreClient</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getFirestore</span><span class="devsite-syntax-p">();</span></pre></devsite-code> </section> <section> <h5 id="python_1" data-text="Python" tabindex="-1">Python</h5> The <span class="notranslate">Cloud Firestore</span> SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see <a href="https://firebase.google.com/docs/admin/setup#initialize-sdk">Initialize the Admin SDK</a>. <li> <b>Initialize on <span class="notranslate">Google Cloud</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore.py" data-region-tag="init_firestore_client" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore</span> <span class="devsite-syntax-c1"># Application Default credentials are automatically created.</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore.py#L20-L25" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore.py#init_firestore_client" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> <p>An existing application default credential can also be used to initialize the SDK.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore.py" data-region-tag="init_firestore_client_application_default" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore</span> <span class="devsite-syntax-c1"># Use the application default credentials.</span> <span class="devsite-syntax-n">cred</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">ApplicationDefault</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">cred</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore.py#L30-L38" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore.py#init_firestore_client_application_default" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> </li> <li> <b>Initialize on your own server</b> <p> To use the Firebase Admin SDK on your own server, use a <a href="https://cloud.google.com/compute/docs/authentication">service account</a>.</p> <p>Go to <a href="https://console.cloud.google.com/iam-admin/serviceaccounts"><b>IAM & admin > Service accounts</b></a> in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK: </p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore.py" data-region-tag="init_firestore_client_service_account" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore</span> <span class="devsite-syntax-c1"># Use a service account.</span> <span class="devsite-syntax-n">cred</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Certificate</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'path/to/serviceAccount.json'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">cred</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore.py#L43-L52" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore.py#init_firestore_client_service_account" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="python_2" data-text="Python" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="(Async)" class="notranslate">Python</span></span></h3> The <span class="notranslate">Cloud Firestore</span> SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see <a href="https://firebase.google.com/docs/admin/setup#initialize-sdk">Initialize the Admin SDK</a>. <li> <b>Initialize on <span class="notranslate">Google Cloud</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore_async.py" data-region-tag="init_firestore_async_client" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore_async</span> <span class="devsite-syntax-c1"># Application Default credentials are automatically created.</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore_async.py#L22-L27" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore_async.py#init_firestore_async_client" ><span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> <p>An existing application default credential can also be used to initialize the SDK.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore_async.py" data-region-tag="init_firestore_async_client_application_default" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore_async</span> <span class="devsite-syntax-c1"># Use the application default credentials.</span> <span class="devsite-syntax-n">cred</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">ApplicationDefault</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">cred</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore_async.py#L32-L40" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore_async.py#init_firestore_async_client_application_default" ><span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> </li> <li> <b>Initialize on your own server</b> <p> To use the Firebase Admin SDK on your own server, use a <a href="https://cloud.google.com/compute/docs/authentication">service account</a>.</p> <p>Go to <a href="https://console.cloud.google.com/iam-admin/serviceaccounts"><b>IAM & admin > Service accounts</b></a> in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK: </p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/firebase-admin-python/snippets/firestore/firestore_async.py" data-region-tag="init_firestore_async_client_service_account" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">firebase_admin</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">firestore_async</span> <span class="devsite-syntax-c1"># Use a service account.</span> <span class="devsite-syntax-n">cred</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Certificate</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'path/to/serviceAccount.json'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">cred</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">db</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-p">()</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-python/blob/e6c95e7ef6e8f4f77ff7e6540e6a070cb728aa4e/snippets/firestore/firestore_async.py#L45-L54" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-python/snippets/firestore/firestore_async.py#init_firestore_async_client_service_account" ><span class="devsite-syntax-n">firestore_async</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> </section> <section> <h5 id="c++_1" data-text="C++" tabindex="-1">C++</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-cpp/firestore/ios/firestore-snippets-cpp/AppDelegate.mm" data-region-tag="get_firestore_instance" is-upgraded syntax="C++"><span class="devsite-syntax-c1">// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().</span> <span class="devsite-syntax-n">App</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">Create</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">Firestore</span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Firestore</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">GetInstance</span><span class="devsite-syntax-p">();</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-cpp/blob/778b6bcc8e8e8fcabb1c2e3a8d11ab51a26aa77b/firestore/ios/firestore-snippets-cpp/AppDelegate.mm#L34-L36" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-cpp/firestore/ios/firestore-snippets-cpp/AppDelegate.mm#get_firestore_instance" ><span class="devsite-syntax-n">AppDelegate</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">mm</span></a></div></pre></devsite-code> </section> <section> <h5 id="node.js_1" data-text="Node.js" tabindex="-1">Node.js</h5> The <span class="notranslate">Cloud Firestore</span> SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see <a href="https://firebase.google.com/docs/admin/setup#initialize-sdk">Initialize the Admin SDK</a>. <ul> <li> <b>Initialize on <span class="notranslate">Cloud Functions</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="firestore_deps" is-upgraded syntax="JavaScript"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">applicationDefault</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">cert</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/app'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Timestamp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">FieldValue</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Filter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/firestore'</span><span class="devsite-syntax-p">);</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="initialize_app_functions" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">();</span> <div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L45-L48" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#initialize_app_functions" ><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </li> <li> <b>Initialize on <span class="notranslate">Google Cloud</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="firestore_deps" is-upgraded syntax="JavaScript"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">applicationDefault</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">cert</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/app'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Timestamp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">FieldValue</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Filter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/firestore'</span><span class="devsite-syntax-p">);</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="initialize_app" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">credential</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">applicationDefault</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">();</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L30-L35" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#initialize_app" ><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </li> <li> <b>Initialize on your own server</b> <p> To use the Firebase Admin SDK on your own server (or any other Node.js environment), use a <a href="https://cloud.google.com/compute/docs/authentication">service account</a>. Go to <a href="https://console.cloud.google.com/iam-admin/serviceaccounts"><b>IAM & admin > Service accounts</b></a> in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK: </p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="firestore_deps" is-upgraded syntax="JavaScript"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">applicationDefault</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">cert</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/app'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Timestamp</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">FieldValue</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Filter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'firebase-admin/firestore'</span><span class="devsite-syntax-p">);</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-region-tag="initialize_app_service_account" is-upgraded syntax="JavaScript"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">serviceAccount</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'./path/to/serviceAccountKey.json'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">credential</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">cert</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">serviceAccount</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">});</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getFirestore</span><span class="devsite-syntax-p">();</span> <div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L55-L63" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#initialize_app_service_account" ><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </li> </ul> </section> <section> <h5 id="go_1" data-text="Go" tabindex="-1">Go</h5> The <span class="notranslate">Cloud Firestore</span> SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see <a href="https://firebase.google.com/docs/admin/setup#initialize-sdk">Initialize the Admin SDK</a>. <li> <b>Initialize on <span class="notranslate">Google Cloud</span></b> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Go"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"log"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"firebase.google.com/go"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"google.golang.org/api/option"</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1">// Use the application default credentials</span> <span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Background</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-nx">conf</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">&</span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Config</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-nx">ProjectID</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">projectID</span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-nx">app</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">NewApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">conf</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalln</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">app</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Firestore</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalln</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">defer</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Close</span><span class="devsite-syntax-p">()</span></pre></devsite-code> </li> <li> <b>Initialize on your own server</b> <p> To use the Firebase Admin SDK on your own server, use a <a href="https://cloud.google.com/compute/docs/authentication">service account</a>.</p> <p>Go to <a href="https://console.cloud.google.com/iam-admin/serviceaccounts"><b>IAM & admin > Service accounts</b></a> in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK: </p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Go"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"log"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"firebase.google.com/go"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"google.golang.org/api/option"</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1">// Use a service account</span> <span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Background</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-nx">sa</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">option</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">WithCredentialsFile</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"path/to/serviceAccount.json"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nx">app</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">NewApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">sa</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalln</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">app</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Firestore</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalln</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">defer</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Close</span><span class="devsite-syntax-p">()</span></pre></devsite-code> </section> <section> <h5 id="php_1" data-text="PHP" tabindex="-1">PHP</h5> <section> <h3 id="firestore_setup_client_create-php" track-type="sampleTabNav" track-name="php" track-metadata-position="firestore_setup_client_create" data-text="PHP" tabindex="-1">PHP</h3> <p> For more on installing and creating a <span class="notranslate">Cloud Firestore</span> client, refer to <a href="/firestore/docs/reference/libraries" track-type="clientLibrariesReference" track-name="php" track-metadata-position="firestore_setup_client_create"><span class="notranslate">Cloud Firestore</span> Client Libraries</a>. </p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_client_create.php/main/firestore_setup_client_create" data-code-snippet="true" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_client_create.php" data-git-revision="main" data-region-tag="firestore_setup_client_create" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">use Google\Cloud\Firestore\FirestoreClient;</span> <span class="devsite-syntax-x">/**</span> <span class="devsite-syntax-x"> * Initialize Cloud Firestore with default project ID.</span> <span class="devsite-syntax-x"> */</span> <span class="devsite-syntax-x">function setup_client_create(string $projectId = null)</span> <span class="devsite-syntax-x">{</span> <span class="devsite-syntax-x"> // Create the Cloud Firestore client</span> <span class="devsite-syntax-x"> if (empty($projectId)) {</span> <span class="devsite-syntax-x"> // The `projectId` parameter is optional and represents which project the</span> <span class="devsite-syntax-x"> // client will act on behalf of. If not supplied, the client falls back to</span> <span class="devsite-syntax-x"> // the default project inferred from the environment.</span> <span class="devsite-syntax-x"> $db = new FirestoreClient();</span> <span class="devsite-syntax-x"> printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);</span> <span class="devsite-syntax-x"> } else {</span> <span class="devsite-syntax-x"> $db = new FirestoreClient([</span> <span class="devsite-syntax-x"> 'projectId' => $projectId,</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x">}<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/php-docs-samples/blob/75edc7d33043eef9db81bf2289aa3234f7141996/firestore/src/setup_client_create.php#L27-L47" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_client_create.php#firestore_setup_client_create" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_client_create.php" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_client_create">setup_client_create.php</span></a></div></code></pre></devsite-code> </div> </section> </section> <section> <h5 id="unity_1" data-text="Unity" tabindex="-1">Unity</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-gerrit-path="Assets/Products/CloudFirestore/CloudFirestoreSnippets.cs" data-gerrit-repo="devrel/samples/firebase/snippets-unity" data-region-tag="firestore_deps" is-upgraded syntax="C#"><span class="devsite-syntax-k">using</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">Firebase.Firestore</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-k">using</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">Firebase.Extensions</span><span class="devsite-syntax-p">;</span></pre></devsite-code> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-gerrit-path="Assets/Products/CloudFirestore/CloudFirestoreSnippets.cs" data-gerrit-repo="devrel/samples/firebase/snippets-unity" data-region-tag="fs_initialize" is-upgraded syntax="C#"><span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseFirestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">DefaultInstance</span><span class="devsite-syntax-p">;</span></pre></devsite-code> </section> <section> <h5 id="c_1" data-text="C#" tabindex="-1">C#</h5> <section> <h3 id="firestore_setup_client_create-csharp" track-type="sampleTabNav" track-name="csharp" track-metadata-position="firestore_setup_client_create" data-text="C#" tabindex="-1">C#</h3> <p> For more on installing and creating a <span class="notranslate">Cloud Firestore</span> client, refer to <a href="/firestore/docs/reference/libraries" track-type="clientLibrariesReference" track-name="csharp" track-metadata-position="firestore_setup_client_create"><span class="notranslate">Cloud Firestore</span> Client Libraries</a>. </p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs/main/firestore_setup_client_create_with_project_id" data-code-snippet="true" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-git-revision="main" data-region-tag="firestore_setup_client_create_with_project_id" dir="ltr" is-upgraded syntax="C#"><code translate="no" dir="ltr"><span class="devsite-syntax-n">FirestoreDb</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirestoreDb</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Create</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">project</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Created Cloud Firestore client with project ID: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">project</span><span class="devsite-syntax-p">);</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/d3b3cacb1d2f21d9afaa24fb39d24b63759f9437/firestore/api/Quickstart/Program.cs#L37-L38" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs#firestore_setup_client_create_with_project_id" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_client_create_with_project_id"><span class="devsite-syntax-n">Program</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cs</span></a></div></code></pre></devsite-code> </div> </section> </section> <section> <h5 id="ruby_1" data-text="Ruby" tabindex="-1">Ruby</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb/main/firestore_setup_client_create" data-code-snippet="true" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-git-revision="main" data-region-tag="firestore_setup_client_create" dir="ltr" is-upgraded syntax="Ruby"><code translate="no" dir="ltr"><span class="devsite-syntax-nb">require</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"google/cloud/firestore"</span> <span class="devsite-syntax-c1"># The `project_id` parameter is optional and represents which project the</span> <span class="devsite-syntax-c1"># client will act on behalf of. If not supplied, the client falls back to the</span> <span class="devsite-syntax-c1"># default project inferred from the environment.</span> <span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-no">Google</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-no">Cloud</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-no">Firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">project_id</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">project_id</span> <span class="devsite-syntax-nb">puts</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Created Cloud Firestore client with given project ID."</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/google-cloud-ruby/blob/38fdd8c3035d6630dc9f6b388649fdee3a356246/google-cloud-firestore/samples/quickstart.rb#L19-L26" class="gc-analytics-event" data-category="github_link" data-label="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb#firestore_setup_client_create" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_client_create"><span class="devsite-syntax-n">quickstart</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rb</span></a></div></code></pre></devsite-code> </div> </section> </div> <h2 id="add_data" data-text="Add data" tabindex="-1">Add data</h2> <p><span class="notranslate">Cloud Firestore</span> stores data in Documents, which are stored in Collections. <span class="notranslate">Cloud Firestore</span> creates collections and documents implicitly the first time you add data to the document. You do not need to explicitly create collections or documents.</p> <p>Create a new collection and a document using the following example code.</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h3 translate="no" id="web_4" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="modular API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/snippets/firestore-next/test-firestore/add_ada_lovelace.js" data-region-tag="add_ada_lovelace_modular" is-upgraded syntax="JavaScript"><span class="devsite-syntax-k">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">addDoc</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kr">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span><span class="devsite-syntax-w"> </span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">addDoc</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">),</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">first</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">last</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">born</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1815</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Document written with ID: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Error adding document: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">e</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/snippets/firestore-next/test-firestore/add_ada_lovelace.js#L8-L19" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/snippets/firestore-next/test-firestore/add_ada_lovelace.js#add_ada_lovelace_modular" ><span class="devsite-syntax-nx">add_ada_lovelace</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="web_5" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="namespaced API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/firestore/test.firestore.js" data-region-tag="add_ada_lovelace" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">add</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">first</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">last</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">born</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1815</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Document written with ID: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Error adding document: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/firestore/test.firestore.js#L125-L135" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/firestore/test.firestore.js#add_ada_lovelace" ><span class="devsite-syntax-nx">test</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h5 id="swift_1" data-text="Swift" tabindex="-1">Swift</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift" data-region-tag="add_ada_lovelace" is-upgraded syntax="Swift"><span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-k">do</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">let</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">addDocument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">])</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Document added with ID: </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Error adding document: </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/swift/firestore-smoketest/ViewController.swift#L158-L168" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift#add_ada_lovelace" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">swift</span></a></div></pre></devsite-code> </section> <section> <h5 id="objective-c_1" data-text="Objective-C" tabindex="-1">Objective-C</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m" data-region-tag="add_ada_lovelace" is-upgraded syntax="Objective-C"><span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-k">__block</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FIRDocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[[</span><span class="devsite-syntax-nb">self</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">collectionWithPath</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-s">@"users"</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">addDocumentWithData</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-l">@{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"first"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"last"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"born"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">@1815</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-l">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">completion</span><span class="devsite-syntax-o">:^</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-bp">NSError</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_Nullable</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">nil</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"Error adding document: %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"Document added with ID: %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}];</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/objc/firestore-smoketest-objc/ViewController.m#L92-L104" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m#add_ada_lovelace" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">m</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="kotlin_1" data-text="Kotlin" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Kotlin</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt" data-region-tag="add_ada_lovelace" is-upgraded syntax="Kotlin"><span class="devsite-syntax-c1">// Create a new user with a first and last name</span> <span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">hashMapOf</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">1815</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnSuccessListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnFailureListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error adding document"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#L136-L151" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#add_ada_lovelace" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">kt</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="java_3" data-text="Java" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Java</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java" data-region-tag="add_ada_lovelace" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// Create a new user with a first and last name</span> <span class="devsite-syntax-n">Map<String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HashMap</span><><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnSuccessListener</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OnSuccessListener<DocumentReference></span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nd">@Override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onSuccess</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getId</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">})</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnFailureListener</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OnFailureListener</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nd">@Override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onFailure</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nd">@NonNull</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error adding document"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#L162-L182" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#add_ada_lovelace" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="dart_2" data-text="Dart" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Flutter" class="notranslate">Dart</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart" data-region-tag="get_started_add_data_1" is-upgraded syntax="Dart"><span class="devsite-syntax-c1">// Create a new user with a first and last name</span> <span class="devsite-syntax-kd">final</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><<span class="devsite-syntax-kt">String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">dynamic</span>><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">1815</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'DocumentSnapshot added with ID: </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s1">'</span><span class="devsite-syntax-p">));</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-flutter/blob/0428b747c6033ef1f5e27d65e64bb6ed2d533bda/packages/firebase_snippets_app/lib/snippets/firestore.dart#L44-L53" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart#get_started_add_data_1" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dart</span></a></div></pre></devsite-code> </section> <section> <h5 id="java_4" data-text="Java" tabindex="-1">Java</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"alovelace"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Add document data with id "alovelace" using a hashmap</span> <span class="devsite-syntax-n">Map<String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HashMap</span><><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">//asynchronously write data</span> <span class="devsite-syntax-n">ApiFuture<WriteResult></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">set</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// ...</span> <span class="devsite-syntax-c1">// result.get() blocks on response</span> <span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Update time : "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getUpdateTime</span><span class="devsite-syntax-p">());</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/java-firestore/blob/289be19ffd74315ff35b3cf02a9e9c637a08c90f/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#L84-L94" class="gc-analytics-event" data-category="github_link" data-label="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-n">Quickstart</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="python_3" data-text="Python" tabindex="-1">Python</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"alovelace"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">({</span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-p">})</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-client/snippets.py#L42-L43" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></code></pre></devsite-code> </div> </section> <section> <h3 translate="no" id="python_4" data-text="Python" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="(Async)" class="notranslate">Python</span></span></h3> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py/main/firestore_setup_dataset_pt1_async" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1_async" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"alovelace"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">await</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">({</span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-p">})</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-async-client/snippets.py#L36-L37" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py#firestore_setup_dataset_pt1_async" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1_async"><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="c++_2" data-text="C++" tabindex="-1">C++</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp" data-region-tag="add_ada_lovelace" is-upgraded syntax="C++"><span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">Future<DocumentReference></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user_ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Add</span><span class="devsite-syntax-p">({{"first", FieldValue::String("Ada")}, {"last", FieldValue::String("Lovelace")}, {"born", FieldValue::Integer(1815)}});</span> <span class="devsite-syntax-n">user_ref</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">OnCompletion</span><span class="devsite-syntax-p">([](</span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Future<DocumentReference></span>&<span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Error</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">kErrorOk</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: "</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">id</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-s">"Error adding document: "</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error_message</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-cpp/blob/778b6bcc8e8e8fcabb1c2e3a8d11ab51a26aa77b/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#L79-L92" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#add_ada_lovelace" ><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cpp</span></a></div></pre></devsite-code> </section> <section> <h5 id="node.js_2" data-text="Node.js" tabindex="-1">Node.js</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="firebase/snippets-node/firestore/main/index.js/master/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-git-revision="master" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'users'</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'alovelace'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">set</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">first</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Ada'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">last</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Lovelace'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">born</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1815</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L86-L92" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="master" data-github-path="firebase/snippets-node/firestore/main/index.js" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="go_2" data-text="Go" tabindex="-1">Go</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="Go"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">_</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">_</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">Add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">map</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-kt">string</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-kd">interface</span><span class="devsite-syntax-p">{}{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Failed adding alovelace: %v"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/golang-samples/blob/82a424ef5ef9438de87a39cfde1a504d04f138a4/firestore/firestore_quickstart/main.go#L58-L65" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-nx">main</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">go</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="php_2" data-text="PHP" tabindex="-1">PHP</h5> <section> <h3 id="firestore_setup_client_create-php" track-type="sampleTabNav" track-name="php" track-metadata-position="firestore_setup_client_create" data-text="PHP" tabindex="-1">PHP</h3> <p> For more on installing and creating a <span class="notranslate">Cloud Firestore</span> client, refer to <a href="/firestore/docs/reference/libraries" track-type="clientLibrariesReference" track-name="php" track-metadata-position="firestore_setup_client_create"><span class="notranslate">Cloud Firestore</span> Client Libraries</a>. </p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$docRef = $db->collection('samples/php/users')->document('alovelace');</span> <span class="devsite-syntax-x">$docRef->set([</span> <span class="devsite-syntax-x"> 'first' => 'Ada',</span> <span class="devsite-syntax-x"> 'last' => 'Lovelace',</span> <span class="devsite-syntax-x"> 'born' => 1815</span> <span class="devsite-syntax-x">]);</span> <span class="devsite-syntax-x">printf('Added data to the lovelace document in the users collection.' . PHP_EOL);<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/php-docs-samples/blob/75edc7d33043eef9db81bf2289aa3234f7141996/firestore/src/setup_dataset.php#L40-L46" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1">setup_dataset.php</span></a></div></code></pre></devsite-code> </div> </section> </section> <section> <h5 id="unity_2" data-text="Unity" tabindex="-1">Unity</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-gerrit-path="Assets/Products/CloudFirestore/CloudFirestore_AddData.cs" data-gerrit-repo="devrel/samples/firebase/snippets-unity" data-region-tag="fs_add_data_1" is-upgraded syntax="C#"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"alovelace"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">SetAsync</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">ContinueWithOnMainThread</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Added data to the alovelace document in the users collection."</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span></pre></devsite-code> </section> <section> <h5 id="c_2" data-text="C#" tabindex="-1">C#</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="C#"><code translate="no" dir="ltr"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"alovelace"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Ada"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Lovelace"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">SetAsync</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">);</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/d3b3cacb1d2f21d9afaa24fb39d24b63759f9437/firestore/api/Quickstart/Program.cs#L46-L53" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-n">Program</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cs</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="ruby_2" data-text="Ruby" tabindex="-1">Ruby</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb/main/firestore_setup_dataset_pt1" data-code-snippet="true" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt1" dir="ltr" is-upgraded syntax="Ruby"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">#{</span><span class="devsite-syntax-n">collection_path</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">/alovelace"</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">first</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Ada"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">last</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Lovelace"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">born</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1815</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">puts</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Added data to the alovelace document in the users collection."</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/google-cloud-ruby/blob/38fdd8c3035d6630dc9f6b388649fdee3a356246/google-cloud-firestore/samples/quickstart.rb#L36-L46" class="gc-analytics-event" data-category="github_link" data-label="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb#firestore_setup_dataset_pt1" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt1"><span class="devsite-syntax-n">quickstart</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rb</span></a></div></code></pre></devsite-code> </div> </section> </div> <p>Now add another document to the <code translate="no" dir="ltr">users</code> collection. Notice that this document includes a key-value pair (middle name) that does not appear in the first document. Documents in a collection can contain different sets of information.</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h3 translate="no" id="web_6" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="modular API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/snippets/firestore-next/test-firestore/add_alan_turing.js" data-region-tag="add_alan_turing_modular" is-upgraded syntax="JavaScript"><span class="devsite-syntax-c1">// Add a second document with a generated ID.</span> <span class="devsite-syntax-k">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">addDoc</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kr">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span><span class="devsite-syntax-w"> </span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">addDoc</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">),</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">first</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">middle</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">last</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">born</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1912</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Document written with ID: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Error adding document: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">e</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/snippets/firestore-next/test-firestore/add_alan_turing.js#L8-L22" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/snippets/firestore-next/test-firestore/add_alan_turing.js#add_alan_turing_modular" ><span class="devsite-syntax-nx">add_alan_turing</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="web_7" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="namespaced API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/firestore/test.firestore.js" data-region-tag="add_alan_turing" is-upgraded syntax="JavaScript"><span class="devsite-syntax-c1">// Add a second document with a generated ID.</span> <span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">add</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">first</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">middle</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">last</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">born</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1912</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Document written with ID: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Error adding document: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/firestore/test.firestore.js#L155-L167" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/firestore/test.firestore.js#add_alan_turing" ><span class="devsite-syntax-nx">test</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h5 id="swift_2" data-text="Swift" tabindex="-1">Swift</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift" data-region-tag="add_alan_turing" is-upgraded syntax="Swift"><span class="devsite-syntax-c1">// Add a second document with a generated ID.</span> <span class="devsite-syntax-k">do</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">let</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">addDocument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">])</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Document added with ID: </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Error adding document: </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/swift/firestore-smoketest/ViewController.swift#L174-L185" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift#add_alan_turing" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">swift</span></a></div></pre></devsite-code> </section> <section> <h5 id="objective-c_2" data-text="Objective-C" tabindex="-1">Objective-C</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m" data-region-tag="add_alan_turing" is-upgraded syntax="Objective-C"><span class="devsite-syntax-c1">// Add a second document with a generated ID.</span> <span class="devsite-syntax-k">__block</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FIRDocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[[</span><span class="devsite-syntax-nb">self</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">collectionWithPath</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-s">@"users"</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">addDocumentWithData</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-l">@{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"first"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"middle"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"last"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">@"born"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">@1912</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-l">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">completion</span><span class="devsite-syntax-o">:^</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-bp">NSError</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_Nullable</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">nil</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"Error adding document: %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"Document added with ID: %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ref</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}];</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/objc/firestore-smoketest-objc/ViewController.m#L110-L123" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m#add_alan_turing" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">m</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="kotlin_2" data-text="Kotlin" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Kotlin</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt" data-region-tag="add_alan_turing" is-upgraded syntax="Kotlin"><span class="devsite-syntax-c1">// Create a new user with a first, middle, and last name</span> <span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">hashMapOf</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">1912</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnSuccessListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnFailureListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error adding document"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#L157-L173" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#add_alan_turing" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">kt</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="java_5" data-text="Java" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Java</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java" data-region-tag="add_alan_turing" is-upgraded syntax="Java"><span class="devsite-syntax-c1">// Create a new user with a first, middle, and last name</span> <span class="devsite-syntax-n">Map<String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HashMap</span><><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnSuccessListener</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OnSuccessListener<DocumentReference></span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nd">@Override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onSuccess</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentReference</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getId</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">})</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnFailureListener</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OnFailureListener</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nd">@Override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onFailure</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nd">@NonNull</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error adding document"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#L189-L210" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#add_alan_turing" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="dart_3" data-text="Dart" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Flutter" class="notranslate">Dart</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart" data-region-tag="get_started_add_data_2" is-upgraded syntax="Dart"><span class="devsite-syntax-c1">// Create a new user with a first and last name</span> <span class="devsite-syntax-kd">final</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><<span class="devsite-syntax-kt">String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">dynamic</span>><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"middle"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">1912</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-c1">// Add a new document with a generated ID</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'DocumentSnapshot added with ID: </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s1">'</span><span class="devsite-syntax-p">));</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-flutter/blob/0428b747c6033ef1f5e27d65e64bb6ed2d533bda/packages/firebase_snippets_app/lib/snippets/firestore.dart#L59-L69" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart#get_started_add_data_2" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dart</span></a></div></pre></devsite-code> </section> <section> <h5 id="java_6" data-text="Java" tabindex="-1">Java</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"aturing"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-c1">// Add document data with an additional field ("middle")</span> <span class="devsite-syntax-n">Map<String</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HashMap</span><><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">put</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">ApiFuture<WriteResult></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">set</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Update time : "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getUpdateTime</span><span class="devsite-syntax-p">());</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/java-firestore/blob/289be19ffd74315ff35b3cf02a9e9c637a08c90f/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#L100-L109" class="gc-analytics-event" data-category="github_link" data-label="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-n">Quickstart</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="python_5" data-text="Python" tabindex="-1">Python</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"aturing"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">({</span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"middle"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-p">})</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-client/snippets.py#L50-L51" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></code></pre></devsite-code> </div> </section> <section> <h3 translate="no" id="python_6" data-text="Python" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="(Async)" class="notranslate">Python</span></span></h3> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py/main/firestore_setup_dataset_pt2_async" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2_async" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"aturing"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">await</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-p">{</span><span class="devsite-syntax-s2">"first"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"middle"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"last"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"born"</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">)</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-async-client/snippets.py#L44-L47" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py#firestore_setup_dataset_pt2_async" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2_async"><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="c++_3" data-text="C++" tabindex="-1">C++</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp" data-region-tag="add_alan_turing" is-upgraded syntax="C++"><span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Add</span><span class="devsite-syntax-p">({{"first", FieldValue::String("Alan")}, {"middle", FieldValue::String("Mathison")}, {"last", FieldValue::String("Turing")}, {"born", FieldValue::Integer(1912)}})</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">OnCompletion</span><span class="devsite-syntax-p">([](</span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Future<DocumentReference></span>&<span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Error</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">kErrorOk</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-s">"DocumentSnapshot added with ID: "</span> <span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">id</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-s">"Error adding document: "</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error_message</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-cpp/blob/778b6bcc8e8e8fcabb1c2e3a8d11ab51a26aa77b/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#L101-L114" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#add_alan_turing" ><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cpp</span></a></div></pre></devsite-code> </section> <section> <h5 id="node.js_3" data-text="Node.js" tabindex="-1">Node.js</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="firebase/snippets-node/firestore/main/index.js/master/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-git-revision="master" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">aTuringRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'users'</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'aturing'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">aTuringRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">set</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'first'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Alan'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'middle'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Mathison'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'last'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Turing'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'born'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">1912</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L96-L103" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="master" data-github-path="firebase/snippets-node/firestore/main/index.js" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="go_3" data-text="Go" tabindex="-1">Go</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="Go"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">_</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">_</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">Add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">map</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-kt">string</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-kd">interface</span><span class="devsite-syntax-p">{}{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">})</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Failed adding aturing: %v"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/golang-samples/blob/82a424ef5ef9438de87a39cfde1a504d04f138a4/firestore/firestore_quickstart/main.go#L69-L77" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-nx">main</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">go</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="php_3" data-text="PHP" tabindex="-1">PHP</h5> <section> <h3 id="firestore_setup_client_create-php" track-type="sampleTabNav" track-name="php" track-metadata-position="firestore_setup_client_create" data-text="PHP" tabindex="-1">PHP</h3> <p> For more on installing and creating a <span class="notranslate">Cloud Firestore</span> client, refer to <a href="/firestore/docs/reference/libraries" track-type="clientLibrariesReference" track-name="php" track-metadata-position="firestore_setup_client_create"><span class="notranslate">Cloud Firestore</span> Client Libraries</a>. </p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$docRef = $db->collection('samples/php/users')->document('aturing');</span> <span class="devsite-syntax-x">$docRef->set([</span> <span class="devsite-syntax-x"> 'first' => 'Alan',</span> <span class="devsite-syntax-x"> 'middle' => 'Mathison',</span> <span class="devsite-syntax-x"> 'last' => 'Turing',</span> <span class="devsite-syntax-x"> 'born' => 1912</span> <span class="devsite-syntax-x">]);</span> <span class="devsite-syntax-x">printf('Added data to the aturing document in the users collection.' . PHP_EOL);<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/php-docs-samples/blob/75edc7d33043eef9db81bf2289aa3234f7141996/firestore/src/setup_dataset.php#L49-L56" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset.php" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2">setup_dataset.php</span></a></div></code></pre></devsite-code> </div> </section> </section> <section> <h5 id="unity_3" data-text="Unity" tabindex="-1">Unity</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-gerrit-path="Assets/Products/CloudFirestore/CloudFirestore_AddData.cs" data-gerrit-repo="devrel/samples/firebase/snippets-unity" data-region-tag="fs_add_data_2" is-upgraded syntax="C#"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"aturing"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">SetAsync</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">ContinueWithOnMainThread</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Added data to the aturing document in the users collection."</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span></pre></devsite-code> </section> <section> <h5 id="c_3" data-text="C#" tabindex="-1">C#</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="C#"><code translate="no" dir="ltr"><span class="devsite-syntax-n">DocumentReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Document</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"aturing"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Alan"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Mathison"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Turing"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">};</span> <span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">docRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">SetAsync</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-p">);</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/d3b3cacb1d2f21d9afaa24fb39d24b63759f9437/firestore/api/Quickstart/Program.cs#L62-L70" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-n">Program</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cs</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="ruby_3" data-text="Ruby" tabindex="-1">Ruby</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb/main/firestore_setup_dataset_pt2" data-code-snippet="true" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-git-revision="main" data-region-tag="firestore_setup_dataset_pt2" dir="ltr" is-upgraded syntax="Ruby"><code translate="no" dir="ltr"><span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">#{</span><span class="devsite-syntax-n">collection_path</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">/aturing"</span> <span class="devsite-syntax-n">doc_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">set</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">first</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Alan"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">middle</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Mathison"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">last</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Turing"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-ss">born</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">1912</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">puts</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Added data to the aturing document in the users collection."</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/google-cloud-ruby/blob/38fdd8c3035d6630dc9f6b388649fdee3a356246/google-cloud-firestore/samples/quickstart.rb#L56-L67" class="gc-analytics-event" data-category="github_link" data-label="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb#firestore_setup_dataset_pt2" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_pt2"><span class="devsite-syntax-n">quickstart</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rb</span></a></div></code></pre></devsite-code> </div> </section> </div> <h2 id="read_data" data-text="Read data" tabindex="-1">Read data</h2> <p>Use the data viewer in the <a href="https://console.firebase.google.com/project/_/firestore/data">Firebase console</a> to quickly verify that you've added data to <span class="notranslate">Cloud Firestore</span>.</p> <p>You can also use the "get" method to retrieve the entire collection.</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h3 translate="no" id="web_8" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="modular API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/snippets/firestore-next/test-firestore/get_all_users.js" data-region-tag="get_all_users_modular" is-upgraded syntax="JavaScript"><span class="devsite-syntax-k">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getDocs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kr">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"firebase/firestore"</span><span class="devsite-syntax-p">;</span><span class="devsite-syntax-w"> </span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">querySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getDocs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-nx">querySnapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">forEach</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-sb">`</span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-sb"> => </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">data</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-sb">`</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/snippets/firestore-next/test-firestore/get_all_users.js#L8-L13" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/snippets/firestore-next/test-firestore/get_all_users.js#get_all_users_modular" ><span class="devsite-syntax-nx">get_all_users</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="web_9" data-text="Web" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="namespaced API" class="notranslate">Web</span></span></h3> <aside class="note" style="padding-top:8px; padding-bottom:8px;"> <a href="//firebase.google.com/docs/web/learn-more#modular-version">Learn more</a> about the tree-shakeable modular Web API and <a href="//firebase.google.com/docs/web/modular-upgrade">upgrade</a> from the namespaced API.</aside> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-web/firestore/test.firestore.js" data-region-tag="get_all_users" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">get</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-nx">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">querySnapshot</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">querySnapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">forEach</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-sb">`</span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-sb"> => </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">data</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-sb">`</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-web/blob/467eaa165dcbd9b3ab15711e76fa52237ba37f8b/firestore/test.firestore.js#L143-L147" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-web/firestore/test.firestore.js#get_all_users" ><span class="devsite-syntax-nx">test</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></pre></devsite-code> </section> <section> <h5 id="swift_3" data-text="Swift" tabindex="-1">Swift</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift" data-region-tag="get_collection" is-upgraded syntax="Swift"><span class="devsite-syntax-k">do</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">let</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">snapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">getDocuments</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s"> => </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-si">())</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Error getting documents: </span><span class="devsite-syntax-si">\(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-si">)</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/swift/firestore-smoketest/ViewController.swift#L191-L198" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/swift/firestore-smoketest/ViewController.swift#get_collection" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">swift</span></a></div></pre></devsite-code> </section> <section> <h5 id="objective-c_3" data-text="Objective-C" tabindex="-1">Objective-C</h5> <div style="margin-top: 5px; margin-bottom: 5px;"> <b>Note:</b> This product is not available on watchOS and App Clip targets. </div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m" data-region-tag="get_collection" is-upgraded syntax="Objective-C"><span class="devsite-syntax-p">[[</span><span class="devsite-syntax-nb">self</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">collectionWithPath</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-s">@"users"</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">getDocumentsWithCompletion</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-o">^</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">FIRQuerySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_Nullable</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-bp">NSError</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_Nullable</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">nil</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"Error getting documents: %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">FIRDocumentSnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">*</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">NSLog</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">@"%@ => %@"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">documentID</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}];</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-ios/blob/81f643355f68e16fa9f3f93642cdd19aa372f5fa/firestore/objc/firestore-smoketest-objc/ViewController.m#L129-L139" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-ios/firestore/objc/firestore-smoketest-objc/ViewController.m#get_collection" ><span class="devsite-syntax-n">ViewController</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">m</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="kotlin_3" data-text="Kotlin" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Kotlin</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt" data-region-tag="get_all_users" is-upgraded syntax="Kotlin"><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnSuccessListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s"> => </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">data</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnFailureListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span>> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error getting documents."</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">exception</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#L179-L188" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/kotlin/DocSnippets.kt#get_all_users" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">kt</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="java_7" data-text="Java" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Android" class="notranslate">Java</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java" data-region-tag="get_all_users" is-upgraded syntax="Java"><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">addOnCompleteListener</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OnCompleteListener<QuerySnapshot></span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nd">@Override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onComplete</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nd">@NonNull</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Task<QuerySnapshot></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">isSuccessful</span><span class="devsite-syntax-p">())</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">QueryDocumentSnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getResult</span><span class="devsite-syntax-p">())</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">d</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getId</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">" => "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getData</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">w</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">TAG</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Error getting documents."</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getException</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-android/blob/90d99933a308e9ec8dd5cb0f164a3640e5331f09/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#L216-L229" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-android/firestore/app/src/main/java/com/google/example/firestore/DocSnippets.java#get_all_users" ><span class="devsite-syntax-n">DocSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="dart_4" data-text="Dart" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="Flutter" class="notranslate">Dart</span></span></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart" data-region-tag="get_started_read_data" is-upgraded syntax="Dart"><span class="devsite-syntax-kd">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-kd">get</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-n">then</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-n">event</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-kd">var</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">event</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">docs</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2"> => </span><span class="devsite-syntax-si">${</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-flutter/blob/0428b747c6033ef1f5e27d65e64bb6ed2d533bda/packages/firebase_snippets_app/lib/snippets/firestore.dart#L75-L79" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-flutter/packages/firebase_snippets_app/lib/snippets/firestore.dart#get_started_read_data" ><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dart</span></a></div></pre></devsite-code> </section> <section> <h5 id="java_8" data-text="Java" tabindex="-1">Java</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java/main/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-git-revision="main" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-c1">// asynchronously retrieve all users</span> <span class="devsite-syntax-n">ApiFuture<QuerySnapshot></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">query</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-c1">// ...</span> <span class="devsite-syntax-c1">// query.get() blocks on response</span> <span class="devsite-syntax-n">QuerySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">querySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">query</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">get</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">List<QueryDocumentSnapshot></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">querySnapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getDocuments</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">QueryDocumentSnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"User: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getId</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"First: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getString</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"first"</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">contains</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">))</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Middle: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getString</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"middle"</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Last: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getString</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"last"</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Born: "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getLong</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"born"</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/java-firestore/blob/289be19ffd74315ff35b3cf02a9e9c637a08c90f/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#L152-L166" class="gc-analytics-event" data-category="github_link" data-label="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/java-firestore/samples/snippets/src/main/java/com/example/firestore/Quickstart.java" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read"><span class="devsite-syntax-n">Quickstart</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="python_7" data-text="Python" tabindex="-1">Python</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py" data-region-tag="firestore_setup_dataset_read" is-upgraded syntax="Python"><span class="devsite-syntax-n">users_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">docs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">users_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">doc</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">docs</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-sa">f</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">{</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2"> => </span><span class="devsite-syntax-si">{</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">to_dict</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-p">)</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-client/snippets.py#L58-L62" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-client/snippets.py#firestore_setup_dataset_read" ><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></pre></devsite-code> </section> <section> <h3 translate="no" id="python_8" data-text="Python" tabindex="-1"><span class="two-line-tab notranslate"><span tab-label="(Async)" class="notranslate">Python</span></span></h3> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py/main/firestore_quickstart_get_collection_async" data-code-snippet="true" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-git-revision="main" data-region-tag="firestore_quickstart_get_collection_async" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">users_ref</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"users"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">docs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">users_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">async</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">doc</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">docs</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-sa">f</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">{</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2"> => </span><span class="devsite-syntax-si">{</span><span class="devsite-syntax-n">doc</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">to_dict</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-p">)</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/python-docs-samples/blob/b52aeb30fbead60f38df94c516137b6f899c5ea0/firestore/cloud-async-client/snippets.py#L54-L58" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py#firestore_quickstart_get_collection_async" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/python-docs-samples/firestore/cloud-async-client/snippets.py" data-indented-block="" data-regexp="" data-region-tag="firestore_quickstart_get_collection_async"><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="c++_4" data-text="C++" tabindex="-1">C++</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-github-path="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp" data-region-tag="get_collection" is-upgraded syntax="C++"><span class="devsite-syntax-n">Future<QuerySnapshot></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">users</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-n">Get</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">users</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">OnCompletion</span><span class="devsite-syntax-p">([](</span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Future<QuerySnapshot></span>&<span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Error</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">kErrorOk</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">DocumentSnapshot</span>&<span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">-</span>><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-p">())</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">cout</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-s">"Error getting documents: "</span><span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">future</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">error_message</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> << </span><span class="devsite-syntax-n">std</span><span class="devsite-syntax-o">::</span><span class="devsite-syntax-n">endl</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-cpp/blob/778b6bcc8e8e8fcabb1c2e3a8d11ab51a26aa77b/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#L131-L141" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-cpp/firestore/android/FirestoreSnippetsCpp/app/src/main/cpp/snippets.cpp#get_collection" ><span class="devsite-syntax-n">snippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cpp</span></a></div></pre></devsite-code> </section> <section> <h5 id="node.js_4" data-text="Node.js" tabindex="-1">Node.js</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="firebase/snippets-node/firestore/main/index.js/master/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="firebase/snippets-node/firestore/main/index.js" data-git-revision="master" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">snapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'users'</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">get</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-nx">snapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">forEach</span><span class="devsite-syntax-p">((</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">id</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'=>'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">data</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-p">});</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-node/blob/cccc005f6ba6d3895d1b380215bf54c148dce3fa/firestore/main/index.js#L119-L122" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-node/firestore/main/index.js#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="master" data-github-path="firebase/snippets-node/firestore/main/index.js" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read"><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="go_4" data-text="Go" tabindex="-1">Go</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go/main/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-git-revision="main" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="Go"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">iter</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">client</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-nx">Documents</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">ctx</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">iter</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Next</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">iterator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Done</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">break</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Failed to iterate: %v"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">fmt</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">doc</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Data</span><span class="devsite-syntax-p">())</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/golang-samples/blob/82a424ef5ef9438de87a39cfde1a504d04f138a4/firestore/firestore_quickstart/main.go#L81-L91" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/golang-samples/firestore/firestore_quickstart/main.go" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read"><span class="devsite-syntax-nx">main</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">go</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="php_4" data-text="PHP" tabindex="-1">PHP</h5> <section> <h3 id="firestore_setup_client_create-php" track-type="sampleTabNav" track-name="php" track-metadata-position="firestore_setup_client_create" data-text="PHP" tabindex="-1">PHP</h3> <p> For more on installing and creating a <span class="notranslate">Cloud Firestore</span> client, refer to <a href="/firestore/docs/reference/libraries" track-type="clientLibrariesReference" track-name="php" track-metadata-position="firestore_setup_client_create"><span class="notranslate">Cloud Firestore</span> Client Libraries</a>. </p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset_read.php/main/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset_read.php" data-git-revision="main" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$usersRef = $db->collection('samples/php/users');</span> <span class="devsite-syntax-x">$snapshot = $usersRef->documents();</span> <span class="devsite-syntax-x">foreach ($snapshot as $user) {</span> <span class="devsite-syntax-x"> printf('User: %s' . PHP_EOL, $user->id());</span> <span class="devsite-syntax-x"> printf('First: %s' . PHP_EOL, $user['first']);</span> <span class="devsite-syntax-x"> if (!empty($user['middle'])) {</span> <span class="devsite-syntax-x"> printf('Middle: %s' . PHP_EOL, $user['middle']);</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> printf('Last: %s' . PHP_EOL, $user['last']);</span> <span class="devsite-syntax-x"> printf('Born: %d' . PHP_EOL, $user['born']);</span> <span class="devsite-syntax-x"> printf(PHP_EOL);</span> <span class="devsite-syntax-x">}</span> <span class="devsite-syntax-x">printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/php-docs-samples/blob/75edc7d33043eef9db81bf2289aa3234f7141996/firestore/src/setup_dataset_read.php#L40-L52" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset_read.php#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/php-docs-samples/firestore/src/setup_dataset_read.php" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read">setup_dataset_read.php</span></a></div></code></pre></devsite-code> </div> </section> </section> <section> <h5 id="unity_4" data-text="Unity" tabindex="-1">Unity</h5> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" data-code-snippet="true" data-gerrit-path="Assets/Products/CloudFirestore/CloudFirestoreSnippets.cs" data-gerrit-repo="devrel/samples/firebase/snippets-unity" data-region-tag="fs_get_all" is-upgraded syntax="C#"><span class="devsite-syntax-n">CollectionReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">usersRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">usersRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">GetSnapshotAsync</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-n">ContinueWithOnMainThread</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span>> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">QuerySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">task</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Result</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">foreach</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">DocumentSnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Documents</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Format</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"User: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Id</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">ToDictionary</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Format</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"First: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">]));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">ContainsKey</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Format</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Middle: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">]));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Format</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Last: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">]));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Format</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Born: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">]));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Debug</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Read all data from the users collection."</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">});</span></pre></devsite-code> </section> <section> <h5 id="c_4" data-text="C#" tabindex="-1">C#</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs/main/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-git-revision="main" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="C#"><code translate="no" dir="ltr"><span class="devsite-syntax-n">CollectionReference</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">usersRef</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">db</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Collection</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"users"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">QuerySnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">usersRef</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">GetSnapshotAsync</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-k">foreach</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">DocumentSnapshot</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">in</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">snapshot</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Documents</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"User: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Id</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dictionary<string</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">object</span>><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">ToDictionary</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"First: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"First"</span><span class="devsite-syntax-p">]);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">ContainsKey</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Middle: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Middle"</span><span class="devsite-syntax-p">]);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Last: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Last"</span><span class="devsite-syntax-p">]);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Born: {0}"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">documentDictionary</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s">"Born"</span><span class="devsite-syntax-p">]);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">WriteLine</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/d3b3cacb1d2f21d9afaa24fb39d24b63759f9437/firestore/api/Quickstart/Program.cs#L79-L93" class="gc-analytics-event" data-category="github_link" data-label="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="main" data-github-path="GoogleCloudPlatform/dotnet-docs-samples/firestore/api/Quickstart/Program.cs" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read"><span class="devsite-syntax-n">Program</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">cs</span></a></div></code></pre></devsite-code> </div> </section> <section> <h5 id="ruby_4" data-text="Ruby" tabindex="-1">Ruby</h5> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb/main/firestore_setup_dataset_read" data-code-snippet="true" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-git-revision="main" data-region-tag="firestore_setup_dataset_read" dir="ltr" is-upgraded syntax="Ruby"><code translate="no" dir="ltr"><span class="devsite-syntax-n">users_ref</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">col</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">collection_path</span> <span class="devsite-syntax-n">users_ref</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">do</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">|</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-o">|</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">puts</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"</span><span class="devsite-syntax-si">#{</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">document_id</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2"> data: </span><span class="devsite-syntax-si">#{</span><span class="devsite-syntax-n">user</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">data</span><span class="devsite-syntax-si">}</span><span class="devsite-syntax-s2">."</span> <span class="devsite-syntax-n">end<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/googleapis/google-cloud-ruby/blob/38fdd8c3035d6630dc9f6b388649fdee3a356246/google-cloud-firestore/samples/quickstart.rb#L77-L80" class="gc-analytics-event" data-category="github_link" data-label="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb#firestore_setup_dataset_read" data-code-snippet="true" data-git-revision="main" data-github-path="googleapis/google-cloud-ruby/google-cloud-firestore/samples/quickstart.rb" data-indented-block="" data-regexp="" data-region-tag="firestore_setup_dataset_read">quickstart</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rb</span></a></div></code></pre></devsite-code> </div> </section> </div> <h2 id="secure_your_data" data-text="Secure your data" tabindex="-1">Secure your data</h2> <p>If you're using the Web, Android, or Apple platforms SDK, use <a href="//firebase.google.com/docs/auth/">Firebase Authentication</a> and <a href="/docs/firestore/security/get-started"><span class="notranslate"><span class="notranslate">Cloud Firestore</span> Security Rules</span></a> to secure your data in <span class="notranslate">Cloud Firestore</span>.</p> <p>Here are some basic rule sets you can use to get started. You can modify your security rules in the <a href="https://console.firebase.google.com/project/_/firestore/rules"><strong>Rules tab</strong></a> of the console.</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="auth-required" data-text="Auth required" tabindex="-1">Auth required</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Scilab"><code translate="no" dir="ltr"><span class="devsite-syntax-c1">// Allow read/write access to a document keyed by the user's UID</span> <span class="devsite-syntax-n">service</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">cloud</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">match</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">databases</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">database</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">match</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">users</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">uid</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">allow</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">read</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">write</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-w"> </span>!<span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">null</span><span class="devsite-syntax-w"> && </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">uid</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">uid</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code></section> <section><h3 id="locked-mode" data-text="Locked mode" tabindex="-1">Locked mode</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Scilab"><code translate="no" dir="ltr"><span class="devsite-syntax-c1">// Deny read/write access to all users under any conditions</span> <span class="devsite-syntax-n">service</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">cloud</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">firestore</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">match</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">databases</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">database</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">documents</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">match</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">document</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">allow</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">read</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">write</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">false</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code></section> </div> <p>Before you deploy your Web, Android, or iOS app to production, also take steps to ensure that only your app clients can access your <span class="notranslate">Cloud Firestore</span> data. See the <a href="https://firebase.google.com/docs/app-check">App Check</a> documentation.</p> <p>If you're using one of the server SDKs, use <a href="https://cloud.google.com/firestore/docs/security/iam">Identity and Access Management (IAM)</a> to secure your data in <span class="notranslate">Cloud Firestore</span>.</p> <h2 id="watch_a_video_tutorial" data-text="Watch a video tutorial" tabindex="-1">Watch a video tutorial</h2> <p>For detailed guidance on getting started with the <span class="notranslate">Cloud Firestore</span> mobile client libraries, watch one of the following video tutorials:</p> <div class="ds-selector-tabs" data-ds-scope="lang"> <section> <h5 id="web_10" data-text="Web" tabindex="-1">Web</h5> <iframe class="devsite-embedded-youtube-video" data-video-id="BjtxPj6jRM8" width="560" height="315" data-autohide="1" data-showinfo="0" frameborder="0" allowfullscreen> </iframe> </section> <section> <h5 id="ios+_1" data-text="iOS+" tabindex="-1">iOS+</h5> <iframe class="devsite-embedded-youtube-video" data-video-id="1Fg7cwkmj_c" width="560" height="315" data-autohide="1" data-showinfo="0" frameborder="0" allowfullscreen> </iframe> </section> <section> <h5 id="android_1" data-text="Android" tabindex="-1">Android</h5> <iframe class="devsite-embedded-youtube-video" data-video-id="kDZYIhNkQoM" width="560" height="315" data-autohide="1" data-showinfo="0" frameborder="0" allowfullscreen> </iframe> </section> </div> <p>You can find more videos in the Firebase <a href="https://www.youtube.com/firebase">YouTube channel</a>.</p> <h2 id="next_steps" data-text="Next steps" tabindex="-1">Next steps</h2> <p>Deepen your knowledge with the following topics:</p> <ul> <li><strong>Codelabs</strong> — Learn to use <span class="notranslate">Cloud Firestore</span> in a real app by following the codelab for <a href="https://codelabs.developers.google.com/codelabs/firestore-android">Android</a>, <a href="https://codelabs.developers.google.com/codelabs/firestore-ios">iOS</a>, or <a href="https://codelabs.developers.google.com/codelabs/firestore-web">Web</a>.</li> <li><strong><a href="/docs/firestore/data-model">Data model</a></strong> — Learn more about how data is structured in <span class="notranslate">Cloud Firestore</span>, including hierarchical data and subcollections.</li> <li><strong><a href="/docs/firestore/manage-data/add-data">Add data</a></strong> — Learn more about creating and updating data in <span class="notranslate">Cloud Firestore</span>.</li> <li><strong><a href="/docs/firestore/query-data/get-data">Get data</a></strong> — Learn more about how to retrieve data.</li> <li><strong><a href="/docs/firestore/query-data/queries">Perform simple and compound queries</a></strong> — Learn how to run simple and compound queries.</li> <li><strong><a href="/docs/firestore/query-data/order-limit-data">Order and limit queries</a></strong> Learn how to order and limit the data returned by your queries.</li> </ul> <devsite-hats-survey class="nocontent" hats-id="Eo9GZTcG10ncf3CThQj0SEgFWynR" listnr-id="5244646"></devsite-hats-survey> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Firestore" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-feedback-url="https://firebase.google.com/support/contact/bugs-features/" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Send feedback </button> </devsite-feedback> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2025-02-13 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Firestore" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-feedback-url="https://firebase.google.com/support/contact/bugs-features/" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Need to tell us more? </button> </devsite-feedback> </template> <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"]],["Last updated 2025-02-13 UTC."],[],[]] </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"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Learn</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/docs/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Developer guides </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/reference/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > SDK & API reference </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/samples/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Samples </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/libraries/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Libraries </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/firebase/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > GitHub </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Stay connected</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//firebase.blog" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Check out the blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.reddit.com/r/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Find us on Reddit </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//x.com/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Follow on X </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/user/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Subscribe on YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/community/events" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Attend an event </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/support/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Contact support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Stack Overflow </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//firebase.community/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Slack community </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//groups.google.com/forum/#!forum/firebase-talk" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Google group </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/support/releases" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Release notes </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/brand-guidelines/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Brand guidelines </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/support/faq/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > FAQs </a> </li> </ul> </li> </ul> </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> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup-google-for-developers-dark-theme.svg" media="(prefers-color-scheme: none)" class="devsite-dark-theme" loading="lazy" alt="Google Developers"> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/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="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//developers.google.com/products/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </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="/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> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt" >Português</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel > </devsite-concierge> </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>[]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [], "ga4p": [], "gtm": [{"id": "GTM-N84485", "purpose": 0}], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "guide", "projectName": "Firestore", "signedIn": "False", "tenant": "firebase", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <firebase-gtm></firebase-gtm> <firebase-utm></firebase-utm> <script nonce="4EwQ2Golkf9oEESPjieoD0sWPowO9F"> (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/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/js/app_loader.js', '[4,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase","https://firebase-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/firebase/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|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,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],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","firebase.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Profiles__enable_release_notes_notifications","Concierge__enable_pushui","Cloud__enable_cloudx_experiment_ids","Concierge__enable_concierge","Experiments__reqs_query_experiments","Search__enable_suggestions_from_borg","EngEduTelemetry__enable_engedu_telemetry","Profiles__enable_recognition_badges","Cloud__enable_cloud_shell_fte_user_flow","MiscFeatureFlags__developers_footer_dark_image","Profiles__enable_completecodelab_endpoint","Profiles__enable_dashboard_curated_recommendations","BookNav__enable_tenant_cache_key","MiscFeatureFlags__enable_dark_theme","Search__enable_ai_search_summaries","Profiles__enable_awarding_url","Profiles__enable_completequiz_endpoint","Profiles__enable_complete_playlist_endpoint","MiscFeatureFlags__enable_explain_this_code","Cloud__enable_cloud_shell","Search__enable_dynamic_content_confidential_banner","Profiles__enable_developer_profiles_callout","Profiles__enable_profile_collections","Profiles__enable_page_saving","Cloud__enable_free_trial_server_call","DevPro__enable_developer_subscriptions","CloudShell__cloud_shell_button","TpcFeatures__enable_unmirrored_page_left_nav","Cloud__enable_cloud_dlp_service","Profiles__enable_join_program_group_endpoint","MiscFeatureFlags__emergency_css","Cloud__enable_llm_concierge_chat","DevPro__enable_cloud_innovators_plus","MiscFeatureFlags__enable_project_variables","Cloud__enable_cloud_facet_chat","Search__enable_page_map","MiscFeatureFlags__enable_view_transitions","Cloud__enable_legacy_calculator_redirect","Profiles__enable_public_developer_profiles","MiscFeatureFlags__enable_variable_operator","CloudShell__cloud_code_overflow_menu","Search__enable_ai_eligibility_checks","TpcFeatures__enable_mirror_tenant_redirects","Significatio__enable_by_tenant","Analytics__enable_clearcut_logging","Cloud__enable_cloudx_ping","MiscFeatureFlags__developers_footer_image","Profiles__require_profile_eligibility_for_signin","Profiles__enable_stripe_subscription_management","MiscFeatureFlags__enable_firebase_utm"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[4,"firebase","Firebase","firebase.google.com",null,"firebase-dot-devsite-v2-prod.appspot.com",null,null,[1,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1]],null,null,null,[1,null,1],[1,1,null,null,1]],null,[68,null,null,null,null,null,"/images/lockup.svg","/images/touchicon-180.png",null,null,null,1,1,1,null,null,null,null,null,null,null,2,null,null,null,"/images/lockup.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,[6,1,20,22,23,29,37],null,[[],[1,1]],[[null,null,null,null,["UA-24532603-9"],["GTM-N84485"],null,null,null,null,[["UA-24532603-9",1]],[["GTM-N84485",1]],1],[[2,5],[17,1],[36,4],[16,2],[46,8]],null,1],null,4],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>