docs/replication-google-drive.md
Sync your RxDB application state with Google Drive.
import {Steps} from '@site/src/components/steps'; import {BetaBlock} from '@site/src/components/beta-block'; import {HeadlineWithIcon} from '@site/src/components/headline-with-icon';
The replication-google-drive plugin allows you to replicate your client-side RxDB database to a folder in the user's Google Drive. This enables cross-device sync for single users without requiring any backend server.
The replication uses the Google Drive API v3 and v2.
You need to enable the Google Drive API in the Google Cloud Console and create credentials (OAuth 2.0 Client ID) for your application.
Your application must handle the OAuth flow to get an accessToken from Google. You can use libraries like @react-oauth/google or the Google Identity Services SDK.
Once you have the accessToken, you can start the replication.
import { replicateGoogleDrive } from 'rxdb/plugins/replication-google-drive';
const replicationState = await replicateGoogleDrive({
replicationIdentifier: 'my-app-drive-sync',
collection: myRxCollection, // RxCollection
googleDrive: {
oauthClientId: 'YOUR_GOOGLE_CLIENT_ID',
authToken: 'USER_ACCESS_TOKEN',
folderPath: 'my-app-data/user-1'
},
live: true,
pull: {
batchSize: 60,
modifier: doc => doc // (optional) modify invalid data
},
push: {
batchSize: 60,
modifier: doc => doc // (optional) modify before sending
}
});
// Observe replication states
replicationState.error$.subscribe(err => {
console.error('Replication error:', err);
});
replicationState.awaitInitialReplication().then(() => {
console.log('Initial replication done');
});
Google Drive does not provide real-time events for file changes. If a user changes data on User Device A, User Device B would not know about it until it periodically polls the Drive API. To achieve real-time updates, this plugin uses WebRTC to signal changes between connected devices.
signaling subfolder on Google Drive.WebRTC is native in browsers but requires a polyfill in Node.js.
import wrtc from 'node-datachannel/polyfill'; // or 'wrtc' package
// ...
const replicationState = await replicateGoogleDrive({
// ...
signalingOptions: {
wrtc // Pass the polyfill here
}
});
string: The OAuth 2.0 Client ID of your application.string: The valid access token associated with the user.string: The path to the folder in Google Drive where data should be stored.
docs (for data) and signaling (for WebRTC).string (optional): Defaults to https://www.googleapis.com. Useful for mocking or proxies.number (optional): Default 10000 (10s). The plugin uses a transaction file in Drive to ensure data integrity during writes. This is the timeout after which a lock is considered stale.Standard RxDB Replication Options for batch size, modifiers, etc.
docs subfolder.[primaryKey].json.modifiedTime of files in Google Drive.transaction file is locked by another device, the write retries until the lock is released or times out.For testing, it is recommended to use google-drive-mock. It simulates the Google Drive API so you can run tests without real credentials.