laravel-ready/license-connector
A Laravel package that connects your application to a remote licensing server to validate, activate, and deactivate licenses, check subscription status, and verify updates—with a simple configurable client and middleware for protecting your app's features.
laravel-ready/license-connector sits between a Laravel application and a remote license server, handling activation, validation, and (typically) update/entitlement checks for commercially licensed code. v2.0.0 is a major release cut from v1.1.2; treat it as a breaking upgrade rather than a drop-in.
Start here, in order:
v1.1.2...v2.0.0). Before anything else, open that compare and scan for renamed config keys, changed method signatures, dropped facade aliases, and bumped PHP/Laravel constraints in composer.json. There is no prose upgrade guide in the announcement, so the diff is the source of truth.composer require laravel-ready/license-connector:^2.0
php artisan vendor:publish --tag=license-connector-config
.env; keep the config file thin and env-driven so staging and production differ without code changes.If you are upgrading an existing 1.x install, branch first, bump the constraint, run the test suite, and only then resolve the diff. Do not let ^1.1 float into 2.0 accidentally.
Activate on deploy, validate on boot. Activation is a write operation against the license server and should happen in a deploy step or an artisan command, not on a user request. Validation is a read and can be tolerated in the request lifecycle if cached.
// deployment / provisioning
php artisan license:activate {key}
Cache the validation result. The single most important pattern is wrapping validate() behind Cache::remember() with a TTL matched to the license server's polling expectations. Without this you add a remote HTTP round-trip to every request that checks entitlement.
Gate features through Laravel's native primitives. Rather than sprinkling if ($license->isValid()) across controllers, register a Gate::define('use-pro-feature', ...) or a Blade directive so entitlement logic lives in one place and is testable.
Schedule revalidation. A daily or hourly scheduled command that refreshes the cached status keeps long-running apps from serving stale entitlements if a license is revoked or expires. Pair it with a soft-fail policy so a transient network error does not lock users out.
Test with HTTP fakes. Because the package talks to a remote server, stub Http::fake() in your test suite and assert on the activation payloads. Never let CI hit the real license endpoint.
Multi-tenant / multi-domain. If you run per-tenant installs, store the activated license against the tenant record rather than a single global config value, and scope validation to the current tenant's domain.
config(, public method names, and facade accessors before deploying.php artisan config:clear (or config:cache in deploy). Stale cached config is the most common cause of "the package ignores my new settings."^2.0 deliberately; if you are mid-migration, pin the exact patch you have tested.debug level temporarily to see the raw request/response payload — license failures are usually a payload mismatch (domain, product slug, or key format), not a transport problem. Turn it back off before shipping, since it can log key material..env and a secrets manager, not in config/ defaults, and it should be excluded from any payload dumps you paste into issues.How can I help you explore Laravel packages today?