renatomaldonado/laravel-manticore-eloquent
Manticore Eloquent integrates Manticore Search with Laravel models, letting you define searchable Eloquent-style models, sync data, and run fast full-text and attribute queries using familiar Laravel ORM patterns.
knn('embedding', $article->id, k: 10)), which is the building block for related-content, recommendations, duplicate detection, and RAG-style retrieval without standing up a separate vector database. This directly informs whether semantic search ships this quarter or slips.VectorCast means embeddings become an ordinary model attribute — a product-level unlock, because it removes raw SQL from the write path and lets any team seed/read vectors through normal Eloquent. It also surfaces a real constraint: cosine columns normalize stored vectors on read-back, and KNN-indexed columns can't be UPDATEd (use replace()). That shapes whether embeddings are treated as immutable, versioned artifacts in your data model.->option($key, $value). If any internal API or admin surface passes user-supplied ranking or sorting options, this is a reason to prioritize the upgrade rather than defer it.DB::raw(), knn()/whereKnn() signature changes, wheres key ef → options) but they touch extension points. Worth sizing the migration before committing dependent features to a date.Adopt when:
VectorCast is a meaningful ergonomics and safety win here.Look elsewhere when:
UPDATE on KNN-indexed columns, so any product flow that "edits" an embedding needs replace semantics or a new document.To executives: The search layer we already run just gained vector and "similar to this" search in the ORM we already use — no new vendor, no new datastore, no new headcount. That means related-content, recommendations, and semantic retrieval move from "needs a platform project" to "a feature we can schedule." It also closes a security gap where search options fed from request input could inject query fragments; that alone justifies the upgrade. Cost is a bounded migration, not a rewrite.
To engineering: v2.0.0 fixes a real correctness bug — the old knn() emitted a positional form Manticore rejects, so the feature simply didn't run; it now emits the {ef=…} block Manticore parses, with no caller change. Option blocks now pass through whatever the server accepts, so new Manticore options don't require a package release, and option names/values are validated by shape rather than a list that rots. VectorCast removes the last raw-SQL requirement for vector writes and reads. Three things to plan for: function-call option values must be wrapped in DB::raw() (bare keywords, numbers, bools, arrays, and quoted literals are unaffected), knn()/whereKnn() signatures changed and the wheres key ef is now options if you extend the package, and two live-server gotchas are document — cosine columns normalize stored vectors, and vectors on KNN-indexed columns must be changed with replace(). Verified against Manticore 17.5.1 with 79 tests / 140 assertions.
Recommendation: Upgrade. The security fix and the working knn() are non-optional for anyone actually using vector search; the breaking changes are small, mechanical, and confined to option values and extension points.
How can I help you explore Laravel packages today?