Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Updater Laravel Package

salahhusa9/laravel-updater

Laravel Updater lets you update your Laravel project with a single command or click. Supports Laravel 11, 12, and 13, with an Artisan command and web interface for running updates, so deployments and version upgrades stay quick and painless.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What the package is. salahhusa9/laravel-updater is an in-place self-updater for Laravel applications: a single Artisan command (and, per the README, an optional "one click" web trigger) that shells out to git and composer and then runs post-update steps such as migrations and cache clears. It exposes before/after "pipelines" so teams can hook custom steps into the update sequence. MIT licensed, Laravel 11/12/13 support, ~216 stars, 0 Packagist dependents.

Architecture fit. Fit is narrow but real. The package assumes it owns a mutable git working copy on the host it runs on: a checked-out repo, a writable application directory, and git/composer binaries on the PHP process's PATH. That describes single-server VMs, bare-metal, and simple shared hosting — it does not describe immutable container deploys (Docker/K8s), read-only or ephemeral filesystems, or symlink-swap release models (Laravel Forge/Envoyer zero-downtime, Deployer, Vapor). In those environments the package is architecturally incompatible, not merely inconvenient, because the whole release directory is replaced rather than mutated. As a TPM I would only sponsor this for the "we have a pet server and no CI/CD" segment.

Integration feasibility. Low technical effort: composer require, publish config, register the command, gate the trigger. The extensibility surface (before/after pipelines, merged with existing pipelines as of v1.2.4) is the most valuable part — it lets us bolt on php artisan optimize:clear, queue:restart, Horizon terminate, and an OPcache reset without forking. The real work is not integration, it is containment: deciding who can invoke it, from where, and what happens on a partial failure. That is process work a TPM owns, not code work.

Technical risk.

  • Privilege and supply-chain exposure (highest). A web-reachable endpoint that pulls arbitrary code from a remote and executes composer install plus migrations is a remote-code-execution surface by design. It must sit behind authentication, an IP allowlist, and ideally be disabled entirely outside a maintenance window. The README does not advertise hardening guidance as a first-class concern — I would treat the default posture as unsafe for internet-facing production until proven otherwise.
  • Destructive git behaviour. Changelog v1.2.0 explicitly introduced "Git checkout throw away local modifications." Any environment where a config, .env, or hotfix is edited in place will silently lose that change on the next update. This is a data-loss footgun and must be documented in our runbook.
  • No visible atomicity or rollback. The update is a sequence of shell steps; there is no evidence of a transaction boundary, snapshot, or automatic rollback. A failure after git pull but before composer install leaves the app in a broken, half-updated state. Rollback is manual and human-driven.
  • Concurrency. Two overlapping invocations (double-click, scheduled job plus operator) could interleave git and composer operations. I would want an explicit lock; absent one, we add an outer mutex.
  • Adoption signal. Zero dependents on Packagist is the number that matters most in this assessment. 216 stars reflects interest, not production validation. We would be an early adopter taking on first-mover risk.
  • Maintenance profile. Single maintainer; the changelog is overwhelmingly Dependabot/Renovate housekeeping with a handful of substantive changes per year. v2.0.0 was primarily a Laravel 13 compatibility bump plus PHP/composer constraint changes — a major version for a framework-support matrix change, which tells me semver discipline here is loose. Pin exact versions and read every composer constraint diff.
  • Documentation. Docs live on an external site (salahhusa9.com/laravel-updater), not in the repo. The in-repo README is a badge collage. External docs can drift and can disappear; there is no offline reference.

Key questions for the maintainer / our own spike.

  1. Exactly which commands run, in what order, and with which flags (composer install --no-dev --optimize-autoloader? migrate --force?)?
  2. Is there a lock to prevent concurrent updates, and does it respect artisan down?
  3. What is the documented rollback procedure for a failure between steps?
  4. Does the web trigger exist in v2.x, and what authorization does it enforce by default?
  5. Does it work against a symlinked release directory, or does it assume the repo root is the serving root?
  6. What is the minimum PHP version after v2.0.0's constraint change, and what is the BC policy between majors?
  7. How are .env, storage/, and user uploads treated — preserved, ignored, or at risk from the checkout?

Integration Approach

Stack fit. Target only Laravel 11–13 applications deployed as a persistent, writable checkout on a single host or a small fixed set of hosts. Confirm PHP version against v2.0.0's composer.json before planning anything. Explicitly out of scope: containerized workloads, autoscaled fleets, read-only filesystems, and any environment using symlink-based releases. If our estate is mostly containers, this evaluation ends here and I recommend against adoption regardless of the package's quality.

Migration path. Three-step, reversible:

  1. Disposable spike (1–2 days). Spin up a scratch Laravel 13 app, install the package, and instrument every shell command it emits. Produce an ordered list of side effects — this is the artifact the rest of the plan depends on, because the README will not give it to us.
  2. Staging adoption (1 sprint). Wire in before/after pipelines for cache clear, queue restart, and OPcache reset. Introduce an external mutex and a pre-update database snapshot. Deliberately induce failures (break composer auth, break a migration) and record actual recovery time.
  3. Production (gated). Only behind artisan down, an authenticated and IP-restricted route, or — preferably — CLI-only execution by an operator on a runbook. Feature-flagged so it can be disabled in one config change.

Compatibility. Verify the package's illuminate/contracts constraint against our locked Laravel minor. Because majors have been used for framework-support bumps, do not assume ^1.x and ^2.x are interchangeable; pin and test. Check that our project's composer.lock survives the package's composer install invocation — if the package runs a bare composer install on a stale lock, dependency drift is possible. Where we already have a CI/CD pipeline (GitHub Actions, GitLab CI, Forge), this package is redundant: a proper pipeline gives us the same outcome with build-time validation, artifact promotion, and atomic swap. I would position the package as an interim stopgap for properties with no pipeline, with a documented exit path to one.

Sequencing. Containment before enablement: auth/IP gating and an operator runbook must land before the first production invocation. Pipelines and observability land in the same PR as the install, not later. Backups (DB + current release tarball) are a hard prerequisite, not a follow-up ticket.

Operational Impact

Maintenance. Low code churn, but low churn is not the same as low burden: dependency bumps arrive as framework-matrix jumps and loose-major releases, so someone must read composer.json diffs each time Laravel ships. Budget a small recurring owner. Have a fork-and-own contingency — at 0 dependents and one maintainer, the realistic failure mode is abandonment, and the fork path must be pre-agreed rather than improvised.

Support. Community-only, no SLA, no vendor. External docs mean our internal runbook must be self-sufficient. First-line support is whoever holds the runbook; escalation is the platform team.

Scaling. This is not a horizontally scalable operation and should not be treated as a deploy mechanism for a fleet. On multiple nodes, per-instance invocation creates version skew — node A on the new commit, node B on the old — which produces schema/code mismatches that are painful to diagnose. The only safe pattern is a coordinated, serialized update across all nodes inside a maintenance window, or a load-balancer drain. Effort scales linearly with node count; at more than a handful of nodes, switch to a real deploy pipeline.

Failure modes to plan for.

Failure Impact Mitigation
git checkout discards local modifications Silent loss of hotfixes/config edits Enforce "no in-place edits" policy; config in env/vault only
Composer failure post-pull App code new, deps old → fatal errors Pre-pull DB+release snapshot; pin lockfile; smoke test immediately post-run
Migration fails mid-run Partially migrated schema, no auto-rollback Backup before update; write down-migrations for every change; rehearse
Overlapping invocations Corrupt checkout, double migrations External lock; CLI-only execution
Binary/PATH permissions Update aborts or half-completes Pre-flight check in before-pipeline
Queues/Horizon on stale code Jobs execute old classes against new schema queue:restart in after-pipeline, mandatory
Node skew in multi-host Intermittent, hard-to-reproduce errors Maintenance window + serialized rollout

Ramp-up. A mid-level Laravel developer can invoke the command in minutes; the cognitive load is entirely in operational trust, not in the API. Expect ~1 week of engineering for spike + staging hardening, plus a runbook and a rehearsed rollback drill before production use. The training cost is low; the risk-acceptance cost is the real line item, and it needs a named owner signing off.

Recommendation. Adopt conditionally and narrowly: single-server Laravel 11–13 apps with no existing CI/CD, CLI-only invocation, hard auth gating if the web route is ever enabled, mandatory snapshots, and a pipeline hook set for cache/queue/OPcache. Reject for containerized, autoscaled, or symlink-release environments, where the package's core assumption is wrong. Given 0 dependents and the destructive git behaviour, I would not make this an organizational standard — I would treat it as a tactical tool with a documented exit path to a proper deployment pipeline.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log