hoa/file
Hoa\File is a PHP library for robust filesystem access, offering object-oriented abstractions for files, directories, links, sockets, and streams. It supports reading, writing, locking, permissions, iterators, and exceptions, making file operations safer and more consistent.
hoa/file is an archived 2017-era filesystem abstraction (files, directories, streams, filters, watchers, locking). The decision it informs is "what do we do about the code that already uses it," not "should we build a feature on it."league/flysystem; for local-only operations, symfony/filesystem or PHP's native SPL (SplFileObject, stream wrappers). hoa/file is not a competitive option in that comparison — it is a reference design, not a candidate.Consider it only in the narrow case where it is already in the codebase and working:
Hoa\Stream filter chains, inotify-backed watchers) and a rewrite would be a multi-sprint effort for no user-visible gain.composer.json.Look elsewhere in every other case:
league/flysystem (adapters, well maintained) or symfony/filesystem + symfony/finder for local operations.php://filter cover most needs without a dependency.To executives: This is a risk line item, not an opportunity. hoa/file is an abandoned PHP filesystem library — last release 2017, repository archived, no active dependents. It delivers no differentiating capability; it only appears in older code paths. Recommend we (a) inventory where it is used, (b) stop any new adoption, and (c) fund a timeboxed replacement behind our existing file-service interface. Framing it as "we are removing an unsupported dependency before it blocks our PHP upgrade" is the message that lands.
To engineering: We are not asking for a rewrite of file handling. We are asking for one interface boundary plus a swap to league/flysystem (or Symfony Filesystem where scope is local-only), with the existing test suite as the safety net. Sequence it so the interface lands first and the dependency can be removed incrementally rather than as a big-bang migration.
To security and procurement: The package receives no upstream patches. That is acceptable only while it is isolated and inventoried; it is not acceptable as a permanent state. Add it to the abandoned-dependency register with an owner and a target removal date.
The one-line pitch: Low strategic value, real maintenance risk — contain it, replace it, and stop the bleeding.
How can I help you explore Laravel packages today?