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 Soulbscription Laravel Package

lucasdotvin/laravel-soulbscription

Laravel Soulbscription is an elegant subscription and feature management package for Laravel. Define plans and features, attach subscriptions to any model, and control consumable quotas, renewals, and access through a simple, expressive API built for real-world billing flows.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. laravel-soulbscription is a Laravel-native subscription/entitlement package: Eloquent models (Plan, Feature, Subscription, FeatureConsumption), publishable migrations, a service provider with auto-discovery, and a trait applied to the subscriber model. It fits cleanly into a standard Laravel app that needs plan-based feature gating and consumption tracking without adopting a full billing platform (Stripe Billing, Chargebee, Lago). It is an entitlement layer, not a payments layer — that distinction drives most of the evaluation below.

Integration feasibility. Low-to-moderate. composer require lucasdotvin/laravel-soulbscription, publish and run migrations, add the trait to the billable model, seed plans and features, then gate features in policies/middleware. A working vertical slice is achievable in days, not weeks. The real effort is not installation but deciding the entitlement model (which features are consumable vs. boolean, which plans are periodic vs. lifetime) before schema and seed data harden.

Technical risk. Moderate, concentrated in three areas:

  • Bus factor. Single-maintainer package. Version 4.3.2 is a one-line hotfix from the primary author, which is healthy responsiveness but also confirms there is no second reviewer or commercial backer.
  • Domain edge cases. This release fixes "preset expiration in renewals for plans with no periodicity" — i.e., non-periodic (lifetime/one-off) plans were being stamped with an expiration on renewal. That is a correctness bug in the trickiest part of the domain: the interaction of periodicity = null, renewal, and expiration. Similar edge cases (grace periods, suppressed subscriptions, timezone boundaries) should be assumed to exist.
  • Version discipline. The fix shipped as a patch (4.3.1 → 4.3.2) rather than a minor, implying the maintainer treats it as a defect rather than a behavior change. Acceptable, but it does silently change persisted data for affected subscriptions — see failure modes.

Key questions.

  1. Do we have any non-periodic (lifetime, one-off, contract) plans in the catalog today, and are any of them live in production on 4.3.1 or earlier?
  2. What is our tolerance for a single-maintainer dependency in a revenue-adjacent path — do we fork, vendor, or wrap?
  3. Is entitlement evaluation on the request path (middleware) or precomputed? This determines blast radius of any future correctness bug.
  4. Who owns the upgrade cadence, and can we get a staging environment that replays real subscription data?
  5. Are we pairing this with a separate payments/receipts system, and if so, what reconciles the two?

Integration Approach

Stack fit. Standard Laravel (service provider auto-discovery, Eloquent, migrations, config publish). No queue, cache, or external service is mandatory, so it drops into an existing app without infrastructure change. The only structural requirement is a subscriber model (typically User) and a relational database.

Migration path. Two distinct scenarios:

  • Greenfield entitlements — install, migrate, seed, gate features. Straightforward; recommended entry point.
  • Replacing existing entitlement logic — do not cut over in one step. Introduce the package behind an internal interface (e.g. EntitlementService::can($user, $feature)), backfill plans/subscriptions from the legacy tables, and run both paths in shadow mode for a billing cycle before removing the old checks.

Compatibility. 4.3.2 is a patch release with no reported breaking changes; it is a drop-in for 4.3.1. Pin with ^4.3 and treat minor bumps as requiring a read of the changelog. Because 4.3.2 corrects behavior rather than adding capability, no code changes are expected on our side — but any subscription created or renewed on a non-periodic plan under ≤4.3.1 may carry a spurious expires_at that must be audited and cleared as data remediation, not just a dependency bump.

Sequencing.

  1. Spike: install in a scratch branch, model two or three real plans (one periodic, one non-periodic), confirm gating works end to end.
  2. Define the internal EntitlementService wrapper so no application code calls package APIs directly.
  3. Publish migrations and schema-review the consumption table (indexes on subscriber + feature, retention policy).
  4. Seed plans/features via idempotent seeders or a config-driven catalog.
  5. Ship read-only gating for one non-critical feature; observe.
  6. Enable consumption and renewal paths; add scheduled renewal job with monitoring.
  7. Only then enforce hard paywalls / access denial.

Operational Impact

Maintenance. Low ongoing code maintenance, moderate dependency-watch burden. The package surface is small and stable; the risk is upstream drift, not churn in our code. Recommend: pin the version, subscribe to GitHub releases, and maintain a thin internal wrapper so a fork or replacement is a contained change. Budget ~1–2 days per quarter for upgrade evaluation.

Support. No commercial SLA. Support is GitHub issues at the maintainer's discretion, so internal ownership is mandatory — assign a named engineer as package owner. If entitlements gate revenue, an unresponsive upstream is a business risk, not just a technical one; pre-negotiate the option to fork (MIT-licensed, small codebase, fork is cheap).

Scaling. The subscription/consumption model is row-per-event; feature_consumptions will grow fastest. Plan for indexes on (subscriber, feature, created_at), a retention/pruning job, and moving renewal processing to a queued scheduled command so a large renewal cohort doesn't block a request cycle. Read paths (feature checks) should be cheap; if they aren't, cache entitlements per subscriber with invalidation on subscription change.

Failure modes.

  • Silent entitlement corruption (this release's class). Non-periodic plans receiving an expires_at on renewal → lifetime customers silently expire → access denial or, worse, silent over-provisioning if checks are lenient. Because it is silent and data-level, it will not surface in logs; it surfaces in support tickets.
  • Renewal job failure. If the scheduled renewal doesn't run, subscriptions lapse and paying users are locked out. Needs a dead-man's-switch alert on renewal job completion.
  • Consumption race conditions. Concurrent requests decrementing quota can over-consume without a transaction/lock; verify the package's locking semantics before relying on it for metered billing.
  • Timezone/expiration boundary. expires_at comparisons across DST or app-vs-UTC timezone are a classic source of off-by-hours entitlement loss.
  • Upstream abandonment. Mitigated by wrapper + fork option.

Ramp-up. A mid-level Laravel developer reaches productive use in roughly 2–4 days; full fluency with the domain model (periodicity, grace days, suppression, consumable vs. boolean features) takes 1–2 sprints of real use. The learning cost is in the subscription domain, not the API. Onboarding material should be the team's own plan catalog and the internal EntitlementService, not the upstream README — and it should explicitly document how non-periodic plans are expected to behave, since that is precisely where upstream just shipped a defect.

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.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core