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

Directory Lister Laravel Package

phlak/directory-lister

PHLAK DirectoryLister is a lightweight, standalone PHP directory listing tool that turns folders into browsable indexes. It offers sorting, search, breadcrumbs, file icons, and customizable templates with no database required.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy vs. "borrow" for file sharing. Directory Lister is a ready-made "browse and download a folder" surface. Before committing engineering sprints to a native file-browser feature, it answers the cheapest question a PM can ask: does anyone actually use this, and what do they expect from it? Ship it as an internal or beta-facing capability, instrument it, then decide whether the roadmap item is real.
  • Internal tooling and support-deflection roadmap. Common PM-visible problems it solves without a ticket: "where do I get the latest build artifact / report / export / asset pack?" Standing up a browsable directory behind auth can cut ad-hoc Slack file requests and email attachments, which is measurable in support volume and time-to-find.
  • Customer-facing download portals and release/distribution pages. For docs, SDKs, datasets, sample packs, or versioned static assets, this is a credible stopgap for a "Downloads" or "Resources" experience, letting the team defer a bespoke CMS or DAM build by a quarter or more. The 5.8.0 DIRECT_LINKS capability (stable, shareable URLs to specific directories) materially improves this use case: it turns a folder listing into something you can deep-link from release notes, onboarding docs, or a support macro — which is exactly the loop that makes a stopgap measurable.
  • Staging/QA and preview-environment ergonomics. Exposing build outputs or fixture directories for QA, design review, and stakeholder sign-off reduces the "can you zip and send it" loop. Low-risk, high-frequency internal value. The 5.8.0 ZIP fixes (incomplete archives, and ZIP_DOWNLOADS=false / ZIP_COMPRESS=false being silently treated as enabled) matter here specifically: "download the whole folder" is the primary QA action, and it is now trustworthy in a way prior versions were not.
  • Buy-vs-build for a document/asset repository. Positions against paid file-index, digital asset management, and managed sharing tools. Useful as a cost baseline in a build/buy memo: an MIT-licensed self-hosted option sets the floor a vendor must beat on SSO, audit, and permissions.
  • Multi-tenant/SaaS gate. Because it is a standalone PHP application rather than a Composer library (0 dependents on Packagist), it should inform an explicit architectural decision: treat it as a sidecar service, not a component of the Laravel monolith. That decision belongs on the roadmap, not in a sprint.

When to Consider This Package

Consider it when most of the following hold:

  • The content is already web-accessible and non-sensitive — static assets, published artifacts, open datasets, internal-but-not-regulated docs. It is a directory index, not a rights-management system. 5.8.0 sharpens this: two of its security fixes are access-control bypasses (hidden files/directories reachable via non-canonical ./.. paths; direct-linked content reachable via query-string from outside the linked path). Read that as a product statement, not just a patch note: HIDE_* flags and direct-link scoping are convenience and tidiness controls, not an authorization boundary. Anything whose confidentiality matters must be gated in front of the app.
  • You need it this week, not this quarter. The value case rests on speed: containerize, put it behind your existing reverse proxy and auth, done. If your timeline is a quarter, you are over-investing in a stopgap.
  • Auth and access control can be pushed outward. You are comfortable gating it with SSO, a VPN, IP allowlisting, or basic auth at the edge, and you accept coarse-grained (folder-level) rather than per-user, per-file permissions.
  • You want the "browse + download" primitive only. No workflow, versioning semantics, approvals, retention policy, or in-browser editing. Deep links to directories are in scope as of 5.8.0; per-link expiry, revocation, and per-recipient permissions are not.
  • You accept operating a PHP app alongside a Laravel codebase without a service provider, facade, config publish, or Eloquent integration. Budget for a Dockerfile, a healthcheck, and a deploy pipeline — small but non-zero.
  • You are validating demand and want a cheap, reversible experiment with an explicit kill criterion.
  • You can commit to a patch cadence. This is now a real criterion rather than a formality: the class of defect being fixed (path canonicalization, query-string scope escapes, config flags silently ignored) means running a stale version leaves known bypasses in place. Adopt only with a named owner who will take minor releases.

Look elsewhere when:

  • Compliance, PII, or regulated data is in scope. No per-file ACLs, no audit trail, no DLP. The 5.8.0 bypass fixes are the concrete argument: a mature, actively maintained project in this category still shipped path-traversal-shaped escape bugs, and they were found by the community rather than by design review. Retrofitting real access control costs more than starting from a Laravel-native package (Flysystem + a controller + policy gates) or a managed DAM.
  • You need it embedded inside a Laravel app — shared session/auth, tenant scoping, custom storage disks (S3, etc.), or branded UI. The integration seam is a reverse proxy, not a service container, and that mismatch is permanent friction. With 0 dependents there is no ecosystem proof of Laravel integration to lean on.
  • Confidentiality of "hidden" material is a requirement. If a stakeholder's mental model is "it's hidden, so nobody can get it," this is the wrong tool — that model was demonstrably false until 5.8.0, and it is not the project's security contract going forward either.
  • Scale or search matters. Large trees, faceted search, previews/thumbnails, and content indexing are out of scope; you would end up building a search layer around it.
  • You need a supported vendor. MIT with a single-maintainer profile means you own the risk. The maintenance signal has improved: 5.8.0 shows responsive security handling, named external contributors, dependency/dev-tooling/CI modernization, and documentation consolidated into the repo's /docs folder — that is the profile of a maintained project, not an abandoned one. It is still one primary maintainer with no commercial support, so "who patches this if they step away" remains an unowned risk on your side, not theirs.
  • Brand or UX is a differentiator for the audience in question. Default directory listings read as "internal tool" and can undercut a premium product surface.

Adoption stance: green-light as an internal/secondary surface with a named owner and a 90-day review; red-light as a component of the core product architecture. New and existing deployments should be on 5.8.0 or later — earlier versions carry known access-control bypasses — and any post-upgrade verification should explicitly re-check ZIP flags, VCS-file hiding, and direct-link scope, since 5.8.0 fixes cases where those settings were silently ignored rather than honored.

How to Pitch It (Stakeholders)

To executives (one paragraph): Directory Lister is a mature, MIT-licensed, 2,500+ star open-source tool that turns any web-accessible folder into a browsable, downloadable listing. It carries no license cost and no vendor contract, and it can be live behind our existing login in days rather than the one-to-two sprints a native equivalent would take. Its latest release is a good signal: it fixed two access-control bypasses promptly, fixed folder-ZIP downloads that could produce incomplete archives, added stable direct links to specific directories, and modernized its tooling — the profile of a maintained project. I am recommending it narrowly: as an internal and stopgap capability — engineering artifacts, QA and design review, published asset downloads, and shareable links into those folders — to validate demand and deflect low-value support requests before we commit roadmap capacity to a first-party file-sharing feature. It is deliberately not proposed for regulated data or as infrastructure inside the main product, because it is a standalone application rather than a Laravel library and lacks the per-user permissions and audit trail we would need there; the recent security fixes reinforce that its "hidden" and "direct link" settings are organizational niceties, not access control. The ask is small: a container on 5.8.0, a proxy rule with authentication in front, and a 90-day checkpoint with a documented kill criterion.

To engineering (short): It is a standalone PHP app, not a Composer package — no service provider, no Laravel bindings, no shared session. Plan to run it as a sidecar in its own container behind the reverse proxy, with auth terminated at the edge, read-only mounts to the directories it serves, and no write path. Keep it out of the monorepo and out of the deploy graph for the core app; treat upstream as read-only and resist forking until we have evidence we need customization. Pin 5.8.0 minimum: it fixes hidden-file/directory checks being bypassed with non-canonical ./.. paths, and direct-linked content being reachable via query-string from outside the direct-linked path — do not run older tags anywhere, including internal-only hosts. While upgrading, re-verify configuration semantics rather than copying old .env files: ZIP_DOWNLOADS=false and ZIP_COMPRESS=false were previously interpreted as enabled, and HIDE_VCS_FILES was ignored due to a variable typo, so existing installs may have been running with settings that never took effect. Do not rely on HIDE_* flags or direct-link scoping as a security boundary. Watch the maintenance signal (single maintainer, zero dependents) and keep a version pin with an SBOM entry so we can patch deliberately on security releases.

To the team (framing): This is a probe, not a platform. We are buying information cheaply — whether people use a folder browser and shareable folder links, and what they ask for next — and we will retire it the moment a first-party feature, or a compliance requirement, makes it the wrong tool. Treat "hidden" as tidy, not as protected.

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.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle