Official 9Drive GitHub link: github.com/zenhosta/9drive. Every Google Drive account gives you 15 GB for free. Having four accounts is easy; using them is the annoying part: log into one, check if the file fits, log out, try the next… 9Drive pulls all your accounts into a single dashboard, adds up the space, and decides on its own which account stores each file.
It is free, open source, and self-hosted. This guide covers what it does, how to install it, how to create the Google credentials (where almost everyone gets stuck), the most common errors, and how it compares to MultCloud and rclone. Everything is based on the official README and the repository's public issues.
9Drive (zenhosta/9drive)
Go to the GitHub repositoryFree and open source · Apache-2.0 license · Credit to Zenhosta
What is 9Drive
9Drive is a web app that works as a storage gateway: you connect several Google Drive accounts and it presents them as if they were one. From the same dashboard you can:
- See the total space and what's left in each account.
- Upload files without worrying about which account has room.
- Organize them in virtual folders, preview, rename, move, or delete them.
- Share file links and check a quota history per account.
It's not limited to Google Drive either: it also supports S3-compatible storage such as Amazon S3, Cloudflare R2, Backblaze B2, Wasabi, or MinIO.
Note
Quick math: 4 accounts × 15 GB = 60 GB in one dashboard, with no subscription.
How it works under the hood
What happens when you upload a file
You connect your accounts
Sign in with Google and your first Drive connects automatically; add the rest from the dashboard.
9Drive tracks the space
It keeps count of used and free quota on every Drive or S3 storage.
It picks the destination
Based on the rule you choose: most free space, round-robin, or your priority order.
It streams the upload
The file passes through your server without touching its disk and lands in that account (in a folder called 9drive).
The key point for privacy: files are not kept on the server's disk. They pass through the server you install and go straight to your Drive or S3 storage. If you change something by hand inside the 9drive folder in Google Drive, the Sync Drive button brings it back into the dashboard.
For more technical users, there is also an upload API for your own tools (POST /api/v1/uploads with API keys), with cURL and JavaScript examples inside the app.
How to install it with Docker (the easy way)
You need Docker installed. The repository includes everything to run the database (MySQL), the backend, and the web app together.
- Clone the project and enter the folder:
git clone https://github.com/zenhosta/9drive.git
cd 9drive
- Prepare the config by copying the example file (on Windows PowerShell:
Copy-Item .env.docker.example .env):
cp .env.docker.example .env
-
Edit
.env: set long random strings (32+ characters) forJWT_ACCESS_SECRETandTOKEN_ENCRYPTION_KEY. You can leave the Google credentials (GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRET) blank for now and add them later from the app. -
Start everything:
docker compose up -d --build
- Open http://localhost:5173 and create your account. The backend runs at
http://localhost:4000and MySQL on port 3306.
You can also run it without Docker: you need Node.js 20+ and MySQL 8+, and the repo ships a script (setup.sh on Linux/macOS, setup.ps1 on Windows) that writes the .env files and installs dependencies. The exact steps are in the README.
Tip
Don't want to fight the terminal? Open Claude Code, paste the repository link, and say: «install this with Docker and walk me through it step by step». It explains every step, including how to create the Google credentials.
Google Cloud OAuth credentials, step by step
This is where most people get stuck. For 9Drive to access your Drives, it needs a free OAuth client created in Google Cloud Console (note: not Google Search Console). According to the README, you do it once and it takes about 10 minutes.
Google credentials for 9Drive
1. Create or pick a project
At console.cloud.google.com. The OAuth client and the Drive API must be in the SAME project.
2. Enable the Google Drive API
APIs & Services → Library → Google Drive API → Enable. It can take a few minutes to take effect.
3. OAuth consent screen
User type External, app name, support email and developer contact. Add the Drive and profile scopes.
4. Test users
While the app is in Testing mode, add EVERY Google account you plan to connect.
5. Create the client ID
Credentials → Create credentials → OAuth client ID → Web application. Add the origin and redirect URI.
6. Paste it into 9Drive
Settings → Google Credentials: Client ID, Client Secret and Redirect URI → Save Configuration.
These are the three scopes the README asks for on the consent screen:
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
And on the client ID (local install):
- Authorized JavaScript origin:
http://localhost:5173 - Authorized redirect URI:
http://localhost:4000/connected-accounts/google/callback
Copy the Client ID and Client Secret and give them to 9Drive in one of two ways:
- In the app (easiest): log in, go to Settings → Google Credentials, paste the Client ID, Client Secret, and Redirect URI, and click Save Configuration.
- From the terminal: put them in
.envand rundocker compose exec backend npm run seed:google-config(ornpm run seed:google-configinsidebackend/if you're not using Docker).
The credentials are stored encrypted in MySQL. Then add each account under Settings → Connect Drive and choose how uploads are distributed in Quota Tracker.
Note
If you deploy it on a server with your own domain, replace localhost with your public URLs in three places in .env: FRONTEND_URL, VITE_API_URL, and GOOGLE_REDIRECT_URI, and also in the authorized origins and URIs in Google Cloud. Put it behind HTTPS and don't expose the MySQL port to the internet.
Common errors and how to fix them
Taken from the README's troubleshooting section and from the repository's open and closed issues:
| Error or symptom | Cause | Fix |
|---|---|---|
| «Google Drive API has not been used in project… or it is disabled» | The Drive API is not enabled in the same project as the OAuth client | Enable it under APIs & Services → Library in the same project and wait a few minutes |
| «Access blocked… Error 403: access_denied» | The consent screen is in Testing mode and that account isn't a test user | Add the account under OAuth consent screen → Test users |
| Unverified app warning when connecting Drive (issue #18) | It's your own OAuth app, not verified by Google | Expected for personal use: if the app is yours, continue via «Advanced». To open it to other people, Google may require verification |
redirect_uri_mismatch | The redirect URI doesn't match the one in Google Cloud character for character | Use the exact same URI in Google Cloud, in 9Drive's Settings, and in GOOGLE_REDIRECT_URI |
| The web app still calls the old API URL | Vite bakes VITE_API_URL in at build time | Rebuild the frontend or run docker compose up -d --build |
prisma generate fails on Windows | A running Node process is locking the file | Stop the dev servers and run npx prisma generate in backend/ |
| «stream.push() after EOF» on upload (issue #2) | Upload bug that has been fixed | Update to the latest main (git pull and rebuild) |
| The demo at 9drive.zenhosta.com shows 502 or «Host error» (issues #12, #20, #24, #26, #27) | The demo server is down, not the code | Host it yourself: the demo isn't reliable for real use |
Tip
To see what is actually failing, check the backend logs: docker compose logs -f backend.
Security and Google's terms: what you should know
- You grant full Drive access. The
auth/drivescope lets 9Drive read, create, and delete files in those accounts. Only run it on a server you control and don't share the dashboard with anyone you don't trust. - Protect your secrets. Never push
.envto GitHub or shareTOKEN_ENCRYPTION_KEY,JWT_ACCESS_SECRET, or the Client Secret: with them, your account tokens can be decrypted. - There's an open bug that can delete files. Issue #21 (open as of today) reports that deleting a virtual folder also removes its files from Google Drive, even though the warning says otherwise. Until it's fixed, move files out of a folder before deleting it and keep backups of anything important.
- It's not a backup. Each file lives in a single account: if you lose that account, you lose what's in it.
- Google's terms. Connecting several of your own accounts through the official Drive API is what 9Drive does, but Google can limit or suspend accounts it considers abusive or mass-created to get around limits. Review the Google Terms of Service and Google Drive's additional terms before setting it up, especially for business use.
9Drive vs MultCloud vs rclone
| 9Drive | MultCloud | rclone | |
|---|---|---|---|
| What it is | Self-hosted web app | Third-party web service | Command-line tool |
| Price | Free (Apache-2.0) | Limited free plan and paid plans | Free (open source) |
| Pool space from several accounts | Yes, one dashboard with automatic routing | Manages several clouds in one place and transfers between them | Yes, with its «union» backend |
| Where your files travel | Through your own server | Through MultCloud's infrastructure | Through your own machine |
| Difficulty | Medium: Docker + Google Cloud | Low: sign up and connect | High if you don't use a terminal |
| Best for | One «big Drive» with a nice interface | Moving or syncing between clouds without installing anything | Backups, syncing, and scripts |
In short: if you want nothing to install, MultCloud; if you live in the terminal and want to automate backups, rclone; if you want your own dashboard that adds up your accounts' space and routes uploads automatically, 9Drive.
Who it's for (and who it isn't)
It's a fit if:
- You have several Google accounts and want to use all their free space.
- You're comfortable with Docker or have a small server to keep it running.
- You'd rather your files didn't go through a third-party service.
It's not a fit if:
- You want a one-tap mobile app: you set this up yourself (though you can use it on your phone as a PWA afterwards).
- You don't want to touch Google Cloud to create the credentials.
- You need redundant backups: 9Drive distributes files, it doesn't duplicate them.
Credits
9Drive is a project by Zenhosta, released under the Apache-2.0 license. All the code and documentation are on GitHub; there's a demo at 9drive.zenhosta.com, although according to the repository's issues it has had outages for a while. If it helps you, give the repository a star.