How to archive file listing generator online for free
- Step 1Open the tool — Visit /archive-tools/file-listing-generator. No account is needed to start on the free tier (up to 50 MB and 500 entries per archive).
- Step 2Drop in one archive — Drag a single archive into the dropzone, or click to browse. This tool reads one archive at a time — it is not a folder or batch tool. Format is detected from the file's leading bytes, so a mislabelled extension still works.
- Step 3Pick the output format — Choose listFormat: csv (default, opens in Excel/Sheets), json (for scripts and SIEM ingestion), or txt (a flat tree with [DIR] markers). The default csv is correct for most spreadsheet and audit use.
- Step 4Generate the listing — Click Process. For a ZIP the tool reads the central directory and builds the inventory without decompressing any file. For other formats it enumerates entries through the WASM extractor.
- Step 5Review the metrics — The result panel shows the detected Format and total Entries count so you can confirm the listing matches the archive you expected.
- Step 6Download the file — Click Download. CSV saves as <name>-listing.csv, JSON as <name>-listing.json, TXT as <name>-listing.txt — named from the source archive's stem.
What the File Listing Generator outputs
One listFormat control selects the shape. All three describe the same entries; CSV and JSON carry the richest metadata for ZIP inputs.
| listFormat | File extension | Best for | Contents |
|---|---|---|---|
csv (default) | <name>-listing.csv | Excel, Google Sheets, audit logs, BI imports | Header row plus one row per entry: name,size,compressedSize,ratio,lastModified,isDirectory,compressionMethod,crc32,isEncrypted. Names containing commas or quotes are RFC-4180 escaped. |
json | <name>-listing.json | Scripts, SIEM/Splunk ingestion, diffing | Pretty-printed array of objects. Same fields as CSV plus a comment field; crc32 is the raw number, lastModified is an ISO-8601 string. |
txt | <name>-listing.txt | Quick human-readable scan, pasting into tickets | Two header lines (# Archive: and # Entries:), a blank line, then name<TAB>human-size<TAB>ISO-date per entry, with a [DIR] prefix on directory entries. |
Metadata fidelity by input format
Real ZIPs expose a central directory, so every column is populated. Other formats are enumerated by extraction, so several columns fall back to defaults.
| Input format | Engine | Per-entry size | compressedSize / ratio | lastModified | crc32 / method / isEncrypted |
|---|---|---|---|---|---|
| ZIP | Central-directory parser (no decompress) | Real uncompressed size | Real compressed size and computed ratio | Real per-entry DOS date/time | Populated: crc32, compressionMethod (Deflate, Stored, BZIP2, LZMA, XZ, PPMd, AES…), isEncrypted |
| TAR / GZ | fflate | Real size | compressedSize equals size, ratio shows 0.0% | The archive file's own modified date | Empty |
| 7z / RAR / BZ2 / XZ | libarchive WASM | Real size after extraction | compressedSize equals size, ratio shows 0.0% | The archive file's own modified date | Empty |
Tier limits for the File Listing Generator
Limits are enforced before processing on file size AND entry count. Both must pass.
| Tier | Max archive size | Max entries | Files per run |
|---|---|---|---|
| Free | 50 MB | 500 | 1 |
| Pro | 500 MB | 50,000 | 20 |
| Pro-media | 2 GB | 500,000 | 100 |
| Developer | 2 GB | 500,000 | Unlimited |
Cookbook
Concrete examples of each output format from the same source ZIP, plus what happens when you feed in a non-ZIP archive. Output is verbatim from the tool's emitters.
Default CSV from a project ZIP
The default listFormat: csv. The first line is always the header; crc32 is rendered as an 8-character hex string; ratio is computed from compressedSize vs size.
name,size,compressedSize,ratio,lastModified,isDirectory,compressionMethod,crc32,isEncrypted src/,0,0,—,2026-01-04T09:12:00.000Z,true,Stored,00000000,false src/index.ts,4821,1503,68.8%,2026-01-04T09:12:00.000Z,false,Deflate,1a2b3c4d,false README.md,2110,961,54.5%,2026-01-04T09:11:58.000Z,false,Deflate,9f00aa12,false
JSON output for ingestion
listFormat: json. Pretty-printed (2-space) array of objects. Note the extra comment field and that crc32 is the raw number (not hex) and lastModified is ISO-8601.
[
{
"name": "README.md",
"size": 2110,
"compressedSize": 961,
"ratio": "54.5%",
"lastModified": "2026-01-04T09:11:58.000Z",
"isDirectory": false,
"compressionMethod": "Deflate",
"crc32": 2667122706,
"isEncrypted": false,
"comment": null
}
]TXT flat tree
listFormat: txt. Two comment-style header lines, a blank line, then tab-separated rows with human-readable sizes. Directories are prefixed with [DIR].
# Archive: project.zip # Entries: 3 [DIR] src/ 0 B 2026-01-04T09:12:00.000Z src/index.ts 4.7 KB 2026-01-04T09:12:00.000Z README.md 2.1 KB 2026-01-04T09:11:58.000Z
Listing a .tar.gz (reduced metadata)
For non-ZIP archives the tool extracts entries to enumerate them, so compressedSize mirrors size, ratio is 0.0%, isEncrypted/crc32/method are blank, and lastModified falls back to the .tar.gz file's own date. Directory entries are not listed.
name,size,compressedSize,ratio,lastModified,isDirectory,compressionMethod,crc32,isEncrypted bin/app,184320,184320,0.0%,2026-02-11T18:40:03.000Z,false,,,false conf/app.yaml,512,512,0.0%,2026-02-11T18:40:03.000Z,false,,,false
Confirming the entry count before you trust it
The result panel reports Entries and detected Format. Cross-check it against the archive your build produced — a count of 0 usually means the central directory was unreadable.
Result panel: Format: zip Entries: 412 Downloaded: project-listing.csv (413 lines: 1 header + 412 entries)
Edge cases and what actually happens
ZIP central directory is missing or corrupt
Empty (parse fail)The ZIP path parses the End-Of-Central-Directory record. If it cannot be located, parsing returns an empty list and the listing has only its header (CSV/JSON) or just the two comment lines (TXT). A 0-entry result on a file you know has contents points to a damaged or truncated central directory — run /archive-tools/corrupted-zip-repair, then list the repaired copy.
File is larger than your tier's size cap
Rejected (tier limit)Free rejects anything over 50 MB before processing starts; Pro raises this to 500 MB, Pro-media and Developer to 2 GB. The check runs up front, so an oversized archive never begins listing.
Archive has more entries than your tier allows
Rejected (tier limit)Entry count is capped independently of size: Free 500, Pro 50,000, Pro-media and Developer 500,000. A small ZIP packed with hundreds of thousands of tiny files can pass the size check but fail the entry check — upgrade or split the archive.
Non-ZIP archive must be fully extracted to list
By designOnly true ZIPs expose a central directory the tool can read without unpacking. For 7z, RAR, TAR, GZ, BZ2 and XZ the tool extracts the archive in memory to enumerate it, so a large 7z uses far more memory than a same-sized ZIP and listing takes longer.
Directories are absent from non-ZIP listings
ExpectedThe extractor that handles non-ZIP formats returns files only, so the isDirectory column is always false and folder entries do not appear. ZIP listings, by contrast, include directory entries (names ending in /) with isDirectory: true.
Timestamps wrong on non-ZIP listings
ExpectedFor non-ZIP formats every entry's lastModified is set to the archive FILE's own modified date, not the per-entry mtime stored inside the archive. Only ZIP entries carry their real per-entry DOS date/time. If accurate per-entry dates matter, list a ZIP.
compressedSize equals size on a clearly compressed .gz
ExpectedThe non-ZIP path reports compressedSize as the uncompressed byte length, so ratio shows 0.0%. This does not mean the data was stored uncompressed — it means per-entry compressed sizes are not available outside ZIP. Use /archive-tools/compression-ratio-calculator for true per-file ratios.
Extension does not match the contents
SupportedFormat is detected from leading magic bytes, so a .zip that is actually a 7z is listed correctly as 7z. If detection returns unknown, the tool falls back to trying ZIP; a genuinely unrecognised file then lists nothing.
Entry names contain commas, quotes, or non-ASCII
PreservedCSV names with commas, quotes, or newlines are RFC-4180 escaped (wrapped in quotes, inner quotes doubled). Names are decoded as UTF-8 in non-fatal mode, so unusual encodings degrade gracefully rather than throwing.
Encrypted ZIP
SupportedListing reads metadata only, so an encrypted ZIP lists fine without a password — the isEncrypted column reads true for protected entries and compressionMethod may show AES. To detect encryption across formats first, use /archive-tools/encrypted-archive-detector.
Frequently asked questions
Does the tool upload my archive?
No. The archive is read locally through the browser File API and processed in WebAssembly inside the tab. Open DevTools, Network during a run and you will see no outbound request carrying the file.
What output formats can I choose?
Three, via the listFormat control: csv (the default), json, and txt. CSV opens in any spreadsheet, JSON is for scripts and ingestion, TXT is a flat human-readable tree.
What columns are in the CSV?
name, size, compressedSize, ratio, lastModified, isDirectory, compressionMethod, crc32, isEncrypted — in that order, with a header row. crc32 is an 8-character hex string in CSV.
Is the JSON different from the CSV?
It carries the same fields plus a comment field. In JSON, crc32 is the raw number rather than hex, and lastModified is an ISO-8601 string.
Which archive formats can I list?
ZIP, 7z, RAR, TAR, GZ, BZ2 and XZ. ZIP is read via its central directory; the others are enumerated through fflate (tar/gz) or a libarchive WASM bridge.
Why is the ratio 0.0% on my 7z?
Per-entry compressed sizes are only available for ZIP. For other formats the tool reports compressedSize as the uncompressed size, so the ratio shows 0.0%. For real ratios use /archive-tools/compression-ratio-calculator.
Why are the dates all the same on my tar.gz?
Outside ZIP, each entry's lastModified is set to the archive file's own modified date. Only ZIP entries store and expose individual per-entry timestamps.
Does it list folders?
ZIP listings include directory entries with isDirectory: true. Non-ZIP listings contain files only, because the extractor used for those formats returns files without directory placeholders.
What is the maximum size and entry count?
Free: 50 MB / 500 entries. Pro: 500 MB / 50,000. Pro-media: 2 GB / 500,000. Developer: 2 GB / 500,000 with unlimited files per run. Both limits are checked before processing.
Can I list several archives at once?
This tool reads one archive per run. To enumerate many archives, extract them first with /archive-tools/batch-extraction-manager, or for a size and type rollup use /archive-tools/batch-compression-report.
Can I open an encrypted ZIP listing without the password?
Yes. Listing only reads metadata, so encrypted entries appear with isEncrypted: true and no password is needed. Extraction is a separate, password-required step.
The listing has zero entries — what happened?
For a ZIP this means the central directory could not be parsed (truncated or corrupt). Try /archive-tools/corrupted-zip-repair and list the repaired file. For other formats, a zero count usually means the format was not recognised.
Privacy first
Every JAD Archive tool runs entirely in your browser using fflate, @zip.js/zip.js, and the libarchive WASM bridge. Your archives never leave your device — verified by zero outbound network requests during processing.