lucasdotdev/laravel-soulbscription
Soulbscription is a Laravel package for subscription and feature management. Define plans, subscribe models, track feature quotas and consumption, and handle recurring or prepaid access through a clean, expressive API.
Architecture fit. Soulbscription is an Eloquent-centric subscription and entitlement layer for Laravel: plans, features, feature consumptions, subscriptions with periodicity/grace periods, and a scheduled renewal mechanism. It fits cleanly if our commercial model is "plan + feature quotas, renewed on a schedule" and our app is already Eloquent- and scheduler-driven. It is explicitly not a payments/billing-gateway package — it owns entitlement state, not money movement — so if we run Stripe/Paddle, we must decide which system is the source of truth. It is also a poor fit for pure usage-metered/rating models.
Integration feasibility. Low-to-moderate. composer require, publish migrations/config, apply the subscriber trait to the User (or Team) model, seed a plan/feature catalog, and register the renewal command on the scheduler. The bulk of the effort is domain modeling, not plumbing. Because there is no prior assessment, this is a greenfield evaluation and the recommendation is to adopt 4.3.2 specifically rather than any earlier 4.3.x.
Technical risk.
expires_at values that should not exist. Any existing environment needs an audit, not just an upgrade.Key questions.
Stack fit. Laravel 10/11 on PHP 8.1+, MySQL or Postgres, standard Laravel scheduler (cron or schedule:run worker). No new infrastructure class is introduced — it is a database-backed domain package. Fits a conventional Laravel deployment without architectural change.
Migration path. Greenfield: install ^4.3.2, publish and run migrations, seed plans/features, apply traits, register the renewal command. If any pre-production or staging environment already ran 4.3.0/4.3.1, treat the upgrade as upgrade + data audit: query for subscriptions on plans with no periodicity that carry a non-null expires_at, and null them out after confirming intent.
Compatibility. 4.3.2 is a patch release against 4.3.1 — semver-compatible, no config or migration changes indicated, drop-in for anyone already on 4.3.x. Pin to ^4.3.2 (or 4.3.* with a floor of 4.3.2) so the expiration bug cannot be reintroduced by an older lockfile.
Sequencing.
User vs. Team) — this is hard to change later.Maintenance. Thin dependency, but requires active stewardship: review every release note rather than auto-bumping — 4.3.2 is proof that patch releases can carry behavioral corrections to billing state. Budget a named owner and a recurring monthly changelog review.
Support. Community-only: GitHub issues, no vendor SLA, no commercial support path. Any production incident traces to our own team, so we should be prepared to fork or vendor the renewal logic if the maintainer goes dormant.
Scaling. The workload is database-bound rather than compute-bound. The renewal pass is a batch job over due subscriptions — chunk it and push to the queue as subscription volume grows, and index the expiry/next-renewal columns. Feature consumption is a hot write path on user-facing requests; watch row-lock contention if consumptions are transactional.
Failure modes.
Ramp-up. A Laravel-fluent engineer can stand up a working integration in one to two days. The real cost is domain alignment: periodicity, grace periods, and feature-quota semantics need product review before the model is locked in, because retrofitting those semantics after subscriptions exist is materially harder than getting them right up front.
How can I help you explore Laravel packages today?