maxfactor/support
maxfactor/support provides reusable support utilities for Laravel and PHP applications, offering helpers, traits, and service-provider conveniences that reduce boilerplate. It helps keep common logic organized and makes everyday development tasks simpler and more consistent.
Architecture fit. maxfactor/support is a horizontal helper/utility package, not a domain component. Its architectural role is to inject global functions, collection macros, or service-provider registrations that the rest of the app can call anywhere. That is the lowest-leverage integration point in a Laravel codebase: it increases coupling to the framework's global namespace while providing no bounded context, no contract, and no testable seam. It also overlaps heavily with illuminate/support (Laravel already ships Str, Arr, Collection, Number, data_get, etc.) and with the app/Support or app/helpers.php convention most Laravel teams already have. Net: near-zero architectural upside, non-trivial namespace surface area.
Integration feasibility. Trivially easy to attempt (composer require maxfactor/support), which is the trap. The real gate is version resolution. With a last release of 2020-03-31, the composer.json almost certainly pins illuminate/support at ^5.5–^7.0 and PHP at ^7.x. On Laravel 9/10/11 with PHP 8.2+, resolution will likely fail outright; forcing it with --ignore-platform-reqs buys an install but not correctness. Package auto-discovery means the service provider boots on every request in every environment, so any boot-time side effect (macro registration, config merge, Blade directive) is a global blast radius.
Technical risk. High for its size, driven by abandonment rather than complexity:
function_exists. Unguarded declarations collide with other packages; guarded ones silently no-op, producing environment-dependent behavior.illuminate/support is the classic cause of a blocked Laravel major upgrade.Key questions for engineering.
function_exists-guarded?illuminate/* and php constraints?Stack fit. Only a clean fit if we are on a legacy Laravel (≤7 / PHP ≤7.4) estate where the package was authored for that runtime. On a modern stack, treat it as a code sample to mine, not a dependency to install. The package's value is its implementation, not its distribution.
Migration path. Recommended sequence is "extract, don't depend":
Str::, Arr::, Collection::macro, Number::, once()); most will be redundant.app/Support/ as namespaced static methods or a single guarded helpers.php, with unit tests pinning current behavior.illuminate constraint.Compatibility. Validate against a matrix of {our Laravel version} × {PHP version}: run composer why-not, inspect extra.laravel.providers/aliases for auto-discovery, and check for published config or migrations (a helper package with migrations is a red flag). Verify any Carbon or Str internals it reaches into — those are the APIs most likely to have changed post-2020.
Sequencing.
If a hard dependency is unavoidable, pin an exact version, add a composer.json conflict guard, and register it in the dependency register with a named owner and a removal ticket.
Maintenance. Adopting this means we own it. There is no upstream to send a patch to, and no maintainer to answer a "does this work on PHP 8.4" question. Budget ~2–5 engineer-days for the initial fork-and-test effort and a recurring tax at every framework upgrade; that recurring tax is the dominant cost, not the initial install.
Support. No vendor, no SLA, no release cadence. It will be flagged by composer audit / abandoned-package checks, which creates friction with security review and blocks compliance-gated releases. Internal support burden falls on whoever last touched it — i.e., whoever is unluckiest during an upgrade.
Scaling. Runtime cost is negligible: helpers are stateless pure functions, and one service provider boot is noise. The scaling risk is organizational — every service that adopts it inherits the same upgrade ceiling, so the constraint multiplies across the fleet. In a monolith it is a single annoyance; in a 20-service estate it is 20 blocked upgrades.
Failure modes (ranked by likelihood × impact):
illuminate/support pin blocks a Laravel major bump. Most likely, highest total cost.Call to undefined function or unguarded redeclaration after a PHP/Laravel upgrade, taking down every request rather than one code path.Ramp-up. Individual helpers are self-explanatory, so developer ramp-up is near zero. The real onboarding cost is institutional: new engineers must learn that foo() is a local fork with no docs, no upstream reference, and no changelog. Mitigate with a short app/Support/README.md documenting each extracted helper's origin, semantics, and rationale — otherwise it gets reimplemented, then duplicated.
TPM recommendation. Do not adopt as a runtime dependency. Run a one-week extraction spike, vendor the handful of functions that survive the native-equivalence check, and close out the package entirely. If a team insists on installing it, require an exact version pin, a named owner, and a dated removal ticket before merge.
How can I help you explore Laravel packages today?