PHP 5 has reached end of support and will be
deprecated
on January 31, 2026. After deprecation, you won't be able to deploy PHP 5
applications, even if your organization previously used an organization policy to
re-enable deployments of legacy runtimes. Your existing PHP
5 applications will continue to run and receive traffic after their
deprecation date. We recommend that
you
migrate to the latest supported version of PHP.
Using Cloud Firestore in Datastore Mode
Stay organized with collections
Save and categorize content based on your preferences.
Firestore is a NoSQL document database built for automatic scaling,
high performance, and ease of application development. It is the newest version
of Datastore and introduces several improvements over
Datastore.
Because Firestore in Datastore mode
is optimized for server use cases and for
App Engine, we recommend using Firestore in
Datastore mode for databases that will be used primarily by
App Engine apps. Firestore in Native mode is most useful for
mobile and real-time notification use cases. For more information about
Firestore modes, see Choosing between Native Mode and
Datastore mode.
Using Datastore mode with App Engine
To use Datastore mode with App Engine:
If you haven't already done so,
create a database
and choose Firestore in Datastore mode.
You can use existing Datastore databases with App Engine
apps. These existing databases will be automatically upgraded to
Firestore in Datastore
mode.
In your app, declare Datastore as a dependency
by adding google/cloud-datastore
to your app's composer.json
file and running
composer install
from your app's directory. Learn more about
composer.
Use the Google Cloud Client Library to
read and write entities
and to query data.
Configuring indexes
Datastore mode uses
indexes
for every query your application makes. The indexes are updated whenever an
entity changes, so the results can be returned quickly when the app makes a
query.
Datastore mode automatically creates single-property indexes for use with
simple types of queries. For complex queries that include multiple properties,
you'll need to configure composite indexes in your app's index.yaml
file.
The App Engine development server will update your index.yaml
file
with the composite indexes needed to run your tests. Similarly, the
Datastore mode emulator can generate indexes
when you run tests.
You can also add the indexes to your app's
index.yaml
file manually if you do not run local
tests or your tests do not include complex queries.
Setting database permissions
By default, your app has all the permissions required to read and write to
Datastore mode and Firestore databases in your
Google Cloud project.
To manage these permissions, each App Engine app uses a default service
account
that gives full read and write access to Datastore mode
and Firestore databases in the same project as the app. You can
change the permissions of the default service
account,
but your app may lose access unless you assign an IAM role with the
required permissions.
For information about allowing other users, apps, or projects to access a database, see
Accessing your database.
Using the Datastore mode emulator for local testing
The Google Cloud CLI includes a local emulator of the production Datastore mode
mode environment.
You can use the emulator to develop and test your application locally. In
addition, the emulator can help you generate indexes for your production
Datastore mode mode instance and delete unneeded indexes.
If you use the App Engine local development
server to test your
app, you can ensure that the server will use the Datastore mode
emulator by setting the --support_datastore_emulator=true
flag when starting
the server.
If you are using the Datastore mode emulator, dev_appserver will display:
... Using Cloud Datastore Emulator.
Pricing, quotas, and limits
Datastore mode offers a free quota with daily limits. Paid
accounts offer unlimited storage, read, and write operations. More information
is available on the Datastore Quotas page.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-09-04 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eFirestore, an upgraded version of Datastore, is a NoSQL document database designed for automatic scaling, high performance, and straightforward application development, offering both Native mode and Datastore mode.\u003c/p\u003e\n"],["\u003cp\u003eFirestore in Datastore mode is recommended for App Engine applications, while Native mode is better suited for mobile and real-time notification use cases, with existing Datastore databases automatically upgrading to this mode.\u003c/p\u003e\n"],["\u003cp\u003eDatastore mode relies on indexes for all application queries, with automatic creation for single-property indexes and manual or emulator-assisted creation for complex composite indexes in the \u003ccode\u003eindex.yaml\u003c/code\u003e file.\u003c/p\u003e\n"],["\u003cp\u003eApp Engine apps have default service account permissions for Datastore mode and Firestore databases within the same Google Cloud project, though permissions can be adjusted via IAM roles.\u003c/p\u003e\n"],["\u003cp\u003eThe Datastore mode emulator, part of the Google Cloud CLI, allows for local development and testing, including index generation and deletion, and can be used in conjunction with the App Engine local development server.\u003c/p\u003e\n"]]],[],null,["# Using Cloud Firestore in Datastore Mode\n\nFirestore is a NoSQL document database built for automatic scaling,\nhigh performance, and ease of application development. It is the newest version\nof Datastore and introduces several improvements over\nDatastore.\n\nBecause Firestore in [Datastore mode](/datastore/docs)\nis optimized for server use cases and for\nApp Engine, we recommend using Firestore in\nDatastore mode for databases that will be used primarily by\nApp Engine apps. Firestore in Native mode is most useful for\nmobile and real-time notification use cases. For more information about\nFirestore modes, see [Choosing between Native Mode and\nDatastore mode](/datastore/docs/firestore-or-datastore).\n\nUsing Datastore mode with App Engine\n------------------------------------\n\nTo use Datastore mode with App Engine:\n\n1. If you haven't already done so,\n [create a database](/datastore/docs/store-query-data#create_a_database)\n and choose Firestore in Datastore mode.\n\n You can use existing Datastore databases with App Engine\n apps. These existing databases [will be automatically upgraded to\n Firestore in Datastore\n mode](/datastore/docs/upgrade-to-firestore).\n\n\n 1. In your app, declare Datastore as a dependency\n\n by adding `google/cloud-datastore` to your app's `composer.json` file and running\n `composer install` from your app's directory. Learn more about\n [composer](https://getcomposer.org).\n\n \u003cbr /\u003e\n\n 2. Use the Google Cloud Client Library to\n [read and write entities](/datastore/docs/concepts/entities)\n and to [query data](/datastore/docs/concepts/queries).\n\n Configuring indexes\n -------------------\n\n Datastore mode uses\n [indexes](/datastore/docs/concepts/indexes)\n for every query your application makes. The indexes are updated whenever an\n entity changes, so the results can be returned quickly when the app makes a\n query.\n\n Datastore mode automatically creates single-property indexes for use with\n simple types of queries. For complex queries that include multiple properties,\n you'll need to configure composite indexes in your app's `index.yaml` file.\n\n The App Engine development server will update your `index.yaml` file\n with the composite indexes needed to run your tests. Similarly, the\n [Datastore mode emulator can generate indexes](/datastore/docs/tools)\n when you run tests.\n\n You can also add the indexes to your app's\n `index.yaml` file [manually](/appengine/docs/legacy/standard/php/configuring-datastore-indexes-with-index-yaml) if you do not run local\n tests or your tests do not include complex queries.\n\n Setting database permissions\n ----------------------------\n\n By default, your app has all the permissions required to read and write to\n Datastore mode and Firestore databases in your\n Google Cloud project.\n\n To manage these permissions, each App Engine app uses a [default service\n account](/appengine/docs/legacy/standard/php/service-account)\n that gives full read and write access to Datastore mode\n and Firestore databases in the same project as the app. You can\n [change the permissions of the default service\n account](/appengine/docs/legacy/standard/php/access-control#modify-service-account),\n but your app may lose access unless you assign an IAM role with the\n [required permissions](/datastore/docs/access/iam#required_permissions).\n\n For information about allowing other users, apps, or projects to access a database, see\n [Accessing your database](/datastore/docs/activate).\n\n Using the Datastore mode emulator for local testing\n ---------------------------------------------------\n\n The Google Cloud CLI includes a local [emulator of the production Datastore mode\n mode environment](/datastore/docs/tools/datastore-emulator). You can use the emulator to develop and test your application locally. In addition, the emulator can help you generate indexes for your production Datastore mode mode instance and delete unneeded indexes.\n\n \u003cbr /\u003e\n\n If you use the App Engine [local development\n server](/appengine/docs/legacy/standard/python/tools/using-local-server) to test your\n app, you can ensure that the server will use the Datastore mode\n emulator by setting the `--support_datastore_emulator=true` flag when starting\n the server.\n\n If you are using the Datastore mode emulator, dev_appserver will display: \n\n ... Using Cloud Datastore Emulator.\n\n Pricing, quotas, and limits\n ---------------------------\n\n Datastore mode offers a free quota with daily limits. Paid\n accounts offer unlimited storage, read, and write operations. More information\n is available on the [Datastore Quotas](/appengine/docs/legacy/standard/php/quotas#Datastore) page."]]