List of Laravel Spark Feature Breakdown
Okay, let’s break down the features of Laravel Spark (specifically focusing on the more recent versions, often referred to as Spark Next/Stripe/Paddle, which use Laravel Cashier underneath) and identify their dependencies.
It’s important to understand that Laravel Spark is essentially a pre-built billing portal UI and scaffolding that sits on top of Laravel Cashier (either cashier-stripe
or cashier-paddle
). Many core billing operations (like communicating with Stripe/Paddle APIs, handling webhooks, managing subscription states) are technically handled by Cashier, but Spark provides the user interface, configuration, and integration points for these operations within a ready-to-use panel.
Here’s a comprehensive table outlining the features:
Laravel Spark Feature Breakdown
Feature | Description | Found in Spark Core Code? | Requires Laravel Cashier (Stripe)? | Requires Laravel Cashier (Paddle)? | Notes |
Billing Portal UI | A dedicated, isolated UI section for users to manage their billing settings. | Yes | No | No | Core UI structure provided by Spark, independent of the payment provider. |
Frontend Isolation | The billing portal uses its own CSS/JS, preventing conflicts with your main application’s frontend stack. | Yes | No | No | A core architectural feature of modern Spark. |
Plan Definition | Ability to define subscription plans (monthly/yearly) in a configuration file (config/spark.php ). | Yes (Structure) | Yes (Requires Price IDs) | Yes (Requires Price IDs) | Spark provides the config structure, but plan IDs link directly to Stripe/Paddle products/prices. |
Subscription Management | User ability to subscribe, switch plans, or cancel subscriptions via the billing portal UI. | Yes (UI Actions) | Yes (Backend Logic) | Yes (Backend Logic) | UI actions trigger backend logic handled by Cashier (Stripe/Paddle) to update the subscription status. |
Payment Method Management | User ability to add, update, or remove payment methods via the billing portal UI. | Yes (UI Actions) | Yes (Backend Logic) | Yes (Backend Logic) | UI actions trigger backend logic handled by Cashier (Stripe/Paddle) to interact with payment details securely. |
Invoice Listing | Users can view a list of their past invoices within the billing portal. | Yes (UI) | Yes (Data Source) | Yes (Data Source) | Spark provides the UI display; the actual invoice data is fetched from Stripe/Paddle via Cashier. |
Invoice Downloads (PDF) | Users can download PDF versions of their invoices. | Yes (UI Link) | Yes (PDF Generation/Host) | Yes (PDF Generation/Host) | Spark links to the invoice; Stripe/Paddle generates and hosts the actual PDF (retrieved via Cashier). |
Team Billing | Ability to associate subscriptions and billing with teams/organizations instead of individual users. | Yes (Concept/Config) | Yes (Subscription Logic) | Yes (Subscription Logic) | Spark provides configuration and model mapping; the underlying subscription is still managed via Cashier (Stripe/Paddle). |
Per-Seat Billing | Functionality to charge based on quantity (e.g., number of users in a team). | Yes (Concept/Config) | Yes (Subscription Logic) | Yes (Subscription Logic) | Spark supports the concept; relies on Cashier (Stripe/Paddle) quantity features for subscriptions. |
Trial Periods | Configure free trial days for subscription plans. | Yes (Config) | Yes (Logic/Enforcement) | Yes (Logic/Enforcement) | Trial days are set in Spark config; management relies on Cashier (Stripe/Paddle) subscription states. |
Webhook Handling | Provides endpoint (/spark/webhook ) to receive events from payment providers (e.g., payment success/failure). | Yes (Route) | Yes (Handler Logic) | Yes (Handler Logic) | Spark sets up the route; Cashier (Stripe/Paddle) contains the controllers/logic to interpret and act on incoming webhooks. |
User Impersonation | Allows administrators to view the billing portal as a specific user (for support/debugging). | Yes | No | No | A utility feature within Spark itself. |
Billing Address Collection | UI elements to collect billing address information, often required for tax purposes. | Yes (UI) | Yes (Syncing to Provider) | Yes (Syncing to Provider) | Spark provides the UI; data is typically synced to Stripe/Paddle (via Cashier) for invoicing/tax. |
Tax Handling Support | Basic configuration and display related to taxes. | Yes (Basic UI/Config) | Yes (Calculation/Compliance) | Yes (Calculation/Compliance) | Spark allows enabling tax features; actual calculation/compliance relies heavily on Stripe Tax or Paddle (as Merchant of Record). |
Discount/Coupon Support | Ability for users to apply discount codes during checkout (if configured). | Yes (Potential UI) | Yes (Validation/Application) | Yes (Validation/Application) | UI might exist; validation/application relies on coupon logic within Stripe/Paddle (via Cashier). |
Checkout Customization | Methods provided by Spark/Cashier to pass custom options/metadata to the provider’s checkout session. | Yes (Hooks/Methods) | Yes (Checkout Session) | Yes (Checkout Session) | Spark allows you to hook into the process; the actual checkout is hosted/managed by Stripe/Paddle. |
PayPal Support | Ability to accept payments via PayPal. | No | No | Yes | This is a specific feature enabled by choosing Paddle as the payment provider. |
Paddle Merchant of Record | Paddle acts as the Merchant of Record, handling sales tax (VAT) compliance automatically. | No | No | Yes | A major benefit of using Paddle; not a Spark feature itself but a consequence of using the Paddle integration. |
Explanation Regarding Your Situation (Stripe in India):
You are correct that Stripe’s availability and feature set in India have complexities. While Stripe exists in India:
- Account Creation: New Stripe accounts for Indian businesses might be invite-only or have specific onboarding requirements.
- Payment Methods: Standard Stripe integrations often prioritize international credit cards. Full support for local Indian payment methods (like UPI, NetBanking, Wallets) directly within Stripe Checkout/Elements used by Cashier/Spark might be limited or require different integration approaches not natively supported by Spark out-of-the-box.
- Regulatory Requirements: India has specific data localization and compliance rules (like RBI regulations) that payment processors must adhere to.
What this means for using Laravel Spark in India:
- Spark Core Features: Features listed as “Found in Spark Core Code? Yes” (like the Billing Portal UI structure, User Impersonation, Frontend Isolation, Configuration structure) will work regardless of the payment provider. You could technically use Spark without any payment provider enabled, but it would just be a UI shell without any actual billing functionality.
- Stripe Dependency: Any feature requiring “Laravel Cashier (Stripe)? Yes” will likely be problematic or non-functional if you cannot get a fully operational Stripe account in India that works seamlessly with Cashier’s standard subscription billing flows and supports the payment methods your customers use. Based on current information, relying solely on Spark+Stripe for the Indian market is difficult due to limited local payment method support in the standard integration.
- Paddle Dependency: Features requiring “Laravel Cashier (Paddle)? Yes” are your viable alternative. Paddle generally has broader global coverage and explicitly aims to simplify international selling, including handling tax complexities (acting as Merchant of Record). It also supports PayPal. If Paddle fully supports INR transactions and operates smoothly for Indian businesses selling services, then Spark configured to use Paddle (
laravel/spark-paddle
) is the intended solution for scenarios where Stripe is not suitable. You should verify Paddle’s current capabilities and terms for Indian businesses. - Custom Solutions: Integrating local Indian payment gateways (like Razorpay, Paytm – as seen in some search results) is not supported out-of-the-box by Laravel Spark. The official Spark documentation states you cannot implement custom payment providers. Doing so would require significant custom development, bypassing much of Spark’s core value proposition and essentially rebuilding the billing logic yourself, possibly using only the Spark UI as a starting point.
Recommendation:
Given the limitations of Stripe in India for typical SaaS billing needs (especially local payment methods), your best bet using Laravel Spark out-of-the-box is to use the Paddle integration (laravel/spark-paddle
). Verify Paddle’s suitability for your specific business registration and target customer base in India. If Paddle doesn’t meet your needs either, Laravel Spark might not be the right tool, and you might need to build a custom billing solution using Laravel Cashier directly (if using Stripe/Paddle with more customization) or integrate directly with a local Indian payment gateway’s API.