Font Converter

Font Embedding Bits: fsType Explained

Understand the fsType field in the OS/2 table, what embedding permissions mean, and how they relate to actual font licensing.

Key Takeaways

  • • fsType is a metadata flag, not DRM—it doesn't technically prevent anything
  • • Web browsers ignore fsType entirely when loading web fonts
  • • Always check the actual license, not just fsType
  • • 0x0000 (Installable) is the least restrictive value

The fsType field is a 16-bit value in the OS/2 table that indicates the font's embedding permissions. It was designed to help software determine what operations are allowed with a font—embedding in documents, installing on systems, or editing. However, understanding what fsType actually does (and doesn't do) is essential for proper font usage.

Critically: fsType is metadata, not protection. It's a flag that communicates the license terms, but it doesn't enforce them. Software may choose to honor fsType restrictions, but nothing technically prevents ignoring them. The real authority is always the font's license agreement.

fsType Permission Levels

ValueNameMeaning
0x0000Installable EmbeddingNo restrictions. Font may be embedded and installed.
0x0002Restricted LicenseFont may NOT be embedded or installed. Most restrictive.
0x0004Preview & PrintFont may be embedded for viewing/printing only, not editing.
0x0008Editable EmbeddingFont may be embedded and document may be edited.

Additional Bit Flags

0x0100

No Subsetting

Font must be embedded complete, not subsetted

0x0200

Bitmap Embedding Only

Only bitmap versions may be embedded, not outlines

Important Note

A value of 0 means "Installable Embedding"—the least restrictive option. This is different from many bit fields where 0 means "nothing set." The value 0x0002 (Restricted) is the most restrictive, not the default.

How Software Interprets fsType

The behavior of compliant software when it encounters each fsType value varies significantly. Desktop publishing applications like Adobe InDesign and Microsoft Word were designed to honor fsType—they check it before allowing font embedding in PDFs or documents. However, implementation quality has been inconsistent, and many applications have bugs or ignore fsType entirely.

fsType ValueCompliant PDF BehaviorWeb Browser Behavior
0x0000Embeds font; allows subsettingIgnored — font loads normally
0x0002Refuses to embed; may warn userIgnored — font loads normally
0x0004Embeds as read-only in PDFIgnored — font loads normally
0x0008Embeds; document remains editableIgnored — font loads normally

The consistent pattern: web browsers ignore fsType completely. The OpenType specification explicitly notes that fsType is not a technical protection mechanism. When Google Fonts and other web font services distribute fonts, they typically set fsType to 0x0000 (Installable) regardless of the original foundry's setting, since legal web embedding rights are granted by the service license, not by the bit field.

The gap between fsType's intent and its actual enforcement reflects the broader challenge of digital rights management for fonts. In the early 2000s, major desktop publishing applications—Adobe InDesign, QuarkXPress, and Microsoft Word—did honor fsType restrictions, checking the bit before embedding fonts in exported PDFs or documents. This created a practical compliance layer for the era's primary use case: document embedding. Web browsers, however, were never designed as DRM enforcement tools. The web's open architecture treats font files as stylistic resources loaded over HTTP, and implementing fsType enforcement would break legitimate usage patterns while being trivially circumvented by anyone motivated to do so.

Open-source fonts released under licenses like the SIL Open Font License or Apache 2.0 uniformly set fsType to 0x0000, correctly reflecting their permissive license terms in the bit field. Proprietary commercial fonts may set any value, but the bit does not reliably predict web licensing availability. A font with fsType 0x0004 (Preview and Print) from a major foundry may have a separate web font license available for purchase; a font with fsType 0x0000 from an obscure source may still restrict web use through its EULA. Foundries that operate web font services—like Adobe Fonts and Fontspring—typically modify fsType to 0x0000 in their hosted versions, since those versions are contractually covered by the subscription license regardless of the original bits.

fsType and Web Fonts

Web browsers completely ignore fsType when loading web fonts via @font-face. There is no technical barrier—a font with fsType 0x0002 (Restricted) will load and render in browsers just like any other font.

What fsType Doesn't Do

  • • Doesn't prevent font file download
  • • Doesn't encrypt font data
  • • Doesn't stop browser rendering
  • • Doesn't enforce any license terms

What fsType Does

  • • Communicates intended usage rights
  • • Guides compliant software behavior
  • • Documents the foundry's intentions
  • • Helps with license compliance audits

Legal Reality

Using a font with fsType 0x0002 as a web font likely violates its license agreement, even though it works technically. The license—not fsType—determines legal usage. Some foundries set restrictive fsType as a signal, others don't set it at all even for licensed fonts. Always verify web embedding rights in the license.

WOFF and WOFF2: No Change to fsType

Converting a font to WOFF or WOFF2 format does not alter the fsType value. The OS/2 table (which contains fsType) is preserved byte-for-byte in the compressed web font. This means a font with fsType 0x0002 (Restricted) converted to WOFF2 still carries the 0x0002 flag in its OS/2 table.

Some font conversion tools offer an option to modify fsType during conversion. This is technically straightforward—change the two-byte field in the OS/2 table and recalculate the checksum—but doing so without the foundry's permission may violate the font license regardless of any technical restriction. The legal authority to embed a font comes from the license agreement, not from the fsType value.

Permissible

  • • Foundry sets fsType 0 when distributing a web license
  • • Open source fonts typically set 0x0000
  • • Google Fonts, Adobe Fonts normalize to 0x0000

Problematic

  • • Manually changing fsType to 0 on a restricted font
  • • Using a converter that strips fsType protections
  • • Assuming fsType 0 means the license permits web use

How to Check fsType

# Using fontTools (Python)
from fontTools.ttLib import TTFont
font = TTFont('myfont.ttf')
print(f"fsType: {font['OS/2'].fsType}")

# Using ttx to dump OS/2 table
ttx -t OS/2 myfont.ttf
# Then check the generated .ttx file for fsType

# Online tools
- Wakamai Fondue (wakamaifondue.com)
- FontDrop (fontdrop.info)
- Font Squirrel's Font Analyzer

# FontForge
Element → Font Info → OS/2 → Misc → fsType

Interpreting the Value

fsType is a bit field, so values can combine. Common values:

0x0000

Installable (no restrictions)

0x0002

Restricted license

0x0004

Preview & Print only

0x0008

Editable embedding

0x0104

Preview/Print + No subsetting

0x0208

Editable + Bitmap only

Decoding Combined Bit Values

Because fsType is a bit field, values combine by OR-ing individual bits. To decode a combined value, check each bit position independently:

# Python: decode any fsType value
def decode_fstype(value):
    results = []

    # Embedding type (bits 0-3)
    embed_bits = value & 0x000F
    if embed_bits == 0x0000:
        results.append("Installable Embedding (no restrictions)")
    elif embed_bits & 0x0002:
        results.append("Restricted License Embedding")
    elif embed_bits & 0x0004:
        results.append("Preview & Print Embedding")
    elif embed_bits & 0x0008:
        results.append("Editable Embedding")

    # Additional restrictions (bits 8-9)
    if value & 0x0100:
        results.append("No Subsetting Allowed")
    if value & 0x0200:
        results.append("Bitmap Embedding Only")

    return results

# Examples:
decode_fstype(0x0000)  # ['Installable Embedding (no restrictions)']
decode_fstype(0x0104)  # ['Preview & Print Embedding', 'No Subsetting Allowed']
decode_fstype(0x020A)  # ['Editable Embedding', 'Bitmap Embedding Only']

The 0x000F mask isolates the embedding type bits. After masking, check bits 1 (0x0002), 2 (0x0004), and 3 (0x0008). Bit 0 is reserved and should be 0 in all valid fonts.

Building font delivery infrastructure benefits from programmatic fsType auditing. The fontTools Python library provides direct access to the OS/2 table: TTFont('font.ttf')['OS/2'].fsType returns the integer value, which you can then decode using the bit masks above. Automated pipelines can flag fonts with fsType 0x0002 (Restricted) before they enter a web delivery system, prompting a license review before deployment. Open-source font collections like Google Fonts have performed this audit at scale, normalizing fsType to 0x0000 for all hosted fonts to reflect the permissive web license granted by the service, regardless of what the original binary contained.

The interaction between fsType and font subsetting deserves separate attention. The No Subsetting bit (0x0100) signals that the font must be embedded complete, without removing any glyphs. In a web font context where subsetting is a standard and significant optimization—reducing file sizes by 80–95% for Latin-only deployments—this bit creates a practical conflict. A font with 0x0100 combined with any embedding permission bit technically permits embedding but prohibits the character-set reduction that makes web delivery practical. In practice, web font licenses negotiated directly with foundries typically address subsetting rights explicitly in their terms, making the bit-level restriction secondary to contractual permission. When licensing fonts for web use, verifying subsetting rights in the actual license agreement is more reliable than reading the fsType bit.

Convert Licensed Fonts Safely

Always verify your font license permits web embedding before conversion.

Try Font Converter
Sarah Mitchell

Written by

Sarah Mitchell

Product Designer, Font Specialist

Marcus Rodriguez

Verified by

Marcus Rodriguez

Lead Developer

Font Embedding Bits FAQs

Common questions about fsType and embedding permissions