- How do I install protonemedia/laravel-paddle in a Laravel app?
- Run composer require protonemedia/laravel-paddle, then publish the package config file and migrations with the vendor:publish command. Add your PADDLE_* environment variables, register a CSRF-exempt route for Paddle webhooks, and make sure a queue worker is running for queued jobs. Beyond that, most of the effort is product and billing decisions like plan mapping, entitlement rules, and dunning UX, not package setup.
- Does this package target Paddle Billing or Paddle Classic?
- That depends on the package major version you pin, and you should confirm it before committing. Paddle Classic is being retired in favour of Paddle Billing, so a wrapper that still targets Classic-era APIs is a dead end. Check the composer constraints and the source to verify the pinned release is Billing-only, and document your upgrade path for when Paddle ships breaking changes.
- How does it compare to laravel/cashier-paddle?
- Laravel ships laravel/cashier-paddle as a first-party option covering subscriptions, webhooks, and a Paddle::fake()-style test harness with support guarantees. This package is a third-party wrapper offering a fluent checkout and subscription API plus Blade components for checkout and billing. Choosing it needs a concrete justification such as ergonomics, fewer abstractions, or existing team familiarity, otherwise the first-party package avoids avoidable maintenance.
- Are Paddle webhooks processed idempotently by this package?
- The package ships a webhook endpoint with signature verification, which is the minimum for accepting Paddle callbacks safely. Idempotency on replay and ordering guarantees may be left to your application, so read the source for the exact version you pin. Treat webhook handling as the highest-severity failure surface in the integration and add your own dedupe and state reconciliation where needed.
- How can I test a Paddle integration without hitting the real API?
- laravel/cashier-paddle provides a Paddle::fake()-style harness, but a third-party wrapper like this one may not ship an equivalent. In practice you mock the underlying HTTP client or swap the facade binding in your test suite. Cover webhook signature checks, replay and duplicate handling, and subscription state transitions with explicit tests.
- Which Laravel and PHP versions does protonemedia/laravel-paddle support?
- Check the composer.json constraints for the exact release you plan to pin, because the PHP and Laravel baseline is the most common install blocker. The package follows standard Laravel idioms like config publishing, queued jobs, events and listeners, and Eloquent, so it fits a native monolith or modular monolith. Verify the constraint against your current runtime before scheduling the work.
- Is this package actively maintained and safe to depend on in production?
- Adoption signal is modest: roughly 200 GitHub stars, zero dependents, and a single-maintainer bus factor under the Protonemedia umbrella. That is not disqualifying, but it means you are an early adopter who should budget time for reading the source rather than relying on the docs. The MIT licence lets you fork and patch, so treat the code as vendorable and name an owner for patches if upstream goes quiet for 12 months.
- What features does the package provide for checkout and subscriptions?
- It ships a service provider and facade, a fluent checkout and subscription API, models and migrations for receipts and subscriptions, and Blade components for checkout and billing. That replaces a meaningful chunk of glue code for session creation, webhook routing, and subscription state sync. Plan mapping, entitlement rules, and feature gates remain your responsibility.
- Does Paddle handle VAT and sales tax for me?
- Yes, Paddle is a merchant of record, so it absorbs global sales tax, VAT, and chargeback handling. That tax and compliance burden is the main commercial reason teams pick Paddle over Stripe. The package is only the Laravel integration layer; the merchant-of-record behaviour comes from Paddle itself.
- Can I use this package in a multi-tenant Laravel application?
- Yes, it works cleanly with multi-tenant apps provided you scope subscription records per tenant yourself. Keep your plans, entitlements, and feature gates in a domain layer that stays independent of the package so the vendor remains swappable. Sync Paddle state into your own subscription table via webhooks and treat that table as your entitlement source of truth.