Turn folders in Google Drive and OneDrive into installable Playnite game libraries.
Cloud Storage is a Playnite library plugin for discovering, installing, and uninstalling games kept in cloud storage. Connect an account, choose one concrete folder, and its supported game packages appear in Playnite as a normal library source.
The plugin never writes to or deletes cloud files. Local games, downloads, staging data, and manifests stay together below one managed storage directory.
- Google Drive and Microsoft OneDrive with browser-based OAuth login.
- Read-only provider access with Windows-user-bound token encryption.
- Recursive discovery below a folder deliberately selected through the provider picker.
- ZIP, 7z, and RAR game archives.
- Standalone installers and installer bundles inside archives.
- Common cartridge and arcade ROM formats.
- Recursive ScummVM and MS-DOS game directories.
- Download and extraction progress with cancellation and duplicate-install protection.
- Safe archive extraction with traversal, link, encryption, and size checks.
- Installer-aware executable selection and editable Playnite play actions.
- Playnite emulator/profile validation before downloading ROMs.
- Managed uninstall that preserves files left behind by native uninstallers.
- Source reconciliation when a cloud package is moved or removed.
Once the add-on is accepted into Playnite's add-on database, install Cloud
Storage from Main menu > Add-ons > Browse > Libraries.
For a manual installation, download the latest .pext from
Releases, open it,
and let Playnite restart.
- Open
Main menu > Add-ons > Extension settings > Libraries > Cloud Storage. - Choose the managed root used for local games and temporary staging files.
- Click Connect Google Drive or Connect OneDrive and complete the provider's sign-in and consent screen.
- Choose a concrete game-package folder. Drive roots are intentionally not selectable, which prevents accidental whole-drive imports.
- Save settings and update the Cloud Storage library source.
Each provider is optional and can point to a different folder. Disconnecting a provider removes its local authorization; it does not modify the cloud account.
| Package | Import and installation behavior |
|---|---|
.zip, .7z, .rar |
Downloaded to staging, validated, extracted transactionally, then removed from staging after success. |
| Installer archive | Extracted, then the contained installer runs interactively. Files left by its uninstaller are preserved. |
| Standalone installer bundle | The setup executable and adjacent payload files are downloaded together before setup starts. |
| ROM | Copied byte-for-byte without extraction and attached to a compatible Playnite emulator profile. |
| ScummVM or MS-DOS directory | Downloaded recursively into one managed game directory and attached to a compatible Playnite emulator profile through a local launch marker. |
Cloud packages are authoritative only after a successful provider scan. A missing uninstalled package is removed from the library; an installed game is retained and marked unavailable so its local installation is not destroyed.
- OAuth uses the system browser, PKCE, random state, and an exact loopback callback.
- Google Drive requests restricted, read-only
drive.readonlyaccess because Google's per-file scope cannot enumerate the existing descendants of a selected folder. Cloud Storage's Playnite-native browser chooses the folder that the extension scans; other Drive locations are not scanned. OneDrive requests delegatedFiles.ReadandUser.Read. - Access and refresh tokens are encrypted with Windows DPAPI for the current Windows account and stored in Playnite's extension-data directory.
- Cloud Storage has no telemetry, analytics, advertising, or developer-operated backend.
- No user data or OAuth tokens are sent to the plugin author.
- Google Workspace data is handled under Google's API Services User Data Policy, including its Limited Use requirements.
See the full privacy policy.
- OneDrive currently browses the account's My files drive; shared items and SharePoint document libraries need explicit drive-identity support.
- Password-protected and multi-volume archives are rejected.
- Multi-file disc sets, BIOS/firmware, and shared emulator dependencies need separate content strategies.
- Arcade filenames that use MAME machine IDs need a dedicated MAME DAT metadata provider; that does not belong in this storage plugin.
Cloud integrations implement one complete ICloudSourceProvider facade for
authentication, folder selection, authoritative scanning, and package streams.
Provider records are translated into neutral CloudFileEntry objects, then one
shared discovery and installation pipeline handles the result.
Requirements:
- Windows and .NET Framework 4.6.2 tooling
- Playnite SDK 6.16.0
- A Playnite 10 development build or installation
Google's desktop OAuth token endpoint requires the client credential issued
with the registered client. Keep it out of source control by creating an
ignored CloudSource.BuildSecrets.props file at the repository root:
<Project>
<PropertyGroup>
<CloudSourceGoogleClientSecret>your-desktop-client-secret</CloudSourceGoogleClientSecret>
<CloudSourceGooglePickerApiKey>your-picker-api-key</CloudSourceGooglePickerApiKey>
</PropertyGroup>
</Project>dotnet build .\src\CloudSource.Playnite\CloudSource.Playnite.csproj
dotnet run --project .\tests\CloudSource.Playnite.Tests\CloudSource.Playnite.Tests.csprojArchitecture decisions are documented in docs/architecture.
Bug reports and focused contributions are welcome through GitHub Issues and
pull requests.
Licensed under the Apache License 2.0.
Attributions for reused designs and development dependencies are in
NOTICE.
