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

Gmap Bundle Laravel Package

jfsimon/gmap-bundle

jfsimon/gmap-bundle is a Symfony bundle for embedding Google Maps, with PHP and Twig helpers to configure maps, markers, and info windows and render them in templates. It simplifies adding customizable interactive maps to Symfony applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor, and mismatched at two levels. The package is a Symfony2 bundle, not a Laravel package. It assumes Symfony's bundle registration, dependency-injection container, configuration tree, and Twig templating. Laravel uses service providers, its own container and config repository, and Blade. There is no compatibility shim; making this work inside a Laravel app means either booting a parallel Symfony kernel or rewriting the bundle's internals as Laravel services. The second mismatch is temporal: the bundle targets Symfony 2.x and the PHP 5.x era, while current Laravel (10/11) requires PHP 8.1+ and modern PSR-4 autoloading with package discovery. Even inside a Symfony shop this would be a legacy-only artifact.

What it actually contains — and why that matters to a TPM. The description and the Laravel-oriented review agree on the shape: a configuration-driven way to declare maps, markers, and UI controls in YAML/PHP, a Twig helper that renders them, and service wiring that pulls Google Maps API calls out of templates. That is a thin abstraction. The realistic equivalent in a modern codebase is roughly one sprint of work: a MapView value object (center, zoom, markers[]), a Blade partial that emits the Google Maps JS API bootstrap, and a small geocoder service behind an interface so it can be mocked. The scoping insight to carry into planning is that the capability is cheap and the dependency is the expensive part — a server-side "map manager" layer adds a dependency without adding capability.

Integration feasibility — low, with one legitimate salvage path. Two salvage routes exist. First, if a legacy Symfony 2 surface already has the bundle installed, keep it and contain it. Second, treat the repository as a reference design: read DependencyInjection/Configuration.php for the config surface, Resources/config/services.xml for the service graph, and Twig/ for the rendering contract, then reimplement the useful 10% natively. What is not feasible is adding it to a modern Laravel or Symfony application; Composer conflicts and the Twig/Blade gap make the integration cost exceed the build cost.

Technical risk — high, and concentrated in unowned surface area.

  • [DEVEL] stability flag: explicitly pre-stable, no implied API contract.
  • 19 stars, 0 dependents: no community validation, no production signal, and no downstream users to surface or fix bugs.
  • Effectively unmaintained; Symfony 2 is end-of-life and receives no security patches.
  • Unverified API generation. The single highest-value technical question is whether the emitted JavaScript references GMap2 / GLatLng / GClientGeocoder (Google Maps JS API v2, retired) or google.maps.Map / google.maps.LatLng (v3). If it is v2, the bundle is functionally dead and the decision shifts from "contain it" to "replace it." This is a one-hour check and should gate any further investigation.
  • Google Maps' commercial model has changed substantially since the Symfony 2 era: API keys are mandatory, billing accounts are required, quota controls are expected, and consent/privacy review applies to customer-facing surfaces. A [DEVEL]-flagged wrapper provides none of that governance.
  • No evidence of tests, CI, or static analysis — regressions are undetectable and there is no monitoring seam.

Key questions to resolve before any commitment.

  • What is the last commit date, the license, and is Packagist marking it abandoned?
  • Which Google Maps capabilities does it genuinely wrap — rendering only, or also geocoding, directions, distance math? Only the server-side pieces are worth porting.
  • Does the Twig helper emit unique DOM element IDs and namespaced init JS, or will two maps on one page collide on id="map"?
  • Are there maintained Laravel-native alternatives, or is a direct JS API + Guzzle-to-Web-Services integration simpler than any wrapper?
  • Can the useful logic be extracted into framework-agnostic classes (coordinate value objects, map config objects, geocoder wrapper) with no Symfony coupling?

The strategic read. The gap between the opportunity score (0.76) and the package score (1.20) is the signal worth acting on: there is real, unmet demand for a maintained, modern Symfony/Laravel map integration and no credible incumbent. That supports funding a scoped internal build or a timeboxed spike — not adopting this repository. Use the package as evidence in the build-vs-buy conversation, not as a line in composer.json.

Integration Approach

Stack fit — do not integrate; build thin and native. The recommended target architecture for a Laravel application is three small, owned pieces:

  1. Client rendering via the Google Maps JavaScript API directly in Blade. A single resources/views/partials/map.blade.php that accepts a plain MapView view model (center, zoom, markers[]) and emits the init script. Keeping coordinates and marker data in the controller/view model — never inline in the template — is what makes it testable and swappable later.
  2. Server-side operations via direct HTTP calls (Guzzle) to Google Maps Web Services — Geocoding, Directions, Distance Matrix — behind a Geocoder interface so it can be faked in tests and swapped for Mapbox/OSM later. Cache responses; geocoding is the only piece that genuinely belongs on the server.
  3. Configuration in config/services.php plus .env for the API key, with billing and quota alerts configured at the Google Cloud project level, not in application code.

Migration path from a legacy Symfony 2 surface. If the bundle is already running in a Symfony 2 app and a map is needed before the framework upgrade lands:

  1. Contain, don't extend. Wrap the bundle's Twig helper in exactly one partial (map.html.twig) so a future replacement touches one file instead of grepping every view.
  2. Discover the real API surface rather than trusting the README. app/console container:debug | grep -i gmap, debug:twig | grep -i map, and config:dump-reference <alias> (the alias declared in Configuration.php, likely jfsimon_gmap or gmap).
  3. Validate one map with one marker in a scratch template before touching production views. Check the emitted JS version (v2 vs. v3) as above.
  4. Vendor/fork explicitly if it must stay — pin the Google Maps API version, tag it internal-only, and log the debt against the framework-upgrade epic so it does not silently become permanent.
  5. Decommission on the upgrade path. The map feature is the symptom; the EOL framework is the risk. Route "add maps" requests into the upgrade backlog, not the feature backlog.

Compatibility. Symfony 2.x only; PHP 5.x era. Not compatible with Laravel 8+ or PHP 8.x. Composer dependency conflicts are likely if the package is pulled into a modern tree at all. Twig templates will not render in Blade without conversion — a mechanical but non-trivial translation of control structures, filters, and escaping behavior. No PSR-4 guarantees for modern autoloading.

Sequencing, with gates.

Phase Timebox Deliverable Gate to proceed
Spike 1–2 days Feature enumeration (rendering vs. geocoding vs. directions); v2/v3 determination; scan of maintained alternatives Only continue if there is server-side logic worth porting and no maintained package fits
Prototype 1 sprint Blade map.blade.php partial, MapView value object, Geocoder interface with a mock, one real integration test Renders correctly with two maps on one page; tests pass without a live API key
Port (conditional) ≤ 3 days Only the bundle's domain shape — coordinate value objects, map config objects Skippable; most teams should skip it
Decommission Continuous Remove the Symfony bundle and legacy dependencies; close the upgrade-epic debt item —

Decision criteria for the rare "adopt" case. Adopt (or, more accurately, fork and vendor) only when all hold: the app is genuinely pinned to Symfony 2.x/early 3.x with no upgrade path in 12+ months; the map surface is internal (admin tooling, ops dashboards, one-off visualizations) with no accessibility, SLA, or uptime commitment; someone on the team has accepted explicit ownership to fork, pin, and handle key/billing configuration; and there is no requirement for provider abstraction now or on the roadmap. Any customer-facing surface, any modern framework version, or any security/compliance review in scope disqualifies it.

Operational Impact

Maintenance — effectively zero upstream; the full burden transfers to you. With 19 stars and 0 dependents, there is no downstream pressure to patch, no security advisories to subscribe to, and no realistic path to a fix. Your team owns every bug, every Google Maps API change, and every PHP runtime incompatibility. The TCO asymmetry is the headline for stakeholders: indefinite ownership of an abandoned wrapper versus roughly one sprint to build and own a ~200-line native integration. The build is cheaper on a one-year horizon and dramatically cheaper on a three-year one.

Support — none. No vendor, no active community, no documentation beyond the repository README, and no issue triage. Troubleshooting falls entirely on internal engineers, who must first learn Symfony 2 bundle conventions to read the code — a ramp-up cost that likely exceeds the cost of building the integration from scratch.

Scaling — the package is not the constraint; the surrounding stack and Google's commercial terms are. The bundle is a thin wrapper, so application-level scaling concerns are really Google Maps API quota, per-load billing, geocoding request rates, and cost attribution across surfaces. The genuine scaling blocker is the legacy Symfony 2/PHP 5 runtime, which is incompatible with current infrastructure and security baselines — no amount of map-layer tuning fixes that. A native integration also gives you the seam to add caching, request batching, and a provider fallback when pricing or terms change.

Failure modes to plan against.

  • Silent retirement. Google Maps JS API v2 endpoints are retired; if the bundle emits GMap2/GLatLng, tiles simply stop rendering with no error path in your monitoring.
  • Key and billing changes. Mandatory API keys and billing accounts were introduced after this package's era; breakage arrives without a code change on your side.
  • EOL runtime exposure. Symfony 2 no longer receives security fixes, so the integration sits outside your patching baseline.
  • Upgrade deadlock. Composer conflicts block Laravel/PHP upgrades for as long as the dependency remains.
  • Template mismatch. Twig-to-Blade conversion introduces escaping and control-structure bugs that surface only at render time.
  • DOM ID collisions. Multiple maps on a page, if the helper does not namespace element IDs and init scripts.
  • No regression safety net. No tests or CI means failures are discovered by users, not by the pipeline.

Governance gaps the package does not fill. API key management and rotation, billing account and cost attribution, quota alerts and hard caps, and — for anything customer-facing — privacy/consent review for Google's data collection. A [DEVEL]-flagged wrapper provides none of this; a native integration puts it in your configuration and IaC layer where it belongs.

Ramp-up — high, and mostly wasted. Engineers must learn Symfony 2 bundle conventions to understand the code, then translate that understanding into Laravel-native patterns. Very little of that learning transfers to the target stack.

TPM recommendation and framing. Do not adopt this package as a dependency for a Laravel application. Fund a one-sprint, fully owned integration — Google Maps JS API in a Blade partial plus a Guzzle-backed Geocoder interface — and use the repository as a reference design for the domain shape (coordinates, map config, geocoder wrapper). For executives, the framing is that the mapping capability is cheap to deliver and the dependency is the expensive part. For engineering, the framing is ownership: define the interface, mock it in tests, keep keys and quota controls in configuration, and retain provider portability. The one genuinely valuable signal from this package is market-level — demand for a maintained map integration is real, the opportunity score says so, and no credible incumbent exists — but that is an argument for a scoped internal build, not for adopting abandoned code.

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.
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
robertmarney/lara-hierarchial-collections
simonschaufi/rule-doc-generator
emissaoja/emissaoja
blackbricksoftware/gravityforms-civicrm-form-processor
al-rahabi/fancy-crud
jinas/dhivatar-component
mltstephane/laravel-quality
bernskiold/laravel-talentlms
bernskioldmedia/laravel-form-architect