Testing

WOFF2: Browser Support, Features, Known Issues

WOFF2 works in Chrome 36+, Edge 14+, Firefox 39+, Opera 23+, Samsung Internet 4+, Safari 12+ on macOS, and Safari 10+ on iOS. Learn WOFF2 support and quirks.

Author

Prince Dewani

May 1, 2026

WOFF2 is a W3C web font file format that wraps TrueType or OpenType fonts in a Brotli-compressed container for faster page loads. It works in Chrome 36+, Edge 14+, Firefox 39+, Opera 23+, Samsung Internet 4+, Safari 12+ on macOS, and Safari 10+ on iOS, while Internet Explorer never supported it.

This guide covers what WOFF2 is, the browsers that support it, the key features, how to use @font-face, WOFF vs WOFF2, and the known issues.

What is WOFF2?

WOFF2 is a web font file format that the W3C Web Fonts Working Group standardized for delivering TrueType and OpenType fonts to browsers. It wraps the underlying font in a Brotli-compressed container, uses the file extension .woff2, the MIME type font/woff2, and is referenced from CSS @font-face rules with format("woff2").

Which browsers does WOFF2 support?

WOFF2 works in every modern desktop and mobile browser, with global support around 97%. Internet Explorer is the only major browser that never added WOFF2 support, and very early Safari builds on macOS need a TrueType outline before they accept the file.

Loading browser compatibility data...

WOFF2 compatibility in Chrome

Chrome supports WOFF2 from Chrome 36 on Windows, macOS, Linux, ChromeOS, and Android. Chrome was the first major browser to ship WOFF2 by default, and Chrome for Android picked it up in the same build train. Chrome 1 to 35 did not support WOFF2.

WOFF2 compatibility in Edge

Microsoft Edge supports WOFF2 from Edge 14 in the legacy EdgeHTML engine. Chromium Edge supports WOFF2 by default from Edge 79 on Windows, macOS, and Linux, with the same behavior as Chrome. Edge 12 and 13 did not support WOFF2.

WOFF2 compatibility in Firefox

Firefox supports WOFF2 from Firefox 39 on Windows, macOS, Linux, and Android. Earlier Firefox versions could load WOFF2 behind the gfx.downloadable_fonts.woff2.enabled flag from Firefox 35, but Firefox 39 was the first build that turned the flag on by default. Firefox 1 to 38 did not support WOFF2 out of the box.

WOFF2 compatibility in Safari

Safari supports WOFF2 from Safari 10 on iOS and iPadOS, and from Safari 12 on macOS Mojave and later. Safari 10 and 11 on macOS Sierra and High Sierra had partial WOFF2 support that only worked with TrueType outlines and rejected files that wrapped a CFF (PostScript) outline. Safari 3.1 to 9.1 on macOS and Safari 3.2 to 9.3 on iOS did not support WOFF2.

WOFF2 compatibility in Opera

Opera supports WOFF2 from Opera 23 on the desktop and from Opera Mobile in modern Chromium builds. Modern Opera shares the Chromium font engine, so WOFF2 behavior matches Chrome. Opera 9 to 22 did not support WOFF2.

WOFF2 compatibility in Samsung Internet

Samsung Internet supports WOFF2 from version 4 on Galaxy phones and tablets. It is built on Chromium, so it follows the same WOFF2 rules as Chrome for Android and renders variable fonts inside WOFF2 the same way.

WOFF2 compatibility in Android Browser

Chrome for Android supports WOFF2 from Chrome 36 on Android 4.4 KitKat and later. The legacy stock Android Browser shipped before WebView updated to Chromium, so devices on Android 2.1 to 4.4.4 with the original AOSP browser cannot load WOFF2. Modern Android phones default to Chrome for Android or Samsung Internet, both of which support WOFF2.

WOFF2 compatibility in Internet Explorer

Internet Explorer does not support WOFF2 in any version, including IE 11. IE 9, 10, and 11 only handle WOFF 1.0 with the format("woff") descriptor. Microsoft has retired Internet Explorer, so any visitor still on IE needs a WOFF or EOT fallback inside the same @font-face rule.

Note

Note: WOFF2 fallbacks break across older Safari, iOS, and Internet Explorer builds. Test your @font-face stack on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key features of WOFF2?

WOFF2 keeps the same goals as WOFF 1.0, smaller fonts and better caching, but uses a tighter compression and a richer file structure. The main features map to faster downloads, broader font coverage, and clean caching for production sites.

  • Brotli compression: WOFF2 wraps the font tables in a Brotli-compressed stream, which is about 30% smaller than the zlib stream used by WOFF 1.0 and up to 50% smaller than the raw TTF or OTF file.
  • TrueType, OpenType, and variable fonts: The container holds any TrueType, OpenType, or OpenType variable font, including chromatic fonts and font collections, without re-encoding the underlying tables.
  • 48-byte fixed header: Every WOFF2 file starts with a 48-byte header that names the magic number wOF2, the file size, and the table count, which keeps the format easy to validate at the byte level.
  • Standard MIME type: WOFF2 ships with the IANA-registered MIME type font/woff2, so NGINX, Apache, and most CDNs serve the right Content-Type out of the box.
  • Preprocessed table directory: The directory entry for each table records both the original size and the transformed size, which lets the browser precompute decompression buffer sizes.
  • Optional metadata block: WOFF2 reserves an XML metadata block for license, vendor, and copyright information that font tools can read without decompressing the font.
  • Royalty-free W3C Recommendation: The format is a royalty-free W3C Recommendation maintained by the Web Fonts Working Group, with a Google reference implementation that ships in Chrome.

How do you use WOFF2 with @font-face?

You ship WOFF2 by converting the source font, hosting the .woff2 file on your origin or CDN, and pointing a CSS @font-face rule at it with the format("woff2") descriptor. The steps below cover the path most production sites follow.

  • Convert your font to WOFF2: Run fontTools (Python pip install fonttools brotli) or the Google woff2 reference compressor over your TTF or OTF file. Online converters like CloudConvert or Transfonter also work for one-off jobs.
  • Upload the .woff2 file to your origin or CDN: Drop the file in a /fonts directory on your web server or push it to your CDN. Keep the file path stable so long-cache headers work.
  • Set the MIME type to font/woff2: Confirm your server adds Content-Type: font/woff2 for .woff2 files. NGINX and Apache do this by default, but custom servers or older CDN configs may need a mime.types update.
  • Add the @font-face rule: Reference the file in a CSS @font-face block with the format("woff2") descriptor and the matching font-family name. Add a WOFF or TTF fallback only if you still serve Internet Explorer or pre-2015 mobile browsers.
  • Apply font-display: swap: Add font-display: swap inside the @font-face rule so the browser renders fallback text right away and swaps in the WOFF2 font once it loads, instead of leaving an invisible block of text.
  • Confirm in DevTools: Open the Network panel, filter by Font, and reload. The .woff2 request should return 200 with Content-Type: font/woff2 and a Cache-Control header that lets the browser reuse the file across pages.
/* Load a WOFF2 font with a WOFF fallback for legacy browsers. */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-regular.woff2") format("woff2"),
       url("/fonts/inter-regular.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

body {
  font-family: "Inter", system-ui, sans-serif;
}

If the font does not appear, check that the .woff2 file path returns 200 and that the Content-Type header is font/woff2. A 404 or a wrong MIME type silently disables the rule and the browser falls back to the next system font.

...

WOFF vs WOFF2: What is the difference?

WOFF and WOFF2 are both W3C web font wrappers that hold the same TrueType or OpenType payload, but they differ in compression, file size, and browser reach. The table below covers the differences that decide which one you ship.

DimensionWOFFWOFF2
Compression algorithmzlib (deflate)Brotli
File size vs raw TTF or OTFAbout 40% smallerAbout 50% smaller
File size vs WOFFn/aAbout 30% smaller
File extension.woff.woff2
MIME typefont/wofffont/woff2
Browser reachChrome 5+, Firefox 3.6+, Edge 12+, Safari 5.1+, Opera 11.1+, IE 9+Chrome 36+, Firefox 39+, Edge 14+, Safari 12+ on macOS, Safari 10+ on iOS, Opera 23+. No Internet Explorer support.
format() descriptorformat("woff")format("woff2")
Best fitFallback for Internet Explorer 9 to 11Primary format for every modern site

What are the known issues with WOFF2?

WOFF2 has the broadest browser reach of any modern web font format, but a small set of edge cases still trip up production rollouts. The most common ones land on legacy browsers, server config, and the heavier Brotli decompression cost.

  • Internet Explorer never supported it: IE 9, 10, and 11 cannot load WOFF2 in any build. Sites with IE traffic still need a WOFF entry inside the same @font-face rule, or the browser drops to the system font.
  • Older Safari rejects CFF outlines: Safari 10 and 11 on macOS Sierra and High Sierra accept WOFF2 only when the inner font is a TrueType outline. WOFF2 files that wrap a CFF (PostScript) outline silently fail in those Safari builds.
  • Wrong MIME type breaks caching: Some older CDN configs return application/octet-stream instead of font/woff2. The font usually still loads, but cross-origin caching and Service Worker rules treat it as a generic blob and skip the long-cache path.
  • Brotli decompression costs more CPU: Brotli is heavier than zlib, so very low-end Android phones spend a few extra milliseconds decoding each WOFF2 file at first paint. The bandwidth saving still wins on cellular networks but is small on a fast LAN.
  • CORS quirks on cross-origin fonts: Browsers require an Access-Control-Allow-Origin header on cross-origin font requests. A WOFF2 file served from a CDN without CORS headers loads in DevTools but fails the @font-face rule with a CORS error.
  • WOFF2 files do not double-compress: Serving WOFF2 with Content-Encoding: gzip or br on top of the existing Brotli stream wastes CPU and saves no bytes. Set your server to skip compression for .woff2 files.
  • Variable fonts inside WOFF2 need a recent decoder: Variable fonts work in Chrome 62+, Firefox 62+, Edge 17+, and Safari 11+. Older browsers that already handle plain WOFF2 may render only the default named instance and ignore the variation axes.

In my experience, the trickiest WOFF2 failure is a Safari 10 or 11 visitor seeing the system font on a page that renders correctly in Chrome and Firefox. The browser silently drops the @font-face rule because the inner outline is CFF, with no console warning. Always test the WOFF2 file with a TrueType outline if you still target older macOS users, and keep a WOFF fallback in the same src list as a safety net.

...

Citations

All WOFF2 version numbers, spec details, and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests