Is Too Large For Zip-on-the-fly: Total Size Of Requested Files

| Constraint | Naive Behavior | Failure Threshold | | :--- | :--- | :--- | | | Stores entire ZIP in RAM | Typically 128MB - 2GB | | Execution Timeout | Blocks until complete | 30-300 seconds (web servers) | | Disk Space | Uses temp files | /tmp fills up | | Central Directory | Must be written after all file data | Requires seekable storage |

for (const file of largeFileList) archive.append(createReadStream(file.path), name: file.name ); | Constraint | Naive Behavior | Failure Threshold

Pre-scan each file to compute CRC32 and size without storing the compressed data. Then write ZIP entries in a single sequential pass using HTTP chunked encoding. The CRC and size are known per file before writing

Use ZIP’s "store" method (deflation level 0). The CRC and size are known per file before writing. name: file.name )

The central directory is the key: a ZIP file’s table of contents is at the end of the file. Most libraries cannot stream it without first knowing all file sizes and CRCs. 4.1 Level 1: Streamed Passthrough (No Compression – "Store" Method) Best for: Already compressed files (JPEG, MP4, PDFs).