Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Multi Tenant Manager Laravel Package

genealabs/laravel-multi-tenant-manager

Multi-tenant manager for Laravel from GeneaLabs, aimed at tenant resolution and scoping in multi-tenant apps. Early-stage package with limited adoption, so review its maintenance status and test coverage before relying on it in production.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — Poor on the evidence available, and the burden of proof sits with the package. Multi-tenancy is not a utility concern; it is a load-bearing architectural decision that determines data isolation boundaries, connection lifecycle, queue/job context propagation, and cache key namespacing. A package that owns tenant resolution must sit in the request lifecycle before any Eloquent query executes and must survive every async execution path we run (queued jobs, scheduled commands, Octane workers, Horizon). The description claims domain/subdomain resolution, dynamic per-tenant connections, Eloquent scoping, and middleware hooks — that is exactly the right feature list for the problem, but it is a claim in a README, not a design we have reviewed. There is no architecture documentation, no lifecycle diagram, and no statement of where the tenancy context is stored (request container binding, singleton, static, or session). That last detail is the difference between a package that works and one that leaks data across tenants under concurrency.

Integration feasibility — Mechanically a composer require, but feasibility is gated on facts we do not have. We need the php and illuminate/* constraints before we can say whether it installs at all on our Laravel version; a 2021 release realistically targeted Laravel 8, and we are several majors past that. We also need to know whether it publishes migrations, whether it patches the connection resolver in a way that conflicts with our existing database configuration, and whether its middleware must be globally registered (which changes our entire HTTP kernel for all routes, not just tenant routes).

Technical risk — High, and concentrated in three places:

  • Abandonment is the base case, not the tail case. One star, zero dependents, a single release in August 2021, and a changelog whose entire content is "initial functionality." There is no signal of active maintenance for roughly five years. Any bet here is a bet that we will own the code.
  • Blast radius is a security incident, not a bug. A tenant resolution defect in a multi-tenant system is a cross-tenant data disclosure. That risk class deserves a different adoption bar than a URL slug helper — it needs tests we can read, not a README we can trust.
  • Supply chain provenance is unclear. The package is published as genealabs/laravel-multi-tenant-manager but the repository link points at mikebronner/laravel-multi-tenant-manager. That is likely just an org rename, but a TPM should require it be confirmed before we take a dependency — an unverified publisher-to-repository mapping is precisely the kind of thing that should be resolved in a five-minute check rather than discovered later.

Key questions (blocking — answer from source, not from the description):

  1. Which Laravel and PHP versions does composer.json actually permit, and does that matrix include anything we run today?
  2. Where is tenant context stored, and is it safe under Octane, Horizon, and queued jobs — or does it assume a fresh process per request?
  3. Does it ship tests, and are they in CI? For a data-isolation package, "no tests" is a rejection, not a caution.
  4. Does it publish migrations, config, or routes — i.e. what upgrade surface do we inherit?
  5. Is it self-contained, or a client for an external service (auth model, data residency, SLA)?
  6. What is the license, who maintains it, and is there any disclosure policy?
  7. Why this package rather than a mature alternative? The multi-tenant problem space for Laravel is not empty — there are established, actively maintained options with real adoption. This package must beat them on some axis, and "it is small" is not an axis.

Integration Approach

Stack fit — Unverified, and I would not sequence work around it. The one assertion I can make is that installation cost is near zero, which argues for a timeboxed spike rather than a paper decision — but only after the version matrix clears.

Migration path — There is none. No upgrade guides, no prior versions, no documented path from a single-tenant codebase to a tenant-aware one. If we adopt, we design the migration ourselves, including the backfill of tenant identifiers onto existing rows and the audit of every query that might now be silently scoped. That is the larger half of the work and the package contributes nothing to it.

Compatibility — Pin exactly to 0.1.0, not ^0.1. At 0.x, semver permits breaking changes in a minor bump, and this project has not yet demonstrated changelog discipline. Commit the lockfile. Publish and commit the config file so any default drift shows up as a diff in our repository rather than as a behaviour change in production.

Sequencing

  1. Discovery — half a day, gated. Read composer.json, README, LICENSE, src/, tests/. Answer the seven questions. If the version matrix does not cover our Laravel, stop here; that is a legitimate and cheap outcome.
  2. Options comparison — one day, runs in parallel. Evaluate at least one actively maintained alternative against the same seven questions. A TPM decision here is comparative, not absolute; we should know what the mature option costs before accepting the risk of the immature one.
  3. Isolation spike — 1–2 days, only if step 1 clears. Install behind a first-party interface: our own TenantResolver contract plus an adapter binding in a service provider. No application code references the package namespace directly. This is the single most valuable artifact in the whole plan and it is valuable whether or not we adopt.
  4. Kill criteria. Adopt only if the spike passes and the package clears a concrete bar: active maintenance within the last twelve months, tests in CI, an acceptable license, a version constraint matching our stack, and a clean provenance check. Failing any one, we keep the interface and implement a thin in-house resolver behind it — for straightforward subdomain-to-connection switching, that is a small amount of code and we already own the hard part.
  5. Production only after the interface has run in a non-critical, non-tenant-data path for a full release cycle.

The ordering is deliberate: we are buying an implementation detail, and the interface is what makes walking away cheap.

Operational Impact

Maintenance — The dominant cost, and currently uncapped. A five-year-stale 0.1.0 should be modelled as a package we have forked rather than one we consume. Budget a review slot at every Laravel upgrade, plus the recurring cost of carrying a dependency that no longer tracks the framework. Our exposure is bounded only by how well step 3's adapter isolates it — that adapter is not overhead, it is the maintenance cap.

Support — Effectively none. No documentation, no issue history, no evident support commitment. Escalation is "the maintainer's GitHub," and the trailing five years of silence suggests even that is optimistic. Acceptable for a low-blast-radius helper; unacceptable for a component in the tenant isolation path, where the failure mode is a data breach rather than a broken page.

Scaling — Unverified and worth probing deliberately rather than discovering under load. Two specifics: whether tenant resolution does per-request work that does not belong in a hot path (synchronous lookups, config re-parsing, connection churn on every request), and whether per-tenant connection pooling survives connection-count limits as tenant count grows. Dynamic connection switching is exactly the kind of feature that works at ten tenants and falls over at two thousand.

Failure modes, roughly ordered by likelihood:

  • Silent abandonment. No fix arrives for a framework incompatibility. Mitigation: adapter interface; replacement is a binding swap.
  • Breaking change in a 0.1.x bump consumed by a loose constraint. Mitigation: exact pin plus committed lockfile.
  • Cross-tenant leakage under async execution — context set in middleware, lost in a queued job or leaked across an Octane request. Mitigation: explicit test in the spike that dispatches a job and asserts tenant scoping; if that test is hard to write, that itself is the finding.
  • Config default drift across versions changing behaviour with no diff in our repo. Mitigation: publish and commit config.
  • Provenance or supply-chain surprise — repository/publisher mismatch, unexpected transitive dependencies. Mitigation: resolve in discovery.

Ramp-up — Half a day for a competent Laravel engineer to reach go/no-go, contingent on a readable README and a test suite. If either is missing, add a day for source reading, and treat the absence of tests as a strong negative signal rather than a scheduling detail. The estimate should be revised after discovery.

Decision — do not adopt; authorise discovery only. The evidence does not support adoption or a flat rejection: one release, no dependents, no maintenance signal for five years, and a feature list that is plausible but unverified. What I would fund is a half-day discovery pass plus a one-day comparison against a maintained alternative, with the interface-first spike held behind that gate. The strategic point is that the interface is worth building regardless of the outcome — it converts this from a commitment into a reversible implementation choice, and reversibility is the only thing that makes a package this immature even discussable for a component that owns tenant data isolation.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator