fungio/google-map-bundle
fungio/google-map-bundle is a Symfony bundle that simplifies embedding Google Maps in your templates. It offers configuration and Twig helpers for rendering maps, markers, and controls, letting you add interactive maps without repetitive JavaScript.
Architecture fit. The first finding is a category mismatch: this is a Symfony 4 bundle, not a Laravel package. It ships a Bundle subclass and a DI extension, which Laravel's package discovery will not register. In a Laravel codebase the bundle layer is dead weight; only the underlying map-building/service classes (and any Twig extension) would be reusable, and those would need manual wiring through a service provider. If the target stack is in fact Symfony, the fit is better but constrained to Symfony 4-era conventions.
Integration feasibility. Low. Adoption signals are effectively zero: 2 stars, 0 dependents, score 0.16, opportunity 13.81. There is no downstream usage to infer API stability from, no evidence of test coverage, and no indication of a release cadence. The bundle targets Symfony 4 (EOL November 2023), which implies PHP 7.x constraints that will conflict with Laravel 10/11 on PHP 8.1+. Expect to spend the first day simply resolving Composer constraints.
Technical risk. High and mostly non-technical:
ivory/google-map), implements its own builder, or emits raw JS. This determines whether we can salvage anything.Key questions.
composer.json constraints for PHP and Symfony, and does it install cleanly on our runtime?Stack fit. Assume Laravel. There is no supported path to install this as-is. Two viable routes:
Bundle/DependencyInjection/Twig layers, and re-expose the core map-building logic behind a Laravel service provider plus a Blade component. Cost: 3–5 days including tests.For Symfony targets, the salvage route is cheaper (bundle registration works), but Symfony 4 EOL still forces a fork-and-upgrade to Symfony 6/7.
Migration path. Treat this as a spike, not a commitment. Timebox 1–2 days: clone, run composer install against our PHP version, inspect the service definitions, and determine whether the map-building core is framework-agnostic. If the spike shows tight Twig/container coupling or unresolved dependency conflicts, stop and take the replace route. Do not build a facade over unmaintained code to "buy time" — that defers the rewrite without reducing it and adds an indirection layer to remove later.
Compatibility. Verify PHP constraint against our runtime (likely 8.2/8.3), check for Twig version pinning, and scan for deprecated Symfony 4 APIs (Symfony\Component\HttpKernel\Bundle\Bundle is fine, but Symfony\Bundle\FrameworkBundle helpers may not be). Run a static analysis pass (PHPStan) on any vendored code before relying on it.
Sequencing.
Maintenance. If we adopt, we own it. There is no upstream to merge from reliably, so every Google Maps API change, PHP upgrade, and security advisory lands on our team. Budget ~1–2 days per quarter for dependency and API drift. The replace route front-loads cost but converges to a smaller, better-understood surface we still own — but without the archaeology overhead.
Support. None. No vendor, no meaningful community (2 stars, 0 dependents), no documented issue triage. Internal runbooks and ownership must be established at adoption time, not after an incident.
Scaling. Application-side scaling is trivial — the bundle renders markup; the browser does the work. The real scaling axis is Google Maps billing and quota: map loads, dynamic map calls, and geocoding are separately metered. Instrument map instantiations as a product metric early, and set per-key quotas and budget alerts. A cached/static fallback for low-interaction contexts meaningfully reduces cost.
Failure modes.
Ramp-up. The code volume is small, so onboarding is fast — but knowledge is concentrated in whoever performs the spike. Require that person to leave a written architecture note and characterization tests behind, or the bus factor is one. Overall recommendation: do not adopt as a dependency; run the spike only to harvest reusable logic, and default to a first-party, ~200-line Blade component with a config-driven Google Maps key.
How can I help you explore Laravel packages today?