flarum/subscriptions
Flarum Subscriptions lets users follow discussions and tags, receive notifications about new activity, and manage their subscriptions from a dedicated page. It adds flexible subscription controls to help communities keep members engaged with relevant content.
Architecture fit. The first thing to flag is category mismatch: flarum/subscriptions is not a Laravel package, it is a Flarum extension. Flarum is a PHP forum platform that borrows Laravel components (Illuminate container, database, events, queue) but pins its own versions and boots through its own extender/service-provider lifecycle. It cannot be composer required into a Laravel application and used as a billing library. Leveraging it means one of three things: (1) running Flarum as a companion service alongside the Laravel app — the realistic option; (2) extracting the subscription domain model and reimplementing it in Laravel — high effort, low reuse; or (3) not using it at all if Flarum isn't already in the estate.
Integration feasibility. Moderate-to-low as a standalone dependency. The extension provides subscription state, plan definitions, and recurring-payment hooks on top of Flarum's payment abstraction, but it is designed to be consumed by Flarum's frontend and other Flarum extensions, not by an external API. Any Laravel-side entitlement checks would require a shared datastore or a thin API we build and own. Realistically this is a "we already run Flarum, do we add paid memberships?" decision, not an "adopt this package" decision.
Technical risk.
[READ ONLY] Subtree split is the dominant signal. The canonical source lives in Flarum's monorepo; this repo is a generated mirror. Issues and PRs are not accepted here, patches require forking upstream, and the release history is an artifact of core releases rather than an independently versioned library.Key questions. Which Flarum major version(s) does the current release target, and what is the upgrade cadence? Which payment gateways have first-party extension support, and do they cover our processor? Is subscription/entitlement data readable from an external service without forking? How are webhooks received and are they idempotent? Does it handle tax, multi-currency, proration, refunds, and failed-payment dunning, or do we own those? Who is the maintainer of the canonical monorepo package, and what is the bus factor? What is the migration story if we later move billing in-house?
Stack fit. Only viable if Flarum is already (or is planned to be) part of the product. The supported topology is: Laravel remains the system of record for identity and entitlements; Flarum runs as a separate PHP service with its own vendor tree; flarum/subscriptions manages plan purchase and renewal inside Flarum; the two are joined by shared user identity and a synchronization contract we own.
Do not attempt to share a single vendor/ directory or a single Composer project between Laravel and Flarum. Their Illuminate version pins will conflict. Treat Flarum as a bounded-context service with its own deploy unit, its own database, and a documented API/event boundary.
Migration path. Do not vendor this read-only mirror. Either consume the published flarum/subscriptions release through Composer at a pinned version, or — if any customization is required — fork the canonical monorepo extension, not this split, and maintain the fork as a path repository. Record explicitly that we are diverging from upstream at that point and budget for rebasing.
Compatibility. Verify against a specific Flarum major (1.x vs 2.x are materially different extension APIs), the PHP version Flarum supports, and MySQL vs PostgreSQL. Validate the gateway extension's supported currencies and regions before committing. Confirm that Flarum's pinned Illuminate components do not collide with our Laravel version at the HTTP/SSO boundary (they won't at the dependency level if services are separated, but they will at the shared-session level if we try to share cookies — don't).
Sequencing.
Maintenance. Upgrades arrive on Flarum's release cadence, not ours. Because this repo is a generated split, there is no changelog, no issue history, and no PR review trail visible here — the team must track the canonical monorepo to understand what changed and why. Any local patch becomes a permanent rebase obligation. Budget for one engineer to own the Flarum surface, not a fraction of one.
Support. Community forum and upstream maintainers only; no commercial SLA. The low star count and mirror status mean we should assume we will be our own first line of support. Escalation paths for a billing outage are effectively "read the upstream source."
Scaling. Subscription checks on the request path will become a hot read — cache entitlements with an explicit TTL and invalidation on webhook. Webhook ingestion must be queue-backed and horizontally scalable; renewal bursts (month-start, annual cohorts) are spiky. Subscription and payment-attempt tables grow monotonically; plan for retention and archival of historical attempts. Do not put the entitlement check inline in a page-render path without a cache.
Failure modes.
Ramp-up. A Laravel developer will not be productive in this codebase on day one. Flarum's extender pattern, its frontend (Mithril/JS), its migration and settings conventions, and its permission model are all distinct from standard Laravel idioms. Expect roughly one to two weeks to first meaningful contribution, plus additional time for whoever owns the payment gateway integration to understand its reconciliation semantics. The billing correctness knowledge — not the PHP — is the actual ramp-up cost, and it should sit with whoever owns revenue operations, not solely with engineering.
How can I help you explore Laravel packages today?