GET users/alice.
The Cloud Firestore driver is not in the app. Picking Cloud Firestore in the Choose a Database sheet offers the
download before the form opens, and opening a saved Cloud Firestore connection installs it without asking.
See Plugins.
Quick setup
Click New Connection…, select Cloud Firestore or Firebase Realtime Database, pick an Auth Method, then click Save & Connect. With a service account key, leave Project ID empty: the key names the project. Leave Database URL empty as well, and the Realtime Database connection opens the project’s default instance.Connection settings
Both are managed services, so any version works, and there is no host, port or SSH tunnel to set.
Connection URL
There is no URL scheme for Firebase. Create the connection from the form.Authentication
Pick Service Account Key and generate a key in the Firebase console under Project settings, Service accounts. On a Mac wheregcloud is already signed in, Application Default Credentials needs no file.
Access comes from the account’s IAM roles, not from security rules. Cloud Datastore Viewer reads Firestore and Cloud Datastore User also writes it. Firebase Realtime Database Viewer reads the Realtime Database and Firebase Realtime Database Admin also writes it.
Cloud Firestore
Browsing collections
The sidebar lists the root collections, then their subcollections as collection groups such as*/orders, which reads every orders collection at any depth.
Every grid has __name__ first: the document ID, or the full path in a collection group. The other columns are the fields the documents on the page hold, in alphabetical order. A field a document lacks shows as No Field, not NULL. Maps and arrays show as JSON, a geopoint as latitude, longitude, and a reference as the path it points to.
Filtering and sorting
Filters and sorts run as one structured query. A filter value takes the type the field holds, soage = 30 matches the integer 30, and zip = 02134 matches the string when zip holds strings.
contains and not contains on a string field, ends with, the empty checks and REGEX are refused with the reason, since Firestore has no text search. Matching is always case-sensitive. Match any joins the rows with OR.
A raw filter row takes one
Filter object from the Firestore REST API, which reaches nested fields: {"fieldFilter": {"field": {"fieldPath": "address.city"}, "op": "EQUAL", "value": {"stringValue": "Milan"}}}.
A sort on a field leaves out the documents that do not have it, and the row count leaves them out too.
Editing
Each saved change is one request:
An edited cell keeps the type the field had: a string stays a string even when the new text is a number. A cell that held null, or no field, takes the type the column holds on other rows. Timestamps take RFC 3339 text such as
2026-10-12T08:00:00Z, geopoints 45.46, 9.19, bytes base64, and references a document path.
Edit Document opens the whole document as JSON. Types JSON lacks are written as one-key objects:
$double also takes "NaN", "Infinity" and "-Infinity". A map whose only key is one of these tags goes inside $map. Insert Document takes the same JSON, with __name__ as the ID or left out for a generated one.
Saving reads the document again and stops if it changed after you opened it, so another writer’s change is never overwritten.
Request editor
POST and PATCH bodies use the Edit Document JSON, on the same line or the lines under it. There is no PUT. Write a space or any of % ? # & = / inside an ID as its percent escape, such as GET users/John%20Doe. DELETE raises the dangerous query warning even on Silent. Other writes follow the connection’s Safe Mode level.
Realtime Database
Browsing nodes
The sidebar lists/, the root, and the root’s children when there are 500 or fewer. Open / for a root with more.
Every grid has $key first. Children that are objects add their fields as columns, and children that are plain values go in $value. Nested objects show as JSON. A node holding one plain value, such as /maintenance, shows one row with that path as its $key, and editing it writes the node itself.
Filtering and sorting
Filter on one column,$key, $value or a child field, and sort only by that column. The filter bar offers Match all only.
Other operators are refused with the reason. Ordering by a child field needs
.indexOn for it in the database rules.
A raw filter row takes a query string as written, such as orderBy="age"&startAt=18. When it names no limit, limitToFirst is added for the page, and orderBy="$key" too when it names no order.
Each page asks for every child up to the end of that page and drops the ones before it. Counting lists every key, so a grid shows no total until you click Count Exactly, and a filtered grid shows none at all.
Editing
A key cannot be empty or contain
., #, $, [, ] or /.
Edit Document opens a child as {"$key": "<path>", "$value": <JSON>}. Saving reads the node again and writes only if it still matches what you opened. Insert Document takes the same shape, or bare JSON for a child under a generated key.
Request editor
GET, PUT, PATCH, POST and DELETE take a path and, for writes, a JSON body on the same line or the lines under it. Query parameters apply to GET only, and a PATCH body is an object of the children to change. PUT / and DELETE / are refused: write or delete the root’s children one at a time.
A DELETE, a PUT that leaves the node empty and a PATCH that sets a child to null raise the dangerous query warning even on Silent. Other writes follow the connection’s Safe Mode level.
Emulators
Pick Emulator (no credentials), enter the emulators’ project as Project ID, and set Emulator Host to the Firestore or Database emulator. Unlessfirebase.json moves them, they listen on 127.0.0.1:8080 and 127.0.0.1:9000.
The Realtime Database connection opens the <project>-default-rtdb namespace. For another, set Database URL to http://127.0.0.1:9000/?ns=<name>.
SSL/TLS
Requests to Google are always HTTPS, and there is no SSL Mode. The emulators are plain HTTP.Limitations
- No real-time listeners. A grid shows what was read; refresh it to see later changes.
- Firestore pages with
offset, which Firestore bills as one read per skipped document. Filter to reach late rows rather than paging to them. Export reads with a cursor and skips nothing. - Realtime Database pages download every child before the page, so late pages of a large node are slow. Filter on
$keyto start further in. - Export fixes its columns from the first page. Fields that appear only later go into an
__extra__column as JSON. - Import is not available. Write documents from the request editor.
- The Structure tab lists the fields of a 50-document sample and is read-only. A field few documents hold can be missing from it.
- Datastore-mode databases are not listed. Use a Firestore Native database.
- Collection groups come from the first two documents of up to 30 root collections, one level down, and the list is kept for 10 minutes. Read any other path from the request editor, such as
GET users/alice/orders. - Not available on iPhone or iPad.
Troubleshooting
Permission denied: …
The account lacks the IAM role for the operation named after the colon. Grant one of the roles under Authentication, or connect with an account that has it.Enter a Project ID, or use a service account key that names one.
A Firestore connection found no project: the Application Default Credentials file names none andGOOGLE_CLOUD_PROJECT is not set. Fill in Project ID.

