<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andrew Dyster</title>
    <description>The latest articles on DEV Community by Andrew Dyster (@andrew_dyster_c88ccbb5180).</description>
    <link>https://dev.to/andrew_dyster_c88ccbb5180</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3439779%2Ff4e62b46-e437-425e-82d9-8e3f60901576.png</url>
      <title>DEV Community: Andrew Dyster</title>
      <link>https://dev.to/andrew_dyster_c88ccbb5180</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrew_dyster_c88ccbb5180"/>
    <language>en</language>
    <item>
      <title>I Benchmarked 42 Compression Formats Spanning Four Decades. Here's What to Actually Use.</title>
      <dc:creator>Andrew Dyster</dc:creator>
      <pubDate>Fri, 10 Jul 2026 15:41:42 +0000</pubDate>
      <link>https://dev.to/andrew_dyster_c88ccbb5180/i-benchmarked-42-compression-formats-spanning-four-decades-heres-what-to-actually-use-143o</link>
      <guid>https://dev.to/andrew_dyster_c88ccbb5180/i-benchmarked-42-compression-formats-spanning-four-decades-heres-what-to-actually-use-143o</guid>
      <description>&lt;p&gt;I run &lt;a href="https://www.ezyzip.com" rel="noopener noreferrer"&gt;ezyZip&lt;/a&gt;, a browser-based archive tool, so "which format should I use?" is a question I field constantly. The honest answer is usually "it depends," which satisfies nobody. So I stopped hand-waving and measured it.&lt;/p&gt;

&lt;p&gt;We benchmarked 42 archive and compression formats, spanning four decades, from 1984's Unix &lt;code&gt;compress&lt;/code&gt; through today's Zstandard, Brotli, and context-mixing paq8px. Everything ran against the same realistic 55 MB corpus, every archive was round-trip verified byte for byte, and the whole thing reproduces from a single command. Here's what came out of it, and what I'd actually reach for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Most compression benchmarks measure raw codecs on standardized corpora like Silesia. That's the right call for algorithm research and the wrong call for answering "what should I zip my folder with?" I wanted end-user formats, real CLI tools, container overhead and all, on data that looks like an actual folder.&lt;/p&gt;

&lt;p&gt;So the corpus is deliberately mixed: about 11 MB of text, 15 MB of office documents, 16 MB of images, and 13 MB of video, all public domain so it can be committed and redistributed. That mix matters. Office documents (&lt;code&gt;.docx&lt;/code&gt;, &lt;code&gt;.xlsx&lt;/code&gt;, &lt;code&gt;.pptx&lt;/code&gt;) are themselves ZIP containers, so they stress how a tool handles already-compressed data. The JPEG and H.264 media is near-incompressible and sets an honest lower bound. The plain text and uncompressed images are where formats actually separate.&lt;/p&gt;

&lt;p&gt;Two rules kept it fair and practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Only two levels per tool:&lt;/strong&gt; its default, and its one "maximum compression" dial. No method tuning, no dictionary sizes, no thread-count games. That's what a normal person can reach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything is round-trip verified.&lt;/strong&gt; Each archive gets extracted, and every file is hashed with SHA-256 against the original manifest. Exit codes are not trusted.
That last rule earned its keep immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The verification gotcha
&lt;/h2&gt;

&lt;p&gt;On the image category, a 1985-era ARC build produced an archive that its own extractor happily unpacked, while printing a CRC warning and emitting a file 55 bytes longer than the original. Exit status: success. If I had trusted the tool's own report, a silent corruption would have sailed through as a passing result.&lt;/p&gt;

&lt;p&gt;This is the part I'd carry into any benchmark you write: verify content, not exit codes. A bug shared between a compressor and its matching decompressor will happily mask itself. Wherever possible I cross-checked with an independent extractor, so the tool that wrote the archive isn't also the one grading it.&lt;/p&gt;

&lt;p&gt;To keep results byte-reproducible across machines, single-stream tools (gzip, xz, zstd, and friends) compress a canonical &lt;code&gt;tar&lt;/code&gt;: entries sorted by name, zeroed ownership, fixed timestamps. Otherwise your filesystem metadata leaks into the archive size and nobody can reproduce your numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;p&gt;Full corpus, ranked by ratio (archive size as a percentage of the original, lower is better). This is a slice; the full 58-row table is in the writeup linked at the bottom.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Ratio&lt;/th&gt;
&lt;th&gt;Compress (s)&lt;/th&gt;
&lt;th&gt;Decompress (s)&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;zpaq&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;56.11%&lt;/td&gt;
&lt;td&gt;144.4&lt;/td&gt;
&lt;td&gt;149.9&lt;/td&gt;
&lt;td&gt;smallest, but slow and niche&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7z (LZMA2)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;59.96%&lt;/td&gt;
&lt;td&gt;4.43&lt;/td&gt;
&lt;td&gt;0.43&lt;/td&gt;
&lt;td&gt;best mainstream ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.xz (LZMA2)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;59.98%&lt;/td&gt;
&lt;td&gt;13.5&lt;/td&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.zst (Zstandard)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;61.33%&lt;/td&gt;
&lt;td&gt;6.82&lt;/td&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;near-instant decompress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.br (Brotli)&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;65.00%&lt;/td&gt;
&lt;td&gt;84.0&lt;/td&gt;
&lt;td&gt;0.23&lt;/td&gt;
&lt;td&gt;slow encode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAR 5&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;78.09%&lt;/td&gt;
&lt;td&gt;1.02&lt;/td&gt;
&lt;td&gt;0.20&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZIP (Info-ZIP)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;81.87%&lt;/td&gt;
&lt;td&gt;1.50&lt;/td&gt;
&lt;td&gt;0.32&lt;/td&gt;
&lt;td&gt;opens everywhere&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.gz (gzip)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;81.92%&lt;/td&gt;
&lt;td&gt;1.50&lt;/td&gt;
&lt;td&gt;0.10&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.zst (Zstandard)&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;82.44%&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;fastest useful default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar.lz4 (LZ4)&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;84.45%&lt;/td&gt;
&lt;td&gt;0.39&lt;/td&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;speed over ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar (uncompressed)&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;100.03%&lt;/td&gt;
&lt;td&gt;0.06&lt;/td&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARC (SEA, 1985)&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;113.11%&lt;/td&gt;
&lt;td&gt;1.33&lt;/td&gt;
&lt;td&gt;0.26&lt;/td&gt;
&lt;td&gt;expanded the data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The frontier is steep and then flat. Moving from gzip to xz or 7-Zip buys a big ratio win for a modest time cost. Pushing past that, into zpaq max or paq8px, buys a few more points at one to three orders of magnitude more time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd actually use
&lt;/h2&gt;

&lt;p&gt;For most work, two formats cover it, and I think that's the best default precisely because it's boring and predictable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ZIP for anything you hand to another person or system.&lt;/strong&gt; Every OS and language has opened it natively for thirty years. If interop matters more than bytes, this is the best choice, full stop.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;7-Zip or xz when size matters.&lt;/strong&gt; On the full corpus, 7-Zip hit 60% in about four seconds versus ZIP's 82%. A quarter smaller for no perceptible effort.&lt;br&gt;
A few developer-specific notes from the data:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zstandard is the sweet spot for artifacts and pipelines.&lt;/strong&gt; Its default level compresses in a blink and decompresses in 0.05s, which is exactly what you want for build caches, CI artifacts, and anything you unpack often. Turn the dial to &lt;code&gt;--ultra -22&lt;/code&gt; and it competes with 7-Zip on ratio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zipping media is pointless for size.&lt;/strong&gt; Every format landed at 98 to 100% on the video category, some slightly larger from container overhead. If you need a smaller video you re-encode it; you don't wrap it in an archive. Same story for JPEGs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Office documents are already ZIPs.&lt;/strong&gt; Plain ZIP left them at 99%. 7-Zip, working across archive members, got them to 60%.&lt;/p&gt;
&lt;h2&gt;
  
  
  The exotic tail isn't worth it
&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;paq8px compressed the text category to 17.8%, the smallest single number anywhere in the study. It also took the better part of twenty minutes for 11 MB and produces a file only paq8px can read. zpaq reached 56% on the full corpus but ran ~150 seconds each way, against 7-Zip's four.&lt;/p&gt;

&lt;p&gt;Meanwhile plain ZIP hit 35% on text, and the &lt;em&gt;1993&lt;/em&gt; PKZIP 2.04g binary I ran under DOS emulation produced a nearly identical 35.5%. The ZIP a casual user gets today is essentially the one from three decades ago. Past the mainstream tools, you pay large time and compatibility costs for small size gains.&lt;/p&gt;

&lt;h2&gt;
  
  
  The longevity finding
&lt;/h2&gt;

&lt;p&gt;This one surprised me most, and it's an engineering lesson more than a compression one.&lt;/p&gt;

&lt;p&gt;Every vintage format from 1985 onward still round-trips cleanly once its tool is rebuilt from source: ARC, zoo, LHA, ARJ, HA, freeze. A 1993 PKZIP binary, run under DOSBox, still emits a ZIP that modern &lt;code&gt;unzip&lt;/code&gt; opens.&lt;/p&gt;

&lt;p&gt;The Windows-only archivers of the 2000s fared worse. FreeArc and UHARC, run under Wine with Rosetta 2 on Apple Silicon, consistently deadlocked in their compression cores under x86-to-ARM binary translation. ACE creation is only available through a discontinued graphical installer. A 40-year-old open DOS format proved more durable than a 20-year-old proprietary Windows one.&lt;/p&gt;

&lt;p&gt;If you archive anything for the long term, that's the takeaway: simple, open, well-documented formats outlast the software that made them. Pick accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducibility
&lt;/h2&gt;

&lt;p&gt;The entire study runs from one command that verifies the corpus, runs the benchmark, and regenerates the tables and figures:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./run_all.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The corpus and every raw per-run JSON result are committed, so any number can be re-derived without sitting through the multi-hour run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;The best way to compress a file in 2026 is refreshingly dull: &lt;strong&gt;ZIP to share, 7-Zip or Zstandard to shrink, and don't bother zipping media.&lt;/strong&gt; The exotic tail is fascinating, and most of it still works, some of it heroically, but it offers ordinary use little the mainstream doesn't, at costs you shouldn't pay.&lt;/p&gt;

&lt;p&gt;I wrote a longer, less technical walkthrough with all 58 results and the full story here: &lt;a href="https://medium.com/@ezyZip/the-best-way-to-zip-a-file-in-2026-i-tested-every-format-to-be-sure-c87e3c53d06f" rel="noopener noreferrer"&gt;The Best Way to Zip a File in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What do you reach for, and has anyone found a case where the exotic formats actually paid off? I'm curious where my "not worth it" holds up.&lt;/p&gt;

</description>
      <category>compression</category>
      <category>zip</category>
      <category>benchmark</category>
      <category>cli</category>
    </item>
    <item>
      <title>Built P2P file transfer tool for browsers</title>
      <dc:creator>Andrew Dyster</dc:creator>
      <pubDate>Sun, 17 Aug 2025 03:15:54 +0000</pubDate>
      <link>https://dev.to/andrew_dyster_c88ccbb5180/built-p2p-file-transfer-tool-for-browsers-34g5</link>
      <guid>https://dev.to/andrew_dyster_c88ccbb5180/built-p2p-file-transfer-tool-for-browsers-34g5</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I've been running ezyZip (a file compression site) for a while, and users kept asking for a way to share large files without the hassle of cloud storage. So I built a P2P transfer feature that works differently from WeTransfer and similar services.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Drag and drop your files onto &lt;a href="https://www.ezyzip.com/share-files-en.html" rel="noopener noreferrer"&gt;ezyZip File Transfer app&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get a link like ezy.zip/ABCDE&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your files transfer directly from your browser to the recipient's browser&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloudflare handles the WebRTC signaling to connect you - the actual files never touch any server&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The technical bit:
&lt;/h2&gt;

&lt;p&gt;It's quite simple: Just static HTML/JS files using WebRTC for peer-to-peer connections. Cloudflare handles the signaling server part to establish connections between browsers. Files get compressed into a ZIP on the fly, then stream directly to whoever has your link. Since there's no server storage, there's no file size limit except your patience and bandwidth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think this is better:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Privacy - Files never sit on someone else's server&lt;/li&gt;
&lt;li&gt;Speed - Direct transfer is often faster than upload then download&lt;/li&gt;
&lt;li&gt;No infrastructure costs - It's just static files plus Cloudflare for signaling&lt;/li&gt;
&lt;li&gt;Free - Minimal costs means I can keep it free without limits (There is a 1gb limit just because it needs to hold all the file data in memory)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do need to keep your browser tab open while the other person downloads. But you get live progress updates, and once they're done, the link's ready for the next person.&lt;/p&gt;

&lt;p&gt;Should work with modern browsers (tested on Chrome)&lt;/p&gt;

&lt;p&gt;Try it out: &lt;a href="https://www.ezyzip.com/share-files-en.html" rel="noopener noreferrer"&gt;https://www.ezyzip.com/share-files-en.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webrtc</category>
    </item>
  </channel>
</rss>
