Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Google Calendar Bundle Laravel Package

fungio/google-calendar-bundle

Symfony bundle for integrating Google Calendar into your PHP app. Wraps the Google API client with ready-made services to authenticate, manage calendars, and create or sync events, simplifying scheduling features in Symfony projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — the headline finding is a platform mismatch. Despite being catalogued as a "Laravel/PHP package," fungio/google-calendar-bundle is a Symfony 3 bundle. It ships a *Bundle class, a DependencyInjection/ extension, and YAML service definitions — none of which Laravel consumes. Laravel reuses individual Symfony components (HttpFoundation, Console, etc.), not framework bundles. There is no service provider, no facade, no publishable config, and no Laravel-style container wiring. Adopting this into a Laravel app means porting, not installing.

What is likely salvageable is the thin domain layer: whatever service classes wrap Google's PHP client for calendar/event CRUD. That is typically 300–600 lines of code — reproducible in a day or two against google/apiclient directly, which materially undercuts the case for adopting this package at all.

Integration feasibility — low. Signal quality reinforces this: 10 stars, 0 dependents, an opportunity score of 1.45 and an overall score of 0.23. That is the profile of an abandoned side project, not a dependency. Symfony 3 itself has been end-of-life since November 2021 (standard support ended 2018), so the package's composer.json will almost certainly pin symfony/framework-bundle: ^3.0, which will hard-conflict with any modern Laravel (Laravel 10/11 pull Symfony 6/7 components). A composer require will likely fail outright before any code is written.

Technical risk — high, concentrated in three places:

Risk Why it matters
Symfony 3 EOL Transitive constraints on old Symfony components; no security patching upstream.
Stale Google client Almost certainly pins google/apiclient v1.x or early v2.x. Google has since shipped breaking changes to auth (OAuth2 token handling), incremental sync (syncToken), and push notification channel semantics.
PHP version floor Likely PHP 5.6/7.0-era syntax in constraints. Modern Laravel requires 8.1+.
Zero community 0 dependents means zero other teams have hit the edge cases you will hit. No issue history, no Stack Overflow corpus.

Key questions for the engineering team before any commitment:

  1. What does the package actually contain beyond a wrapper around google/apiclient — is there real IP (recurrence handling, timezone normalization, multi-calendar fan-out) or just boilerplate?
  2. Which google/apiclient version and PHP constraint are pinned? Can we get a clean composer install in an isolated sandbox?
  3. Is the value proposition "calendar sync" or "OAuth2 flow"? The former is a solved problem with maintained Laravel packages (e.g. spatie/laravel-google-calendar); the latter is a 50-line controller.
  4. What is the license, and are we prepared to fork and own it permanently?

Integration Approach

Stack fit — do not integrate this package. The realistic options, ranked:

  1. (Recommended) google/apiclient v2 + a first-party Laravel service provider. ~1–2 days of work, current auth and sync semantics, fully under our control, no transitive Symfony 3 constraints. This is the baseline that any adoption decision must beat.
  2. A maintained Laravel-native wrapper (spatie/laravel-google-calendar or similar). Acceptable if the calendar surface is simple CRUD; check maintenance cadence and issue latency first.
  3. Vendor/extract from Fungio. Only justified if the spike reveals genuinely non-trivial domain logic worth preserving. Expect to own it forever.

Migration path, if we pursue option 3: copy the service classes into app/Services/GoogleCalendar/; strip every Symfony\Component\DependencyInjection and Symfony\Component\Config reference; replace bundle configuration (config.yml parameters) with config/google-calendar.php + a CalendarServiceProvider binding; swap any Symfony HTTP client or event dispatcher usage for Laravel equivalents; rewrite tests off PHPUnit/Symfony KernelTestCase onto Laravel's test harness. Budget 3–5 engineer-days plus a day of test repair, versus under a day for option 1.

Compatibility: treat this as a hard gate, not a risk to manage. Run composer require fungio/google-calendar-bundle --dry-run in a throwaway branch of the actual target app before the spike is scheduled. If it conflicts — and it almost certainly will — option 3 collapses to "copy-paste the source files," which changes the effort estimate and the security review scope.

Sequencing:

  1. Gate 0 (half day): composer dry-run against the real app + 30-minute source read to classify the package as "boilerplate" or "non-trivial IP." Kill or continue.
  2. Spike (1–2 days): OAuth2 (service account vs. per-user consent — this is a product decision, not a technical one), single-calendar read, single event write.
  3. Decision gate: build vs. adopt, with the spike output as evidence. Write it down; this package is exactly the kind of dependency that gets adopted by inertia.
  4. Build: provider, config, token storage/refresh, then sync.
  5. Sync hardening: incremental sync via syncToken, webhook channel registration and renewal, idempotency on retries.
  6. Observability: quota/error dashboards before any user-facing rollout.

Operational Impact

Maintenance — we become the maintainers on day one. With 0 dependents and 10 stars, there is no upstream to lean on and no realistic prospect of a PR being merged. Forking is not a contingency; it is the plan. Every hour spent porting is an hour spent on a codebase with no external reviewer and no CVE feed.

Support — effectively none. No issue tracker activity to consult, no community to escalate to. When Google changes its API surface (as it did with OAuth out-of-band flow deprecation and client library v2), we detect it in production or not at all. Contrast this with the maintained alternatives, which at minimum give us a canary.

Scaling — the constraint is Google's quotas, not our infrastructure. Default per-project allowance is roughly 1M queries/day with per-user-per-minute limits; a naive full-resync loop on a 10k-user base will hit 403 rateLimitExceeded quickly. Design requirements: exponential backoff with jitter, batched writes (events.batch), and incremental sync via syncToken rather than full listing. A stale Symfony 3 wrapper is unlikely to implement any of this out of the box — expect to build it regardless of which option we choose, which further erodes the package's value.

Failure modes to design against explicitly:

  • Token expiry / revocation — refresh tokens get invalidated by user password change or admin policy; requires a re-consent UX, not just an error log.
  • Webhook channel expiry — Google push notification channels last at most ~7 days and must be renewed on a scheduled job. Silent expiry means sync stops and nobody notices for a week. Alert on missing renewals.
  • Duplicate events — retries against a non-idempotent create path produce doubles. Use client-supplied event IDs or a dedupe key.
  • Timezone/DST correctness — the highest-frequency real-world bug class in calendar integrations, and exactly the kind of domain logic an unmaintained 2017-era package gets wrong.
  • Partial batch failure — batch responses return per-item errors; a 200 on the batch is not a 200 on the event.
  • Quota exhaustion cascading into user-visible latency.

Ramp-up: the wrapper itself is a low-skill, low-risk port. The actual complexity is in OAuth consent management and calendar sync semantics — budget 1–2 sprint-equivalents for a production-grade integration no matter which path we take. That framing matters for the decision: the package saves us at most a couple of days against a 2-sprint budget, while adding a permanently unmaintained dependency.

Recommendation: do not adopt. The 0.23 score is directionally correct. Run Gate 0 to confirm what we suspect, then default to google/apiclient v2 with an in-house provider. The only scenario that reverses this is the spike uncovering substantial, correct, non-obvious calendar domain logic in the Fungio source — and even then, the right move is to copy that logic into our codebase, not to take the dependency.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource