AVIF vs JPEG XL: a decision guide

JPEG XL (JXL) is, on the technical merits, one of the most capable still-image codecs ever standardised — and yet for web delivery in 2026 the correct default is still AVIF. Reconciling those two facts is the whole point of this guide, which sits under AVIF vs WebP Compression Benchmarks within Core Media Fundamentals & Next-Gen Formats. We compare the two formats on compression, lossless behaviour, progressive decode, and encode speed — then weigh those against the browser-support reality that decides which one you can actually ship.

Two different design philosophies

AVIF is a still frame of the AV1 video codec. It inherits AV1’s block-based, GPU-friendly decode path and its strong low-bitrate performance — which is why it excels at the aggressive compression targets web delivery cares about. It is not designed for authoring; it is designed for the last hop to the browser.

JPEG XL is a from-scratch image codec with a much broader remit: it was built for the entire imaging lifecycle, from camera capture through editing and archival to delivery. Its standout capabilities are lossless and visually-lossless modes, a genuinely progressive decode, extremely high resolution and channel-count ceilings, and — uniquely — the ability to losslessly transcode an existing JPEG into a JXL that is ~20% smaller and can be reversed bit-for-bit back to the original JPEG.

The consequence: JXL is often the better codec while AVIF is often the better web delivery format. Which one wins depends entirely on what you are optimising for — and, decisively, on where the file has to decode.

Feature and compression comparison

Dimension AVIF JPEG XL Practical winner
Lossy compression (web quality, small images) Excellent at low bitrate Excellent, slightly behind AVIF at very low bitrate AVIF for hero/thumbnail web
Lossy compression (high quality, large photos) Strong Often smaller at high fidelity JXL for high-quality photography
Lossless compression Good Best-in-class (beats PNG and WebP lossless) JXL
Lossless JPEG transcode (reversible ~20% smaller) Not possible Yes — flagship feature JXL
Progressive decode (low-res preview during download) No Yes, true progressive JXL
Encode speed Slow (avifenc heavy RDO) Fast (cjxl is markedly quicker at comparable quality) JXL
Decode CPU cost Low, hardware paths via AV1 blocks Low, but no hardware decoders in the field AVIF
Max bit depth / gamut 12-bit, wide gamut, HDR Up to 32-bit float, HDR JXL (headroom); tie for web
Animation Yes (AV1 sequence) Yes Tie
Alpha transparency Yes Yes Tie
Browser support for web delivery (2026) Broad Effectively none in stable Chrome/Firefox AVIF

Tradeoff: On raw compression, the two trade blows by use case — AVIF pulls ahead at the small, low-bitrate end that dominates web images; JXL pulls ahead at high fidelity, lossless, and large sizes. If browser support were equal, you would pick per image type. It is not equal, and that single fact overrides most of the table for delivery.

The browser-support reality

This is the crux. JPEG XL’s compression advantages are moot in a browser that cannot decode it.

Browser JPEG XL (image/jxl) AVIF (image/avif)
Safari 14 No No
Safari 16 No Yes (16.0+)
Safari 17+ Yes (native, on by default) Yes
Chrome 85+ No Yes
Chrome 110+ Removed — trialled behind a flag, then dropped from stable Yes
Firefox 93+ No (nightly only, behind image.jxl.enabled) Yes
Edge 18+ No Yes (Chromium-based, 18+)

The history matters because it shapes the risk: Chrome shipped JPEG XL behind an experimental flag, then removed the code from stable in version 110, citing insufficient ecosystem interest and a preference for consolidating on existing formats. Firefox keeps a Rust decoder in Nightly behind a preference but has not shipped it to release. Only Safari 17+ decodes JXL in a shipping stable browser. So a real audience for image/jxl today is “recent Safari, and no one else.”

Warning: Do not ship image/jxl as a <picture> source expecting broad coverage. Outside Safari 17+, every stable browser skips it and falls through to your next source — so unless you also ship AVIF/WebP/JPEG behind it, most users get your worst fallback, not JXL’s compression. JXL as a source is only additive on top of a full AVIF chain, never a replacement for it.

Laid out on a timeline, the divergence is stark: AVIF shipped once per engine and stayed, while JXL’s only Chromium appearance was reverted.

AVIF and JPEG XL browser adoption timeline A horizontal timeline from 2019 to 2024. Above the axis, AVIF milestones: the AOMedia spec in 2019, Chrome 85 in 2020, Firefox 93 in 2021, Safari 16 in 2022 and mainstream AV1 hardware decode by 2024. Below the axis, JPEG XL milestones: the codec merger in 2019, ISO standardisation with a Chrome 91 flag in 2021, Chrome 110 removing the decoder in early 2023, and Safari 17 shipping it later that year. AVIF JPEG XL AVIF 1.0 spec (AOMedia) Chrome 85 ships AVIF Firefox 93 ships AVIF Safari 16 ships AVIF AV1 hardware decode mainstream JXL codec merged (PIK + FUIF) ISO/IEC 18181 Chrome 91: flag only Chrome 110 removes JXL Safari 17 ships JXL 2019 2020 2021 2022 2023 2024 Four engines shipped AVIF and none reverted it; JPEG XL's single Chromium appearance was behind a flag, and it was withdrawn.

The decision flow

Choosing AVIF or JPEG XL A flowchart: start at the image use case; web delivery routes to AVIF; lossless JPEG transcode or archival or Safari-only authoring routes to JPEG XL; broad web audiences always keep an AVIF chain. What is the image for? Public web delivery? Yes AVIF chain AVIF → WebP → JPEG No Lossless / archival / JPEG transcode? Yes JPEG XL authoring / Safari-only No Default to AVIF chain

When JPEG XL genuinely matters

JXL is not a bad choice — it is a narrow choice. It shines in exactly the places web delivery does not reach:

  • Lossless JPEG transcode for storage. If you hold millions of legacy JPEGs, transcoding them to JXL shrinks the archive ~20% and is perfectly reversible — you can regenerate the original JPEG byte-for-byte on demand. This is a storage-cost and origin-egress win that never depends on the browser, because you serve the reconstructed JPEG (or AVIF) to the client.
  • Authoring and archival masters. For a photography pipeline, JXL’s high bit depth, lossless mode, and progressive decode make it a strong intermediate/master format — you deliver an AVIF or JPEG derivative to the web.
  • Safari-first audiences. A closed app or intranet where you control the client and it is Safari 17+ can serve JXL directly and reap its high-fidelity compression.

Tradeoff: Even where JXL is the better master, keep AVIF in your delivery pipeline. Storing JXL and serving AVIF is a perfectly coherent architecture: JXL optimises your archive, AVIF optimises the byte on the wire to the browser.

That two-layer split is worth drawing explicitly, because it is the shape almost every correct JXL deployment ends up in.

JPEG XL in the archive, AVIF on the wire Two stacked lanes. The upper storage lane runs from legacy JPEG masters through cjxl lossless transcode to a JXL archive that is 20 percent smaller, with djxl able to reconstruct a byte-exact JPEG. An arrow crosses into the lower delivery lane, where a derivative encoder produces AVIF and WebP, a CDN edge caches them keyed on Accept, and the browser selects from an AVIF, WebP, JPEG chain. Storage layer — reversible, browser never sees these bytes JPEG masters legacy archive, 100 % transcode cjxl --lossless_jpeg=1 store JXL archive ≈ −20 % storage reverse djxl byte-exact JPEG back derive from the archive — never deliver the JXL itself Delivery layer — what the browser actually decodes Derivative encode avifenc · cwebp deploy CDN edge Vary: Accept serve Browser AVIF → WebP → JPEG djxl regenerates the original JPEG bit-for-bit, so archiving as JXL discards nothing and stays auditable. AVIF stays on the wire; JPEG XL earns its place only where the browser is not in the loop.

Why AVIF wins for web delivery today

  1. It decodes everywhere that matters. Safari 16+, Chrome, Firefox, and Edge all ship AVIF in stable. JXL ships only in Safari 17+.
  2. Its weakest point — encode speed — is a build-time cost. You pay avifenc’s slowness once in CI, not on every request.
  3. Its no-progressive-decode limitation is mitigated by small file sizes plus a <picture> JPEG fallback for the slowest connections.
  4. It reuses AV1 hardware. As AV1 video decode blocks proliferate, AVIF still-image decode rides the same silicon.

The one feature AVIF cannot match — reversible lossless JPEG transcode — is an origin/storage concern, not a delivery concern, so it does not change the delivery default.

Common mistakes and fixes

1. Shipping image/jxl as a primary <picture> source

Anti-pattern:

<picture>
  <source srcset="/img/hero.jxl" type="image/jxl">
  <img src="/img/hero.jpg" alt="Hero">
</picture>

Effect: Only Safari 17+ takes the JXL source; every other stable browser skips it and drops straight to the JPEG <img>, so the majority of users get the largest file on the page — the opposite of the intent.

Fix: Always place a full AVIF/WebP chain before falling back, and add JXL only as an additive first source if you specifically want to serve it to Safari 17+:

<picture>
  <source srcset="/img/hero.jxl" type="image/jxl">   <!-- Safari 17+ only -->
  <source srcset="/img/hero.avif" type="image/avif"> <!-- Safari 16+, Chrome, FF, Edge -->
  <source srcset="/img/hero.webp" type="image/webp"> <!-- Safari 14+, older Chromium -->
  <img src="/img/hero.jpg" alt="Hero" width="1200" height="630"> <!-- universal -->
</picture>

2. Assuming Chrome still supports JPEG XL behind a flag

Anti-pattern: Telling users to enable chrome://flags for JXL.

Effect: The decoder was removed from Chromium stable in version 110 — the flag no longer exists in release builds. Any strategy relying on it is dead.

Fix: Treat Chrome/Edge as having zero JXL support and Firefox as Nightly-only. Plan for Safari-only JXL delivery, or don’t deliver JXL at all.

3. Choosing JXL for tiny thumbnails to “save more bytes”

Anti-pattern: Encoding 200×200 product thumbnails as JXL for maximum compression.

Effect: At small sizes and aggressive web-quality targets, AVIF typically matches or beats JXL — and it actually decodes in the browser. You traded universal support for a nonexistent gain.

Fix: Use AVIF for small, low-bitrate web images; reserve JXL for high-fidelity or lossless masters.

4. Replacing an AVIF pipeline with JXL because “it’s newer/better”

Anti-pattern: Migrating delivery from AVIF to JXL on technical-superiority grounds.

Effect: You strand the majority of your audience on the JPEG fallback and lose the compression you had with AVIF.

Fix: Keep AVIF for delivery; adopt JXL, if at all, at the storage/archival layer where the browser is not in the loop.

5. Forgetting the MIME type for .jxl

Anti-pattern: Serving .jxl files without registering image/jxl.

Effect: Even Safari 17+ will refuse the file if it arrives as application/octet-stream.

Fix: Register image/jxl on the origin exactly as covered in the MIME type configuration guide, and verify with curl -I.