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

Airdrop Laravel Package

hammerstone/airdrop

Hammerstone Airdrop is a Laravel package for straightforward server deployments. Define environments, deploy over SSH with Artisan commands, run release tasks, and manage releases without relying on a third-party deployment service.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. Airdrop still targets a narrow, well-understood seam in the Laravel deploy lifecycle: the asset build step (npm ci && npm run build). It fingerprints the inputs that affect compiled output and short-circuits the build when the shipped/compiled assets are already current. That is an orthogonal, deploy-time-only concern β€” no runtime footprint, no service dependency, no schema or queue implications. For a Laravel monolith or a small fleet of Laravel apps deployed in place (Forge/Envoyer/Deployer on VPS or bare metal), this fits cleanly. For teams that build once in CI and promote an immutable artifact, the package is largely redundant with CI caching and layer caching β€” the value proposition collapses. v2.0.0 does not change this calculus in either direction.

Integration feasibility. Still high on paper, but the integration task has grown from "add one package" to "perform a package identity migration." The v2.0.0 breaking change is a namespace/vendor rename: aaronfrancis/airdrop β†’ wilbergroup/airdrop. That means composer.json, composer.lock, any pinned version constraints, deploy scripts referencing the vendor path, and any internal documentation all need updating in lockstep. The release notes call it a drop-in replacement, which is accurate at the code level but not at the dependency-management level: Composer treats these as two different packages, so there is a window where both could be installed or where one app is silently left on the abandoned name. The other binding constraint is unchanged and still dominant β€” pipeline shape. The check only pays off when the deploy target is where the build would otherwise run, or when the fingerprint state survives between runs (persisted cache/file). On our actual pipelines, validating that remains the bulk of the effort.

Technical risk. Medium, and the composition of that risk has shifted rather than grown. The headline operational risk is still a false "fresh" verdict shipping stale CSS/JS, with fingerprint completeness as the weak point β€” Vite env vars, imports resolved outside resources/, lockfile drift, vite.config.js changes, and per-environment builds. v2.0.0 incidentally confirms something previously unknown: the build hash incorporates PHP-side trigger class names, since the namespace change alone invalidates it. That is a useful data point β€” the fingerprint is broader than just frontend inputs β€” but it also means routine PHP refactors touching those classes can force rebuilds, and conversely that any input not represented in that hash is still a blind spot. Fail-open behavior (build anyway) remains essential and must be verified.

The genuine new risk is supply chain and vendor identity. The package has moved to a new GitHub organization (WilberGroup) and a new Packagist vendor. A vendor rename in a deploy-path dependency is exactly the moment to verify provenance rather than assume goodwill: confirm the old repo/README points to the new one, confirm Packagist ownership of wilbergroup/airdrop, confirm the maintainer identities match the previous commercial Laravel shop, and pin to an explicit tag with a reviewed commit diff between v1.1.0 and v2.0.0 (the changelog is short, but "same package" should be verified, not taken on faith β€” check for added lifecycle hooks, install scripts, or post-autoload-dump behavior). The prior note flagging the 2026-05-29 release metadata as anomalous can be retired: Laravel 13 and PHP 8.5 in the test matrix corroborate that timeline, so the date is now internally consistent.

New upside: the release adds Laravel 13 support and PHP 8.5 to the test matrix, so the package is no longer a lagging dependency on our upgrade path β€” it extends the support window rather than constraining it. Blast radius remains bounded because removal restores stock behavior; this is still a reversible optimization, not an architectural commitment. Star count and dependent count remain thin, but an organizational home is a marginal improvement to bus factor over a single-maintainer repo.

Key questions.

  • Is aaronfrancis/airdrop now abandoned on Packagist, and will it receive security fixes? If not, every app must migrate β€” a stale v1.x line in the deploy path is a slow-burning liability.
  • Does the v1β†’v2 diff contain anything beyond namespace changes and CI/test-matrix updates? Review the actual commit range, not the changelog.
  • Which bundlers are supported (Vite only, or Mix/NPM too), and is Laravel 13 support additive (i.e., does the constraint still allow 10/11/12)?
  • Is PHP 8.5 merely in the test matrix or now a hard constraint, and what is the floor?
  • What exactly is hashed, and where is the fingerprint persisted β€” repo, cache, or build artifact? Does it survive a clean CI checkout? (v2 partially answers this: trigger class names are included.)
  • Does it fail open or closed when artifacts are missing (e.g., a brand-new server with no public/build)?
  • Does it account for .env / VITE_* differences between staging and production?
  • Is there a dry-run/verbose mode to compare "would skip" vs. "forced build" before trusting it?
  • Does it compose with Envoyer/Deployer/Forge hook ordering and atomic release symlinks?
  • What is the measured build time it removes, and how often do we actually deploy?

Integration Approach

Stack fit. Best fit: Laravel 10–13, Vite, PHP 8.1+ (confirm the floor under v2), Composer-managed, deployed via Envoyer/Forge/Deployer or a server-side git pull && build flow. The widened Laravel/PHP support is a net positive for a mixed-version fleet β€” one package version can cover apps we haven't yet upgraded, which simplifies pinning. Poor fit remains containerized deploys where the image is built once and promoted, or teams already relying on aggressive CI caching.

Migration path. The migration is now a distinct first step, and it should be done as a pilot on one app, not swept across the fleet. Change composer.json from aaronfrancis/airdrop to wilbergroup/airdrop, run composer update for that single package, review the resulting diff, and deploy to staging. Expect exactly one forced rebuild on first deploy β€” the namespace change alters the hash because trigger class names are part of it. Confirm that behavior explicitly: the first deploy should build, the second should skip. If the second deploy also builds, the fingerprint is not persisting and the package is buying us nothing. Only after that parity check passes should the change go to a production app, still behind the ASSET_BUILD_FORCE=true kill switch documented in the runbook.

Compatibility. Pin the version explicitly (wilbergroup/airdrop:2.0.0) and verify the PHP/Laravel constraint against each app rather than assuming β€” the test matrix says PHP 8.5 and Laravel 13 are tested, which is not the same as required. Confirm no app ends up with both vendor names installed. Confirm interaction with public/build/manifest.json, the Vite hot file, and .gitignore rules β€” fingerprint state that gets ignored silently disables the optimization. Check for double-caching against existing CI caches so invalidation stays explainable. Ensure npm ci determinism, since non-deterministic node_modules makes fingerprints meaningless.

Sequencing.

  1. Verify provenance: new repo, Packagist ownership, maintainer identity, and the v1.1.0β†’v2.0.0 commit diff.
  2. Inventory every app's pipeline: where the build runs, how long it takes, whether artifacts are prebuilt, and which are still on the old package name.
  3. Apply the threshold β€” if the build is under ~60–90 seconds or deploys are weekly, stop; the operational surface isn't worth it.
  4. Pilot the rename on one low-traffic app; assert build-then-skip across two consecutive deploys.
  5. Roll out the rename per-app with a documented kill switch and a one-line rollback (revert the composer.json line and re-run the deploy script).
  6. Retire the old package name everywhere and record the migration date so a future reader doesn't reintroduce it.
  7. Instrument the deploy log to state explicitly "assets built" vs. "assets skipped," with the fingerprint, so incidents are diagnosable in seconds.

Operational Impact

Maintenance. Steady-state cost stays low β€” small code footprint, MIT license, no runtime dependency to patch β€” but v2.0.0 adds a one-time migration cost and a new ongoing obligation: tracking the new vendor name. The organizational transfer improves bus factor modestly (an org rather than an individual or single shop) while concentrating risk differently: if the Wilber Group deprioritizes the package, there is no fallback maintainer, and the old name is now a dead end. Pin the version, watch the new repo for releases, and re-validate on Laravel major upgrades and bundler changes. Budget for vendoring or forking; the code is small enough that this is cheap insurance.

Support. Community-only via GitHub issues at the new organization; still no vendor SLA. The transfer means a new issue tracker, new release feed, and possibly a redirected or archived old repo β€” update internal runbooks and any alerting that watches the old URL, or the team will be watching a repo that no longer moves. The internal owner remains the escalation path, not the maintainer. Document who that is, and note that the rename is precisely the kind of change that erodes institutional memory if it isn't written down.

Scaling. Value scales with deploy frequency and per-server build time: ten deploys a week across five apps on VPS infrastructure is where the minutes compound. Laravel 13 support extends the useful life of the tool across our upgrade horizon, which is a modest but real improvement to expected lifespan. It still does not improve runtime performance, CDN behavior, or cold-start, and it delivers nothing on immutable-image or autoscaled infrastructure. Expect the benefit to shrink over time as teams move toward artifact promotion β€” plan for the package to become obsolete rather than foundational.

Failure modes.

  • False-fresh (stale assets): highest severity, user-visible. Mitigate with a post-deploy smoke check that fetches the built entrypoint and asserts a content hash, plus a canary app.
  • Split-brain package names: some apps migrated to wilbergroup, others still on aaronfrancis receiving no fixes. Mitigate with a repo-wide grep and a CI check asserting the dependency name.
  • Compromised or typosquatted vendor rename: new namespace is the classic vector. Mitigate by verifying Packagist ownership and reviewing the upgrade diff before pinning.
  • Confusing the one-time hash invalidation with a regression: the first post-upgrade deploy always rebuilds. Document it, or someone will "fix" a working system.
  • False-stale (unnecessary build): low severity, just lost savings β€” but note that hashing PHP class names means PHP refactors can trigger spurious rebuilds.
  • Missing artifacts on a new node: must fail open; verify explicitly on a fresh provision.
  • Concurrent deploys racing over shared fingerprint state; confirm the write is atomic or per-release.
  • Environment drift (.env, VITE_*) not captured by the fingerprint β€” the most likely silent cause of a stale deploy.

Ramp-up. Roughly one engineer-day to integrate and a second to instrument and document, plus a few hours for the rename verification and diff review. The learning curve is still not the package β€” it is the team's own deploy pipeline and cache semantics, which this work forces into the open. That clarity remains a secondary benefit worth counting, and the honest cost center remains pipeline archaeology, not the dependency.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core