Laravel Cashier Paddle is a Laravel package that provides a fluent interface to Paddle Billing. It wraps subscription management — swaps, pausing, quantities, cancellation grace periods — so you don't have to write the boilerplate.
Cashier Paddle is maintained by the Laravel team, not by Paddle. For support, use the Cashier Paddle issue tracker.
View source code and report issues on GitHub.
View and install on Packagist.
See recent releases and changes.
Install
Require the package via Composer:
composer require laravel/cashier-paddleFollow the Laravel documentation for the full install — publishing migrations, configuring environment variables, and wiring up the Billable trait on your User model.
Configure
Cashier Paddle reads configuration from standard Laravel environment variables:
PADDLE_CLIENT_SIDE_TOKEN=your-paddle-client-side-tokenPADDLE_API_KEY=your-paddle-api-keyPADDLE_WEBHOOK_SECRET="your-paddle-webhook-secret"PADDLE_SANDBOX=trueCreate the API key and client-side token in Paddle > Developer tools > Authentication and the webhook secret on your notification destination in Paddle > Developer tools > Notifications.
Quick example
Load Paddle.js by placing the @paddleJS Blade directive right before your application layout's closing </head> tag:
<head> @paddleJS</head>Open a checkout for a single price inside a route:
use Illuminate\Http\Request;
Route::get('/buy', function (Request $request) { $checkout = $request->user() ->checkout('pri_01hsxyh9txq4rzbrhbyngkhy46') ->returnTo(route('dashboard'));
return view('checkout', ['checkout' => $checkout]);});Render the checkout in a Blade template using the Paddle.js button component provided by Cashier:
<x-paddle-button :checkout="$checkout" class="px-8 py-4"> Buy</x-paddle-button>