scribe/stripe-bundle
A Symfony bundle that streamlines Stripe integration with preconfigured services, dependency injection and thin wrappers around the Stripe PHP SDK, so you can add payments, customers, subscriptions and webhooks to your app with minimal boilerplate.
Architecture fit — poor, and the mismatch is the headline. scribe/stripe-bundle is a Symfony bundle, not a Laravel package. Its entire deliverable is a Symfony DI extension, service definitions, and bundle configuration that register a configured Stripe PHP SDK client in a Symfony container. Laravel's service-provider/container conventions, package discovery, and config publishing are a different mechanism; none of that wiring transfers. The only thing that transfers is the idea — "bind a configured StripeClient as a singleton" — which in Laravel is one service provider, one config array, and one env entry. As a TPM, I would frame this to stakeholders as: we are not evaluating a package, we are evaluating whether to adopt 20–40 lines of glue we can write and own in under a day.
Integration feasibility — low as-is, contrived at best. There is no service provider, no facade, no config-publish tag, no Laravel-version evidence. Two paths exist: (a) pull Symfony's DI component into a Laravel app to load the bundle — unacceptable, it introduces a second container and a confusing class of resolution bugs; or (b) fork the bundle down to its service definition and reimplement it as a Laravel provider. Path (b) is not integration, it is reimplementation with a citation. Either way, we pay translation cost rather than capability cost.
Technical risk — high on every axis that matters for a payments path.
NOASSERTION means GitHub could not identify an SPDX license. For commercial payment code, that is a legal gate, not a footnote — and it blocks even copying it as reference until clarified.Key questions for the team.
NOASSERTION, or do we need written clarification from the maintainer before any code — even reference code — is used?new \Stripe\StripeClient($secret) plus a config read? If the answer is "DI and config loading," that is a service provider, not a dependency.stripe/stripe-php directly, or laravel/cashier if the real need is billing abstractions?Stack fit — poor, stated plainly. Our stack is Laravel; the package is Symfony. Functional overlap with what we already have (stripe/stripe-php as a first-class Composer dependency plus a small provider) is near 100%. Every dollar spent here buys translation, not capability.
Migration path — there is nothing to migrate from, which is the good news. This is a greenfield decision we can decline at zero cost. If a team has already prototyped against it, exit is trivial: the wrapper's surface is a configured client object, so replacing it is a one-file change at the injection point.
Compatibility — unverified and likely poor. We would need to confirm supported PHP versions against our runtime, Symfony DI constraints if we attempted to load it, and — most critically — the Stripe SDK version range it pins. A wrapper that caps the SDK below current is disqualified regardless of everything else, because SDK upgrades carry API-version and occasionally security relevance.
Recommended sequencing.
stripe/stripe-php directly and pin an explicit Stripe API version in config as a reviewed, deliberate value — not whatever the lockfile resolves.StripeClient from config/services.php, with secrets sourced from env/secret manager. That is the full feature set the bundle offers.laravel/cashier on its own merits — maintained, licensed, idiomatic — rather than reaching for a Symfony bundle.Maintenance — ownership lands entirely on us. Zero dependents means zero upstream bug reports; a 0-star repo typically means no meaningful release cadence. We would become de facto maintainers of a fork whose only distinction from native code is an unfamiliar Symfony service-definition format — strictly worse than owning a small provider we wrote and understand.
Support — no vendor, no community, no SLA. Payment code is exactly where we want unambiguous licensing, a clear upgrade path, and a dependency we can reason about during a 2am incident. The escalation path here is "read the source and hope," which is not a support model for a revenue path.
Scaling — orthogonal. The wrapper does not affect scale either way; Stripe calls are I/O-bound and the SDK is a thin HTTP client. The real scaling surface is idempotency keys, retry/backoff, webhook handling, and connection pooling — none of which this bundle addresses. No benefit, no obstacle, and therefore no reason to carry it.
Failure modes.
Ramp-up — near-zero, and that is the indictment, not the defense. There is nothing substantive to learn. The real cost is organizational: every hour of design review, license review, or security review spent here is an hour not spent on the provider we will write anyway. Recommendation: decline, reimplement natively, and document the rationale so the decision is durable and the next engineer does not rediscover this repository and reopen the question.
How can I help you explore Laravel packages today?