renoki-co/cashier-register
Cashier Register is a Laravel package that extends Laravel Cashier for Stripe with plan and feature management, so you can define subscription tiers, gate features, enforce per-plan limits, and build a SaaS billing flow with minimal code.
Feature → Quota model per subscription. That makes it the natural substrate for decisions like "which plan gets 5 projects vs. 50," "is SSO included in Pro," and "what happens at the limit." PMs can change tier packaging as configuration/data rather than a re-architecture.used_total on over-quota paths and adds getTotalUsedQuota() as a first-class read of a feature's total consumed amount. That gives us a single canonical number for in-app usage dashboards ("3 of 10 seats used"), admin/support views, and any future overage reporting. Prior to this, teams were effectively summing used_quota across subscription features themselves and could surface inflated numbers.features / quotas / usage schema plus enforcement logic and edge-case handling (downgrades, proration, resets, over-quota semantics). Buying this package is the right call when the requirement is "entitlements and quota checks for a Cashier-billed SaaS," not "a billing system." It removes a multi-sprint build and the long tail of counter bugs that motivated this patch.used_total, which means any dashboard, export, or customer communication generated before the upgrade should be treated as potentially overstated and re-derived from getTotalUsedQuota().Adopt when:
composer.json.Look elsewhere when:
To executives (1–2 sentences): Cashier Register is a low-cost Laravel library that lets us define plan features and usage limits on top of the subscription billing we already pay for, so we can launch and iterate on tiered and usage-capped pricing without building and maintaining a metering system ourselves. The 6.0.2 patch fixes a counter bug that could have shown customers inflated usage and adds a standard way to read total consumption — a correctness improvement, no migration or behavior change for users.
To engineering: It's a thin layer over Laravel Cashier — features and quotas attach to existing subscriptions via config and migrations, with no new infrastructure to run. Enforcement is explicit (canUse-style checks and usage injection) rather than implicit, so we control hard vs. soft caps. Pinning to ^6.0.2 is recommended both for the used_total correctness fix and for getTotalUsedQuota(), which should become our single read path for any user-facing usage display; avoid summing per-feature rows ad hoc. Known constraints to design around: it tracks usage but does not invoice it, it assumes Cashier/Stripe-or-Paddle, and it's a small-maintainer package — so we isolate it behind a thin internal service/adapter so swapping the metering source later is a contained change rather than a rewrite.
Risks to state plainly: single-maintainer dependency, no enterprise support, and the fact that the counter is only as correct as the code paths that increment it. Mitigate with a wrapper layer, tests around quota transitions (upgrade/downgrade/reset/over-quota), and a periodic reconciliation of getTotalUsedQuota() against source-of-truth records before any usage number is used commercially.
How can I help you explore Laravel packages today?