Scout / Eloquent + Rust + Go

Full-text searchfor Eloquent models

Nine engines, six frameworks plus plain PHP, all behind one query and indexing API.

Sniffy, the scout project pet

One API, swap engines without touching app code

The Searchable trait wires the model, observer and query builder together; every search request ends at the shared Engine contract.

The config root resolves from the Webman plugin path, SCOUT_CONFIG_KEY, Yii params or Scout::configure(), so the same code runs on six frameworks and plain PHP.

  • Scout-compatible query builder
  • Nine engines, one contract
  • Queued or synchronous indexing
9Search engines
6Frameworks
v2.2.0Version
Sniffy Smile expression

Sniffy

Sniffy, a scout dog with a magnifier: it sniffs out documents, buries them in the index and tracks them back on demand.

One sniff, and documents line up.

Search, indexing and engines, each in place

Only one contract sits between models, the builder and engines.

Scout-style API

search, where, orderBy, paginate; migration is mostly a trait swap.

Nine search engines

OpenSearch, Elasticsearch, Meilisearch and six more engines.

Advanced queries

Time ranges, geo distance, full text, KNN vector ranking and facet aggregations.

Automatic index sync

saved, deleted and restored events trigger writes, with soft-deleted documents.

Queued indexing

Async with Webman Redis Queue; logs and falls back to sync when missing.

Six framework hosts

Webman, Laravel, Hyperf, ThinkPHP, Yii2, Yii3 and plain PHP.

The same capability in Rust and Go

Beyond PHP, the same search capability ships as Rust and Go implementations.

Rust v0.9.0 Rust 2021 / 8 backends

rust-scout

Search abstraction for Rust

Eight backends behind one Engine trait, zero-dependency in-memory default, no app changes.

  • Eight search backends
  • Chainable queries
  • Index lifecycle
View Rust repository
Go v1.4.0 Go 1.24 / stdlib

go-scout

Scout-style sync for Go

Syncs model saves, deletes and restores to search, with nine engines and sixteen driver names.

  • Nine search engines
  • In-process async queue
  • Sixteen driver names
View Go repository

From engines to multi-framework delivery

Version entries come from real commits and releases.

v2.2.0

Laravel 13 support

Supports Laravel 13 and symfony/console 8, keeping dependency resolution current.

v2.1.6

console 8 compatibility fix

Fixes installation failures and fatal errors under symfony/console 8.x.

v2.1.0

Plain PHP and review fixes

Adds a plain PHP configuration entry and the project pet, plus a review round of fixes.

v2.0.0

Multi-framework support

Adds multi-framework integration support and the matching documentation.

Changelog

Recent releases; the full list is on GitHub Releases.

Latest v2.2.0 All versions
v2.2.02026-09-29

Supports Laravel 13 and symfony/console 8.

v2.1.62026-09-29

Compatible with symfony/console 8.x, fixing installation failures and fatal errors.

v2.1.52026-09-26

Fixes relative paths in the review report inside the Chinese README.

v2.1.42026-09-26

Full doc alignment: review report, design diagram labels and README cross-links.

v2.1.32026-09-26

CI change: PHPStan runs only on the newest PHP stack.

v2.1.22026-09-26

CI green: PHPStan baseline, optional dependency stubs and base_path compatibility.

Install and use

Install first, then run a minimal example.

PHP >= 8.0 / Eloquent modelsFull README
Install
composer require erikwang2013/webman-scout
Minimal example
use Erikwang2013\WebmanScout\Searchable;
use support\Model;

class Product extends Model
{
    use Searchable;

    public function searchableAs(): string
    {
        return 'products';
    }
}

$products = Product::search('phone')
    ->where('status', 1)
    ->paginate(15);

Twelve moods of Sniffy

Hover for a moment and its mood changes.

Search this site

Try “upload”, “migration” or “JWT”.