Vatly
Laravel

Vs Cashier (Stripe, Paddle) & Lemon Squeezy

Vatly Laravel Package - Vs Cashier (Stripe, Paddle) & Lemon Squeezy

Picking the billing layer for a new Laravel app? If you've reached for Laravel Cashier before, Vatly will feel immediately familiar — a Billable trait, subscribed(), subscription()->swap(), a wired-up webhook endpoint. The difference is what sits behind the API: Vatly is a Merchant of Record, so it is the legal seller and handles VAT, invoicing, and payment compliance for you — and it's Europe-first, operating under EU jurisdiction.

This page is an honest, side-by-side look at how vatly-laravel stacks up against the Cashier-style packages you might otherwise reach for — Laravel Cashier (Stripe), Laravel Cashier (Paddle), and Lemon Squeezy for Laravel — gaps included.

Already running one of these in an existing app? This page helps you choose. Once you have, Migrating from Cashier shows how to add Vatly next to your current biller and migrate customers over gradually.


At a glance

Cashier (Stripe Billing)Cashier (Paddle)Lemon SqueezyVatly
Composer packagelaravel/cashierlaravel/cashier-paddlelemonsqueezy/laravelvatly/vatly-laravel
Billable traitLaravel\Cashier\BillableLaravel\Paddle\BillableLemonSqueezy\Laravel\BillableVatly\Laravel\Billable
Merchant of RecordNo — you are the sellerYesYesYes (full)
Entity / jurisdictionYou (wherever you're registered)Paddle, UKLemon Squeezy, US (Stripe-owned)EEA / EU jurisdiction
Who remits VAT/sales taxYou (Stripe Tax only calculates)ProviderProviderProvider
Customer stored ascolumns on the billable model (stripe_id, …)customers table (paddle_id)lemon_squeezy_customers tablevatly_id column on the billable model + vatly_* tables
CheckoutStripe Checkout (hosted) / ElementsPaddle.js overlay / inline (client-side JS)Lemon.js overlay / hosted URLVatly-hosted redirect (+ guest claim)
Webhook route/stripe/webhook/paddle/webhook/lemon-squeezy/webhook/webhooks/vatly
Coupons / promo codesYesYesYesOn the roadmap (workaround below)
License keysNoNoYesOn the roadmap (rarely needed for SaaS)
Refunds & chargebackswire it yourselfeventseventsfirst-class models + events
Trials, swap, grace/resumeYesYesYesYes

Two takeaways:

  1. laravel/cashier runs on classic Stripe Billing, where you're the seller of record and own VAT registration, filing and remittance. Stripe has a real MoR too (Managed Payments), and Cashier — actively maintained — will likely support it before long. Being an MoR is table stakes now, not a Vatly-only edge.
  2. So the real difference between MoRs is jurisdiction. Paddle is UK, Lemon Squeezy and Stripe are US, Vatly is EEA — your seller-of-record entity and customer data stay under EU law. That, not the API, is the reason to choose one over another.

The developer experience

For a greenfield app, Vatly is your only biller — so you use the plain Billable trait, and the code reads like Cashier:

use Vatly\Laravel\Billable;

class User extends Authenticatable
{
    use Billable;
}
// Start a subscription — redirect to Vatly's hosted checkout
$checkout = $user->subscribe()
    ->toPlan('subscription_plan_7Hd9Kf2Lm')
    ->withTrialDays(14)
    ->create();

return redirect($checkout->links->checkoutUrl->href);

// Gate features on subscription state
if ($user->subscribed()) {
    // …
}

$user->subscription()->swap('subscription_plan_other');
$user->subscription()->cancel();      // Vatly decides immediate vs. grace
$user->subscription()->resume();      // while on the grace period

// One-off purchase
$user->checkout()->create(
    items: [['id' => 'one_off_product_3Qb8Wz1Yt', 'quantity' => 1]],
    redirectUrlSuccess: route('billing.success'),
    redirectUrlCanceled: route('billing'),
);

// Receipts — hosted invoice URLs, no PDF plumbing
foreach ($user->orders as $order) {
    echo $order->invoiceUrl();
}

No VAT logic, no tax tables, no invoice templates, no client-side checkout widget to embed — the checkout is a server-side redirect, like Stripe Checkout. See Subscriptions and Checkouts for the full surface.


Feature parity, and what's still on the roadmap

Vatly covers what a SaaS needs to start selling: subscriptions with trials, plan swaps, cancellation with grace and resume, one-off purchases, hosted checkout, refunds and chargebacks, and — because it's a Merchant of Record — VAT, invoicing and tax compliance handled for you. A few capabilities you may use elsewhere aren't in the box yet. Here's the honest picture, and how to bridge it.

CapabilityVatly todayNotes
Subscriptions, trials, swap, grace, resumeFull lifecycle, Cashier-shaped API
One-off / multi-item checkoutcheckout()->create(items: …)
VAT, invoicing, tax remittanceHandled — it's the point of a MoR. With Cashier (classic Stripe Billing) this is your job.
Refunds & chargebacksFirst-class models + events (more than most provide)
Test / live segregationEvery record carries testmode; key prefix selects the mode
Coupons / promo codes🔜 RoadmapUntil native codes land, model a promo as a dedicated subscription_plan_… at the discounted price and point that cohort at it. A couple of extra plans in the dashboard — not a blocker for launching offers.
License keys🔜 RoadmapVatly is built for SaaS, where entitlement follows subscription state — subscribed() is your license check. Per-seat keys for downloadable/offline software (Lemon Squeezy's signature feature) aren't here yet. If you ship license-activated desktop binaries, that's the one workflow to keep elsewhere for now.

The shape of the trade is deliberate: Vatly does the compliance-heavy core that's genuinely hard to build — being the seller of record, VAT across the EU, invoicing, disputes — and is filling in the conveniences (coupons next) in the open. For a subscription SaaS selling into Europe and the world, there's enough here to launch today.


Why teams choose Vatly

A Merchant of Record handles VAT, invoicing and tax remittance for you — and that part is now table stakes. Paddle, Lemon Squeezy, Stripe Managed Payments and Vatly all do it; on Stripe it's a flag on the request. So the real question isn't whether compliance is handled — it's whose entity you sell through:

  • Europe-first, by design. EEA-based, EU jurisdiction, customer data kept in Europe. The other MoRs sit in the UK (Paddle) or the US (Lemon Squeezy, Stripe Managed Payments) — jurisdiction is the one axis that genuinely separates them, and the reason Vatly exists.
  • No exposure to US policy. Your seller-of-record relationship and your customers' data stay under EU law — a clean answer when an enterprise buyer, or your own board, asks where they sit.
  • One familiar API. The Cashier-shaped surface means there's little to learn and little to rewrite.

You Just Ship.


Next steps

Compared against, at time of writing: Laravel Cashier (Stripe) · Laravel Cashier (Paddle) · Lemon Squeezy for Laravel. Their method names and table layouts follow those packages' current releases — verify against the version you have pinned before relying on a specific signature.

Copyright © 2026