revoltify/subscriptionify
Subscriptionify is a Laravel package for adding subscription plans and feature access to your app. Define plans, features, and usage limits, subscribe Eloquent models, and check access through a clean, flexible API.
featureInfo() returning correct data per slug means gating decisions can be made at the point of use ("can this workspace add a 5th seat?") rather than at page-render time. That supports progressive upsell UI, soft limits, and "you're 2 seats from your cap" prompts without bespoke query logic per surface.grantFeature() resolving with no subscription present means growth/support can hand out capability without touching billing: design-partner access, service credits, migration grandfathering, VIP flags. Previously these had to be modeled as a degenerate plan; now they're a first-class, cheap operation.subscriptionInfo() is a serializable DTO and its features collection changed shape in this release. Any product surface that ships entitlements to a client (mobile app, SPA bootstrap payload, public API) inherits that contract — worth a deliberate decision on whether entitlement lists are client-visible, and on versioning them.Consider adoption when:
Look elsewhere when:
laravel-pennant cover toggles and percentage rollouts, which is a different problem; this package won't do gradual rollout or experimentation targeting.subscriptionInfo() should expect the serialized shape to evolve. If downstream clients are third parties on a fixed contract, budget for a translation layer.For executives — the short version. This is a small, focused library that lets us sell and enforce tiered plans without building a billing-adjacent subsystem ourselves. The 1.0.2 release broadens it from "subscription features" to a general entitlements engine: we can now grant capabilities to an account that has no subscription at all. That directly reduces time-to-market for enterprise/compoed deals, partner and beta access, and parent-child account structures that we'd otherwise have to improvise. It's an open-source dependency on a 1.0.x package — low cost to adopt, low cost to exit, but no vendor support, so treat it as a maintained-by-us dependency rather than a procured platform.
For engineering — why it's worth the dependency. We get a resolved answer to "what can this account do" from one API, with the semantics that are usually the source of bugs spelled out: overlapping plan and grant on the same slug deduplicates and adds the quota, while unit price and reset cycle are overridden, not summed. That's the rule we would have gotten wrong by hand. Grants resolve correctly with no subscription present, so comp accounts and inherited entitlements don't need fake subscriptions or a parallel code path — one read path covers both. The trade-off is a small public surface with one maintainer and a changelog that shows real behavior changes (1.0.2 alters what subscriptionInfo() serializes), so we should pin versions, keep entitlement reads behind our own thin service, and read the changelog on upgrade. Integration is a mapping exercise: our domain actions to feature slugs, our limits to quota values. That's a day or two, versus the weeks of incremental correctness work the overlap rules represent.
How can I help you explore Laravel packages today?