Skip to main content

Laravel Spark vs Wave: Laravel SaaS Starters Compared

·StarterPick Team
laravelsparkwavephpsaas boilerplate

The Laravel SaaS Ecosystem

Laravel is one of the few frameworks with a thriving SaaS boilerplate ecosystem built by the framework creator himself. Laravel Spark is Taylor Otwell's official SaaS starter — a paid package that adds billing, team management, and user profiles to any Laravel app.

Wave takes the opposite approach — a completely free, open-source Laravel SaaS boilerplate with themes, a blog, admin panel, and community features. Where Spark is a package you add to an existing app, Wave is a standalone application you customize.

For PHP developers building SaaS in 2026, these are the two most prominent choices. The decision comes down to philosophy: do you want a billing package or a complete application?

TL;DR

Laravel Spark ($99, official) is a billing and team management package that integrates into any Laravel app — Stripe/Paddle subscriptions, per-seat billing, team management, and invoices. Wave (free, community) is a full SaaS application with themes, blog, admin panel, API, notifications, and Stripe billing built-in. Choose Spark for clean billing integration into your Laravel app. Choose Wave for a complete free SaaS template with more features.

Key Takeaways

  • Spark is a package, Wave is an application. Spark adds billing to your existing Laravel app. Wave IS the app you customize.
  • Spark costs $99 per project with lifetime updates. Wave is completely free and open source.
  • Spark supports Stripe and Paddle. Wave supports Stripe only.
  • Wave includes more features — themes, blog CMS, admin panel, announcements, API endpoints, user profiles.
  • Spark has better billing features — per-seat pricing, metered billing, tax calculation, proper invoice generation.
  • Both use Laravel's ecosystem — Blade templates, Eloquent ORM, Laravel queues, and the full PHP ecosystem.

Feature Comparison

Billing and Subscriptions

FeatureSparkWave
Stripe✅ Full✅ Basic
Paddle✅ Full
Subscription plans✅ Multiple plans✅ Multiple plans
Per-seat billing✅ Built-in❌ Manual
Metered/usage billing✅ Built-in❌ Manual
Free trials✅ With/without card✅ Basic
Invoices✅ PDF generation⚠️ Basic
Tax calculation✅ Via Stripe Tax / Paddle❌ Manual
Webhooks✅ Full lifecycle✅ Basic
Customer portal✅ Built-in⚠️ Basic
Coupons/discounts✅ Full Stripe support⚠️ Basic

Spark's billing is significantly more mature. Per-seat billing (charge per team member), metered billing (charge per API call), and proper invoicing are enterprise features that Wave doesn't offer natively.

Application Features

FeatureSparkWave
User registration/login✅ Via Jetstream/Breeze✅ Built-in
Team management✅ Full (Jetstream)✅ Basic
User profiles✅ Via Jetstream✅ Customizable profiles
Admin panel❌ (use Nova)✅ Built-in
Blog/CMS✅ Built-in
Themes✅ Theme system
Announcements✅ Built-in
API (token-based)✅ Via Sanctum✅ Built-in
Notifications✅ Via Laravel✅ In-app + email
User settings✅ Basic✅ Extensive
Social auth✅ Via Socialite✅ Via Socialite
Two-factor auth✅ Via Jetstream✅ Built-in

Wave wins on application features. The blog CMS, admin panel, theme system, and announcement features give you a more complete starting point. Spark focuses purely on billing — you build or buy the rest.


Architecture

Spark (Package)

Spark installs into your Laravel application as a Composer package:

composer require laravel/spark-stripe
# or
composer require laravel/spark-paddle

Your application structure stays standard Laravel:

app/
├── Http/
│   ├── Controllers/
│   └── Middleware/
├── Models/
│   ├── User.php          # Uses Spark's Billable trait
│   └── Team.php          # Uses Spark's HasTeams trait
├── Providers/
resources/
├── views/
├── js/
└── css/
routes/
├── web.php
└── spark.php             # Spark's billing routes

Spark uses Laravel's trait system to add billing capabilities to your User and Team models. It provides pre-built Blade views for the billing portal that you can customize.

The advantage: Your application architecture is entirely your own. Spark adds billing without dictating how you structure everything else.

Wave (Application)

Wave gives you a complete application:

app/
├── Http/
│   ├── Controllers/
│   │   ├── Auth/
│   │   ├── Admin/
│   │   ├── Blog/
│   │   └── Settings/
│   └── Middleware/
├── Models/
│   ├── User.php
│   ├── Plan.php
│   ├── Post.php
│   └── Announcement.php
├── Themes/
│   ├── default/
│   └── custom/
resources/
├── views/
│   ├── themes/
│   │   └── default/
│   ├── admin/
│   └── auth/
routes/
├── web.php
└── admin.php

The advantage: Everything is built. Blog, admin, themes, auth, billing, profiles — you start with a working SaaS and customize from there.

The tradeoff: Wave's opinions are embedded throughout the codebase. Changing the theme system, admin panel, or blog architecture requires understanding Wave's conventions, not just Laravel's.


Developer Experience

Getting Started

Spark:

# Start with a new Laravel app
laravel new my-saas
cd my-saas

# Install Spark
composer require laravel/spark-stripe

# Run installation
php artisan spark:install

# Publish Spark views (optional, for customization)
php artisan vendor:publish --tag=spark-views

# Configure plans in config/spark.php
php artisan migrate

You need a working Laravel app first, then add Spark. Total setup time: 30-60 minutes.

Wave:

# Clone Wave
git clone https://github.com/thedevdojo/wave.git my-saas
cd my-saas

# Install dependencies
composer install
npm install && npm run build

# Configure .env and run migrations
cp .env.example .env
php artisan key:generate
php artisan migrate --seed

php artisan serve

Wave gives you a running SaaS immediately. Total setup time: 15-30 minutes.

Customization

Spark is easier to customize because it's less opinionated. You control the application architecture. Spark's billing views are clean Blade templates that you can modify or replace entirely.

Wave requires understanding its conventions. Changing the blog from Wave's built-in CMS to your own content system means working around Wave's expectations. The theme system adds a layer of indirection that some developers find helpful and others find frustrating.

Updates

Spark updates via Composer (composer update laravel/spark-stripe). Because it's a package, updates rarely conflict with your application code.

Wave updates require pulling from the upstream repository and resolving conflicts with your customizations. This can be painful if you've heavily modified Wave's core files.


Pricing and Value

Spark

LicensePrice
Per-project$99 (one-time)
Lifetime updates✅ Included
Framework requirementLaravel 10+
Stripe version$99
Paddle version$99

$99 is a fair price for Spark's billing features. Building per-seat billing, metered billing, invoice generation, and a customer portal from scratch would take 2-4 weeks.

Wave

LicensePrice
Open source$0
All featuresIncluded
Framework requirementLaravel 10+
Commercial use✅ Allowed

Free is free. Wave's value proposition is clear: a complete SaaS starter without spending a dollar.

Total Cost of Ownership

NeedSpark SetupWave Setup
Billing$99 (Spark)$0 (built-in)
Admin panel$199 (Laravel Nova) or $0 (Filament)$0 (built-in)
BlogCustom build or package$0 (built-in)
Total$99-298$0

If you need admin + blog + billing, Wave gives you everything for free. Spark gives you billing only, and you build or buy the rest.


When to Choose Each

Choose Spark If:

  • You have an existing Laravel app that needs billing — Spark integrates cleanly
  • You need advanced billing — per-seat, metered, proper invoicing, Paddle support
  • You want architectural freedom — Spark doesn't dictate your app structure
  • You prefer minimal dependencies — Spark is one package, not a full application
  • You value official support — built by Taylor Otwell, maintained alongside Laravel
  • You're building enterprise SaaS where billing complexity is a real requirement

Choose Wave If:

  • You're starting from scratch and want a complete SaaS application
  • Budget is tight — $0 for blog, admin, themes, auth, and billing
  • You need a blog and admin panel without buying or building them separately
  • You want to launch fast — Wave is a working SaaS out of the box
  • Simple Stripe billing is enough — you don't need per-seat or metered billing
  • You're an indie hacker who values speed over architectural purity

Consider Alternatives If:

  • You want Livewire/Inertia stack — TALL Stack or Breeze + Inertia might be better starting points
  • You need multi-tenancy — neither Spark nor Wave handles tenant isolation well; consider Tenancy for Laravel
  • You want real-time features — Laravel Reverb or Soketi with a custom setup

The PHP Reality in 2026

Laravel remains one of the most productive full-stack frameworks available. PHP 8.3+ is fast, type-safe, and mature. The Laravel ecosystem (Forge, Vapor, Nova, Horizon, Reverb) provides production-grade tooling.

Both Spark and Wave prove that PHP SaaS development is alive and well. If you know Laravel, you don't need to switch to Next.js or SvelteKit to build a modern SaaS — you just need the right starter.

Spark gives you billing precision. Wave gives you application completeness. Choose based on what's harder for you to build from scratch.


Compare Laravel Spark, Wave, and 50+ other boilerplates on StarterPick — find the right starter for your tech stack.

Check out this boilerplate

View Laravel Spark on StarterPick →

Comments