Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

kayrah87's avatar

Migrating from VILT to TALL - possible to run both?

I'm moving from the VILT stack to the TALL stack, and moving over to Filament. However, I have a lot of functionality in the app and it's not something I can just switch over to overnight. So is it possible to run the two stacks side by side and migrate route by route to the TALL stack until all of the VILT ones are redundant?

What sort of problems might I come across?

0 likes
1 reply
LaryAI's avatar
Level 58

Yes, it is possible to run both the VILT (Vue, Inertia, Laravel, Tailwind) stack and the TALL (Tailwind, Alpine, Laravel, Livewire) stack side by side in a Laravel application. This approach allows you to gradually migrate your application from one stack to the other without having to do a complete overhaul all at once. Here are some steps and considerations to help you achieve this:

Steps to Run Both Stacks Side by Side

  1. Set Up Your Environment: Ensure that your Laravel application is properly set up to support both Vue (for VILT) and Livewire (for TALL). You may need to install necessary dependencies for both stacks.

    # For Vue and Inertia
    npm install vue @inertiajs/inertia @inertiajs/inertia-vue3
    
    # For Livewire and Alpine
    composer require livewire/livewire
    npm install alpinejs
    
  2. Configure Webpack/Mix: Update your webpack.mix.js to handle both Vue and Livewire assets.

    const mix = require('laravel-mix');
    
    mix.js('resources/js/app.js', 'public/js')
       .vue()
       .postCss('resources/css/app.css', 'public/css', [
           require('tailwindcss'),
       ]);
    
    mix.js('resources/js/livewire.js', 'public/js')
       .postCss('resources/css/livewire.css', 'public/css', [
           require('tailwindcss'),
       ]);
    
  3. Set Up Routes: You can define separate routes for your VILT and TALL stack components. For example, you can prefix your routes to distinguish between the two stacks.

    // routes/web.php
    
    // VILT stack routes
    Route::middleware(['auth', 'verified'])->group(function () {
        Route::inertia('/dashboard', 'Dashboard')->name('dashboard');
        // other VILT routes
    });
    
    // TALL stack routes
    Route::middleware(['auth', 'verified'])->group(function () {
        Route::get('/livewire-dashboard', \App\Http\Livewire\Dashboard::class)->name('livewire.dashboard');
        // other TALL routes
    });
    
  4. Blade Templates: Use Blade templates to include the necessary scripts and styles for both stacks. You can conditionally load scripts based on the route or component being used.

    <!-- resources/views/layouts/app.blade.php -->
    
    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <!-- Common head elements -->
        <link href="{{ mix('css/app.css') }}" rel="stylesheet">
        @stack('styles')
    </head>
    <body>
        <div id="app">
            @yield('content')
        </div>
    
        <script src="{{ mix('js/app.js') }}" defer></script>
        @stack('scripts')
    </body>
    </html>
    

    For a specific VILT or TALL view, you can push the necessary scripts and styles:

    <!-- resources/views/vilt/dashboard.blade.php -->
    
    @extends('layouts.app')
    
    @section('content')
        <div id="vilt-dashboard">
            <!-- VILT dashboard content -->
        </div>
    @endsection
    
    @push('scripts')
        <script src="{{ mix('js/vilt.js') }}" defer></script>
    @endpush
    
    <!-- resources/views/tall/dashboard.blade.php -->
    
    @extends('layouts.app')
    
    @section('content')
        @livewire('dashboard')
    @endsection
    
    @push('scripts')
        <script src="{{ mix('js/livewire.js') }}" defer></script>
    @endpush
    

Potential Problems

  1. Asset Conflicts: Ensure that there are no conflicts between the assets (CSS/JS) used by Vue and Livewire. Properly namespace and scope your styles and scripts.

  2. State Management: Be cautious about state management, especially if you are using Vuex for Vue and Livewire's built-in state management. Ensure that they do not interfere with each other.

  3. Performance: Running both stacks might increase the complexity and size of your application, which could impact performance. Monitor and optimize as needed.

  4. Developer Experience: Your development team needs to be familiar with both stacks. Ensure proper documentation and training to avoid confusion.

By following these steps and considerations, you can successfully run both the VILT and TALL stacks side by side and gradually migrate your application.

Please or to participate in this conversation.