Laravel Spark vs Wave: Laravel SaaS Starters Compared
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
| Feature | Spark | Wave |
|---|---|---|
| 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
| Feature | Spark | Wave |
|---|---|---|
| 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
| License | Price |
|---|---|
| Per-project | $99 (one-time) |
| Lifetime updates | ✅ Included |
| Framework requirement | Laravel 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
| License | Price |
|---|---|
| Open source | $0 |
| All features | Included |
| Framework requirement | Laravel 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
| Need | Spark Setup | Wave Setup |
|---|---|---|
| Billing | $99 (Spark) | $0 (built-in) |
| Admin panel | $199 (Laravel Nova) or $0 (Filament) | $0 (built-in) |
| Blog | Custom 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 →