CLI tool
KoalaBear84/OpenDirectoryDownloader avatar
KoalaBear84/OpenDirectoryDownloader

OpenDirectoryDownloader: Index Open Directory Listings

Indexes open directories

1,408 stars113 forksC#GPL-3.0

At a glance

What is it?
OpenDirectoryDownloader is a cross-platform C# command-line indexer for more than 130 directory-listing and file-hosting formats. It produces URL lists for tools such as wget and aria2c, but it does not itself download files.
Who is it for?
OpenDirectoryDownloader fits users who need to convert supported directory listings into URL files while retaining control over a separate downloader. It does not fit workflows that require integrated downloads, recursive authenticated discovery beyond the documented credentials, or formats outside its supported set.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

OpenDirectoryDownloader’s indexing boundary

OpenDirectoryDownloader addresses a narrow gap between discovering a browsable directory and handing its contents to a download client. The README says it indexes open directory listings in more than 130 supported formats, with examples including FTP(S), Google Drive, AList, Directory Lister, HFS, Bhadoo, GoIndex, Go2Index alternatives, Mediafire, GoFile, GitHub, pCloud, and Dufs. This makes it relevant to users who already know which exposed listing or file service they need to process and want a machine-generated set of file URLs.

The project is an indexer, not a download manager. Its README explicitly states that downloading is not yet implemented. Instead, a generated URL file can be consumed by another tool for most formats. wget receives the normal URLs file and preserves fetched content paths with its extraction options. aria2c can consume either an ordinary URLs file or a specially generated `theurlsfile-aria2.txt` file that includes directory information. That separation gives the user control over the downloader, connection settings, retries, and destination behavior, but it also adds a second tool to install and configure.

The target audience is therefore narrower than the name suggests. It is useful for engineers, researchers, archive workers, or technically experienced users dealing with supported listings. It is less suitable for someone expecting a graphical browser, an integrated download queue, or automatic transfer. Those expectations are absent from the documented command-line interface.

Supported sources and CLI data flow

The documented architecture is a command-line workflow built around scanning, formatting output, and optionally handing the result to another process. The `-u` or `--url` option identifies the source to scan. The program then applies one of its supported listing or file-hosting parsers, collects file information, and saves a URL list by default. This parser-oriented design explains why the project lists many unrelated providers under one utility, but the README does not describe internal classes, parser selection rules, persistence models, or concurrency implementation. Those details cannot be confirmed from the available documentation.

Concurrency and pacing are exposed through several options. `-t` or `--threads` sets the number of threads, with a documented default of 5. `-w` or `--wait` controls the delay between calls when single-threaded operation is too fast, while `-o` or `--timeout` sets request timeouts. `-q` or `--quit` ends the program after scanning instead of waiting for a key. These controls matter because indexing many files can create many requests, and a server or account-backed source may impose practical limits that the program cannot infer.

Output is configurable rather than fixed. `-j` or `--json` saves JSON, `-f` or `--no-urls` suppresses the URL file, and the documented `--aria2-urls` option saves aria2 URL files with directory support. The README also lists `--output-file` for choosing the URLs file and `-l` or `--upload-urls` for uploading that file. Authentication and request customization include `--username`, `--password`, `--github-token`, `--user-agent`, and repeatable `-H` or `--header` options.

Size collection is another explicit branch. Exact file sizes use HEAD requests and can be slower and heavier for servers. `--fast-scan` avoids HEAD requests and uses only sizes present in HTML, even when the displayed size is approximate. This is a useful operational tradeoff, but it means output detail depends on the chosen mode and what the remote listing exposes.

Windows, Linux, Mac and Pi installation choices

The project distributes 64-bit builds for Windows, Linux, and Mac, plus ARM and ARM64 builds for Pi through its GitHub Releases page. The README recommends self-contained releases for users who do not want to install a separate runtime. That route is the simplest documented installation path because it packages the required runtime with the application.

If the source-based or non-self-contained route is used, the documented prerequisite is the latest current .NET 10 runtime. The README links to the official runtime download page but does not provide a package-manager installation command, repository clone procedure, build script, or `dotnet publish` example. Consequently, there is no verified copy-and-paste build command to reproduce here.

After downloading the appropriate release, the README documents the available command-line parameters but does not show the exact executable filename or a complete launcher line for the first scan. The source tree includes `src/` and an `OpenDirectoryDownloader.ipynb` file, while compiled builds are published under releases. For a first documented downstream use, suppose the program has produced `theurlsfile.txt`. The README gives this wget command:

bash
wget -x -i theurlsfile.txt

The `-x` option tells wget to create directories from the source paths, and `-i` reads the URLs from the file. The command is taken directly from the project README and does not download through OpenDirectoryDownloader itself.

Using generated URL files with wget and aria2c

OpenDirectoryDownloader separates indexing from transfer so that users can choose a downloader. The README presents two aria2c paths. The first consumes `theurlsfile-aria2.txt`, a generated file described as supporting directory structure:

bash
aria2c -i theurlsfile-aria2.txt

The second consumes the normal `theurlsfile.txt`:

bash
aria2c -i theurlsfile.txt

The README warns that the normal file does not support directory structure. It also states that `--disable-ipv6` is sometimes needed when downloading fails. The README does not specify which failures require that setting, so it should be treated as a documented troubleshooting option rather than a default configuration.

The filename `theurlsfile.txt` is used in the examples, but readers should not assume it is always the only output name. The CLI includes `--output-file`, and `--no-urls` can disable URL output. The README also mentions `--aria2-urls` without a short form, while the option table assigns `-f` to both `--no-urls` and `--aria2-urls`. That duplicate short option is an ambiguity in the current documentation and should be checked against the selected binary before automation depends on it.

For HTTP or HTTPS sources, custom headers can be repeated with `-H` or `--header`. Credentials are available through `--username` and `--password`, while `--github-token` serves GitHub-specific access. Since the README says headers can be supplied multiple times, an automation script may need repeated options, but it gives no concrete header syntax. Command secrets also need normal process-list and logging caution from the operator’s side.

Operational limits of format-based indexing

The largest limitation is explicit: OpenDirectoryDownloader does not download files. Any transfer requirement must be met by wget, aria2c, or another suitable client, and behavior then depends on that client. Even for supported formats, the README qualifies downstream use with “for most of the formats.” It does not publish a compatibility matrix showing which providers produce plain URLs, aria2-compatible files, accurate directory structure, exact sizes, or usable credentials.

Support breadth can also obscure parser-specific boundaries. The list of 130+ formats is useful for identifying plausible sources, but the documentation does not explain what constitutes a distinct format, how conflicting parsers are selected, or whether every option applies to every provider. A real source may also expose incomplete metadata, redirects, temporary links, or authentication rules that a parser cannot turn into a stable URL. The documentation offers no diagnostics, retry classification, or recovery policy for those cases.

Request pressure is a separate concern. Exact sizing sends HEAD requests and is explicitly described as slower and heavier for servers. `--fast-scan` avoids those requests but may leave approximate or unavailable sizes. Raising `--threads` may improve throughput against a permissive endpoint, yet the project does not document automatic rate-limit detection or a safe per-service thread recommendation. `--wait` gives the operator a way to space calls, but that remains a manual boundary.

A different kind of tool is preferable when the core requirement is integrated downloading rather than listing extraction. A conventional download manager can consume a source directly, maintain its own queue, and report transfer progress. OpenDirectoryDownloader is the better fit when format detection and URL-list generation are the primary task.

Release cadence, licensing, and upgrade implications

The repository is not archived, and its last push was on 2026-10-06. Recent release history includes v3.7.0.1 on 2026-09-14, v4.0.0.0 on 2026-10-04, and v4.1.0.0 on 2026-10-05. These dates indicate recent project changes, but the available release names do not include migration notes, breaking-change details, or compatibility claims. The repository also contains `release-notes/`, yet their contents are not available here, so upgrade requirements cannot be assessed.

The project is licensed under GPL-3.0. That identifier establishes the repository’s stated license, but this review does not provide legal interpretation. Organizations should review the `LICENSE` file and their distribution, modification, and source-offer obligations with appropriate legal input. No separate commercial, relicensing, or exception information appears in the available documentation.

Upgrade cost depends on the workflow being automated. Command-line scripts may need review because option behavior can change between releases. Downstream components add another dependency: scripts must match OpenDirectoryDownloader’s URL output to wget or aria2c behavior. The README does not promise output-schema compatibility across releases, and the JSON option has no documented schema, so stored output should not be treated as a stable API without inspection.

Editorial conclusion

OpenDirectoryDownloader fits users who need to convert supported directory listings into URL files while retaining control over a separate downloader. It does not fit workflows that require integrated downloads, recursive authenticated discovery beyond the documented credentials, or formats outside its supported set. Before adoption, verify that the relevant listing format is supported, select the appropriate self-contained or .NET 10 package, and confirm how your downloader interprets the generated URL file and directory structure.

Frequently asked questions

Does OpenDirectoryDownloader download files itself?

No. The README states that downloading is not yet implemented and that generated URL files can be used with another tool for most supported formats.

Do I need .NET 10 to run OpenDirectoryDownloader?

Not when using the self-contained releases, which the README says do not require the .NET Core runtime. Non-self-contained use requires the documented current .NET 10 runtime.

Which systems have documented OpenDirectoryDownloader builds?

The releases page provides 64-bit builds for Windows, Linux, and Mac, as well as ARM and ARM64 builds for Pi.

Official sources

  1. Issues
  2. KoalaBear84/OpenDirectoryDownloader on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/koalabear84-opendirectorydownloader.svg)](https://hysenlabs.com/projects/koalabear84-opendirectorydownloader)

Was this useful?