schranz-search/symfony-bundle
Symfony bundle for schranz-search that adds search engine indexing and querying to Symfony apps via a search abstraction layer spanning Elasticsearch, OpenSearch, Meilisearch, Algolia, and more.
Architecture fit. The package is a Symfony bundle, not a Laravel package despite the framing in the request. That is the first and largest architectural gap: it registers services via Symfony’s DI container, service tags, and bundle configuration (config/packages/*.yaml), and there is no service provider, facade, or config file compatible with Laravel’s container. If the target stack is Laravel, this package is not a fit — the underlying library cmsig/search (SEAL) is framework-agnostic and is worth leveraging, but the bundle wrapper specifically is Symfony-only.
Where the stack is Symfony (or a mixed Symfony service), the bundle is a thin and reasonable adapter: it wires SEAL’s Engine and adapter services into the container, exposes configuration via bundle extension classes, and lets the application depend on the abstraction rather than a specific search backend. The architectural value is in the abstraction, not the bundle itself — the bundle is ~a few hundred lines of glue.
Integration feasibility. The integration surface is small and conventional for a Symfony bundle: composer require, register in bundles.php, add YAML config for the chosen adapter(s), and inject Engine where needed. If SEAL’s abstractions and the required adapter’s client library are compatible with the app’s PHP version, this is a low-effort integration measured in days, not weeks. The bundle’s tiny footprint means little to learn — but also little to rely on.
Technical risk. High, and concentrated in the wrapper rather than the abstraction:
php-cmsig/search project. That is a reasonable governance model but means the bundle’s release cadence and bug-fix latency are coupled to the monorepo’s maintainers. You cannot fork-and-PR into this repo without coordinating upstream.Key questions for the team.
cmsig/search directly rather than this bundle, or to wrap it in a service provider ourselves.cmsig/search project’s release cadence and bus-factor acceptable given our dependency policy?Stack fit. Treat the bundle as a convenience wrapper, not a strategic dependency. The correct mental model is: depend on cmsig/search (SEAL) as the contract, use schranz-search/symfony-bundle as optional sugar. If we are on Symfony, the bundle saves us ~a day of DI wiring; if we are on Laravel, we skip the bundle entirely and hand-wire SEAL into a service provider — the SEAL API is what matters, and it is portable.
Migration path. This is an additive dependency; there is no migration in the sense of replacing an existing component unless we are currently using raw engine clients. Two realistic scenarios:
Compatibility. Verify up front: (a) the bundle’s supported Symfony versions vs. ours, (b) SEAL’s PHP version floor, (c) the chosen adapter’s client-library major version compatibility with SEAL, and (d) whether the backend’s server version is within the adapter’s tested range. Any of these mismatches converts a one-day integration into a debugging exercise against a read-only repo.
Sequencing.
Engine interface on our exact PHP/Symfony versions.Maintenance. Ongoing maintenance cost is modest but not zero, and it is not where you’d expect. The bundle is small and changes rarely; SEAL itself moves faster (adapters, backend APIs). The real maintenance burden is backend operations — index schema, analyzer configuration, reindexing, and monitoring — which the abstraction does not remove. Budget for a quarterly dependency review and pin versions in composer.lock. Because the repo is read-only, any upstream fix we need requires going through the parent project; maintain a small vendored patch or fork only if a blocking issue arises, and document it.
Support. There is no commercial support. Community support is via the parent project’s issue tracker. The bus factor is essentially the parent project’s maintainers, and 15 stars is a thin community — Stack Overflow coverage will be minimal, and answers to edge-case questions may not exist. Mitigate by assigning one engineer as the internal owner of the search integration, with the expectation they read the SEAL source when documentation runs out (it is a small enough codebase that this is feasible).
Scaling. Scaling concerns live in the search backend, not this package. SEAL adds a thin per-query PHP translation layer — negligible relative to network and engine time — but it does add a shared bottleneck: every query goes through one abstraction, so exotic, latency-sensitive queries that need engine-native features may be awkward or impossible to express. For high-QPS product search, confirm the abstraction does not force a suboptimal query shape. Horizontal scaling of the Symfony app is unaffected; index sizing, shard strategy, and reindex capacity are backend concerns to plan separately.
Failure modes.
Ramp-up. Low for the bundle, moderate for SEAL, non-trivial for the backend. A competent Symfony/PHP engineer should be productive with the bundle in well under a day, and with SEAL’s core interfaces in roughly a week. The real ramp-up is understanding the chosen engine’s model (mapping, analyzers, ranking) and the operational side (index lifecycle, reindexing, monitoring). Budget ~1–2 weeks for one engineer to own the integration end-to-end, plus a half-week review of the SEAL source given the thin external documentation.
Bottom line for the TPM. The bundle is a low-risk-to-try, low-support-burden wrapper whose strategic value is entirely derived from SEAL. Use it if you are on Symfony and want search-engine portability; do not use it if you are on Laravel (use SEAL directly). The decision worth escalating is not “this package” but “do we standardize on a search abstraction at all” — if the answer is yes, this bundle is an acceptable convenience layer provided we pin versions, depend on SEAL interfaces, and assign an internal owner.
How can I help you explore Laravel packages today?