GDriveVault is a native SwiftUI macOS app for moving large Google Drive datasets with rclone. It coordinates multiple Google Drive remotes as a failover pool, tracks each account against Google's 750 GB/day transfer window, and reports status to GDriveVault Control.
The app is designed for a simple operator workflow: configure one or more sync profiles, choose the local and Drive folders, then run saved jobs or drag files/folders onto the Dashboard for quick upload.
git@github.com:robgwi/GDriveVault.git
- macOS 14 or newer
- Apple Silicon Mac for the current packaged build
- Xcode 26 or newer to build from source
rcloneinstalled at/opt/homebrew/bin/rcloneor/usr/local/bin/rclone- A GDriveVault Control license or dashboard approval from
https://app.gdrivevault.com - One or more Google Drive
rcloneremotes
Install rclone with Homebrew:
brew install rcloneIf Xcode has not been used on the Mac yet, accept the license first:
sudo xcodebuild -licenseBuild and run from the repository:
swift run GDriveVaultBuild release mode only:
swift build -c releaseUse the packaging script to build a release .app bundle and zip it:
./scripts/package-mac.shThe script creates:
dist/GDriveVault.app
dist/GDriveVault-mac-arm64-1.3.8.zip
Set a release version when packaging:
VERSION=1.0.1 BUILD_NUMBER=2 ./scripts/package-mac.shTo install on another Mac:
- Copy
dist/GDriveVault-mac-arm64-1.3.8.zipto the target Mac. - Unzip it.
- Drag
GDriveVault.appinto/Applications. - Install
rclonewith Homebrew. - Launch GDriveVault and activate it with a license key or approve it from GDriveVault Control.
The packaged app is ad-hoc signed by default. For external distribution, sign with a Developer ID certificate and notarize the zip or DMG.
The script accepts environment variables:
VERSION=1.3.8
BUILD_NUMBER=1
CONFIGURATION=release
SIGN_IDENTITY=-
Example with a Developer ID identity:
SIGN_IDENTITY="Developer ID Application: Your Company (TEAMID)" VERSION=1.0.1 BUILD_NUMBER=2 ./scripts/package-mac.shGDriveVault is locked to the production control server:
https://app.gdrivevault.com
On first launch, the app opens the license screen. The app cannot be used until it is registered.
There are two supported activation paths:
- Enter a license key directly in the app.
- Leave the license key blank and let the app request dashboard approval.
When dashboard approval is used, GDriveVault stores the pending approval request ID, polls the server, receives the generated license key after approval, and then registers the device token for control commands and heartbeat updates.
GDriveVault uses the active rclone.conf file from the local Mac. It can:
- Open the interactive
rclone configwizard inside the app. - Import another
rclone.conffile. - Edit profile sections directly.
- Browse remote folders from each profile's configured Google Drive root, team drive, or root folder.
Common config path:
~/.config/rclone/rclone.conf
A sync profile stores:
- Local source folder
- Remote Drive path
- Transfer direction, upload or download
- Selected
rcloneprofiles/remotes - Transfer mode
- Worker/checker counts
- Dry-run setting
Selected profiles form the failover pool. If one profile reaches its remaining transfer limit or exits before completion, GDriveVault can continue with the next selected profile.
Upload jobs run from the local folder to the Drive path. Download jobs reverse the same job and run from the Drive path to the local folder while still using the selected profile pool.
The Dashboard supports drag-and-drop uploads:
- Drop one file to upload it into the selected destination folder.
- Drop one folder to upload that folder.
- Drop multiple files/folders to stage them into a temporary batch folder first.
Temporary staged uploads are removed after the upload finishes successfully.
copy: Uploads new and changed files without deleting destination files.sync: Makes the destination match the source, including deletes.bisync: Two-way sync for advanced cases where both sides may change.
GDriveVault defaults new jobs to dry-run mode. Turn dry-run off only after confirming the source, destination, and selected profiles are correct.
Google Drive accounts have practical per-account transfer limits. GDriveVault tracks bytes reported by rclone for each profile in a rolling 24-hour window and applies each profile's remaining allowance with rclone --max-transfer.
You can reset usage in the app if the local estimate differs from the real account state.
- Stop pauses the active
rcloneprocess while GDriveVault stays open. - Resume continues the paused process while the app remains open.
- Restart Sync reruns the same job after an interruption so
rclonecan skip completed files. - Cancel Job terminates the current process and halts failover.
If the app is closed during a transfer or a network error interrupts the process, a later restart reruns the same job with the same direction and selected profile pool. rclone compares source and destination and skips files that already completed. A partially written file may restart depending on the backend and file state.
After each run, GDriveVault writes logs under:
~/Library/Application Support/GDriveVault/Run Logs/
Each run folder contains:
- One
rclonelog per profile summary.txtwith job details, paths, status, transferred bytes, and log locations
GDriveVault can export a .gdrivevault-backup.json file containing:
- Saved sync profiles
- Account usage records
- Remote-control settings
- Google Chat settings
- Active
rclone.confcontents
The app can also push settings backups to GDriveVault Control. Treat these backups as sensitive because they may include rclone tokens.
GDriveVault supports the remote restore_settings_backup command. The agent fetches the backup from GDriveVault Control, applies it locally, and only acknowledges the command after restore succeeds.
The desktop app sends heartbeat data to GDriveVault Control, including:
- Device status
- Running job
- Current file
- Transfer speed and ETA
- Files added, updated, and deleted
- Recent changed files
- Account usage
- App version
- Internet speed test result
Supported remote commands include:
start_current
start_job
stop
resume
cancel_job
refresh_remotes
check_updates
install_update
restart_app
restore_settings_backup
GDriveVault can send updates to a Google Chat Space with an incoming webhook.
Supported notifications:
- Sync started
- Progress updates
- Completed file batches
- Sync completed
- Sync failed
Messages use the visible shared-drive/root label instead of internal rclone profile names.
GDriveVault checks GDriveVault Control at:
/api/updates/latest
Keep AppVersion.current in Sources/GoogleDriveClone/Models.swift aligned with each packaged release and update the control-server feed when publishing a new build.
When an update is available, a local user can click Install Update in GDriveVault. GDriveVault Control can also queue install_update for a connected agent. The agent downloads the published zip, verifies the optional SHA256 value if provided by the update feed or command payload, launches a helper installer, quits, replaces the old .app, and relaunches.