pugx/geo-form-bundle
PugxGeoFormBundle adds a map-based coordinate picker form type to Symfony apps, letting users select latitude and longitude visually on an interactive map instead of typing raw numbers. Easy to embed in existing forms, with configurable map options and simple GeoPoint handling.
Framing correction (read first): This is not a Laravel package. pugx/geo-form-bundle is a Symfony bundle (PUGXGeoFormBundle) that adds a map-picker widget to a Symfony form field and hydrates bound latitude/longitude entity properties on submit. It ships no Laravel service provider, no config/ publishing, no package auto-discovery. Any assessment of "fit" against a Laravel codebase must start from "this is reference material, not a dependency."
Architecture fit. The bundle's composition is small and legible: a form type extension (adds a geo field type / extension to an existing text or hidden field), a JavaScript asset that renders a Google Map and writes coordinates back into the form inputs, and optionally a geocoder service for address→coordinate resolution. That shape is portable in concept — a map widget plus a value object plus a geocoder interface — but none of the wiring is. In Laravel terms, the work is: a Blade/Livewire component for the map, a GeoPoint value object, a form request validation rule, and a Geocoder contract bound to our provider of choice. That is a rewrite measured in days, not an integration.
Integration feasibility. Concrete signals argue against direct adoption: 15 stars and 0 dependents means essentially no production validation and no downstream code exercising edge cases. The Symfony 2.x/3.x era of the codebase implies PHP 5.6/7.x constraints and jQuery-based front-end assets, which will conflict with a modern PHP 8.x / Laravel 9–11 or Symfony 5–6 dependency graph at composer install time. License is MIT (permissive, no legal blocker), which is the one clean dimension.
Technical risk.
Key questions for the team.
Stack fit. Direct fit is limited to Symfony 2.7–3.x applications on PHP 7.x. For a Laravel target there is no fit at the package level; the fit is at the pattern level (form field → map widget → coordinate persistence). Recommend scoring this as an opportunity signal rather than a build dependency — the 3.14 opportunity score against a 0.385 composite reads as "the problem is real, this artifact is weak," which is exactly the profile of a build-not-buy decision.
Migration path (if we proceed). Treat the repository as a specification:
GeoPoint cast, Geocoder contract with a Google and a Mapbox driver, and a Blade component plus a thin ES-module script (no jQuery).max distance guard if relevant.Compatibility. If any Symfony context exists, pin explicitly: PHP 7.4+/8.x, Symfony 5.4/6.x forms, and verify the Google Maps JS API version the shipped asset targets — it is likely the deprecated v2 or an early v3 pattern. Remove the jQuery dependency before any bundler integration, and confirm compatibility with our CSP (Google Maps requires script-src allowances for maps.googleapis.com).
Sequencing. Week 1: spike — confirm the widget approach against one real form and one real entity, decide provider. Week 2: provider contract + API key/secrets plumbing + billing/quota guardrails. Week 3: widget implementation and validation. Week 4: tests, docs, and a runbook for key rotation and quota exhaustion. Roughly one sprint for one engineer; the vendor setup (billing, key restriction, privacy review) is the likely critical path, not the code.
Maintenance. Assume zero upstream maintenance. Any adoption implies forking and owning the code, or better, owning our own thin implementation. Budget 1–2 engineer-days per quarter for dependency drift (map SDK versions, PHP/Symfony upgrades) plus whatever the provider requires.
Support. No vendor, no SLA. Community support is effectively nil at this adoption level — 0 dependents means no Stack Overflow corpus and no one else hitting our bugs. Internal documentation is the only support channel; write it during the build, not after.
Scaling. Server-side cost is negligible — the widget is client-side and coordinates are a few bytes. The scaling constraints are elsewhere: (a) map tile/JS load quota and billing, (b) geocoding quota, which is the one that will actually bite under growth, (c) client bundle weight and mobile performance if the map renders on high-traffic pages. Mitigate with geocode caching, lazy-loading the map SDK, and a documented quota-alert threshold.
Failure modes to design against.
Ramp-up. Low technical ramp-up — the domain (a map, a pin, two floats) is intuitive and a mid-level engineer is productive in a day. The ramp-up cost is organizational: someone must own the Google Cloud billing relationship, the key rotation policy, and the privacy review for address data leaving our systems. Those are TPM-tracked workstreams, not tickets, and they outlive the code by years.
Recommendation. Do not adopt as a dependency. Use it as a compact reference for the field contract, and build a first-party map-picker package behind our own geocoder abstraction so the provider stays swappable. The package scores 0.385 for good reasons; the 3.14 opportunity score confirms the underlying need is real but is best served by ~1 sprint of owned code rather than a 15-star, zero-dependent, Symfony-2-era bundle.
How can I help you explore Laravel packages today?