{"id":49156,"date":"2025-04-25T06:11:03","date_gmt":"2025-04-25T06:11:03","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49156"},"modified":"2025-04-25T06:11:03","modified_gmt":"2025-04-25T06:11:03","slug":"laravel-spark-2024-features-core-vs-stripe-paddle-dependency","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/laravel-spark-2024-features-core-vs-stripe-paddle-dependency\/","title":{"rendered":"Laravel Spark 2024 Features \u2014 Core vs Stripe\/Paddle Dependency"},"content":{"rendered":"\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>\ud83d\udce6 Built-in Spark Core (works without Stripe\/Paddle)<\/th><th>\ud83d\udd17 Requires Stripe\/Paddle Integration<\/th><th>Comments<\/th><\/tr><\/thead><tbody><tr><td><strong>User Authentication<\/strong> (Login, Registration, Forgot Password)<\/td><td>\u2705<\/td><td>\u274c<\/td><td>Fully built into Spark (via Laravel Breeze).<\/td><\/tr><tr><td><strong>Profile Management<\/strong> (Update name, email, password)<\/td><td>\u2705<\/td><td>\u274c<\/td><td>Fully built-in.<\/td><\/tr><tr><td><strong>Two-Factor Authentication (2FA)<\/strong><\/td><td>\u2705<\/td><td>\u274c<\/td><td>Fully handled internally (optional).<\/td><\/tr><tr><td><strong>Session Management<\/strong> (Logout from other devices)<\/td><td>\u2705<\/td><td>\u274c<\/td><td>Works without any payment system.<\/td><\/tr><tr><td><strong>Team Management<\/strong> (Create Team, Invite Members, Assign Roles)<\/td><td>\u2705<\/td><td>\u274c<\/td><td>Spark Core handles teams.<\/td><\/tr><tr><td><strong>API Token Management<\/strong> (Personal Access Tokens)<\/td><td>\u2705<\/td><td>\u274c<\/td><td>Built with Laravel Sanctum.<\/td><\/tr><tr><td><strong>Account Deletion (GDPR Compliance)<\/strong><\/td><td>\u2705<\/td><td>\u274c<\/td><td>No payment dependency.<\/td><\/tr><tr><td><strong>Dashboard, Settings, Security Pages<\/strong><\/td><td>\u2705<\/td><td>\u274c<\/td><td>Full frontend and backend ready in Spark.<\/td><\/tr><tr><td><strong>Subscription Billing<\/strong> (Create, Update, Cancel Subscriptions)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Fully depends on Stripe\/Paddle APIs via Cashier.<\/td><\/tr><tr><td><strong>Subscription Trials<\/strong> (Generic Trial \/ Plan Trial Periods)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Created and validated by Stripe\/Paddle.<\/td><\/tr><tr><td><strong>Plan Upgrades\/Downgrades<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Stripe\/Paddle needed for plan changes.<\/td><\/tr><tr><td><strong>Seat-based Billing<\/strong> (Charge per user\/member)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Done through Stripe\/Paddle seats management.<\/td><\/tr><tr><td><strong>Pause\/Resume Subscriptions<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Feature available only through Stripe\/Paddle subscription management.<\/td><\/tr><tr><td><strong>Grace Period after Cancel<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Stripe\/Paddle subscription lifecycle manages this.<\/td><\/tr><tr><td><strong>Invoices Management<\/strong> (View past invoices, download PDFs)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Spark pulls invoices from Stripe\/Paddle servers.<\/td><\/tr><tr><td><strong>Coupon\/Promotion Code Support<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Coupons are created in Stripe\/Paddle console.<\/td><\/tr><tr><td><strong>Billing Address Collection<\/strong> (for tax\/VAT purposes)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Stripe\/Paddle needed to store billing details.<\/td><\/tr><tr><td><strong>Tax\/VAT Collection and Invoice Display<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Stripe\/Paddle manages regional taxes, VAT IDs, etc.<\/td><\/tr><tr><td><strong>Payment Methods Management<\/strong> (Add\/Update Card, Bank Info)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Handled through Stripe customer portal or Paddle APIs.<\/td><\/tr><tr><td><strong>Upcoming Invoice Preview<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Pulled directly from Stripe\/Paddle.<\/td><\/tr><tr><td><strong>Handling Failed Payments<\/strong> (Notify, Retry)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Triggered and managed via Stripe\/Paddle webhooks.<\/td><\/tr><tr><td><strong>Refund Handling<\/strong><\/td><td>\u274c<\/td><td>\u2705<\/td><td>Refunds must be triggered via Stripe\/Paddle.<\/td><\/tr><tr><td><strong>Webhook Event Handling<\/strong> (Subscription updates, invoice payment success\/failure)<\/td><td>\u274c<\/td><td>\u2705<\/td><td>Spark listens to Stripe\/Paddle webhook events.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfaf <strong>Summary for You:<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Area<\/th><th>Status<\/th><\/tr><\/thead><tbody><tr><td>User Authentication, Profile Management, Team Management, 2FA, API Tokens<\/td><td>\u2705 Available in Spark Core without Stripe\/Paddle<\/td><\/tr><tr><td>Subscription Billing, Invoice Management, Payments, Coupons, Taxes, Refunds<\/td><td>\u274c Requires Stripe\/Paddle Integration (Cashier)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 <strong>In Short:<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spark Core Features (Authentication, Profile, Teams, 2FA, API Tokens) work fully without Stripe\/Paddle.<\/strong><\/li>\n\n\n\n<li><strong>Spark Billing Features (Subscriptions, Invoices, Taxes, Coupons, Payment Methods) require Stripe or Paddle to work.<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 <strong>Important Insight for India Use Case (where Stripe\/Paddle not fully available):<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Details<\/th><\/tr><\/thead><tbody><tr><td>\u2705 Use Spark\u2019s Core System Only<\/td><td>You can launch app with free registration, teams, profiles, no payments.<\/td><\/tr><tr><td>\u2699\ufe0f Build Custom Payment Integration<\/td><td>Replace Stripe\/Paddle logic with Razorpay, Paytm, or Instamojo manually.<\/td><\/tr><tr><td>\ud83d\udeab Disable Billing Pages<\/td><td>Hide or remove subscription\/billing related routes\/pages till ready.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce2 Important:<\/h1>\n\n\n\n<p>If you do <strong>NOT<\/strong> integrate Stripe or Paddle:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Profile Management<\/strong>: \u2705 works.<\/li>\n\n\n\n<li><strong>Team Management<\/strong>: \u2705 works.<\/li>\n\n\n\n<li><strong>Login, Register, Forgot Password<\/strong>: \u2705 works.<\/li>\n\n\n\n<li><strong>2FA Security<\/strong>: \u2705 works.<\/li>\n\n\n\n<li><strong>Invoices, Subscriptions, Payments, Taxes<\/strong>: \u274c won&#8217;t work.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfc6 Final Conclusion:<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Authentication system<\/strong>: \u2705 works \u2705<\/li>\n\n\n\n<li><strong>Team creation and management<\/strong>: \u2705 works \u2705<\/li>\n\n\n\n<li><strong>Profile management<\/strong>: \u2705 works \u2705<\/li>\n\n\n\n<li><strong>Billing (subscription\/payment\/invoice)<\/strong>: \u274c NOT available without Stripe or Paddle \u274c<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feature \ud83d\udce6 Built-in Spark Core (works without Stripe\/Paddle) \ud83d\udd17 Requires Stripe\/Paddle Integration Comments User Authentication (Login, Registration, Forgot Password) \u2705 \u274c Fully built into Spark (via Laravel Breeze). Profile Management&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49156","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49156"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49156\/revisions"}],"predecessor-version":[{"id":49157,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49156\/revisions\/49157"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}