syndicatetheory/multi-tenant-bundle
A Symfony bundle for multi-tenant PHP applications, providing tenant-aware configuration and infrastructure to isolate data and serve multiple customers from one codebase, simplifying SaaS architecture.
Architecture fit — critical mismatch. This is a Symfony2 bundle, not a Laravel package. Bundles are a Symfony-specific distribution unit that register compiler passes, DI extensions, and kernel event listeners; they do not install into Laravel and cannot be autoloaded into Laravel's service provider lifecycle. There is no shared extension mechanism to port against. Treat "Laravel/PHP package" as a categorization error in the source data — the actual deliverable is a Symfony 2.x bundle.
Framework and runtime era. Symfony 2.x reached end of life in 2018 (2.8 extended support ended November 2019). Its PHP floor sits in the 5.x era, while any current Laravel release requires PHP 8.1+. That is not a version-constraint negotiation; it is a two-major-version language discontinuity. The bundle's dependency-injection patterns, event model, and kernel hooks predate the abstractions a modern port would target.
Integration feasibility: low. A Laravel integration would be a rewrite, not an integration. Every bundle concept has to be re-expressed: bundle extension → service provider config merge, compiler passes → container bindings, kernel listeners → middleware and bootstrappers, bundle-level tenant resolution → request-scoped tenant resolution. That is the entire package, rewritten, with none of the original's (unverified) logic carried forward as tested code.
Technical risk: high.
[IN DEVELOPMENT] label is the maintainer's own status signal, not a community inference.Key questions to resolve before any decision.
tenant_id, schema-per-tenant, or database-per-tenant?Stack fit: reject for Laravel. Do not sequence a port. For a Laravel target, the build-versus-buy comparison is not close: stancl/tenancy or spatie/laravel-multitenancy provide maintained, tested implementations of exactly these concerns, with active issue trackers. For a Symfony target, evaluate current-generation alternatives rather than a Symfony 2.x bundle.
If tenancy is nonetheless required, the honest path is concept transfer, not code transfer. Extract the tenancy model from the bundle's design, then implement against the target framework's native primitives. Budget this as a feature build, not an integration:
| Concern | Laravel realization |
|---|---|
| Tenant resolution | Middleware writing tenant to request/container scope |
| Connection switching | Runtime config() mutation + DB::purge() on tenant boot |
| Tenant migrations | Artisan command fanning out per tenant with tracked state |
| Cache/queue isolation | Cache prefix per tenant; tenant ID on job payloads |
| Filesystem isolation | Per-tenant disk root resolution |
Migration path. There is no incremental path. You cannot phase a Symfony bundle into a Laravel application, so the only two options are (a) abandon and adopt a native package, or (b) reimplement. Any plan that describes "wrapping" the bundle is not viable.
Compatibility. Assume zero: no Laravel service provider, no config publish tag, no facade, no Laravel-version constraint expressed at all. Composer will not resolve it against a modern Laravel root package without ignoring platform requirements — which is a signal, not a workaround.
Sequencing, if proceeding at all (Symfony target only):
TenancyProvider interface in your own codebase so the implementation is swappable regardless of outcome.Maintenance: you will own it outright. No releases to track means no upgrade path and no upstream fixes — including security fixes. A tenant-isolation defect would be yours to find, triage, and patch, with no maintainer to notify and no community to have already found it.
Support. No vendor, no SLA, no documentation maturity signal, effectively a single maintainer on a package self-labeled in development. On-call engineers fielding a tenant-data incident at 2 a.m. have no escalation path and no known-issue corpus.
Scaling. Unknown and untested by the field. Open validation items: connection pool behavior under per-tenant switching, cache-key cardinality, filesystem handle limits, and the wall-clock cost of migration fan-out as tenant count grows. None of these are documented; all of them are load-bearing at scale.
Failure modes to design against.
Ramp-up: steep and low-leverage. Engineers must learn Symfony 2.x idioms (compiler passes, bundle extensions, kernel listeners) that have no currency in a modern Laravel team, and which the team will never reuse. The knowledge is scarce in the current market, and every hour spent is non-transferable.
Bottom line for the TPM: this package should not enter the dependency inventory. The framework mismatch alone disqualifies it for a Laravel target, and the maintenance, provenance, and isolation-risk profile disqualifies it independently. If multi-tenancy is on the roadmap, fund an evaluation of a maintained native package and a leakage-test harness — that is a days-to-weeks effort with a supported outcome, versus a rewrite with an unsupported one.
How can I help you explore Laravel packages today?