<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "CloudKitJS",
  "identifier" : "/documentation/CloudKitJS/CloudKit.Database",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "CloudKit JS"
    ],
    "preciseIdentifier" : "cl/CloudKit.Database"
  },
  "title" : "CloudKit.Database"
}
-->

# CloudKit.Database

A [`CloudKit.Database`](/documentation/CloudKitJS/CloudKit.Database) object represents a public or private database in an app container.

```
interface CloudKit.Database
```

## Overview

Each container has a public database whose data is accessible to all users and, if the current user is signed in, a private database whose data is accessible only by the current user. A database object applies operations to records, subscriptions, and zones within a database.

You do not create database objects yourself, nor should you subclass the [`CloudKit.Database`](/documentation/CloudKitJS/CloudKit.Database) class. You get a database object using either the [`publicCloudDatabase`](/documentation/CloudKitJS/CloudKit.Container/publicCloudDatabase) or [`privateCloudDatabase`](/documentation/CloudKitJS/CloudKit.Container/privateCloudDatabase) properties in the [`CloudKit.Container`](/documentation/CloudKitJS/CloudKit.Container) class. You get a [`CloudKit.Container`](/documentation/CloudKitJS/CloudKit.Container) object using methods in the [`CloudKit`](/documentation/CloudKitJS/CloudKit) namespace. For example, use [`CloudKit`](/documentation/CloudKitJS/CloudKit).[`getDefaultContainer`](/documentation/CloudKitJS/CloudKit/getDefaultContainer) to get the default container object.

```javascript
var container = CloudKit.getDefaultContainer();
var publicDatabase = container.publicCloudDatabase;
var privateDatabase = container.privateCloudDatabase;
```

Read access to the public database doesn’t require that the user sign in. Your web app may fetch records and perform queries on the public database, but by default your app may not save changes to the public database without a signed-in user. Access to the private database requires that the user sign in. To determine whether a user is authenticated, see [`setUpAuth`](/documentation/CloudKitJS/CloudKit.Container/setUpAuth) in [`CloudKit.Container`](/documentation/CloudKitJS/CloudKit.Container).

The asynchronous methods in this class return a `Promise` object that resolves when the operation completes or is rejected due to an error. For a description of the `Promise` class returned by these methods, go to [Mozilla Developer Network: Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).

This class is similar to the <doc://com.apple.documentation/documentation/CloudKit/CKDatabase> class in the CloudKit framework.

### Creating Your Schema

Before you can access records, you must create a schema from your native app using just-in-time schema (see [Creating a Database Schema by Saving Records](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitQuickStart/CreatingaSchemabySavingRecords/CreatingaSchemabySavingRecords.html#//apple_ref/doc/uid/TP40014987-CH3)) or using CloudKit Dashboard (see [Using CloudKit Dashboard to Manage Databases](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitQuickStart/EditingSchemesUsingCloudKitDashboard/EditingSchemesUsingCloudKitDashboard.html#//apple_ref/doc/uid/TP40014987-CH5)). Use CloudKit Dashboard to verify that the record types and fields appear in your app’s containers before you test your JavaScript code.

![](images/com.apple.cloudkitjs/media-2556286@2x.png)

## Topics

### Getting the Container ID

[`readonly attribute String containerIdentifier;`](/documentation/CloudKitJS/CloudKit.Database/containerIdentifier)

A unique identifier for the container that this database resides in.

### Accessing Records

[`Promise<CloudKit.RecordsResponse, CloudKit.CKError> saveRecords(
	CloudKit.Record|CloudKit.Record[] records,
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/saveRecords)

Saves records to the database.

[`Promise<CloudKit.RecordsResponse, CloudKit.CKError> fetchRecords(
	CloudKit.Record|CloudKit.Record[]|String|String[] records,
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/fetchRecords)

Fetches one or more records.

[`Promise<CloudKit.RecordsResponse, CloudKit.CKError> deleteRecords(
	CloudKit.Record|CloudKit.Record[]|String|String[] records,
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/deleteRecords)

Deletes one or more records.

[`Promise<CloudKit.QueryResponse, CloudKit.CKError> performQuery(
	CloudKit.Query|CloudKit.QueryResponse query,
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/performQuery)

Fetches records by using a query.

[`CloudKit.RecordsBatchBuilder newRecordsBatch(
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/newRecordsBatch)

Creates records batch builder object for modifying multiple records.

### Accessing Record Zones

[`Promise<CloudKit.RecordZonesResponse, CloudKit.CKError> saveRecordZones(
	CloudKit.ZoneID|CloudKit.ZoneID[]|String|String[] zones
);`](/documentation/CloudKitJS/CloudKit.Database/saveRecordZones)

Creates one or more zones in the database.

[`Promise<CloudKit.RecordZonesResponse, CloudKit.CKError> fetchRecordZones(
	CloudKit.ZoneID|CloudKit.ZoneID[]|String|String[] zones
);`](/documentation/CloudKitJS/CloudKit.Database/fetchRecordZones)

Fetches one or more zones.

[`Promise<CloudKit.RecordZonesResponse, CloudKit.CKError> fetchAllRecordZones();`](/documentation/CloudKitJS/CloudKit.Database/fetchAllRecordZones)

Fetches all zones in the database.

[`Promise<CloudKit.RecordZonesResponse, CloudKit.CKError> deleteRecordZones(
	CloudKit.ZoneID|CloudKit.ZoneID[]|String|String[] zones
);`](/documentation/CloudKitJS/CloudKit.Database/deleteRecordZones)

Deletes the specified zones.

### Subscribing to Changes

[`Promise<CloudKit.SubscriptionsResponse, CloudKit.CKError> saveSubscriptions(
	CloudKit.Subscription|CloudKit.Subscription[] subscriptions
);`](/documentation/CloudKitJS/CloudKit.Database/saveSubscriptions)

Saves one or more subscriptions to record changes.

[`Promise<CloudKit.SubscriptionsResponse, CloudKit.CKError> fetchSubscriptions(
	CloudKit.Subscription|CloudKit.Subscription[]|String|String[] subscriptions
);`](/documentation/CloudKitJS/CloudKit.Database/fetchSubscriptions)

Fetches one or more subscriptions.

[`Promise<CloudKit.SubscriptionsResponse, CloudKit.CKError> fetchAllSubscriptions();`](/documentation/CloudKitJS/CloudKit.Database/fetchAllSubscriptions)

Fetches all subscriptions in the schema.

[`Promise<CloudKit.SubscriptionsResponse, CloudKit.CKError> deleteSubscriptions(
	CloudKit.Subscription|CloudKit.Subscription[]|String|String[] subscriptions
);`](/documentation/CloudKitJS/CloudKit.Database/deleteSubscriptions)

Deletes one or more subscriptions.

### Fetching Changes

[`readonly attribute CloudKit.DatabaseScope databaseScope;`](/documentation/CloudKitJS/CloudKit.Database/databaseScope)

The type of database (public, private, or shared).

[`Promise<CloudKit.DatabaseChangesResponse, CKError> fetchDatabaseChanges(
	optional Object options
);`](/documentation/CloudKitJS/CloudKit.Database/fetchDatabaseChanges)

Fetch changed record zones in the database.

[`Promise<CloudKit.RecordZoneChangesResponse, CloudKit.CKError> fetchRecordZoneChanges(
	CloudKit.RecordZoneChangesOptions|CloudKit.RecordZoneChangesOptions[] options
);`](/documentation/CloudKitJS/CloudKit.Database/fetchRecordZoneChanges)

Fetch changes to the specified record zones in the database.

### Sharing Records

[`Promise<CloudKit.SharingUIResult, CloudKit.CKError> shareWithUI(
	Object options
);`](/documentation/CloudKitJS/CloudKit.Database/shareWithUI)

Presents a UI to the user which lets them share a record with other users.

### Logging

[`String toString();`](/documentation/CloudKitJS/CloudKit.Database/toString)

Returns a string representation of this object.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)