siberfx/typesense-scout
A Typesense driver for Laravel Scout that adds fast, typo-tolerant full-text search to your Eloquent models. Index, filter, sort, and query records through Typesense using the familiar Scout APIs and simple model configuration.
Architecture fit. Laravel Scout is a driver abstraction: models use the Searchable trait, and an Engine contract implementation handles indexing and querying. siberfx/typesense-scout slots into that contract as a third-party Typesense engine, so it is architecturally compatible by design and requires no changes to model code. That is the package's one genuine strength — a Scout engine is a swappable adapter, so adopting it does not create application-level lock-in.
The critical problem is that this slot is already occupied. laravel/scout ships a first-party TypesenseEngine (absorbed from typesense/laravel-scout), maintained by the Laravel core team and Typesense respectively. This package is therefore a reimplementation of a first-party capability, not a gap-filler. The opportunity score (39.41) and a score of 19.46 reflect that: there is no unmet need here, only a competing implementation with 1 star and 0 dependents.
Integration feasibility. Mechanically trivial — composer require, publish config, set SCOUT_DRIVER, add TYPESENSE_* env vars. The real feasibility question is the support matrix: it targets Laravel 12/13 on PHP 8.4/8.5 only. That is a bleeding-edge pin. If your fleet is on Laravel 11 or PHP 8.3, this package is not installable, and the constraint is likely self-imposed rather than technically necessary.
Technical risk. High, concentrated in three areas:
| Risk | Severity | Notes |
|---|---|---|
| Supply chain | High | Single maintainer, 1 star, 0 dependents. Running unvetted code with full Eloquent and search-infrastructure access. |
| Feature parity | High | Unverified coverage of geo search, vector search, multi-search, within() scoping, soft deletes, searchableAs, synonyms/curation, flush, queued indexing, cursor pagination. |
| Contract drift | Medium | Scout's Engine abstract signatures change across major versions (e.g. paginate, mapIds, take). A narrow version pin means you re-audit on every Scout bump. |
| Abandonment | High | Bus factor of one; no dependents means no downstream pressure to keep it working. |
Key questions to put to the maintainer (or resolve by reading source):
laravel/scout's built-in TypesenseEngine does not? If the answer is "nothing," stop here.typesense/typesense-php client version does it require, and is that aligned with our Typesense server version?collection:schema-level updates, or drop-and-recreate?searchableAs, shouldBeSearchable, and makeAllSearchableUsing (eager-load on reindex) honored?Stack fit. Clean, if the version pin matches. Scout-based integration means model code, controllers, and result pagination stay identical regardless of engine — this is the lowest-friction part of the whole evaluation. Typesense itself is a mature, RAM-resident search server with HA clustering and a managed cloud option; the infrastructure layer is not the risk.
Migration path. Because both this package and the official driver implement the same Engine contract, migration is a config swap, not a code migration. Sequence:
TypesenseEngine in a non-production environment. Capture relevance quality, index throughput, and query latency for 2–3 representative models. This becomes your control group.composer.json (no caret ranges) with a lockfile committed.Compatibility. Verify three axes explicitly: (a) Laravel/Scout major vs. Engine contract signatures, (b) typesense/typesense-php client vs. Typesense server, (c) PHP 8.4/8.5 vs. your runtime images. Any mismatch is a hard stop, not a workaround.
Sequencing. Do not let this block a search initiative. The Scout abstraction means you can ship on the official driver now and treat this package as an optional A/B experiment later. Inverting that order — adopting an unproven driver as the foundation — puts the entire search roadmap behind a single-maintainer dependency.
Maintenance. Bus factor of one. Assume you will eventually own this code. Budget for either a maintained fork (cheap — it's a thin adapter over the Typesense client) or a standing "vendor and patch" commitment. Zero dependents means no ecosystem signals when it breaks; you will find out in production.
Support. MIT license, no commercial backing, no evident documentation site, issue tracker unproven. Internal onboarding material will have to be written by whoever integrates it.
Scaling. The driver is not the scaling bottleneck — Typesense is. The driver's contribution to scale is (a) index write batching and queue behavior during bulk reindex, and (b) not N+1-ing per-document on makeAllSearchable. Validate bulk reindex throughput on a realistic dataset (10⁵–10⁶ docs) before committing; a naive adapter can turn a 5-minute reindex into an hour.
Failure modes to design against:
LIKE or cached results) or accept the outage window.Ramp-up. Low for a team already fluent in Scout — one developer-day to a working prototype. Moderate for Typesense-specific concepts (collections, schema inference, ranking/sorting fields, curation). The real cost is not learning the package; it's the ongoing due-diligence tax of owning an unvetted dependency.
TPM recommendation: Evaluate, do not adopt. The official TypesenseEngine in laravel/scout occupies this exact slot with core-team maintenance, a proven test matrix, and a version policy aligned to Laravel's release cadence. This package's only defensible case is a specific, demonstrated capability gap in the official driver — and the burden of proof sits with the maintainer, not with your roadmap. Run the shadow comparison in step 2; if it yields no measurable advantage, close the evaluation and record the decision so it isn't re-litigated next quarter.
How can I help you explore Laravel packages today?