Best HTML / CSS / JS Compression Tool
Up to 0% smaller than LZMA. 0 wins, 0 losses across real-world HTML / CSS / JS files. Lossless, verified, free to try.
How PZIP Compresses HTML / CSS / JS
PZIP separates web files into distinct streams — HTML tags, attributes, text content, inline scripts, styles, and comments. Each stream is compressed with the best of LZMA and Brotli. This stream separation gives Brotli cleaner input than raw files, beating standalone Brotli on all web assets.
Codec: Stream separation + BrotliHistory of HTML / CSS / JS
HTML was created by Tim Berners-Lee in 1993. CSS followed in 1996, and JavaScript (now ECMAScript) in 1995. Together they form the foundation of every website. Compression of web assets directly impacts page load time, bandwidth costs, and user experience.
Compression Timeline
HTML 2.0 — the first standard
JavaScript created by Brendan Eich
CSS 1.0 released
Brotli released by Google for web compression
PZIP beats LZMA by up to 27.3% on web assets
Real-World Benchmark Results
Every file tested with LZMA-9 (maximum compression) as baseline. Round-trip correctness verified on every file.
| File | Size | PZIP vs LZMA | Result | Download |
|---|---|---|---|---|
| 081-massive-table.html | 314.0 KB | TIE | ERROR | Source |
| 096-product-catalog.html | 62.0 KB | TIE | ERROR | Source |
| Chart.bundle.min.js | 189.1 KB | TIE | ERROR | Source |
| LibASTMatchersReference.html | 545.3 KB | TIE | ERROR | Source |
| NumberFormat.prototype.formatToParts.js | 62.8 KB | TIE | ERROR | Source |
| RecordRTC.js | 189.8 KB | TIE | ERROR | Source |
| bootstrap-datetimepicker.js | 104.1 KB | TIE | ERROR | Source |
| bootstrap.css | 274.5 KB | TIE | ERROR | Source |
| bootstrap.min.css | 106.9 KB | TIE | ERROR | Source |
| c_status.html | 61.2 KB | TIE | ERROR | Source |
| china.js | 59.1 KB | TIE | ERROR | Source |
| core-prototypes.js.html | 80.0 KB | TIE | ERROR | Source |
| cxx_dr_status.html | 944.3 KB | TIE | ERROR | Source |
| cxx_status.html | 68.9 KB | TIE | ERROR | Source |
| date-af-ZA.js | 131.6 KB | TIE | ERROR | Source |
| date-af-ZA.min.js | 55.2 KB | TIE | ERROR | Source |
| date-ar-DZ.js | 131.8 KB | TIE | ERROR | Source |
| date-ar-DZ.min.js | 56.8 KB | TIE | ERROR | Source |
| date-ar-IQ.min.js | 57.1 KB | TIE | ERROR | Source |
| date-ar-KW.js | 131.8 KB | TIE | ERROR | Source |
| date-ar-LY.js | 131.8 KB | TIE | ERROR | Source |
| date-ar-OM.js | 131.8 KB | TIE | ERROR | Source |
| date-ar-OM.min.js | 56.8 KB | TIE | ERROR | Source |
| date-ar-QA.min.js | 56.8 KB | TIE | ERROR | Source |
| date-ar-SA.min.js | 57.4 KB | TIE | ERROR | Source |
| date-ar-SY.min.js | 57.1 KB | TIE | ERROR | Source |
| date-az-Cyrl-AZ.js | 131.9 KB | TIE | ERROR | Source |
| date-az-Cyrl-AZ.min.js | 56.8 KB | TIE | ERROR | Source |
| date-be-BY.min.js | 56.8 KB | TIE | ERROR | Source |
| date-bg-BG.js | 131.9 KB | TIE | ERROR | Source |
| date-bs-Latn-BA.js | 131.6 KB | TIE | ERROR | Source |
| date-cs-CZ.min.js | 55.3 KB | TIE | ERROR | Source |
| date-da-DK.min.js | 55.1 KB | TIE | ERROR | Source |
| date-de-AT.min.js | 55.3 KB | TIE | ERROR | Source |
| date-de-CH.js | 131.6 KB | TIE | ERROR | Source |
| date-de-DE.js | 131.6 KB | TIE | ERROR | Source |
| date-el-GR.js | 132.0 KB | TIE | ERROR | Source |
| date-el-GR.min.js | 57.2 KB | TIE | ERROR | Source |
| date-en-029.min.js | 55.2 KB | TIE | ERROR | Source |
| date-en-AU.js | 131.6 KB | TIE | ERROR | Source |
| date-en-IE.js | 131.6 KB | TIE | ERROR | Source |
| date-en-JM.js | 131.6 KB | TIE | ERROR | Source |
| date-en-JM.min.js | 55.2 KB | TIE | ERROR | Source |
| date-en-PH.js | 131.6 KB | TIE | ERROR | Source |
| date-en-TT.min.js | 55.2 KB | TIE | ERROR | Source |
| date-en-ZA.js | 131.6 KB | TIE | ERROR | Source |
| date-en-ZW.min.js | 55.2 KB | TIE | ERROR | Source |
| date-es-AR.js | 131.6 KB | TIE | ERROR | Source |
| date-es-BO.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-CL.js | 131.6 KB | TIE | ERROR | Source |
| date-es-CL.min.js | 55.2 KB | TIE | ERROR | Source |
| date-es-CO.js | 131.6 KB | TIE | ERROR | Source |
| date-es-CR.js | 131.6 KB | TIE | ERROR | Source |
| date-es-CR.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-DO.js | 131.7 KB | TIE | ERROR | Source |
| date-es-DO.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-EC.min.js | 55.2 KB | TIE | ERROR | Source |
| date-es-ES.min.js | 55.2 KB | TIE | ERROR | Source |
| date-es-GT.js | 131.6 KB | TIE | ERROR | Source |
| date-es-HN.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-MX.js | 131.6 KB | TIE | ERROR | Source |
| date-es-PE.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-PR.js | 131.6 KB | TIE | ERROR | Source |
| date-es-PY.js | 131.6 KB | TIE | ERROR | Source |
| date-es-PY.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-SV.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-UY.js | 131.6 KB | TIE | ERROR | Source |
| date-es-UY.min.js | 55.3 KB | TIE | ERROR | Source |
| date-es-VE.min.js | 55.3 KB | TIE | ERROR | Source |
| date-eu-ES.js | 131.7 KB | TIE | ERROR | Source |
| date-eu-ES.min.js | 55.3 KB | TIE | ERROR | Source |
| date-fa-IR.js | 131.6 KB | TIE | ERROR | Source |
| date-fi-FI.min.js | 55.2 KB | TIE | ERROR | Source |
| date-fo-FO.js | 131.6 KB | TIE | ERROR | Source |
| date-fo-FO.min.js | 55.3 KB | TIE | ERROR | Source |
| date-fr-BE.min.js | 55.3 KB | TIE | ERROR | Source |
| date-fr-CA.js | 131.6 KB | TIE | ERROR | Source |
| date-fr-CA.min.js | 55.2 KB | TIE | ERROR | Source |
| date-fr-MC.min.js | 55.3 KB | TIE | ERROR | Source |
| date-he-IL.min.js | 56.7 KB | TIE | ERROR | Source |
| date-hr-BA.js | 131.6 KB | TIE | ERROR | Source |
| date-hr-HR.min.js | 55.3 KB | TIE | ERROR | Source |
| date-id-ID.js | 131.5 KB | TIE | ERROR | Source |
| date-is-IS.js | 131.7 KB | TIE | ERROR | Source |
| date-it-CH.min.js | 55.2 KB | TIE | ERROR | Source |
| date-it-IT.js | 131.6 KB | TIE | ERROR | Source |
| date-ja-JP.js | 131.5 KB | TIE | ERROR | Source |
| date-ka-GE.js | 132.3 KB | TIE | ERROR | Source |
| date-kn-IN.js | 132.3 KB | TIE | ERROR | Source |
| date-kn-IN.min.js | 57.1 KB | TIE | ERROR | Source |
| date-kok-IN.min.js | 57.0 KB | TIE | ERROR | Source |
| date-lv-LV.min.js | 55.3 KB | TIE | ERROR | Source |
| date-mi-NZ.js | 131.7 KB | TIE | ERROR | Source |
| date-mi-NZ.min.js | 55.4 KB | TIE | ERROR | Source |
| date-mn-MN.js | 132.0 KB | TIE | ERROR | Source |
| date-mn-MN.min.js | 57.2 KB | TIE | ERROR | Source |
| date-ms-BN.js | 131.5 KB | TIE | ERROR | Source |
| date-ms-BN.min.js | 55.1 KB | TIE | ERROR | Source |
| date-nb-NO.min.js | 55.2 KB | TIE | ERROR | Source |
| date-nl-BE.js | 131.5 KB | TIE | ERROR | Source |
| date-nn-NO.js | 131.5 KB | TIE | ERROR | Source |
| date-ns-ZA.js | 131.6 KB | TIE | ERROR | Source |
| date-pt-BR.js | 131.6 KB | TIE | ERROR | Source |
| date-pt-PT.js | 131.6 KB | TIE | ERROR | Source |
| date-pt-PT.min.js | 55.3 KB | TIE | ERROR | Source |
| date-quz-BO.js | 131.7 KB | TIE | ERROR | Source |
| date-quz-BO.min.js | 55.3 KB | TIE | ERROR | Source |
| date-quz-EC.js | 131.7 KB | TIE | ERROR | Source |
| date-ro-RO.js | 131.6 KB | TIE | ERROR | Source |
| date-ro-RO.min.js | 55.2 KB | TIE | ERROR | Source |
| date-sa-IN.js | 132.2 KB | TIE | ERROR | Source |
| date-se-FI.js | 131.8 KB | TIE | ERROR | Source |
| date-se-NO.js | 131.8 KB | TIE | ERROR | Source |
| date-se-NO.min.js | 55.6 KB | TIE | ERROR | Source |
| date-se-SE.js | 131.8 KB | TIE | ERROR | Source |
| date-se-SE.min.js | 55.6 KB | TIE | ERROR | Source |
| date-sl-SI.js | 131.6 KB | TIE | ERROR | Source |
| date-sma-NO.js | 131.6 KB | TIE | ERROR | Source |
| date-sma-SE.js | 131.6 KB | TIE | ERROR | Source |
| date-sma-SE.min.js | 55.3 KB | TIE | ERROR | Source |
| date-sms-FI.min.js | 56.0 KB | TIE | ERROR | Source |
| date-sq-AL.js | 131.6 KB | TIE | ERROR | Source |
| date-sr-Cyrl-BA.js | 131.9 KB | TIE | ERROR | Source |
| date-sr-Cyrl-BA.min.js | 56.8 KB | TIE | ERROR | Source |
| date-sr-Cyrl-CS.js | 131.9 KB | TIE | ERROR | Source |
| date-sr-Latn-BA.js | 131.6 KB | TIE | ERROR | Source |
| date-sr-Latn-BA.min.js | 55.2 KB | TIE | ERROR | Source |
| date-sv-FI.min.js | 55.2 KB | TIE | ERROR | Source |
| date-syr-SY.js | 131.9 KB | TIE | ERROR | Source |
| date-ta-IN.min.js | 56.7 KB | TIE | ERROR | Source |
| date-te-IN.js | 132.4 KB | TIE | ERROR | Source |
| date-th-TH.js | 132.2 KB | TIE | ERROR | Source |
| date-th-TH.min.js | 56.7 KB | TIE | ERROR | Source |
| date-tn-ZA.min.js | 55.2 KB | TIE | ERROR | Source |
| date-tr-TR.min.js | 55.3 KB | TIE | ERROR | Source |
| date-tt-RU.min.js | 56.8 KB | TIE | ERROR | Source |
| date-uk-UA.js | 131.9 KB | TIE | ERROR | Source |
| date-ur-PK.min.js | 56.3 KB | TIE | ERROR | Source |
| date-uz-Latn-UZ.js | 131.6 KB | TIE | ERROR | Source |
| date-uz-Latn-UZ.min.js | 55.2 KB | TIE | ERROR | Source |
| date-vi-VN.js | 131.8 KB | TIE | ERROR | Source |
| date-xh-ZA.min.js | 55.2 KB | TIE | ERROR | Source |
| date-zh-CN.min.js | 55.7 KB | TIE | ERROR | Source |
| date-zh-MO.js | 131.6 KB | TIE | ERROR | Source |
| date-zh-SG.min.js | 55.7 KB | TIE | ERROR | Source |
| date-zh-TW.min.js | 55.8 KB | TIE | ERROR | Source |
| date-zu-ZA.min.js | 55.2 KB | TIE | ERROR | Source |
| daterangepicker.js | 68.1 KB | TIE | ERROR | Source |
| dropzone-amd-module.js | 63.3 KB | TIE | ERROR | Source |
| echarts.common.js | 1.1 MB | TIE | ERROR | Source |
| echarts.common.min.js | 296.1 KB | TIE | ERROR | Source |
| fd-slider.js | 69.9 KB | TIE | ERROR | Source |
| form_advanced.html | 94.6 KB | TIE | ERROR | Source |
| fullcalendar.min.js | 128.3 KB | TIE | ERROR | Source |
| general_elements.html | 84.2 KB | TIE | ERROR | Source |
| graph.js | 60.0 KB | TIE | ERROR | Source |
| html5_spec_section.html | 95.8 KB | TIE | ERROR | Source |
| icons.html | 129.3 KB | TIE | ERROR | Source |
| ie8.html | 49.6 KB | TIE | ERROR | Source |
| index.html | 49.9 KB | TIE | ERROR | Source |
| index.min.js | 131.9 KB | TIE | ERROR | Source |
| jquery-1.9.1.min.js | 90.5 KB | TIE | ERROR | Source |
| jquery-3.7.1.slim.min.js | 68.6 KB | TIE | ERROR | Source |
| jquery.dataTables.min.js | 80.7 KB | TIE | ERROR | Source |
| jquery.mCustomScrollbar.css | 52.3 KB | TIE | ERROR | Source |
| jquery.mCustomScrollbar.js | 89.0 KB | TIE | ERROR | Source |
| jquery.sparkline.js | 120.9 KB | TIE | ERROR | Source |
| jquery.sparkline.min.js | 61.2 KB | TIE | ERROR | Source |
| jquery.vmap.algeria.js | 90.8 KB | TIE | ERROR | Source |
| jquery.vmap.germany.js | 54.1 KB | TIE | ERROR | Source |
| jquery.vmap.iran.js | 78.0 KB | TIE | ERROR | Source |
| jquery.vmap.turkey.js | 181.5 KB | TIE | ERROR | Source |
| jquery.vmap.world.js | 59.2 KB | TIE | ERROR | Source |
| jszip.js | 294.8 KB | TIE | ERROR | Source |
| jszip.min.js | 78.1 KB | TIE | ERROR | Source |
| lang-all.js | 122.3 KB | TIE | ERROR | Source |
| moment-with-locales.min.js | 202.1 KB | TIE | ERROR | Source |
| morris.js | 64.5 KB | TIE | ERROR | Source |
| neimenggu.js | 56.6 KB | TIE | ERROR | Source |
| node_net.js | 70.2 KB | TIE | ERROR | Source |
| node_path.js | 51.5 KB | TIE | ERROR | Source |
| obama_budget_proposal_2012.tree.js | 130.0 KB | TIE | ERROR | Source |
| parsing_operators.js.html | 51.0 KB | TIE | ERROR | Source |
| parsley.js | 87.1 KB | TIE | ERROR | Source |
| potential_checkers.html | 54.0 KB | TIE | ERROR | Source |
| prettify.js | 61.8 KB | TIE | ERROR | Source |
| raphael.no-deps.js | 297.0 KB | TIE | ERROR | Source |
| raphael.no-deps.min.js | 88.0 KB | TIE | ERROR | Source |
| raphael.svg.js | 55.9 KB | TIE | ERROR | Source |
| rfc2616.html | 509.6 KB | TIE | ERROR | Source |
| run_prettify.js | 77.8 KB | TIE | ERROR | Source |
| select2.full.js | 158.0 KB | TIE | ERROR | Source |
| shandong.js | 49.0 KB | TIE | ERROR | Source |
| sinon.js | 129.6 KB | TIE | ERROR | Source |
| sizzle.js | 59.9 KB | TIE | ERROR | Source |
| style.min.css | 64.6 KB | TIE | ERROR | Source |
| sugarpak.js.html | 51.9 KB | TIE | ERROR | Source |
| timeScale.html | 86.7 KB | TIE | ERROR | Source |
| vfs_fonts.js | 554.3 KB | TIE | ERROR | Source |
| xinjiang.js | 84.0 KB | TIE | ERROR | Source |
Frequently Asked Questions
How does PZIP beat Brotli on web files?
+
Brotli includes a built-in 120KB web dictionary. PZIP doesn't fight this — it helps Brotli by pre-separating the file into cleaner streams. Stream-separated Brotli beats raw Brotli because each stream has higher internal consistency.
PZIP vs Other Compressors for HTML / CSS / JS
| Feature | PZIP | LZMA / xz | gzip | zstd |
|---|---|---|---|---|
| Type-Aware | Yes | No | No | No |
| Lossless | Yes | Yes | Yes | Yes |
| Never-Worse Guarantee | Yes | N/A | N/A | N/A |
| Best HTML / CSS / JS Saving | 0% | Baseline | Worse | ~Similar |
| Round-Trip Verified | Every file | Manual | Manual | Manual |
Try PZIP on Your HTML / CSS / JS Files
Upload any HTML / CSS / JS file up to 30 MB. Free during beta — no signup required. See how much smaller PZIP makes it.
Baseline: LZMA-9 (maximum compression)
Competitors: gzip-9, bz2-9, brotli-11, zstd-19, PPMd 2-24
Verification: Byte-exact round-trip on every file
Guarantee: Never-worse (PZIP <= LZMA, always)
Test files: 200 real-world HTML / CSS / JS files
Updated: 2026-02-15