humaidem/filament-map-picker
Filament Map Picker provides an interactive map form field for Laravel Filament apps. Users can search, drop a pin, and save latitude/longitude coordinates, making location selection simple in resources and forms.
What the package is. humaidem/filament-map-picker is a Filament form-field plugin that renders an interactive map (Leaflet-based) inside a panel resource form, letting an editor drop a pin or search a location and returning a coordinate value for persistence. It is a UI-layer package: it adds one field class, a Blade view, and front-end assets. It ships no migrations, no models, no API surface, and no background processes. That small surface area is the single most important fact in this evaluation — it means the risk is concentrated and containable, not diffuse.
Architecture fit. Good, with caveats. Filament's field contract is well-defined (Field subclass, ->view(), asset registration through the panel's asset pipeline), so the package slots in the way any Filament form component does. It does not couple to your domain model, so it can't fight your architecture. The real fit question is not "does it work with Laravel" but "does it work with our Filament version and our geospatial storage convention." As of the last release (Nov 2023) the package targets the Filament v3 line; a v4-era panel is a likely incompatibility. Treat the package as a replaceable leaf component, not as infrastructure.
Integration feasibility. High for a spike, moderate for production. Installation is a single composer require, plugin registration in the panel provider, and a field added to a form schema — hours, not days. The unknowns are all about the value contract: whether the field returns a single serialized string ("lat,lng") or expects two separate columns, what precision it emits, and whether it validates bounds or accepts empty state. Resolve that before designing the schema, because retrofitting a coordinate column type is the expensive kind of change.
Technical risk. The dominant risk is project health, not code quality. Indicators:
| Signal | Reading |
|---|---|
| 59 stars | Niche but non-zero discovery; not a de facto standard |
| 0 dependents | No production evidence. Nobody has publicly bet on this. Zero signal on edge cases, upgrade breakage, or long-term maintenance |
| Last release Nov 2023 | Effectively dormant. No Filament v4 path demonstrated; PR triage unknown |
| Score 1.56 / opportunity 13.79 | Low maturity and low ecosystem pull — consistent with "small, unmaintained utility" |
| Single maintainer | Bus-factor 1. No vendor SLA, no security response commitment |
Secondary risks: reliance on a tile provider (OpenStreetMap and most free endpoints have usage policies and rate limits — a production panel with heavy map use can violate them), GDPR/DPN implications of browser requests to third-party tile servers, and JS asset loading behind strict CSP or air-gapped networks.
Key questions to answer before committing.
Stack fit. Laravel + Filament panel, PHP 8.1+, Composer-managed. No infrastructure impact: no queue, no cache, no cron, no external service beyond tile HTTP requests from the browser. It fits a standard Filament admin panel with no architectural concessions.
Migration path. Two credible paths, and the choice should be made deliberately rather than by default:
composer require humaidem/filament-map-picker, register the plugin in the panel provider, add the field. Fastest to value; accepts upstream staleness risk.app/Filament/Fields/ with attribution. Given zero dependents and a dormant release cadence, the marginal cost of ownership is low and the upgrade risk becomes ours to schedule rather than someone else's to ignore.Pin the version explicitly in composer.json and record the tile provider decision in the ADR either way.
Compatibility. Verify against the actual Filament version in composer.lock and against our CSP headers. Confirm the Leaflet asset is bundled/published rather than pulled from a CDN — a CDN dependency is a hard blocker for air-gapped or CSP-strict environments. Confirm behaviour on the Filament create page and the edit page (existing-value hydration is a common failure point in map fields).
Sequencing.
Maintenance. Low effort, non-zero attention. Expect no upstream fixes; budget a periodic review (once per Filament upgrade) to confirm the field still renders. If absorbed, maintenance is a handful of files you already understand — realistically under a day per year. Add a composer outdated note or a dependabot-style reminder so the pinned version doesn't silently rot.
Support. Community-only: GitHub issues with an unknown response time. There is no vendor to escalate to, so internal ownership must be named. Document the field in the team's internal component catalogue — the failure mode here is not "it breaks" but "nobody remembers how it works when it does."
Scaling. Client-side only, so it scales with browser sessions, not with server load. The scaling constraint is tile traffic and terms of service: free public tile servers are not provisioned for internal-tool volume at scale. Choose and fund a tile provider up front (self-hosted tiles, MapTiler, Mapbox), keep the key server-configurable, and set a usage budget. Coordinate storage scales trivially; index only if you later add proximity queries (which this package does not provide — geospatial search is a separate, larger decision).
Failure modes and mitigations.
| Failure | Impact | Mitigation |
|---|---|---|
| Filament major upgrade breaks the field | Form errors on affected resources | Absorb/vendor; pin version; test on upgrade branch |
| Tile provider outage or quota exhaustion | Map renders blank; pin placement impossible | Configurable tile URL + fallback numeric lat/lng inputs |
| CSP / offline environment blocks map JS | Field unusable | Confirm before rollout; don't deploy to air-gapped panels |
| Value contract mismatch on save | Silent data loss or precision truncation | Lock schema in the spike; assert in a feature test |
| No server-side bounds validation | Garbage coordinates accepted | Add between validation rules on the pair |
| Single maintainer abandons repo | No fixes, ever | Already the baseline assumption — price it in |
Ramp-up. For a developer already fluent in Filament, roughly half a day to spike, one to two days to production-ready including schema and validation. For a team new to Filament form customisation, add a day for the field/asset lifecycle. Editor-side training is near zero — a map with a pin is self-evident, which is precisely the product value: it replaces error-prone manual lat/lng entry with a direct-manipulation control.
TPM bottom line. Technically a good fit and operationally cheap, but the ecosystem signals (dormant, zero dependents, single maintainer) mean it should be adopted as absorbed internal code rather than an external dependency, and only after a one-day spike confirms Filament-version compatibility and the exact stored-value contract. The decision that actually carries cost is not the package — it's the tile provider and the coordinate schema, both of which outlive the library.
How can I help you explore Laravel packages today?