Demo route
Write, inspect, stream, then harden an untrusted ZIP.
This mirrors the browser trust-boundary workflow described in the docs.
Current run
Queue
0
entries queued
Output
0 B
archive bytes
Savings
—
after compression
CRC sample
pending
first file check
Forge an archive
ZipWriter.add → close
Archive
Ready. Toggle samples and forge.
Compression
original vs. stored bytesArchive map
openZip().entriesNo archive open.
Entry reader
text() · bytes() · arrayBuffer()Select an entry to read it three ways and verify its CRC‑32.
Streaming writer
ZipTransformStreamEntries written into .writable become ZIP bytes on .readable as you go — watch bytes leave before the last entry is even added. Nothing buffers the whole archive.
1 writing into .writable
Press run to feed entries in.
2 emitted from .readable
0 B
Byte chunks appear here in real time.
Read it back, one entry at a time
readZipStream()for await (const entry of readZipStream(…)) pulls each entry forward-only: read text, skip binaries & directories, never seek back.
Run the streaming build (or forge / open an archive), then scan.
Each card crafts a real malicious archive, then opens it twice: once unguarded and once through a JSZipp guard option. Watch the guard slam shut while the naïve path lets the payload through.
0 / 4 blocked
jszipp · live api trace