Bidirectional sync between a local folder and Google Drive.
- Create a config file in the folder you want to sync (e.g.,
~/Documents/synced-folder/.gdrive-folder-sync.json):
{
"localPath": "~/Documents/synced-folder",
"gdriveFolderId": "1abc123...",
"tokenFile": "~/.config/gdrive-folder-sync/tokens.json"
}- (Optional) Set environment variables for token refresh:
export GOOGLE_CLIENT_ID="your-client-id"
export GOOGLE_CLIENT_SECRET="your-client-secret"- Run the daemon:
npx gdrive-folder-sync ~/Documents/synced-folder| Option | Required | Description |
|---|---|---|
localPath |
Yes | Local folder to sync |
gdriveFolderId |
Yes | Google Drive folder ID |
tokenFile |
Yes | Path to JSON file with access_token and optionally refresh_token |
clientId |
No | OAuth client ID for token refresh (defaults to GOOGLE_CLIENT_ID env var) |
clientSecret |
No | OAuth client secret for token refresh (defaults to GOOGLE_CLIENT_SECRET env var) |
{
"access_token": "ya29.a0...",
"refresh_token": "1//03..." // optional, needed for auto-refresh
}If clientId, clientSecret, and refresh_token are all provided, expired tokens are automatically refreshed. Otherwise the daemon will fail when the access token expires.
These files are automatically excluded from sync:
.gdrive-folder-sync.json(config).gdrive-folder-sync-state.json(state).DS_Store
- Local โ GDrive: Watches for file changes, debounces for 15 seconds, then pushes
- GDrive โ Local: Polls every 15 minutes for remote changes
- Conflicts: Last-write-wins based on modification time
Pull requests are welcomed on GitHub! To get started:
- Install Git and Node.js
- Clone the repository
- Install dependencies with
npm install - Run
npm run testto run tests - Build with
npm run build
Versions follow the semantic versioning spec.
To release:
- Use
npm version <major | minor | patch>to bump the version - Run
git push --follow-tagsto push with tags - Wait for GitHub Actions to publish to the NPM registry.