Font Converter

Web Open Font Format (WOFF2) 2.0

Modern, high-compression webfont container built for fast, efficient font delivery

TL;DR

In Simple Terms

WOFF2 is the modern web font standard—use it for all web projects. 97%+ browser support, smallest file size (30% smaller than WOFF, 60-70% smaller than TTF).Uses Brotli compression for superior compression ratios. Self-hosting WOFF2 is faster than Google Fonts CDN in most cases.Implementation: @font-face with src: url('font.woff2') format('woff2'). Add WOFF fallback only if supporting pre-2014 browsers.

Share this page to:

WOFF2 Format at a Glance

Developer

W3C WebFonts Working Group with major contributions from browser vendors

Type

Brotli-compressed web wrapper for sfnt fonts (TrueType or OpenType)

File Extension

.woff2

Platform Support

All modern browsers; primary format for web typography

MIME Type

font/woff2, application/font-woff2

Primary Use

Fast self-hosted and CDN-served fonts, variable fonts, multilingual web UIs

What is Web Open Font Format 2.0 (WOFF2)?

WOFF2 is the modern successor to WOFF 1.0. It packages an existing OpenType or TrueType font inside a web-optimized container and applies advanced compression to reduce transfer size. The underlying font remains an sfnt-based font; WOFF2 changes delivery efficiency, not typographic capability.

The main improvements over WOFF 1.0:

  • Brotli compression instead of zlib
  • Optional table transformations that compress outline data more effectively
  • Better performance for large Unicode fonts and variable families
  • Reduced bandwidth cost for web applications and design systems

Format History

WOFF2 is the second-generation Web Open Font Format designed to reduce the real-world cost of typography on the modern web. It was created to keep the OpenType/TrueType ecosystem intact while dramatically improving network efficiency for large families, multilingual UI fonts, and the rising use of variable fonts.

Before WOFF: The Early Web Font Problem

In the early era of web typography, authors either depended on system fonts or served raw TTF/OTF files. That approach had predictable problems: large downloads, inconsistent metadata handling, and weak alignment with browser security and licensing expectations.

  • Raw TTF/OTF delivery was bulky and not purpose-built for the browser
  • Font licensing models were uneasy about uncontrolled distribution
  • Performance penalties increased sharply as designers adopted multi-weight families
  • Global products needed large Unicode coverage, multiplying payload size

WOFF 1.0: The First Web Standardization

WOFF 1.0 stabilized the situation by defining a browser-oriented wrapper around sfnt fonts. It offered a standard header and directory model, optional metadata blocks, and compression with widely supported tooling. This gave the industry a shared, reliable baseline for distributing fonts on the web.

What WOFF 1.0 Solved

  • Interoperability: a consistent container across browser engines
  • Packaging: clearer separation of font data and optional metadata
  • Practical compression: smaller than raw TTF/OTF for most families

The Pressure That Exposed WOFF 1.0 Limits

As web applications became heavier and more global, WOFF 1.0 began to show its ceiling. The shift to mobile-first products, larger UI typography systems, and multi-script design pushed zlib-based compression to a point where meaningful gains required a new strategy.

  • Large Unicode fonts for global products significantly increased transfer size
  • Design systems normalized multiple weights and styles as default baselines
  • Performance budgets tightened due to mobile networks and low-power devices
  • Early variable font adoption highlighted the need for better compression efficiency

The WOFF2 Approach

WOFF2 was built as an evolution, not a replacement of the underlying font model. The crucial change is the combination of Brotli compression with table transforms applied to known OpenType/TrueType structures before compression. Instead of compressing tables as-is, WOFF2 can normalize and reorganize outline and metric data to create more redundancy, which Brotli exploits effectively.

Design Goals

  • Reduce transfer size without altering glyph fidelity
  • Preserve full OpenType feature behavior
  • Improve outcomes for large families and complex scripts
  • Maintain the same authoring sources (TTF/OTF)

Practical Results

  • Better compression ratios than WOFF 1.0 in most real stacks
  • Stronger savings for TrueType outline-heavy fonts
  • More efficient delivery of variable fonts
  • Lower bandwidth cost for high-traffic products

Milestones and Adoption Arc

The WOFF2 specification matured through the mid-2010s alongside improvements in browser font pipelines. Once modern engines aligned on Brotli support and transform handling, WOFF2 became the default target in production webfont workflows.

PhaseIndustry ContextWOFF2 Role
Pre-WOFF baselineRaw TTF/OTF, inconsistent delivery patternsNo standardized browser-first container
WOFF 1.0 stabilizationWeb typography becomes mainstreamReliable packaging with modest compression
WOFF2 emergenceMobile performance budgets tighten; global UIs expandHigher compression via Brotli + transforms
WOFF2 default eraVariable fonts and large design systems normalizePrimary delivery format; WOFF becomes fallback

What WOFF2 Did Not Change

WOFF2 does not redefine typography. It does not create new shaping rules, new OpenType features, or new layout behavior. It is a transport and packaging improvement layered on top of the same sfnt model used by OpenType and TrueType sources.

  • Ligatures, alternates, kerning, and complex scripts behave the same as in the source font
  • Color and variable tables remain intact
  • Authoring and licensing still originate from the OTF/TTF masters

Historical Summary

WOFF2 marks the point where web typography scaled to modern performance realities. It kept the industry’s investment in OpenType/TrueType intact while making rich, global, and variable typography viable under strict network and UX constraints.

Lessons from WOFF2's Evolution

  • Web standards follow performance pressure: the format exists because the network cost became a product-level bottleneck
  • Backward-compatible evolution wins: WOFF2 improved delivery without fragmenting the font ecosystem
  • Compression alone isn't enough: domain-aware transforms enabled the real leap forward

In practical terms, WOFF2 is now the default endpoint for browser delivery. WOFF remains relevant as a compatibility fallback, while OTF/TTF remain the authoritative sources for design, licensing, and authoring.

Technical Specifications

Core Properties

  • Internal format: TrueType or OpenType sfnt
  • Compression: Brotli over a transformed font data stream
  • Feature preservation: GSUB/GPOS and all OpenType tables remain available
  • Metadata: Optional blocks for descriptive and private data
  • Goal: Smaller files and faster downloads with no loss of rendering data

Why WOFF2 Is Smaller

WOFF2 compresses more aggressively by reorganizing certain table data before compression. This is especially effective for TrueType outline tables and large glyph sets.

Practical Impact

  • Better first-load performance for design-heavy sites
  • Smaller variable font packages compared to multi-file static families
  • Reduced cost for high-traffic sites serving many language subsets

WOFF2 File Structure

WOFF2 keeps a compact header and directory concept similar to WOFF 1.0, but the font data is stored as a single compressed stream with optional transforms applied to specific known tables.

ComponentPurpose
WOFF2 headerIdentifies the container and declares sizes, counts, and block offsets
Table directoryLists tables and indicates whether a transform is used
Compressed font data streamBrotli-compressed stream containing the font tables, potentially in transformed form
Metadata / private blocks (optional)Human-readable or vendor-specific information

After decompression and reverse-transform steps, the browser reconstructs an in-memory sfnt font equivalent to the original TTF or OTF source.

Compression and Table Transforms

WOFF2 improves compression by applying optional transforms to known table types before Brotli compression. These transforms normalize and reorder data to improve redundancy.

Common Transform Targets

  • glyf/loca: TrueType outlines re-encoded for better compression
  • hmtx: Horizontal metrics optimization
  • other known tables: Normalized encoding improves cross-glyph pattern matching

Mental Model

  1. Start with a standard sfnt font
  2. Apply WOFF2 transforms where applicable
  3. Compress the transformed stream with Brotli
  4. Browser reverses transforms and reconstructs the sfnt font

Typography Features and CSS Integration

WOFF2 preserves all typographic features from the source font. Ligatures, alternates, kerning, complex scripts, color tables, and variable axes work the same way as with the original OpenType or TrueType font.

Recommended @font-face Stack

@font-face {
  font-family: 'BrandSans';
  src: url('/fonts/BrandSans.woff2') format('woff2'),
       url('/fonts/BrandSans.woff') format('woff');
  font-weight: 100 900; /* supports variable axis if present */
  font-style: normal;
  font-display: swap;
}

:root {
  font-family: 'BrandSans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}

OpenType Feature Control

/* Works identically for WOFF2-served fonts */
.body-text {
  font-feature-settings: 'liga' 1, 'kern' 1, 'calt' 1;
}

.small-caps {
  font-variant-caps: small-caps;
}

.numerals {
  font-variant-numeric: oldstyle-nums tabular-nums;
}

If the font is variable, axis control uses the same CSS syntax as any other OpenType variable font.

Usage and Applications

Primary Webfont Format

  • Default choice for modern websites and web apps
  • Best format for variable fonts on the web
  • Efficient for large multilingual UI fonts
  • Ideal for self-hosting with long-term caching

Performance Patterns

  • Serve WOFF2 first, WOFF second
  • Subset by script or product area
  • Use unicode-range for selective loading
  • Preload critical UI fonts

unicode-range Example

@font-face {
  font-family: 'GlobalUI';
  src: url('/fonts/GlobalUI-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC;
  font-display: swap;
}

@font-face {
  font-family: 'GlobalUI';
  src: url('/fonts/GlobalUI-devanagari.woff2') format('woff2');
  unicode-range: U+0900-097F, U+1CD0-1CFF;
  font-display: swap;
}

Advantages and Disadvantages

Advantages

  • Best compression: Smaller than WOFF, TTF, and OTF for web transport
  • Feature complete: Preserves full OpenType layout and color capabilities
  • Ideal for variable fonts: One file can replace many static weights
  • Strong browser support: Modern baseline across engines
  • Better UX: Faster font loading reduces layout shifts and slow text rendering

Disadvantages

  • Web-only: Not used as an installable desktop font
  • Build step required: Must be generated from a licensed source font
  • Fallback planning: WOFF may still be needed for older browsers
  • License constraints: Conversion and self-hosting depend on font licensing

Deployment Rule

Use WOFF2 as the primary webfont target. Generate WOFF from the same source only when an explicit legacy browser requirement exists.

WOFF2 vs Other Font Formats

FormatCompressionRoleBest Use
WOFF2Brotli + transformsModern web delivery standardPrimary format for all new web projects
WOFFzlibLegacy web fallbackSecondary source in @font-face stacks
TTFNoneDesktop/source formatInstallation and authoring masters
OTFNoneDesktop/source formatProfessional print and feature-rich families
EOTLegacyIE-only webfontHistorical support scenarios
SVG FontsXML-basedObsolete legacy web formatAvoid for modern stacks

WOFF2 is the correct endpoint for web delivery. OTF/TTF remain the correct sources for authoring and distribution outside the browser.

Working with WOFF2 Files

Generating WOFF2

WOFF2 files are generated from OpenType or TrueType sources. Common CLI flows:

# Basic WOFF2 generation
woff2_compress MyFont.ttf
woff2_compress MyFont.otf

# Generate a WOFF fallback from the same source (tool-specific)
sfnt2woff MyFont.ttf

# Subset directly to WOFF2
pyftsubset MyFont.ttf \
  --flavor=woff2 \
  --layout-features+=liga,kern,calt \
  --unicodes="U+0000-00FF" \
  --output-file="MyFont-latin.woff2"

Deployment Checklist

  • Confirm webfont rights in the license
  • Convert from a clean, up-to-date OTF/TTF master
  • Subset per script and product needs
  • Serve WOFF2 with a WOFF fallback when required
  • Set long cache headers and versioned file names
  • Use preload for critical UI fonts

For GUI workflows, use Font Converter Tool and a subsetting utility to produce paired WOFF2/WOFF bundles from a single source.

Frequently Asked Questions

Is WOFF2 universally supported?

WOFF2 is supported across all modern browsers. WOFF 1.0 remains the practical fallback for older engines if legacy support is required.

Does WOFF2 change font quality or features?

WOFF2 is a container and compression method. It preserves the same outlines, metrics, and OpenType tables as the source font.

Can I install WOFF2 fonts on my computer?

WOFF2 is not intended as an installable OS font. Convert to TTF or OTF for system installation, subject to licensing.

Do variable fonts work better with WOFF2?

Variable fonts work the same at the feature level, but WOFF2 typically delivers them with significantly smaller transfer size.

Should I ship only WOFF2?

Use WOFF2 as primary. Add WOFF only if the support matrix includes older browsers that lack WOFF2.

Ready to Work with WOFF2 Fonts?

Convert any font format to WOFF2 with our free online converter

Related Resources

Related Font Formats

Sarah Mitchell

Written & Verified by

Sarah Mitchell

Product Designer, Font Specialist