netsells/laravel-geoscope
Laravel GeoScope adds Eloquent query scopes for geographic filtering, letting models search by latitude and longitude, calculate distances, and find records within a radius for location-based Laravel apps.
What changed in 2.0.2: A single line item — "Adds support for Mariadb." This is a patch release on the 2.0.x line, published 2020-12-23. Semver convention says patch = bug fix / additive compatibility, no public API break. The change is best read as a DB-dialect compatibility fix, not a new feature surface: the package presumably issues SQL, ships migrations, or introspects schema against a MySQL-family database, and previously either failed or degraded against MariaDB. That is a meaningful de-risking change for any team running MariaDB (very common on managed hosting, RDS-compatible providers, and Debian/Ubuntu LTS distros), and effectively a no-op for MySQL-only teams.
Architecture fit: The package follows standard Laravel conventions (implied by the release-note format and the Laravel/PHP framing) — Composer-installed, service-provider registered, config-publishable, migration-bearing. That means it slots into the framework's normal lifecycle rather than requiring bespoke wiring. The important architectural signal is the MariaDB support: it tells us the package has a database coupling with dialect-specific behavior. That is the single most consequential thing to size. Any Laravel package that needs a dialect patch is likely doing one or more of: raw SQL fragments, DB::statement DDL, JSON column operations, fulltext/MATCH ... AGAINST, REGEXP, INSERT ... ON DUPLICATE KEY UPDATE / upsert, LOCK IN SHARE MODE, or schema introspection via information_schema. Each of those has real MySQL↔MariaDB divergence, so "adds support" is a claim to verify per-version, not a blanket guarantee.
Integration feasibility: Low-to-moderate. Consumption is a composer require plus a config publish plus php artisan migrate. The real feasibility question is not install effort but the version matrix: PHP version, Laravel major, MySQL 5.7/8.0, and MariaDB 10.3/10.4/10.5/10.6/10.11 (with 10.4–10.6 the realistic LTS band as of this release). MariaDB is not a single target — JSON handling, CHECK constraint enforcement (ignored before 10.2.1, differently enforced later), RETURNING (10.5+), collation defaults (utf8mb4_general_ci on MariaDB vs utf8mb4_0900_ai_ci on MySQL 8), and ANALYZE/optimizer differences all shift by minor version. A patch release claiming MariaDB support almost certainly validated against a subset of that matrix.
Technical risk:
JSON_EXTRACT path/quoting differences, GROUP BY behavior under ONLY_FULL_GROUP_BY, date/time precision. These surface in production data, not in a green CI run.Key questions:
illuminate/database constraint, or does it float and risk resolution against unsupported Laravel versions?Stack fit: Good on shape, conditional on version. This is a conventional Laravel package — Composer, auto-discovery, publishable config and migrations — so it fits the framework's idioms without adapter code. The fit criterion that actually decides it is your database posture: if your fleet is MySQL 8, this release is inert and you should evaluate the package on its other merits. If you are on MariaDB (self-managed, RDS-compatible, or distro-packaged), 2.0.2 is the minimum acceptable version — you should not adopt 2.0.0/2.0.1 on MariaDB. If you run both engines across environments (MySQL in staging, MariaDB in prod, or vice versa), that mixed posture is the highest-risk configuration and needs to be eliminated or explicitly covered by CI before rollout.
Migration path:
^2.0.2 with an explicit lower bound. Do not use ^2.0 — that admits 2.0.0/2.0.1, which predate the dialect fix. Publish config and migrations, run them against a MariaDB instance matching production, not a MySQL stand-in.DB::listen / query log) for representative application flows before and after, and compare result sets, not just for exceptions.Compatibility: Establish and record a four-way matrix before commitment: PHP version × Laravel major × engine × engine version. Two specific things to check in composer.json: the illuminate/* constraint (does it tolerate the Laravel version you run or plan to run?) and any ext-* requirements (e.g. ext-pdo_mysql, ext-json). Also confirm the MariaDB version floor — if the package uses RETURNING or JSON table functions, that silently pins you to 10.5+/10.2+ respectively, which will bite on older managed instances.
Sequencing:
composer.json constraints (hours).Maintenance: Low steady-state cost if the package is stable and the maintainer is active; the concerning evidence here is cadence — a single patch in December 2020 with no visible later releases in the supplied data. A dependency that has not shipped since 2020 becomes an increasing tax as Laravel majors move (Laravel 9's PHP 8 requirement, Symfony 6, PHP 8.2/8.3 deprecations). Budget for the possibility of forking or replacing the package within two upgrade cycles. Also budget for the matrix tax: supporting MariaDB means your CI now runs a second engine, which is a permanent (if modest) increase in pipeline minutes and flake surface.
Support: Upstream support quality is the open variable. A one-line changelog for a dialect-support claim suggests thin release documentation — you will be reading source to answer "is this supported on 10.6?" Community channels (GitHub issues) are the likely primary support path; there is no evidence of commercial backing. Internally, designate one engineer as the owner of this dependency so dialect questions have a routing target. If the package is load-bearing (payments, entitlements, audit), the absence of an SLA is a real gap requiring a documented internal fallback.
Scaling: The dialect change itself is scale-neutral — it does not alter query plans, indexing, or connection handling. Scale risks come from the package's inherent DB access pattern: chatty per-row queries, unbounded result sets, or migrations that lock large tables. Two MariaDB-specific scaling notes worth capturing: (a) collation defaults differ from MySQL 8, so index usage on utf8mb4 string columns can differ — verify EXPLAIN on your hottest queries after cutover rather than assuming plan parity; (b) if you run Galera/ClusterControl, LOCK TABLES, SELECT ... FOR UPDATE semantics, and AUTO_INCREMENT behavior diverge enough that any package relying on them needs explicit review. Connection pooling and read-replica routing live in your infra layer, not the package; a package that issues writes inside read transactions would be a problem there — worth a quick grep.
Failure modes:
CHECK constraints, ALGORITHM=INSTANT), leaving a partially applied schema. Mitigate with rehearsed rollback on a restored dump.ORDER BY, or GROUP BY returning different rows on MariaDB. No exception, just incorrect output downstream. Mitigate with parity diffing in step 4 of sequencing.Ramp-up: Low for consumers — standard Composer + publish + migrate flow, a competent Laravel engineer is productive in well under a day. The non-obvious learning is the dialect layer: engineers need to know which MariaDB version is supported, that MySQL and MariaDB are not interchangeable for JSON/collation/DDL, and that this package's MariaDB path is validated for a specific subset. Write that into the runbook. For anyone who has to modify or fork the package, ramp-up is materially higher — dialect-branching code requires reading both paths and testing against both engines, so treat internal contribution as a multi-day effort, not an afternoon.
How can I help you explore Laravel packages today?