happyr/google-api-bundle
Symfony bundle that integrates the official Google APIs PHP client. It configures and exposes a ready-to-use Google_Client service, with bundle settings for application credentials, OAuth, and API access, simplifying Google service integration in Symfony applications.
Architecture fit. Poor. happyr/google-api-bundle is a Symfony bundle, not a Laravel package. It ships a Bundle class, extension/DI configuration, and service definitions bound to Symfony's container and kernel conventions. Laravel has no bundle registration mechanism, so the package cannot be installed and "wired up" the way its author intended. The underlying value — a configured Google_Client instance — is roughly 40 lines of a Laravel service provider, meaning the bundle's actual deliverable is largely subsumed by the framework glue we would write anyway.
Integration feasibility. Low-to-moderate, and only by bypassing the package. A Laravel integration would either (a) pull the bundle in and manually instantiate its services outside the Symfony container — fragile, since the extension class depends on Symfony Config/DependencyInjection components — or (b) skip the package and depend on google/apiclient directly, registering a singleton in a service provider. Option (b) is strictly better and makes the bundle irrelevant.
Technical risk. High, driven by staleness rather than code quality:
symfony/* version pins and transitive Guzzle/PSR constraints will likely conflict with a modern Laravel (guzzlehttp/guzzle ^7, current psr/*). Composer resolution failure or forced downgrades are the expected outcomes.google/apiclient, which is actively maintained; the bundle only adds risk without adding capability.Key questions for the discovery call.
google/apiclient alone suffices.google/apiclient directly?Stack fit. Mismatch at the packaging layer, adequate at the API layer. Recommendation: do not adopt the bundle. Adopt google/apiclient (v2.x) and wrap it ourselves:
GoogleClientServiceProvider binding a singleton Google\Client configured from config/google.php.SheetsClient) so feature code never touches raw Google_Service_*.Migration path. If a Symfony application currently uses the bundle, extract its configuration array (client ID, secret, scopes, service account JSON path, developer key) and remap it 1:1 into config/google.php. The bundle's only real behavior is building a Google_Client from that config; the mapping is mechanical. Consumer code that type-hints Google_Client or Google_Service_* transfers unchanged, which keeps the port low-risk.
Compatibility. Verify explicitly before committing: PHP version floor, guzzlehttp/guzzle major version, and psr/* constraints against the target Laravel release. Expect the bundle's pins to block Laravel upgrades; that is the primary reason to skip it. google/apiclient v2 tracks modern PHP and Guzzle 7 and should resolve cleanly.
Sequencing.
google/apiclient in a throwaway command.Maintenance. The bundle is a dead dependency. Taking it on means owning a fork or accepting permanent drift from Symfony and PHP releases, with zero upstream support. By contrast, google/apiclient is vendor-maintained; our own wrapper is small, legible, and testable — a much better long-term maintenance position, at the cost of ~1–2 days of initial build.
Support. No community to escalate to: 48 stars, no recent releases, no dependents. Internal bugs become ours alone. This is the decisive argument for the thin in-house wrapper, where at least the failure surface is code we wrote and understand.
Scaling. The wrapper is not the bottleneck; Google's quotas are. Plan for:
rateLimitExceeded.Failure modes to design for.
.env in the repo.Ramp-up. The bundle itself is trivial to learn; the real cost is Google API and OAuth fluency (scopes, consent, delegated access, quota semantics). Budget for one engineer to own the integration, with a documented runbook covering credential rotation, quota incidents, and token failure recovery. Expect 1–2 days for the wrapper and 3–5 days for the first production integration including tests and runbook.
How can I help you explore Laravel packages today?