Skip to content

Comparison vs stancl/tenancy

The same data we use internally to track our position. Filter by category, by who-wins, or search a feature.

73features compared
26Lasagna advantage
40parity
7stancl advantage
Feature
Lasagna
stancl/tenancy
Area
Subdomain resolver
Tenant identification
Custom domain
CustomDomainMiddleware maps Host header → tenant id
Tenant identification
Combined domain + subdomain resolver
domain-or-subdomain resolver
Tenant identification
Path resolver
Tenant identification
HTTP header resolver
via custom resolver
Tenant identification
Request data (body / query) resolver
Tenant identification
Resolver chain with fallback
user code
Tenant identification
Imperative API (tenancy.run / initialize)
Tenant identification
Cached tenant resolution
BentoCache
Tenant identification
Schema isolation (PostgreSQL)
default driver
Data isolation
Database-per-tenant
database-pg driver
Data isolation
Single-database row scoping
rowscope-pg + withTenantScope mixin
Data isolation
MySQL / MariaDB support
PostgreSQL is the strategic focus
Data isolation
SQLite (in-memory testing)
sqlite-memory driver
Data isolation
Per-tenant connection pool
Data isolation
Read replicas (round-robin / random / sticky)
Data isolation
Deterministic connection naming
Data isolation
Lazy connection provisioning
Data isolation
Pluggable IsolationDriver contract
Data isolation
Database adapter switching
Context switching
Cache prefix per tenant
BentoCache namespace
Context switching
Filesystem (Drive) prefix
Context switching
Queue context propagation (jobs see the tenant)
BullMQ + AsyncLocalStorage
Context switching
Mail driver context (per-tenant from / SMTP)
Context switching
Session scoping per tenant
Context switching
Broadcasting / Transmit per tenant
Context switching
Contextual logger (tenantId on every log line)
AsyncLocalStorage; no helper threading
Context switching
BootstrapperRegistry with LIFO lifecycle
Context switching
Typed lifecycle events
14 events
Lifecycle & events
Declarative hooks (config-driven)
Lifecycle & events
Per-phase before / after hooks
Lifecycle & events
Soft delete + retention with purge command
tenant:purge-expired
Lifecycle & events
Pipeline of jobs per event
5 jobs: install, uninstall, clone, backup, restore
Lifecycle & events
Provisioning commands
Commands / CLI
tenants:migrate / tenants:run
Commands / CLI
tenant:doctor with --fix / --json / --watch
8 built-in checks + plugin API
Commands / CLI
tenant:backup + retention tiers
Commands / CLI
tenant:restore
Commands / CLI
tenant:clone
Commands / CLI
tenant:import (load external SQL)
Commands / CLI
tenant:repl (REPL inside a tenant)
Commands / CLI
Total command count
32 commands
7 commands
Commands / CLI
Per-tenant maintenance mode + bypass token
Operations & SaaS
User impersonation with HMAC tokens
Operations & SaaS
Plans + quotas as middleware (returns 429)
TenantQuotaExceeded event
Operations & SaaS
Encrypted tenant attributes
Operations & SaaS
Audit log table + service
third-party (Spatie)
Satellites
Feature flags per tenant
Satellites
Webhooks (HMAC signed + retries + state machine)
Satellites
Branding per tenant
Satellites
SSO / OIDC with JWKS verification
iss/aud/exp + nonce
Satellites
Operational metrics (cursor-based SCAN)
Satellites
Circuit breaker per tenant (Opossum)
Reliability & observability
OpenTelemetry spans
Reliability & observability
Prometheus /metrics (no peer dep)
Reliability & observability
Health probes /livez /readyz /healthz
Reliability & observability
REST admin API + OpenAPI 3.1 + Swagger UI
31 endpoints
Reliability & observability
Universal routes (Route.tenant / central / universal)
Routing & app structure
Auto-loaded tenant.routes.ts
Routing & app structure
Cross-domain redirect helper
Routing & app structure
buildTestTenant factory
Testing helpers
MockTenantRepository
Testing helpers
setRequestTenant helper
Testing helpers
In-memory adapter for fast tests
sqlite-memory driver
Testing helpers
Auth integration (Adonis Auth / Bouncer / Laravel Auth)
host-app responsibility, auth bridge package planned
Ecosystem integrations
Billing integration (Stripe / Cashier)
billing package planned
Ecosystem integrations
Production deploy artefacts (Dockerfile, docker-compose, Helm chart)
Ecosystem integrations
Subpath exports / tree-shake friendly
Ecosystem integrations
Dedicated documentation site
this site
Product surface
Discord community
Product surface
Admin dashboard UI (out of the box)
OpenAPI + dashboard package planned
Product surface
SaaS starter kit / boilerplate
create-lasagna-saas planned
Product surface
Book / paid course
Product surface

Read this if you're choosing today

If your team needs…Pick
MySQL or MariaDBstancl/tenancy
A Nova-equivalent admin UI todaystancl/tenancy
A boilerplate SaaS template you can clonestancl/tenancy (Laravel)
AdonisJS 7 + PostgreSQL with maximum operational surfaceLasagna
Schema-per-tenant + read replicas + circuit breaker out of the boxLasagna
The doctor command and CI-friendly health gatesLasagna
A built-in REST admin API + OpenAPI 3.1 specLasagna
Per-tenant impersonation with HMAC + auditLasagna

If your stack is AdonisJS and Postgres, Lasagna ships more production plumbing in one box than any other package on the ecosystem today. If your stack is Laravel and you want the maturity of a 6-year-old project with a course, a book, and a Discord: stancl/tenancy.

What we're filling next

Phase 4 of our roadmap is explicitly aimed at the gaps stancl has filled: a public Discord, the @adonisjs-lasagna/dashboard package (Inertia + Vue admin UI consuming the OpenAPI spec), create-lasagna-saas (a starter kit that wires Lasagna + Auth + Stripe), and the v2.0.0 stable cut.

Track the work in the GitHub repo. Issues are open for feature requests.

Was this page helpful?

Released under the MIT License.