The JavaScript ecosystem has a reputation for fragmentation and "configuration fatigue" that often feels like a rite of passage for modern developers. At Laracon US 2025, Evan You laid out a strategic roadmap that moves beyond just maintaining a framework and toward solving the systemic performance bottlenecks of the entire web development lifecycle. From the massive scale of Vue.js to the high-performance ambitions of VoidZero, the goal is clear: unification through speed and stability. The Resilient Growth of Vue.js Vue.js occupies a unique space in the frontend world, largely due to its early adoption by the Laravel community. In 2015, when Taylor Otwell first championed the framework, it was seeing a mere 1,800 weekly downloads. Today, that number has surged to 7 million weekly downloads on npm, with over 1 billion monthly CDN requests. This isn't just a legacy success story; the data shows a 67% year-over-year growth in Vue 3 usage, proving that the framework is still capturing new market share even after a decade. Despite the noise in the industry regarding React or newer meta-frameworks, Evan You is doubling down on stability. There is no Vue 4 on the horizon because the team wants to honor the "stability contract" with developers. If you build an app on Vue 3 today, the intent is for that code to remain functional and performant for the next decade without forced migrations. Re-Engineering Reactivity with Alien Signals While the external API remains stable, the internals are undergoing a massive overhaul in the upcoming Vue 3.6. The focus is on the reactivity system—the engine that tracks data changes and triggers UI updates. While the industry is currently obsessed with "signals," Evan You points out that Vue.js has been using this exact paradigm for years under the name "refs." In Vue 3.6, the team is integrating Alien Signals, an ultra-optimized implementation created by team member Johnson Chu. This refactor makes Vue.js the fastest signals-based framework in existence according to current benchmarks. Because Alpine.js builds on top of Vue’s standalone reactivity package, this performance boost will automatically trickle down to the broader ecosystem, making lightweight reactive sites faster without any source code changes. Vapor Mode: Compilation Without the Overhead For developers seeking extreme performance, Vapor Mode represents the most significant shift in how Vue.js reaches the DOM. Traditionally, Vue.js uses a Virtual DOM (VDOM) to calculate changes. Vapor Mode changes the game by compiling components into direct, granular DOM instructions. This eliminates the VDOM overhead entirely for supported components. The result is a default bundle size of just 7 kilobytes and rendering speeds that rival SolidJS and Svelte. Crucially, this isn't an all-or-nothing switch. Developers can opt into Vapor Mode at the component level using a simple `vapor` attribute. This allows teams to keep their existing Virtual DOM architecture while optimizing high-traffic, performance-critical pages with the new compiler. Rolldown and the VoidZero Vision Beyond the framework itself, Evan You is tackling the "tooling gap." Current Vite setups are fast, but they rely on a disjointed mix of esbuild for development and Rollup for production. This inconsistency creates "heisenbugs"—issues that appear in production but never in dev. Enter Rolldown, a new Rust-based bundler being developed by VoidZero. Rolldown aims to combine the blistering speed of esbuild with the advanced feature set and Rollup API compatibility needed for production builds. Early benchmarks show production build times dropping by 3x to 10x, with some large-scale apps seeing a 16x improvement. This is the cornerstone of V+, a unified toolchain designed to provide a cohesive, zero-config experience for testing, linting, and bundling, effectively doing for JavaScript what Laravel did for PHP.
Vue.js
Software
Across 8 mentions, Laravel details the transformation from framework to ecosystem in 'Vue's Evolution' and frames the software as a necessary innovation within 'You Should Reinvent The Wheel'.
- Aug 12, 2025
- Aug 8, 2025
- Jun 7, 2025
- Nov 7, 2024
- Jul 4, 2024
Overview Connecting a Nuxt.js frontend to a Laravel REST API creates a powerful, SEO-friendly architecture. By using session-based authentication rather than just tokens, you gain the native security benefits of CSRF protection and reduced XSS risks. This guide explores how to synchronize these environments to share cookies and fetch data seamlessly using a first-party frontend approach. Prerequisites To follow along, you need a working knowledge of JavaScript and PHP. You should have a Laravel API already configured and Nuxt.js (version 2 is used here) installed. Basic familiarity with terminal commands and local development environments like Laravel Valet will help you manage local subdomains. Key Libraries & Tools * Axios: A promise-based HTTP client for the browser and Node.js. * Nuxt Auth Module: A dedicated library to handle authentication strategies. * Laravel Sanctum: Provides a featherweight authentication system for SPAs and simple APIs. * Tailwind CSS: A utility-first CSS framework for rapid UI development. Environment Synchronization For session-based auth to work, both apps must share a top-level domain. Use Laravel Valet to link your API to `api.ergodnc.test` and proxy your Nuxt app to `app.ergodnc.test`. In your Laravel `.env`, set `SESSION_DOMAIN` to `.ergodnc.test`. This dot prefix is non-negotiable; it tells the browser the cookie belongs to all subdomains. Additionally, update `cors.php` by setting `supports_credentials` to `true` to allow the browser to pass cookies back and forth. Code Walkthrough: Data Fetching and Auth In your Nuxt pages, the `fetch` hook is your best friend. It allows you to populate data on the server side or during client-side navigation. ```javascript async fetch() { const response = await this.$axios.get('/offices'); this.offices = response.data; } ``` For authentication, configure the Nuxt Auth Module in `nuxt.config.js` using the `cookie` strategy. You must define four critical endpoints: `login`, `logout`, `user`, and the Sanctum `client-side-csrf` cookie. This ensures Nuxt initializes the CSRF token before attempting a login. Syntax Notes Nuxt’s `fetchState` is an elegant way to handle UI states. Use `$fetchState.pending` to show loaders and `$fetchState.error` to catch failures. When using the Nuxt Auth Module, the `$auth` helper becomes globally available, allowing you to check `$auth.loggedIn` or access user data via `$auth.user` directly in your templates. Tips & Gotchas Always verify that your Laravel Sanctum stateful domains include your Nuxt URL. If you miss this, Laravel won't attach the session middleware, and your authentication will fail silently. If you get 401 errors after a session expires, use an Axios interceptor to catch the error and force a logout on the frontend to keep the UI in sync with the server.
Dec 6, 2021Overview of Next-Generation Spark Laravel Spark serves as a dedicated SaaS toolkit designed to handle the heavy lifting of recurring billing. Unlike earlier versions, the next generation of Spark is front-end agnostic, meaning it provides a totally isolated billing portal that exists separately from your main application logic. This architectural shift grants you total freedom to use any stack—whether Vue.js, React, or simple Blade templates—without the billing logic cluttering your UI. Prerequisites and Toolkit To follow this implementation, you should be comfortable with the Laravel framework and basic terminal operations. Key Libraries & Tools * **Laravel Breeze**: A minimal, simple starter kit for scaffolding authentication. * **Paddle**: A merchant of record that handles VAT taxes and provides PayPal integration. * **Stripe**: The alternative payment provider supported by Spark. * **Tailwind CSS**: The utility-first CSS framework used for branding the portal. Implementation Walkthrough Start by scaffolding authentication using Laravel Breeze. Once your users can log in, install the Paddle edition of Spark via Composer: ```bash composer require laravel/spark-paddle php artisan spark:install ``` Next, integrate the `Billable` trait into your `User` model. This connects your database entities to the Spark billing engine. ```python use Spark\Billable; class User extends Authenticatable { use Billable; } ``` Configuring Subscription Plans Plans reside in `config/spark.php`. Here, you define your monthly and yearly IDs—which you fetch from your Paddle dashboard—along with feature lists. Spark uses these to automatically generate the pricing toggle in the billing portal. Branding and UI Integration Customizing the portal to match your brand (like the green aesthetic of Laravel Forge) happens in the `branding` section of the config. You can swap the logo and primary button colors using Tailwind CSS classes. To link users to the portal, simply point a navigation link to the `/billing` route defined in your configuration. Practical Tips & Gotchas Always use the `onTrial` method to show trial banners in your UI. One common mistake is forgetting to set up webhooks; Laravel Spark relies on webhooks to process subscription status changes. If your local environment isn't receiving these, your application won't know when a user has successfully paid.
Feb 11, 2021The Architecture of Choice in Laravel 8 Laravel 8 marks a significant shift in how we approach the front-end, or more accurately, how we don't. By default, the framework remains entirely agnostic. When you run `laravel new`, you get Blade templates and nothing else. No Tailwind, no Vue, and certainly no forced architectural patterns. This is intentional. The goal is to provide a clean slate while offering powerful, optional scaffolding for those who want to move faster. Much of the recent noise in the community suggests that using tools like Inertia.js or Livewire is a requirement or a "betting of the farm" on immature tech. This fundamentally misunderstands what these tools do. Inertia isn't a massive framework; it's a bridge that lets you use Laravel's routing to hydrate Vue components. It keeps you productive by removing the need for a separate API repository, which is often a productivity killer for solo developers and small teams. Demystifying the Starter Kits: Breeze and Jetstream To understand where you should start, you have to look at the complexity of your requirements. Laravel Breeze represents the baseline. It is a simple, minimal implementation of all Laravel's authentication features—login, registration, password reset—using simple controllers and routes that you can actually see and modify in your app. It’s the spiritual successor to the old `make:auth` command, but modernized with Tailwind. Laravel Jetstream sits at the other end of the spectrum. It is essentially the free, open-source core of what used to be Laravel Spark. We moved all the non-billing features—team management, two-factor authentication, and API token management—out of Spark and into Jetstream. It uses Laravel Fortify as its headless backend. This means Jetstream handles the UI (via either Inertia or Livewire), while Fortify handles the heavy lifting of authentication logic in the background. Passport vs. Sanctum: Choosing Your API Guard The most persistent confusion in our ecosystem revolves around Laravel Passport and Laravel Sanctum. The decision tree is actually quite simple: if you need to build a full OAuth2 server—the kind where users can "Sign in with Your App" on third-party sites—you need Passport. It is a robust, compliant implementation built on the league/oauth2-server. However, most developers don't actually need OAuth2. They just need to secure an API or a Single Page Application (SPA). For these use cases, Passport is a sledgehammer. Sanctum was built to solve the "API for myself" problem. It provides a lightweight way to issue personal access tokens and, more importantly, a way to authenticate SPAs using secure, stateful cookies. The Secret Sauce of SPA Authentication Sanctum's true power lies in its ability to toggle between token-based and cookie-based authentication. When your SPA sits on the same top-level domain as your Laravel API, you shouldn't be messing with JWT storage in `localStorage`. It’s insecure and unnecessary. Instead, Sanctum allows your SPA to call a login endpoint, which uses standard Laravel session guards to issue a secure HTTP-only cookie. The browser then handles that cookie automatically for every subsequent request. If a request comes in without a cookie, the Sanctum guard looks for a `Bearer` token in the header. This dual-layer approach allows the same API routes to serve your first-party SPA via cookies and third-party mobile apps or SDKs via tokens. It’s the most secure and streamlined way to handle modern web authentication without the overhead of a full OAuth2 handshake. Community Dynamics and Open Contributions There is a narrative that the Laravel ecosystem is a closed circle, but the data proves otherwise. With over 2,800 contributors, the "inner circle" is massive. Developers like Paris Malhotra prove that anyone can show up, submit high-quality pull requests to core packages like Laravel Horizon, and get them merged. This isn't about personal friendships; it's about labor and merit. People like Caleb Porzio and Jonathan Reinink earned their status through hundreds of hours of free work to make the ecosystem better. We want people who bring positive energy and a desire to make programming more enjoyable. If you're here to armchair quarterback, you're missing the point of what we're building.
Dec 31, 2020