devanoxltd/core
Core package for Laravel projects by Devanox, providing module support, helpers, and multi-tenancy features. It includes publishable config, migrations, views, translations, and assets, plus tenancy setup commands. Built for Devanox Private Limited projects on Laravel 13 and PHP 8.5+.
Architecture fit. devanoxltd/core is not a point solution — it is a foundational bundle that wants to sit under an entire Laravel application. In one dependency it supplies: a module system (module:list|enable|disable|migrate), global helper functions (isAppInstalled(), modules(), tenancy(), tenant()), multi-tenancy with database-per-tenant switching, auto-registered HTTP middleware, Blade/Livewire component namespaces, a Core facade alias, publishable config/migrations/views/lang/assets, and a license-verification subsystem. That is four or five products wearing one Composer name. For a Devanox-owned codebase this is a reasonable internal accelerator; for any other organisation it means adopting a framework-within-a-framework whose boundaries are not documented. Treat the module system and the tenancy layer as the only two genuinely valuable capabilities and evaluate the rest as convenience surface you may not want.
Integration feasibility. Mechanically, installation is standard Laravel package work: composer require, vendor:publish --tag="core", php artisan migrate, plus a separate tenancy flow (tenancy-config, tenancy-migrations, tenancy:install). The blockers are environmental rather than procedural:
composer require outright on any application not already on that stack, and it forces your runtime images, CI matrix, and possibly your managed hosting onto versions your platform team may not yet support. A single package dictating your platform version is a governance problem, not just a technical one.NOASSERTION with a Proprietary License file. Nothing ships until legal confirms whether internal use, modification, forking, and redistribution inside your organisation are permitted — and whether the bundled license-verification code constitutes a phone-home obligation.composer require devanox/core while the repository and Packagist name are devanoxltd/core. Translations ship under an eng locale requiring APP_FALLBACK_LOCALE=eng, a workaround that leaks a package quirk into your application's global config. Both are early indicators that documentation is written for the author, not for an adopter.Technical risk. Ranked by blast radius:
| Risk | Severity | Why |
|---|---|---|
| Global helper collisions | High | tenancy() and tenant() are the exact function names registered by stancl/tenancy, the dominant Laravel tenancy package. The two cannot coexist; adopting this package is a one-way door on tenancy architecture. |
Auto-registered InstallApp middleware |
High | It is prepended to the HTTP kernel by the service provider, not opt-in per route. Any request to an environment where storage/installed is missing or storage is not writable can be intercepted before your own middleware runs. |
| License verification at runtime | High | A devanox:license-check command implies a remote dependency. Behaviour on expiry, DNS failure, or an unreachable vendor endpoint is undocumented — a latent outage vector and an availability coupling to a third party you have no SLA with. |
| Bus factor / ecosystem void | High | 0 stars, 0 dependents, single named maintainer. No external bug reports, no Stack Overflow corpus, no third-party tutorials. Every defect becomes a support ticket to one person. |
| Pre-1.0 API churn | Medium | Three releases through v0.2.1 with auto-generated, content-free changelogs. Breaking changes between minors are likely and unannounced. |
| Generated-code drift | Medium | tenancy:install scaffolds base models into your app; extending Tenant/Domain means your subclasses inherit an unpublished internal contract that can shift under you on upgrade. |
| Schema ownership | Medium | Publishable migrations put package tables into your application's migration history, so package upgrades and your own schema changes interleave. |
Key questions to put to the vendor (or to the internal maintainer, if you are Devanox):
InstallApp middleware registration be disabled via config for environments where it is inappropriate?tenancy()/tenant() behave if stancl/tenancy is also installed — hard failure, silent override, or coexistence?Stack fit. Assume this only fits a greenfield Laravel 13 / PHP 8.5 application. If your fleet is on Laravel 10–12, the honest answer is that this package is not adoptable today and the evaluation should be deferred rather than forced — downgrading the constraint is not something you control. Do not attempt to install it into a mature application with an existing tenancy implementation; the global-helper and middleware collisions make remediation more expensive than the integration.
Migration path. There is no migration path, only a greenfield path. The package is additive — it does not replace your auth, queue, or cache layer — but the tenancy capability is a foundational choice that must be made before the first tenant-scoped table exists. If you already run stancl/tenancy, spatie/laravel-multitenancy, or a hand-rolled equivalent, treat this package as incompatible until the helper-collision question is answered in writing.
Compatibility. Establish the following before writing application code:
devanoxltd/core, not the README's devanox/core); if pulling from a private VCS, add the repositories entry first and verify with composer show.composer.json ("devanoxltd/core": "0.2.1") rather than accepting caret ranges — pre-1.0 packages will break you on a minor bump.AppServiceProvider for helper-name and middleware-priority conflicts. Grep for function tenancy(, function tenant(, function modules( in vendor/ before and after install.bootstrap/app.php, model extension) and is the least reversible part.Sequencing. Run this as a timeboxed spike with a kill gate, not as a committed project:
module:list|enable|disable|migrate, and verify that composer dump-autoload in the deploy script picks up new module PSR-4 roots. This validates the headline capability.App\Support\* adapter so application code never calls package helpers directly. Deploy to a staging environment with storage/installed deliberately absent and deliberately unwritable to learn what InstallApp actually does.tenancy:install, stand up two tenants, and exercise tenancy()->run() including forced-failure cases (a callback that throws mid-switch) to confirm connection and state restoration.devanox:license-check at a test key; record behaviour on success, rejection, no network, and expired key. Block production until failure modes are documented.If you proceed, adopt the module system first and the tenancy layer last, and keep both behind application-owned interfaces so an exit remains affordable.
Maintenance. You are inheriting a dependency with one named maintainer (Mr Chetan), zero external consumers, and a changelog that is auto-generated boilerplate across three releases. There is no signal that anyone outside Devanox exercises this code, which means your production traffic will be the test suite. Budget for the possibility that your team becomes the de facto maintainer: read access to the repository, a pinned fork, or a written support agreement are all reasonable asks before this reaches production. Additionally, package-published migrations live in your application's migration history, so every upgrade requires a schema-diff review rather than a routine composer update.
Support. No public issue engagement, no documented SLA, no version-support policy. If you are not Devanox, escalate to a commercial agreement that names response times and a breaking-change notice period. If you are Devanox, the gap is internal: the package needs a named owner, a documented upgrade guide per minor version, and a rule that no release ships without a human-written changelog.
Scaling. Two distinct concerns:
tenant:create-database, so tenant provisioning cost, connection-pool sizing under PHP-FPM, and migration fan-out (tenant {artisanCommand}) all grow linearly with tenant count. This model is a good fit up to hundreds of tenants and needs deliberate engineering beyond that. The package's documentation does not discuss any of this.Failure modes to monitor explicitly:
InstallApp intercepting production traffic if storage/installed is missing or the storage volume is remounted/read-only after a deploy — highest-severity, lowest-visibility failure.tenancy()->run() is interrupted by an uncaught exception or a fatal error — audit for cross-tenant data exposure, and add a defensive assertion that no tenant-scoped query executes without a resolved tenant.Alert on: application responses returning install/redirect states unexpectedly; failed devanox:license-check executions; migration drift between package and app; tenant provisioning errors (Tenant\DatabaseCreated / Tenant\Created events are the hook for this).
Ramp-up. Expect roughly two to three days for a Laravel-fluent engineer to reach productive use of the module system, and one to two weeks to be genuinely confident with the tenancy layer including failure-mode behaviour. The constraint is not conceptual difficulty — it is that the README is the entire documentation set, so onboarding means reading src/ directly. That cost is paid by every new engineer, forever, and it does not amortise. Mitigate by having your first adopter write an internal one-pager covering: the real install name, the helper inventory, the middleware behaviour, the tenancy lifecycle, and the licence-check failure modes. Without that artefact, this package's undocumented surface becomes tribal knowledge concentrated in one or two people — which is precisely the failure mode the package's own bus factor already exposes you to.
How can I help you explore Laravel packages today?