tom-lingham/searchy
Searchy is a Laravel package for fuzzy database searching. Query multiple columns with relevance scoring and drivers like simple, fuzzy, and levenshtein, returning the most relevant records instead of relying on plain exact LIKE matches.
Architecture fit: Searchy is a Laravel-oriented fuzzy search helper for user-driven matching over Eloquent/DB columns using basic string matching and Levenshtein distance. It fits small Laravel monoliths or internal admin search where simple fuzzy matching is enough and no dedicated search infrastructure exists. It is a poor fit for service-oriented architectures, high-QPS public search, multi-tenant platforms, or systems needing relevance ranking, typo tolerance at scale, faceting, or language-aware search. Because the package is archived, it should not become a strategic platform dependency without a fork-and-own decision. The 2.0.20 release (Laravel 7 support) does not change this positioning; it only raises the known compatibility ceiling from Laravel 6-era to Laravel 7, which is still well behind current Laravel 10/11.
Integration feasibility: Historically easy via Composer and MIT-licensed, but current feasibility is conditional. The newest signal is release 2.0.20, which added Laravel 7 support — a maintenance touch consistent with the 2020 timeframe but not evidence of ongoing stewardship, and the repository remains archived with zero dependents. Laravel 7 support means the package is now at best ~5 major framework versions behind the current target and says nothing about PHP 8.2+ runtime behavior, supported databases, or realistic data volume. A TPM should require a timeboxed compatibility spike against the target Laravel version, PHP 8.x runtime, supported databases, and realistic data volume before approving integration. Isolate it behind an internal search interface rather than letting Searchy types leak into domain code.
Technical risk: High. Primary risks are abandonment, stale Composer constraints (now bounded at Laravel 7 unless patched), missing security patches, PHP/Laravel upgrade incompatibility, DB-specific behavior for Levenshtein or fuzzy matching, SQL escaping/query-safety concerns, and performance degradation on large tables. The 535 stars indicate historical interest, not active support. MIT reduces legal risk but not operational risk. Adding Laravel 7 support marginally widens the viable target matrix for legacy estates but does not lower the abandonment or upgrade risk for modern stacks. Opportunity score 3.43 may justify a small experiment, not a platform commitment.
Key questions: Which Laravel and PHP versions must be supported (and is anything below Laravel 8 still in scope for your estate)? Which database engines and collations are in scope? What are the search latency, relevance, and data-volume SLOs? Can the organization fork, vendor, patch, and own the package? Is fuzzy search a differentiator or a commodity capability? What is the exit path to Laravel Scout with Meilisearch/Typesense/OpenSearch, PostgreSQL trigram/full-text, or MySQL full-text? Does the package have tests, CI, and safe query construction? Will security scanning flag the abandoned dependency? Does 2.0.20 backport cleanly if we need to raise constraints to Laravel 10/11 ourselves?
Stack fit: Acceptable only for a legacy or small Laravel monolith using Eloquent and simple admin/internal search. The 2.0.20 release makes Laravel 7 a confirmed target, so a Laravel 6/7 legacy application is now the best-supported adoption case. Still a poor fit for API-first, multi-tenant, high-throughput, or cross-service search. For modern Laravel 10/11 and PHP 8.2+, continue to assume incompatibility until proven otherwise.
Migration path: Do not adopt package APIs directly across the application. Define a narrow SearchService interface, implement a Searchy adapter in one bounded context, normalize results, and keep a fallback implementation using database LIKE, full-text, or trigram search. If Searchy fails, replace the adapter without rewriting callers. If the package is retained, fork or vendor it under organizational ownership with MIT attribution, starting from 2.0.20 as the newest known-good baseline.
Compatibility: Validate composer.json constraints against the target Laravel/PHP matrix, treating Laravel 7 as the documented ceiling and testing upward from there only via a fork. Test on the lowest and highest supported versions and against every target database. Verify pagination, escaping, injection safety, collation behavior, Levenshtein fallback behavior, and query performance. Pin the 2.0.20 commit or version and require CI around any fork.
Sequencing: Run a discovery spike against representative data and latency targets. Define acceptance criteria for relevance, p95 latency, maintainability, and upgrade safety. Build the adapter behind a feature flag. Shadow-compare results and performance against the current baseline. Decide go/no-go before broad rollout. If approved, fork/vendor from 2.0.20, raise framework constraints as needed, add tests and CI, and document ownership. If rejected, move to DB-native search or Laravel Scout with a maintained engine.
Maintenance: High ownership burden. Archived status and a compatibility ceiling that only just reached Laravel 7 mean no meaningful upstream path to current framework versions. The team must patch Composer constraints, PHP/Laravel compatibility, security issues, and database behavior. Treat it as internally stewarded open source, not a free dependency. The 2.0.20 bump is a one-line compatibility signal, not a maintenance cadence.
Support: Community support is weak and there is no vendor SLA. Stars are not support capacity, and a single-version compatibility bump does not indicate an active maintainer response loop. Production use requires a named internal owner, runbook, fork policy, and escalation path. Without that, the package should remain prototype-only.
Scaling: Fuzzy matching and Levenshtein-style comparison are CPU/DB intensive and degrade with row count and concurrency. It is not suitable for large catalogs or high-QPS public search without caching, precomputation, limits, and query timeouts. The scale path is likely trigram/full-text indexing or a dedicated search engine, which makes Searchy a tactical bridge at best.
Failure modes: Composer conflicts can block framework upgrades (more likely now that the documented ceiling is Laravel 7); DB-specific SQL can fail after database migration; slow queries can cause timeouts under load; fuzzy relevance can regress silently; unescaped input or unsafe query construction can create injection risk; security scanners may flag the abandoned dependency; fork divergence can create long-term maintenance drag. Mitigate with adapter isolation, feature flags, query timeouts, regression tests, dependency pinning, and a tested rollback path.
Ramp-up: Initial API ramp-up is low for Laravel developers, but governance and upgrade ramp-up is high. Onboarding must cover fuzzy-match semantics, query limits, database behavior, fallback operation, and fork ownership, plus the fact that the package tops out at Laravel 7 and any newer framework use requires our own patch layer. TPM recommendation: use only for a timeboxed prototype or isolated legacy (Laravel 6/7) use case, or fork 2.0.20 with explicit ownership. For strategic platform search, prefer a maintained Laravel Scout driver with Meilisearch/Typesense/OpenSearch or database-native trigram/full-text search.
How can I help you explore Laravel packages today?