PHPackages                             laravelplus/laravel-updater - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. laravelplus/laravel-updater

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

laravelplus/laravel-updater
===========================

A Laravel package for syncing with upstream repositories (GitHub, GitLab, Bitbucket, etc.)

v1.0.6(7mo ago)201.7k2[1 issues](https://github.com/LaravelPlus/laravel-updater/issues)MITPHPPHP ^8.4

Since Oct 10Pushed 7mo agoCompare

[ Source](https://github.com/LaravelPlus/laravel-updater)[ Packagist](https://packagist.org/packages/laravelplus/laravel-updater)[ RSS](/packages/laravelplus-laravel-updater/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (7)Dependencies (11)Versions (8)Used By (0)

LaravelPlus Updater
===================

[](#laravelplus-updater)

[![Latest Version on Packagist](https://camo.githubusercontent.com/774e3840f3545e0be88ff34d2c049f4db27e015db4208a38bd9deba9fc277b9c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c61726176656c706c75732f6c61726176656c2d757064617465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laravelplus/laravel-updater)[![Total Downloads](https://camo.githubusercontent.com/bc38bdcff93e2e6607f67eadf4685bfacd711c52b284f718ecddf89cf412df5e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c61726176656c706c75732f6c61726176656c2d757064617465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laravelplus/laravel-updater)[![License](https://camo.githubusercontent.com/f56a6be1d2fb78d4cca3b435baa60effc7352ba0c6cb9ae9a19542fa7114dc48/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6c61726176656c706c75732f6c61726176656c2d757064617465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laravelplus/laravel-updater)[![PHP Version](https://camo.githubusercontent.com/29a2390f08053fb2fa9417565ce6c1ac81cdc224dc8008b6d9764395df9a007a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342532422d626c75652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laravelplus/laravel-updater)[![Laravel Version](https://camo.githubusercontent.com/48411430da34b01edf16058ec5225325c27a2c3f5e13e2e42f9b22ed77adeb48/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e302532422d7265642e7376673f7374796c653d666c61742d737175617265)](https://laravel.com)[![GitHub Stars](https://camo.githubusercontent.com/e7764e77b23a90cc0aa5f655b110dbd2268b8964dc14458e2c44d6d6a12e17c3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4c61726176656c506c75732f6c61726176656c2d757064617465722e7376673f7374796c653d666c61742d737175617265)](https://github.com/LaravelPlus/laravel-updater)[![GitHub Issues](https://camo.githubusercontent.com/f63bb1da8467ecc75473e940704ae13a3a8468e09ee5a2181fec16237cee1310/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f4c61726176656c506c75732f6c61726176656c2d757064617465722e7376673f7374796c653d666c61742d737175617265)](https://github.com/LaravelPlus/laravel-updater/issues)[![Tests](https://camo.githubusercontent.com/b7e18095e6c3c70bb93669b00b3757db5a384dcb1de48ef45eeba18e5520625d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d3131332532307465737425323063617365732d677265656e2e7376673f7374796c653d666c61742d737175617265)](https://github.com/LaravelPlus/laravel-updater)[![Code Quality](https://camo.githubusercontent.com/024b331f837e348ba0312036771a850363840614360b259863cc3029a6b7a2a7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652532307175616c6974792d5048505374616e253230253743253230526563746f7225323025374325323050696e742d626c75652e7376673f7374796c653d666c61742d737175617265)](https://github.com/LaravelPlus/laravel-updater)

[![LaravelPlus Updater](https://camo.githubusercontent.com/6487b3b43ca035ddd52de84d86c7bec80137ecd776efd801916a8610c134c882/68747470733a2f2f6d656469612e6c6963646e2e636f6d2f646d732f696d6167652f76322f443444323241514566306831347a44435a4c772f6665656473686172652d736872696e6b5f323034385f313533362f4234445a6e6441794663496741772d2f302f313736303334393539343434353f653d3137363239393230303026763d6265746126743d364e7a53304c32694f4843595454456873587a6f743569704f746b5a7651433844485956593578324f5545)](https://camo.githubusercontent.com/6487b3b43ca035ddd52de84d86c7bec80137ecd776efd801916a8610c134c882/68747470733a2f2f6d656469612e6c6963646e2e636f6d2f646d732f696d6167652f76322f443444323241514566306831347a44435a4c772f6665656473686172652d736872696e6b5f323034385f313533362f4234445a6e6441794663496741772d2f302f313736303334393539343434353f653d3137363239393230303026763d6265746126743d364e7a53304c32694f4843595454456873587a6f743569704f746b5a7651433844485956593578324f5545)

A professional Laravel package for syncing with upstream repositories (GitHub, GitLab, Bitbucket, etc.) with comprehensive testing, modern architecture, and enterprise-grade features. **This package is exclusively designed for Laravel 12** and provides a safe, PR-first workflow for keeping your Laravel starter kit projects up to date!

🚀 Simple 3-Step Workflow
------------------------

[](#-simple-3-step-workflow)

```
# 1. Setup (one-time)
php artisan laravelplus:setup

# 2. Check for updates
php artisan laravelplus:check

# 3. Apply updates (creates PR by default)
php artisan laravelplus:update
```

That's it! No complex commands to remember - just 3 simple steps to keep your Laravel starter kit up to date.

⚠️ Laravel 12 Exclusive
-----------------------

[](#️-laravel-12-exclusive)

> **Important**: This package is **exclusively designed for Laravel 12** and will not work with older Laravel versions. It leverages Laravel 12's modern architecture and features to provide the best possible experience.

### Why Laravel 12 Only?

[](#why-laravel-12-only)

- **Modern Architecture** - Built for Laravel 12's streamlined structure
- **Enhanced Security** - Leverages Laravel 12's improved security features
- **Better Performance** - Optimized for Laravel 12's performance improvements
- **Future-Proof** - Designed to grow with Laravel's evolution

🚀 LaravelPlus Community
-----------------------

[](#-laravelplus-community)

Welcome to the **LaravelPlus** community! We're building tools that make Laravel development more enjoyable and productive. Join our community and help shape the future of Laravel tooling.

- 🌟 **Star us on GitHub** - Help us grow the community
- 🐛 **Report issues** - Help us improve the tools
- 💡 **Suggest features** - Share your ideas
- 🤝 **Contribute** - Make Laravel better for everyone

✨ Features
----------

[](#-features)

### 🎯 **Simple &amp; Powerful**

[](#-simple--powerful)

- **3 Essential Commands** - `setup`, `check`, `update` - that's it!
- **PR-First Workflow** - Always creates pull requests by default for safety
- **Smart Configuration** - Auto-detects your setup and guides you through configuration

### 🔄 **Core Functionality**

[](#-core-functionality)

- **Universal Git Support** - GitHub, GitLab, Bitbucket, Azure DevOps, self-hosted
- **Multiple Strategies** - Support for both merge and rebase strategies
- **Smart Branch Management** - Automatic branch detection and creation
- **Safe Operations** - Dry-run mode and comprehensive error handling

### 🧪 **Testing &amp; Quality**

[](#-testing--quality)

- **Comprehensive Test Suite** - 113 test cases covering all functionality
- **Built-in Testing** - Validate configuration and connectivity before syncing
- **Code Quality Tools** - PHPStan, Rector, and Laravel Pint integration
- **Modern Testing** - Pest PHP with Laravel Testbench

### 🎯 **Starter Kit Support**

[](#-starter-kit-support)

- **Pre-configured Presets** - Vue, React, Livewire starter kits
- **Auto-detection** - Automatically detect and configure your starter kit
- **Custom Repositories** - Support for any custom Laravel starter kit
- **Easy Setup** - Interactive setup command with beautiful prompts

### 🔀 **Advanced Workflows**

[](#-advanced-workflows)

- **PR-First Workflow** - **Creates PRs by default** for safer updates (Laravel 12 exclusive)
- **GitHub Integration** - Automatic PR creation with GitHub API
- **Direct Application** - Optional direct merge with `--direct` flag when needed
- **Pre/Post Hooks** - Run custom commands before and after sync
- **Flexible Configuration** - Environment variables and command-line overrides

### 🏗️ **Modern Architecture**

[](#️-modern-architecture)

- **PHP 8.4 Features** - Strict types, readonly properties, constructor promotion
- **Interface-based Design** - Clean contracts and abstractions
- **Service Layer** - Separated business logic from commands
- **Exception Handling** - Custom exceptions with detailed error messages
- **Laravel Prompts** - Beautiful command-line interfaces with fallbacks

### 🚀 **Production Ready**

[](#-production-ready)

- **Timeout Protection** - Prevents hanging operations
- **Memory Management** - Optimized for large repositories
- **Error Recovery** - Graceful handling of network and Git issues
- **Logging &amp; Debugging** - Comprehensive logging for troubleshooting

Installation
------------

[](#installation)

> **⚠️ Laravel 12 Only**: This package is exclusively designed for Laravel 12. It will not work with older Laravel versions.

```
composer require laravelplus/laravel-updater
```

Quick Setup
-----------

[](#quick-setup)

### For Laravel Starter Kits

[](#for-laravel-starter-kits)

Use the interactive setup command for quick configuration:

```
# Interactive setup
php artisan laravelplus:setup

# Or specify your starter kit directly
php artisan laravelplus:setup --preset=vue
php artisan laravelplus:setup --preset=react
php artisan laravelplus:setup --preset=livewire
```

### For Custom Repositories

[](#for-custom-repositories)

```
php artisan laravelplus:setup --preset=custom --url=https://github.com/your-org/your-repo.git
```

Configuration
-------------

[](#configuration)

### Branch Configuration Explained

[](#branch-configuration-explained)

The package uses two important branch settings:

- **`UPSTREAM_BRANCH`**: The branch in the upstream repository to pull changes from (e.g., `main`, `master`, `develop`)
- **`UPSTREAM_LOCAL_BRANCH`**: Your main project branch where PRs will be created against (e.g., `main`, `master`, `develop`)

**Example scenarios:**

- **Modern Project**: `UPSTREAM_BRANCH=main` (upstream repo) → `UPSTREAM_LOCAL_BRANCH=main` (your repo)
- **Legacy Project**: `UPSTREAM_BRANCH=main` (upstream repo) → `UPSTREAM_LOCAL_BRANCH=master` (your repo)
- **Development Workflow**: `UPSTREAM_BRANCH=main` (upstream repo) → `UPSTREAM_LOCAL_BRANCH=dev` (your repo)
- **Feature Branch Workflow**: `UPSTREAM_BRANCH=develop` (upstream repo) → `UPSTREAM_LOCAL_BRANCH=develop` (your repo)

### Common Branch Naming Conventions

[](#common-branch-naming-conventions)

Most projects use these branch naming patterns:

- **`dev`** - Development branch (most common in many projects)
- **`master`** - Traditional main branch (common in older projects)
- **`main`** - Modern main branch (newer projects, GitHub default)
- **`develop`** - GitFlow development branch
- **`staging`** - Staging environment branch

**Setup defaults to `dev`** as it's the most common development branch convention.

### Publish Configuration

[](#publish-configuration)

Publish the configuration file:

```
php artisan vendor:publish --provider="LaravelPlus\LaravelUpdater\LaravelUpdaterServiceProvider" --tag="config"
```

This will create `config/upstream.php` with the following options:

```
return [
    'upstream_url'    => env('UPSTREAM_URL', 'https://github.com/laravel/vue-starter-kit.git'),
    'upstream_branch' => env('UPSTREAM_BRANCH', 'main'),
    'local_branch'    => env('UPSTREAM_LOCAL_BRANCH', 'main'),
    'strategy'        => env('UPSTREAM_STRATEGY', 'merge'),
    'git_binary'      => env('GIT_BINARY', 'git'),
    'working_dir'     => base_path(),
    'commit_message'  => env('UPSTREAM_COMMIT_MESSAGE', 'chore(upstream): sync from upstream'),
    'allow_unrelated_histories' => (bool) env('UPSTREAM_ALLOW_UNRELATED', true),

    'pre_update' => [
        // 'php artisan down',
        // 'php artisan cache:clear',
    ],

    'post_update' => [
        // 'composer install --no-interaction --prefer-dist --optimize-autoloader',
        // 'npm ci',
        // 'npm run build',
        // 'php artisan migrate --force',
        // 'php artisan up',
    ],
];
```

Environment Variables
---------------------

[](#environment-variables)

Add these to your `.env` file:

```
# Upstream repository configuration
UPSTREAM_URL=https://github.com/your-upstream/repo.git
UPSTREAM_BRANCH=main                    # Branch in upstream repo to pull from
UPSTREAM_LOCAL_BRANCH=dev               # Your main project branch (PRs created against this)
UPSTREAM_STRATEGY=merge
UPSTREAM_COMMIT_MESSAGE="chore(upstream): sync from upstream"
UPSTREAM_ALLOW_UNRELATED=true

# Preset configuration
UPSTREAM_DEFAULT_PRESET=vue
UPSTREAM_AUTO_DETECT=true

# PR configuration
UPSTREAM_CREATE_PR=false
UPSTREAM_PR_BRANCH_PREFIX=upstream-sync-
UPSTREAM_PR_TITLE="chore: sync from upstream"
UPSTREAM_PR_BODY="Automated upstream sync from {upstream_url}"

# GitHub integration
GITHUB_TOKEN=your_github_token
GITHUB_OWNER=your_username
GITHUB_REPO=your_repo

# Git configuration
GIT_BINARY=git
```

Usage
-----

[](#usage)

### Recommended Workflow

[](#recommended-workflow)

The recommended workflow is to check for updates first, then upgrade. **The package creates PRs by default for safer updates:**

```
# 1. Check if updates are available
php artisan laravelplus:check

# 2. If updates are available, upgrade your project (creates PR by default)
php artisan laravelplus:update

# 3. For direct application (bypasses PR creation)
php artisan laravelplus:update --direct
```

### Quick Start Examples

[](#quick-start-examples)

#### Vue Starter Kit

[](#vue-starter-kit)

```
# 1. Setup for Vue starter kit (one-time)
php artisan laravelplus:setup --preset=vue

# 2. Check for updates
php artisan laravelplus:check

# 3. Apply updates (creates PR by default)
php artisan laravelplus:update
```

#### React Starter Kit

[](#react-starter-kit)

```
# 1. Setup for React starter kit (one-time)
php artisan laravelplus:setup --preset=react

# 2. Check for updates
php artisan laravelplus:check

# 3. Apply updates (creates PR by default)
php artisan laravelplus:update
```

#### Livewire Starter Kit

[](#livewire-starter-kit)

```
# 1. Setup for Livewire starter kit (one-time)
php artisan laravelplus:setup --preset=livewire

# 2. Check for updates
php artisan laravelplus:check

# 3. Apply updates (creates PR by default)
php artisan laravelplus:update
```

#### Custom Repository

[](#custom-repository)

```
# 1. Setup for custom repository (one-time)
php artisan laravelplus:setup --preset=custom --url=https://github.com/your-org/your-repo.git

# 2. Check for updates
php artisan laravelplus:check

# 3. Apply updates (creates PR by default)
php artisan laravelplus:update
```

### Using Default Presets

[](#using-default-presets)

You can set a default preset in your `.env` file to automatically use a specific starter kit configuration:

```
# Set Vue as the default preset
UPSTREAM_DEFAULT_PRESET=vue

# Or React
UPSTREAM_DEFAULT_PRESET=react

# Or Livewire
UPSTREAM_DEFAULT_PRESET=livewire
```

With a default preset configured, you can simply run:

```
# Check for updates (uses default preset automatically)
php artisan laravelplus:check

# Upgrade if updates are available
php artisan laravelplus:update
```

Pull Request Workflow
---------------------

[](#pull-request-workflow)

**This package creates pull requests by default** for safer updates in production environments. This is a Laravel 12 exclusive feature that ensures all upstream changes go through proper review:

### Setup GitHub Integration

[](#setup-github-integration)

1. **Create a GitHub Personal Access Token:**

    - Go to GitHub Settings → Developer settings → Personal access tokens
    - Generate a new token with `repo` permissions
    - Add it to your `.env` file
2. **Configure GitHub settings:**

```
GITHUB_TOKEN=ghp_your_token_here
GITHUB_OWNER=your_username
GITHUB_REPO=your_repo_name
```

### Create Pull Requests

[](#create-pull-requests)

```
# Check for updates first
php artisan laravelplus:check

# Create a PR with upstream updates (default behavior)
php artisan laravelplus:update

# Or use the direct PR command
php artisan laravelplus:pr --test

# Create PR with custom branch name
php artisan laravelplus:pr --pr-branch=update-vue-starter-kit

# Create PR with custom title and body
php artisan laravelplus:pr --pr-title="Update from Vue starter kit" --pr-body="Sync latest changes from upstream"

# For direct application (bypasses PR creation)
php artisan laravelplus:update --direct
```

### PR Workflow Benefits

[](#pr-workflow-benefits)

- **🔒 Safer Updates** - Review changes before merging
- **📝 Better Documentation** - PR descriptions and commit history
- **👥 Team Collaboration** - Multiple reviewers can approve
- **🔄 Easy Rollback** - Simple to revert if issues arise
- **📊 Change Tracking** - Clear history of what changed and when

### Advanced Usage

[](#advanced-usage)

#### Basic Sync

[](#basic-sync)

```
php artisan laravelplus:sync
```

#### Test Before Sync

[](#test-before-sync)

```
php artisan laravelplus:sync --test
```

#### Dry Run (See What Would Happen)

[](#dry-run-see-what-would-happen)

```
php artisan laravelplus:sync --dry-run
```

#### Use Rebase Strategy

[](#use-rebase-strategy)

```
php artisan laravelplus:sync --strategy=rebase
```

#### Override Upstream URL

[](#override-upstream-url)

```
php artisan laravelplus:sync --upstream=https://github.com/other/repo.git
```

#### Skip Hooks

[](#skip-hooks)

```
php artisan laravelplus:sync --no-pre --no-post
```

#### Custom Remote Name

[](#custom-remote-name)

```
php artisan laravelplus:sync --remote-name=upstream
```

Supported Laravel Starter Kits
------------------------------

[](#supported-laravel-starter-kits)

This package comes with pre-configured support for all official Laravel starter kits:

### Official Laravel Starter Kits

[](#official-laravel-starter-kits)

- **Vue Starter Kit** - [laravel/vue-starter-kit](https://github.com/laravel/vue-starter-kit)

    - Vue 3 + Inertia.js + TypeScript + Tailwind CSS
    - Perfect for modern SPA applications
- **React Starter Kit** - [laravel/react-starter-kit](https://github.com/laravel/react-starter-kit)

    - React 19 + Inertia.js + TypeScript + Tailwind CSS
    - Ideal for React-based applications
- **Livewire Starter Kit** - [laravel/livewire-starter-kit](https://github.com/laravel/livewire-starter-kit)

    - Livewire 3 + Laravel Volt + TypeScript + Tailwind CSS
    - Great for teams preferring PHP over JavaScript

### Custom Starter Kits

[](#custom-starter-kits)

The package also supports any custom Laravel starter kit or repository:

- **Custom Repositories** - Any Git repository URL
- **Private Repositories** - GitHub, GitLab, Bitbucket private repos
- **Self-hosted Git** - Your own Git server

Supported Platforms
-------------------

[](#supported-platforms)

This package works with any Git-based repository hosting service:

- **GitHub** - `https://github.com/user/repo.git`
- **GitLab** - `https://gitlab.com/user/repo.git`
- **Bitbucket** - `https://bitbucket.org/user/repo.git`
- **Azure DevOps** - `https://dev.azure.com/org/project/_git/repo`
- **Self-hosted Git** - Any Git server with HTTP/SSH access
- **GitLab Self-hosted** - `https://your-gitlab.com/user/repo.git`
- **Gitea/Gogs** - `https://your-gitea.com/user/repo.git`

Testing
-------

[](#testing)

The package includes comprehensive testing functionality:

- ✅ **Git Binary** - Verifies git is installed and accessible
- ✅ **Working Directory** - Checks if the working directory exists and is writable
- ✅ **Configuration** - Validates all required config values and strategy
- ✅ **Remote Connectivity** - Tests if the upstream URL is reachable
- ✅ **Branch Validation** - Verifies the upstream branch exists
- ✅ **Local Repository** - Checks if current directory is a git repo

Hooks
-----

[](#hooks)

Configure pre and post-update hooks in your `config/upstream.php`:

```
'pre_update' => [
    'php artisan down',
    'php artisan cache:clear',
],

'post_update' => [
    'composer install --no-interaction --prefer-dist --optimize-autoloader',
    'npm ci',
    'npm run build',
    'php artisan migrate --force',
    'php artisan up',
],
```

Authentication
--------------

[](#authentication)

### HTTPS

[](#https)

Uses your stored credentials or personal access tokens.

### SSH (Recommended)

[](#ssh-recommended)

Uses your SSH keys for authentication. Set up SSH keys for your Git hosting service.

### Personal Access Tokens

[](#personal-access-tokens)

For CI/CD environments, use personal access tokens in your repository URL:

```
https://username:token@github.com/user/repo.git

```

Available Commands
------------------

[](#available-commands)

### `laravelplus:setup`

[](#laravelplussetup)

Interactive setup wizard for configuring the package. Run this once to get started.

### `laravelplus:check`

[](#laravelpluscheck)

Check if there are updates available from upstream repository. Shows detailed information about available updates.

### `laravelplus:update`

[](#laravelplusupdate)

Upgrade your project with the latest changes from upstream. **Creates PRs by default** (recommended and safest).

### `laravelplus:update --direct`

[](#laravelplusupdate---direct)

Apply changes directly without creating a pull request (use with caution).

Command Options
---------------

[](#command-options)

OptionDescription`--direct`Apply changes directly without creating a pull request`--dry-run`Show what would happen without executing`--test`Test configuration and connectivity before sync`--no-pre`Skip pre\_update hooks`--no-post`Skip post\_update hooks`--strategy=`Override strategy (merge|rebase)`--upstream=`Override upstream URL`--branch=`Override upstream branch`--local=`Override local branch`--remote-name=`Remote name to use (default: upstream)`--pr-branch=`Override PR branch name (laravelplus:pr only)`--pr-title=`Override PR title (laravelplus:pr only)`--pr-body=`Override PR body (laravelplus:pr only)🧪 Testing
---------

[](#-testing)

This package includes a comprehensive test suite with **113 test cases** covering all functionality:

### Test Coverage

[](#test-coverage)

- **Unit Tests** - Core components, services, and utilities
- **Feature Tests** - Command integration and Laravel functionality
- **Integration Tests** - Service provider and configuration
- **Exception Tests** - Error handling and edge cases

### Running Tests

[](#running-tests)

```
# Run all tests
composer test

# Run specific test suites
composer test:unit
composer test:lint
composer test:types

# Run with coverage
vendor/bin/pest --coverage
```

### Code Quality

[](#code-quality)

The package maintains high code quality standards with:

- **PHPStan** - Static analysis (Level 8) with strict type checking
- **Rector** - Code modernization and PHP 8.4 feature adoption
- **Laravel Pint** - Code style enforcement with Laravel standards
- **Pest PHP** - Modern testing framework with Laravel integration

### Architecture Highlights

[](#architecture-highlights)

- **Strict Types** - `declare(strict_types=1)` throughout the codebase
- **Interface-based Design** - Clean contracts for all major components
- **Service Layer** - Separated business logic from command classes
- **Custom Exceptions** - Detailed error handling with specific exception types
- **Trait-based Reusability** - Common functionality extracted into traits
- **Constructor Property Promotion** - Modern PHP 8.4 syntax
- **Readonly Properties** - Immutable data structures where appropriate

🛠️ Development
--------------

[](#️-development)

### Prerequisites

[](#prerequisites)

- PHP 8.4+
- Composer
- Git

### Development Setup

[](#development-setup)

```
# Clone the repository
git clone https://github.com/LaravelPlus/laravel-updater.git
cd laravel-updater

# Install dependencies
composer install

# Run tests
composer test

# Check code quality
composer test:lint
composer test:types
```

### Contributing

[](#contributing)

We welcome contributions! Please see our [Development Guide](DEVELOPMENT.md) for detailed information on:

- Code style and standards
- Testing requirements
- Pull request process
- Issue reporting

Requirements
------------

[](#requirements)

- **PHP 8.4+** - Latest PHP features and performance
- **Laravel 12.0+** - **Exclusively designed for Laravel 12** (will not work with older versions)
- **Git** - Installed and accessible in PATH
- **Valid Git Repository** - Working directory must be a Git repository
- **GitHub Token** - Required for PR creation (optional for direct sync)

License
-------

[](#license)

This package is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).

📊 Package Statistics
--------------------

[](#-package-statistics)

- **113 Test Cases** - Comprehensive test coverage
- **Modern Architecture** - PHP 8.4 + Laravel 12 exclusive
- **PR-First Workflow** - Creates PRs by default for safer updates
- **Code Quality** - PHPStan Level 8 + Rector + Pint
- **Zero Dependencies** - Only Laravel framework dependencies
- **Universal Support** - Works with any Git hosting service

🤝 Contributing
--------------

[](#-contributing)

We welcome contributions from the community! Here's how you can help:

### Ways to Contribute

[](#ways-to-contribute)

- 🐛 **Report Bugs** - Help us identify and fix issues
- 💡 **Suggest Features** - Share your ideas for improvements
- 📝 **Improve Documentation** - Help others understand the package
- 🧪 **Add Tests** - Increase test coverage and reliability
- 🔧 **Fix Issues** - Submit pull requests for bug fixes

### Development Process

[](#development-process)

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass
6. Submit a pull request

📈 Roadmap
---------

[](#-roadmap)

### Upcoming Features

[](#upcoming-features)

- 🔄 **GitLab Integration** - Direct GitLab API support
- 📊 **Analytics Dashboard** - Track sync history and statistics
- 🔔 **Notifications** - Slack/Discord integration for sync events
- 🎨 **Custom Themes** - Beautiful command-line interfaces
- 🔐 **Enhanced Security** - GPG signing and verification

🏆 Credits
---------

[](#-credits)

- **[LaravelPlus](https://github.com/laravelplus)** - The LaravelPlus community
- **[All Contributors](../../contributors)** - Thank you to everyone who contributes
- **[Laravel Framework](https://laravel.com)** - Built on the amazing Laravel framework

📞 Support
---------

[](#-support)

### Getting Help

[](#getting-help)

- 📖 **Documentation** - Check this README and [DEVELOPMENT.md](DEVELOPMENT.md)
- 🐛 **Bug Reports** - [GitHub Issues](https://github.com/LaravelPlus/laravel-updater/issues)
- 💬 **Discussions** - [GitHub Discussions](https://github.com/LaravelPlus/laravel-updater/discussions)
- ⭐ **Star the Project** - Show your support!

### Community

[](#community)

Join the LaravelPlus community and help us build amazing Laravel tools:

- 🌟 **Star us on GitHub** - Help us grow
- 🐦 **Follow us** - Stay updated on new features
- 💡 **Share feedback** - Help us improve

---

**Made with ❤️ by the LaravelPlus community**

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance63

Regular maintenance activity

Popularity30

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

7

Last Release

218d ago

PHP version history (2 changes)v1.0.0PHP ^8.1

v1.0.1PHP ^8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/4e4629de002c40aef796e5b320091892f0b7b35b62497260c52cef3eb721eed1?d=identicon)[Nejcc](/maintainers/Nejcc)

---

Top Contributors

[![Nejcc](https://avatars.githubusercontent.com/u/6236128?v=4)](https://github.com/Nejcc "Nejcc (1 commits)")

---

Tags

laravellaravelplusphpupdatelaravelbitbucketgithubgitlabgitsyncupstream

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/laravelplus-laravel-updater/health.svg)

```
[![Health](https://phpackages.com/badges/laravelplus-laravel-updater/health.svg)](https://phpackages.com/packages/laravelplus-laravel-updater)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[wnx/laravel-stats

Get insights about your Laravel Project

1.8k1.8M7](/packages/wnx-laravel-stats)[producer/producer

Tools for releasing library packages; supports Git, Mercurial, Github, Gitlab, and Bitbucket.

10418.7k2](/packages/producer-producer)[interaction-design-foundation/laravel-geoip

Support for multiple Geographical Location services.

17221.0k3](/packages/interaction-design-foundation-laravel-geoip)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

116.6k](/packages/tomshaw-electricgrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
