daun/statamic-loupe
A Statamic addon that integrates Laravel Scout with Loupe, providing fast, file-based local search for your content without external search services like Algolia or Meilisearch.
Scope of this assessment. This is a baseline evaluation — there is no prior assessment to compare against. The 4.2.0 release notes are two lines and describe behaviour rather than API surface, so the following is built on the reasonable reading that this is a Laravel search-indexing package (Scout-compatible driver over a search backend such as Elasticsearch/OpenSearch or Meilisearch). That assumption is the single largest source of uncertainty here and should be confirmed before committing.
Architecture fit. The package occupies the layer between Eloquent models (via Scout's Searchable trait / engine contract) and the search backend. Both 4.2.0 items reduce glue code we would otherwise own:
_id now derives from the configured Scout key rather than an implicit id. This closes a real class of bug for models with UUIDs, non-id primary keys, or custom getScoutKey().Net: this is a small release that removes two common footguns. Attractive, but the second item is a behaviour change even though it's shipped as a minor.
Integration feasibility. Standard Laravel package shape: Composer require, publish config, register the engine/driver, add the trait, define index mappings. No exotic runtime requirements beyond a queue driver (Redis/SQS/database) and a reachable backend. A spike should be achievable in 1–2 days; a production rollout with a reindex is a 1–2 sprint-week effort including staging validation.
Technical risk. Low-to-moderate, concentrated in two places:
id and the model's configured key differs, 4.2.0 will write documents under a different _id. Old documents are not deleted by that change — you get duplicates and stale results unless the index is rebuilt. Any code or dashboard reading _id directly, or joined on it, is affected. Greenfield adoption carries none of this risk; brownfield upgrade carries all of it.Key questions to resolve before approval.
getScoutKey() / searchableAs()?Stack fit. Targets Laravel 9–11-era conventions with Scout and a queue worker. Fits our stack if we're already Scout-shaped (Searchable models, index classes, scout:import in deploy). If we aren't, this package is the smaller half of the decision — adopting Scout itself is the real commitment.
Migration path. Treat 4.2.0 as the version we adopt, not something we upgrade into mid-flight, unless a Scout-based index already exists:
_id equals the configured key.If an index already exists under the old key semantics, budget for a full rebuild rather than an in-place migration.
Compatibility. Verify the package's declared matrix against our Laravel/PHP versions, Scout major, and the backend's client library. Watch for: required PHP extensions, whether the zero-downtime path is opt-in via config or automatic (automatic changes the blast radius of a patch bump), and whether searchable() scoping behaves identically during a swap.
Sequencing.
_id mapping.Maintenance. Small, focused releases with low churn — a healthy signal. Our ongoing burden is config drift and index mapping ownership, not package upgrades. Budget a recurring line item for reindex operations whenever mappings change; that cost exists with or without this package, but 4.2.0 makes it safer rather than cheaper.
Support. Open-source, community-supported, no SLA. Escalation is GitHub issues. That means we need an internal runbook for reindex and a documented degradation path for search outages — a database-backed fallback query, or Scout's database engine behind a feature flag, is worth having regardless of which package we pick.
Scaling. Reindex throughput is queue-bound: size worker concurrency against documents-per-second measured in staging, not guessed. Transient storage doubles during a dual-index window — relevant for large indices and for backends billed on storage. The primary-key fix is a scaling win in a quieter way: fewer orphaned and duplicate documents means fewer "why is search wrong" incidents at volume.
Failure modes.
_id; search results degrade with no error surfaced.Ramp-up. A mid-level Laravel developer is productive in about a day. Independent ownership of the alias lifecycle, reindex runbook, and rollback procedure is roughly a week, and that knowledge should not sit with one person. Onboarding material needs the index naming convention, alias convention, reindex procedure, and the fallback query path documented before this goes to production.
How can I help you explore Laravel packages today?