anandpilania/upgrader

Modular upgrade tool for Laravel, PHP, React, Vue, Tailwind, TypeScript, and JavaScript

Maintainers

Package info

github.com/AnandPilania/upgrader

pkg:composer/anandpilania/upgrader

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.0.2 2026-04-06 11:10 UTC

This package is auto-updated.

Last update: 2026-04-06 11:31:15 UTC


README

๐ŸŽ‰ Now with Laravel 13 Support!

A comprehensive, modular upgrade tool for modern web development stacks. Automatically upgrade PHP, Laravel, React, Vue, Tailwind CSS, TypeScript, and JavaScript with intelligent dependency management.

๐ŸŽฏ Key Features

  • Modular Architecture - Each technology is an independent, pluggable module
  • Intelligent Dependencies - Modules automatically upgrade their dependencies
  • Multi-Framework Support - Works with Laravel, React, Vue, and more
  • Language Awareness - Handles JavaScript โ†” TypeScript transitions seamlessly
  • Auto-Detection - Automatically detects applicable modules in your project
  • Version-by-Version - Incremental upgrades for safety
  • Dry Run Mode - Preview changes before applying

๐Ÿ“ฆ Available Modules

Module Description Dependencies
php PHP version upgrades None
javascript JavaScript/ES version upgrades None
typescript TypeScript upgrades javascript
laravel Laravel framework upgrades php
reactjs React.js upgrades javascript OR typescript
vuejs Vue.js upgrades javascript OR typescript
tailwindcss Tailwind CSS upgrades None

๐Ÿ”„ Dependency Flow

Laravel Module
  โ””โ”€ depends on โ†’ PHP Module

React Module
  โ””โ”€ depends on โ†’ JavaScript Module OR TypeScript Module
                       โ””โ”€ depends on โ†’ JavaScript Module

Vue Module
  โ””โ”€ depends on โ†’ JavaScript Module OR TypeScript Module
                       โ””โ”€ depends on โ†’ JavaScript Module

TypeScript Module
  โ””โ”€ depends on โ†’ JavaScript Module

๐Ÿš€ Installation

composer require --dev anandpilania/upgrader

Or install globally:

composer global require anandpilania/upgrader

๐Ÿ“˜ Usage

List Available Modules

bin/upgrader modules

Output:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Module     โ”‚ Version โ”‚ Description         โ”‚ Dependencies โ”‚ Supported       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ php        โ”‚ 1.0.0   โ”‚ PHP upgrade module  โ”‚ None         โ”‚ 7.4, 8.0, 8.1..โ”‚
โ”‚ laravel    โ”‚ 1.0.0   โ”‚ Laravel upgrades    โ”‚ php          โ”‚ 8.0, 9.0, 10.0..โ”‚
โ”‚ reactjs    โ”‚ 1.0.0   โ”‚ React.js upgrades   โ”‚ None         โ”‚ 16.0, 17.0, 18.0โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Auto-Detect Project Modules

bin/upgrader detect

Output:

Detected Modules
โ”œโ”€ laravel (v9.0 โ†’ v11.0 available)
โ”œโ”€ php (v8.0 โ†’ v8.2 available)
โ”œโ”€ reactjs (v17.0 โ†’ v18.0 available)
โ””โ”€ typescript (v4.5 โ†’ v5.0 available)

Analyze Upgrade Path

# Analyze specific module
bin/upgrader analyze --module=laravel --target=11.0

# Analyze all detected modules
bin/upgrader analyze

Upgrade a Module

# Basic upgrade
bin/upgrader upgrade --module=laravel --from=9.0 --to=11.0

# Auto-detect current version
bin/upgrader upgrade --module=laravel --to=11.0

# Upgrade with dependencies (e.g., PHP will be upgraded first)
bin/upgrader upgrade --module=laravel --to=11.0 --with-dependencies

# Dry run (preview changes)
bin/upgrader upgrade --module=laravel --to=11.0 --dry-run

๐ŸŽฏ Real-World Examples

Example 1: Upgrade Laravel (with PHP)

# Laravel module depends on PHP module
# When you upgrade Laravel, it will automatically upgrade PHP if needed

bin/upgrader upgrade --module=laravel --from=9.0 --to=11.0 --with-dependencies

What happens:

  1. Detects Laravel 9 requires PHP 8.0
  2. Detects Laravel 11 requires PHP 8.2
  3. Automatically upgrades PHP 8.0 โ†’ 8.2 first
  4. Then upgrades Laravel 9.0 โ†’ 10.0 โ†’ 11.0

Example 2: Upgrade React with TypeScript

# If your React project uses TypeScript, both will be upgraded

bin/upgrader upgrade --module=reactjs --from=17.0 --to=18.0 --with-dependencies

What happens:

  1. Detects React uses TypeScript
  2. Detects React 18 needs TypeScript 4.5+
  3. Automatically upgrades TypeScript if needed
  4. TypeScript upgrade triggers JavaScript target upgrade
  5. Then upgrades React 17.0 โ†’ 18.0

Example 3: Full Stack Upgrade

# Detect everything
bin/upgrader detect

# Upgrade each module
bin/upgrader upgrade --module=php --to=8.2
bin/upgrader upgrade --module=laravel --to=11.0 --with-dependencies
bin/upgrader upgrade --module=tailwindcss --to=3.4
bin/upgrader upgrade --module=vuejs --to=3.4 --with-dependencies

โš™๏ธ Configuration

Create .upgrader.yml in your project root:

modules:
  laravel:
    update_frontend: true
    run_tests: true
    backup_database: true

  reactjs:
    migrate_to_hooks: true
    enable_strict_mode: true

  typescript:
    strict_mode: true
    update_types: true

  tailwindcss:
    enable_jit: true
    update_plugins: true

Then run:

bin/upgrader upgrade --module=laravel --config=.upgrader.yml

What happens automatically:

Step 1: Dependency Check
โœ“ Laravel 13 requires PHP 8.3
โœ“ Current PHP: 8.2
โœ“ Upgrading PHP 8.2 โ†’ 8.3 first

Step 2: PHP Upgrade
โœ“ Applied PHP 8.3 transformers
โœ“ Updated composer.json PHP requirement

Step 3: Laravel Upgrade
โœ“ Updated composer.json Laravel version
โœ“ Applied CSRF middleware transformer (VerifyCsrfToken โ†’ PreventRequestForgery)
  - Updated 12 files
โœ“ Applied cache config transformer
  - Added serializable_classes configuration
โœ“ Applied polymorphic pivot transformer
  - Found 3 pivot models
  - Generated warnings for manual review

Step 4: Frontend Detection
โœ“ Detected Vue.js 3.2
โœ“ Vue uses TypeScript
โœ“ Frontend upgrades available (not applied without --with-dependencies)

Summary:
โœ“ PHP 8.2 โ†’ 8.3
โœ“ Laravel 12.0 โ†’ 13.0
โœ“ 15 files modified
โš  5 manual steps required

Manual Steps:
1. Review config/cache.php - add whitelisted classes if caching objects
2. Check .env for CACHE_PREFIX and SESSION_COOKIE
3. Update JobAttempted event listeners ($exception instead of $exceptionOccurred)
4. Review 3 pivot models - add explicit $table if needed
5. Run: php artisan test

๐Ÿ—๏ธ Architecture

How Modules Work

Each module is self-contained and implements the UpgradeModuleInterface:

interface UpgradeModuleInterface {
    // Detect if this module applies to the project
    public function canHandle(string $projectPath): bool;

    // Detect current version
    public function detectCurrentVersion(string $projectPath): ?string;

    // Analyze upgrade compatibility
    public function analyze(string $projectPath, string $targetVersion): array;

    // Perform the upgrade
    public function upgrade(string $from, string $to): array;

    // Declare dependencies on other modules
    public function getDependencies(): array;
}

Dependency Resolution

The ModuleRegistry automatically resolves and initializes dependencies:

$registry = new ModuleRegistry();
$registry->register(new PHPModule());
$registry->register(new LaravelModule()); // depends on PHP

// When you upgrade Laravel, PHP is automatically checked and upgraded if needed

Module Communication

Modules can access their dependencies:

class LaravelModule extends AbstractModule {
    protected array $dependencies = ['php'];

    public function upgrade($from, $to): array {
        // Get PHP module instance
        $phpModule = $this->getDependency('php');

        // Check if PHP upgrade is needed
        $requiredPhpVersion = $this->getRequiredPhpVersion($to);
        if ($phpModule) {
            $phpModule->upgrade($current, $requiredPhpVersion);
        }

        // Continue with Laravel upgrade...
    }
}

๐Ÿ”Œ Creating Custom Modules

Create your own upgrade module:

namespace App\Upgraders;

use Upgrader\Core\AbstractModule;

class CustomFrameworkModule extends AbstractModule
{
    protected array $dependencies = ['php', 'javascript'];

    public function getName(): string {
        return 'my-framework';
    }

    public function canHandle(string $projectPath): bool {
        return file_exists($projectPath . '/my-framework.json');
    }

    public function detectCurrentVersion(string $projectPath): ?string {
        // Detection logic
    }

    public function getAvailableVersions(): array {
        return ['1.0', '2.0', '3.0'];
    }

    public function upgrade(string $from, string $to): array {
        // Upgrade logic
    }
}

Register your module:

$loader = new ModuleLoader();
$registry = $loader->loadAllModules();
$registry->register(new CustomFrameworkModule());

๐Ÿ“Š Module Details

PHP Module

Upgrades: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4

Features:

  • Named arguments support
  • Union types migration
  • Attributes transformation
  • Enum support
  • Readonly properties
bin/upgrader upgrade --module=php --from=8.0 --to=8.2

Laravel Module

Upgrades: 8.0, 9.0, 10.0, 11.0, 12.0, 13.0

Dependencies: PHP

Features:

  • Route namespace removal (9.0)
  • Flysystem 3.x migration (9.0)
  • Native type declarations (10.0)
  • Application structure updates (11.0)
  • Request forgery protection updates (13.0)
  • Cache serialization security (13.0)
  • Auto-detects and upgrades frontend framework (React/Vue)
bin/upgrader upgrade --module=laravel --to=13.0 --with-dependencies

React Module

Upgrades: 16.0, 16.8, 17.0, 18.0, 19.0

Dependencies: JavaScript OR TypeScript (auto-detected)

Features:

  • Hooks migration (16.8)
  • JSX transform update (17.0)
  • Concurrent features (18.0)
  • Auto-detects TypeScript and upgrades if present
bin/upgrader upgrade --module=reactjs --to=18.0 --with-dependencies

Vue Module

Upgrades: 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4

Dependencies: JavaScript OR TypeScript (auto-detected)

Features:

  • Composition API migration
  • Script setup transformation
  • Global API updates (3.0)
  • Auto-detects TypeScript and upgrades if present
bin/upgrader upgrade --module=vuejs --to=3.4 --with-dependencies

TypeScript Module

Upgrades: 4.0 โ†’ 5.4

Dependencies: JavaScript

Features:

  • Decorators support
  • Const type parameters
  • Automatically upgrades JavaScript target (ES2020, ES2022, etc.)
bin/upgrader upgrade --module=typescript --to=5.0 --with-dependencies

Tailwind CSS Module

Upgrades: 2.0 โ†’ 3.4

No Dependencies

Features:

  • JIT mode enablement
  • Color palette updates
  • Purge โ†’ Content migration
  • Deprecated class updates
bin/upgrader upgrade --module=tailwindcss --to=3.4

๐Ÿงช Testing

# Run all tests
composer test

# Test specific module
composer test -- --filter=LaravelModuleTest

๐Ÿค Contributing

  1. Fork the repository
  2. Create your module in modules/your-module/
  3. Implement UpgradeModuleInterface
  4. Add tests
  5. Submit pull request

๐Ÿ“ License

MIT License

๐Ÿ™ Credits

Built with โค๏ธ for the web development community.

Made modular, made simple.

Ready to upgrade to Laravel 13? Download and start upgrading!