A simple local web app to transfer folders from Dropbox to Google Drive — without downloading anything to your Mac.
This app uses rclone under the hood to stream files directly between cloud services. Your Mac acts as a relay — data flows through it but is never stored locally. This lets you move 750GB+ without needing that much disk space.
Dropbox ──(download)──→ Your Mac ──(upload)──→ Google Drive
(streamed, not saved)
- Node.js 18+ — Download
- rclone — Cloud sync tool
# macOS (Homebrew)
brew install rclone
# Or download from https://rclone.org/downloads/rclone configFollow the prompts:
n— New remote- Name:
dropbox(or any name you prefer) - Storage:
dropbox - Leave client_id and client_secret blank (press Enter)
n— No advanced configy— Auto config (opens browser to authorize)
rclone configFollow the prompts:
n— New remote- Name:
gdrive(or any name you prefer) - Storage:
drive - Leave client_id and client_secret blank
- Choose scope:
1(full access) - Leave root_folder_id blank
- Leave service_account_file blank
n— No advanced configy— Auto config (opens browser to authorize)
rclone listremotes
# Should show:
# dropbox:
# gdrive:# Clone/download this project, then:
cd cloud-transfer
# Install dependencies
npm install
# Start the app
npm run devOpen http://localhost:4790 in your browser.
- Select Source — Choose your Dropbox remote and browse to the folder you want to transfer
- Select Destination — Choose your Google Drive remote and pick where files should go
- Click Transfer — Watch the progress in real-time
- Keep Mac Awake — For long transfers, prevent sleep (see below)
Google Drive has a 750GB per day upload limit per user. If you're transferring more than 750GB:
- The transfer will pause when you hit the limit
- Wait 24 hours for the limit to reset
- Restart the transfer — already-copied files will be skipped
For transfers that take hours/days, prevent your Mac from sleeping:
# Open a new Terminal window and run:
caffeinate -d
# This prevents display sleep. Press Ctrl+C to stop when done.Or in System Settings → Energy Saver:
- Set "Turn display off" to Never (temporarily)
- Disable "Put hard disks to sleep"
If a transfer is interrupted (network issue, Mac sleep, etc.):
- Just start the transfer again with the same source/destination
- rclone will automatically skip files that already exist in the destination
- Only remaining files will be transferred
Speed depends on:
- Your internet upload/download speed
- Dropbox and Google Drive's current performance
- File sizes (many small files are slower than few large files)
Typical speeds: 20-100 MB/s on fast connections.
Make sure rclone is in your PATH:
which rclone
# Should show something like: /opt/homebrew/bin/rcloneIf installed via Homebrew but not found, restart your terminal.
Run rclone config to add your Dropbox and Google Drive remotes. See steps 2-3 above.
- Check your internet connection
- Try reducing parallel transfers:
- Edit
src/server/rclone.ts - Change
--transfers 4to--transfers 2
- Edit
- Check for rate limiting (Google Drive sometimes throttles)
- Make sure your OAuth tokens haven't expired
- Re-run
rclone configand re-authorize the remote - Check that you have permission to access the folder
Make sure both servers are running:
npm run dev
# Should show:
# 🚀 Cloud Transfer API running at http://localhost:4789
# VITE ready at http://localhost:4790# Install dependencies
npm install
# Run in development mode (hot reload)
npm run dev
# Build for production
npm run build
# Run production build
npm startcloud-transfer/
├── src/
│ ├── server/
│ │ ├── index.ts # Express API server
│ │ └── rclone.ts # rclone process manager
│ └── client/
│ ├── App.tsx # Main React app
│ ├── components/
│ │ ├── FolderPicker.tsx # Folder browser
│ │ ├── TransferProgress.tsx # Progress display
│ │ └── SetupGuide.tsx # Setup instructions
│ └── index.css # Tailwind styles
├── package.json
└── README.md
- Backend: Node.js, Express, TypeScript
- Frontend: React, Vite, Tailwind CSS
- Transfer Engine: rclone
MIT