radutopala/google-map
Laravel package for integrating Google Maps into your application, with configuration and Blade helpers for rendering maps and markers. Lightweight and easy to wire into existing views. Note: it has no stars and a low health score, so check maintenance status before using in production.
Architecture fit — The package is a server-side builder/renderer for the Google Maps JavaScript API v3: you compose a Map object in PHP (markers, info windows, polylines, controls) and a renderer emits an HTML container plus an inline <script> block and the Maps loader tag. The core (Ivory\GoogleMap) is framework-agnostic; historically it shipped with a Symfony bundle, not a Laravel provider. It fits a Laravel app only if you deliberately want map definitions authored in PHP and rendered through Blade. In most Laravel architectures the map is an interactive client concern, so this package inserts a PHP abstraction layer over an SDK that is fundamentally JavaScript — an architectural mismatch unless you have a specific server-composition requirement.
Integration feasibility — Mechanically feasible: MIT license, Composer-installable, PSR autoloading, no exotic runtime requirements. But there is no first-party Laravel integration — no service provider, no facade, no config publish, no extra.laravel entry. You would write and own roughly 50–150 LOC of glue: a service provider binding the map builder and renderer as singletons, a config file for API key/language/region, and a Blade component wrapper. The renderer inlines the API key into HTML, so key-restriction policy becomes your responsibility from day one.
Technical risk — High. The PHP 5.3+ baseline means the code predates scalar type hints and modern nullable syntax; expect friction on PHP 8.2/8.3 (implicitly nullable parameters, dynamic properties, deprecated string interpolation). Zero stars, zero dependents, and a 0.03 score mean no community verification, no security disclosure channel, and no upstream fix path. The emitted JavaScript targets the legacy Maps JS API surface (google.maps.Marker, InfoWindow), which Google still serves but has superseded with AdvancedMarkerElement — the breakage risk sits on Google's deprecation roadmap and will never be patched here.
Key questions
Stack fit — Poor for a modern Laravel 10/11 on PHP 8.2+ codebase. Treat any adoption as a vendored fork, not a dependency. If used at all, wire it manually:
composer require radutopala/google-map at an exact pinned version, verifying the PHP constraintGoogleMapServiceProvider registering the builder and renderer singletonsconfig/google-map.php for API key, language, region, async/defer flagsmarker(), infoWindow(), polyline() helpers<x-google-map :map="$map" />) as the only call siteMigration path — Greenfield; there is no incumbent Laravel package to migrate from. Build the integration behind your own MapRenderer interface so the vendor can be swapped for a Blade component emitting the same JSON config with no call-site changes. This escape hatch is the single most important design decision.
Compatibility — Run composer why-not php 8.2 before anything else and smoke-test a rendered map under our exact runtime. On the front end, the loader URL must carry libraries= and loading=async to match Google's current guidance; verify the inline script against the live Maps JS API rather than assuming 2015-era output still behaves. CSP is a known friction point: inline scripts require unsafe-inline or a nonce the package does not support.
Sequencing
Recommendation — Decline adoption. The lower-risk path is a thin Blade component plus Alpine or vanilla JS calling the Maps JS API directly, with server-side geocoding handled by a maintained client (googlemaps/google-maps-services-php or geocoder-php). Revisit only if a non-browser render target is a hard, funded requirement — and even then, budget for a fork.
Maintenance — Effectively zero upstream activity. Every PHP-version bump, Symfony constraint conflict, and Google deprecation response becomes internal work. Budget roughly 1–2 engineer-days per quarter to keep it alive on a customer-facing path, and considerably more across a PHP major upgrade. Because there is no upstream, "maintenance" here means "we own a fork."
Support — No vendor, no community, no security advisories, no issue triage. Incident response is entirely internal, and knowledge will concentrate in whoever runs the spike — a single-point-of-failure on the team. Contrast this with a JS-first approach, where current, actively maintained Google documentation is the support surface.
Scaling — Server-side cost is negligible (string building, no network calls at render time), so compute scale is not the concern. Client-side scale is Google's, but billing, quota, and key restrictions become ours and are invisible to this package. Two predictable pressure points: unbounded marker counts on dense datasets, and the absence of any marker-clustering support — you will implement clustering in JS regardless, which further erodes the package's value proposition.
Failure modes
unsafe-inline or a nonce; roll out CSP in report-only first and measure violations.Ramp-up — Conceptually low (a map builder is intuitive), but discovery cost is high: no docs beyond the README, no in-repo examples, and the Ivory documentation is archival. Realistically one day to a first working map and three to five days to production-grade (CSP, key handling, tests, component abstraction, CI). A JS-first approach reaches a working map in roughly half a day against current documentation.
Net — The package's sole advantage is composing map definitions in PHP. It purchases that at the cost of an unmaintained dependency, a legacy JS surface, full ownership burden, and a front-end rewrite anyway for clustering and CSP. The 0.03 score is an accurate signal; recommend declining adoption absent an unusual rendering constraint.
How can I help you explore Laravel packages today?