hoa/event
Hoa\Event is a lightweight PHP event library for decoupled, event-driven code. Attach listeners to named events, fire them with data buckets, and use listenable sources to route notifications cleanly across your application. Part of the Hoa project.
Verdict: do not adopt. This is an archived, standalone event-bus component from the Hoa project — not a Laravel package. It offers nothing Laravel does not already own natively, and it carries permanent maintenance liability.
Architecture fit
hoa/event is a framework-agnostic observer/event-bus implementation built around string event IDs, channels, and Bucket/Listener/Source/Listenable abstractions. It has no service provider, facade, config, publishable assets, queue integration, or broadcasting support.Illuminate\Events: dispatcher, listeners, subscribers, queued listeners, model events, broadcasting, and testing helpers. The wider PHP ecosystem has standardized on PSR-14 (symfony/event-dispatcher, league/event).hoa://Event/... identifiers, buckets, channels) alongside the framework's. Fit is poor; the only defensible use is inside a legacy Hoa-derived codebase where it is already a transitive dependency.Integration feasibility
hoa/consistency, hoa/stream, hoa/protocol) carry the same staleness and are the likeliest source of hard failures.Technical risk
Key questions
hoa/event already in our dependency graph, and which package drags it in?Illuminate\Events or a PSR-14 dispatcher does not?Stack fit: Poor. Laravel's dispatcher is the idiomatic bus; hoa/event is a foreign abstraction. Treat direct adoption as an anti-pattern and constrain it to a legacy island if it must exist at all.
Migration path (if already present):
composer why hoa/event; map every event ID and listener registration to the owning package or team.composer.lock, and add an architecture rule (deptrac/PHPStan) banning new Hoa\Event imports.composer remove hoa/event and its Hoa siblings.Compatibility: Assume a PHP 7.4 ceiling until proven otherwise. Run a timeboxed spike on the actual target runtime first, specifically probing for each()/create_function usage and Hoa\Consistency bootstrapping failures.
Sequencing: Discovery/inventory (1 sprint) → runtime spike (days) → adapter if legacy must keep functioning → per-listener migration behind feature flags → dependency removal. Do not schedule adoption work; schedule removal work.
Alternatives to standardize on: Illuminate\Events for Laravel-native needs; any PSR-14 implementation (symfony/event-dispatcher) if framework-agnostic decoupling is the real requirement; league/event for a lightweight standalone bus.
Maintenance: Effectively owner-less. No upstream releases since 2017, repository archived, no triage, no advisories. Any maintenance is ours by default — a permanent tax on a capability we already have for free.
Support: No vendor, no SLA, no community of scale (0 dependents). Internal expertise will be thin and will decay with attrition. Onboarding cost is high relative to value: engineers must learn a bespoke event-ID protocol with no transferable benefit.
Scaling: In-process and synchronous — no queue, no broadcasting, no worker integration. Horizontal scale is entirely a function of our wiring, and any real async or throughput requirement forces a rewrite onto Laravel's queue-aware dispatcher anyway. It also scales poorly organizationally: every team touching events must learn two models.
Failure modes
Hoa\Consistency or stream/protocol bootstrapping.Ramp-up: 1–3 days for a mid-level engineer to be productive with the API itself, but weeks of accumulated context to understand the legacy event graph. The dominant cost is organizational — a second event model doubles the mental model for every engineer who touches it.
Recommendation: Reject for new work. If already present, log it as technical debt with an explicit removal ticket, a named owner, and a target quarter.
How can I help you explore Laravel packages today?