Font Converter

Fonts by Platform

Every platform handles fonts a little differently. This reference covers installation, format support, command-line tools, app development, and platform-specific gotchas for macOS, Windows, Linux, Android, iOS, Chromebook, and cross-platform projects.

TL;DR by platform

  • -macOS: Native: TTF, OTF, TTC, DFONT. Install via Font Book or ~/Library/Fonts.
  • -Windows: Native: TTF, OTF, TTC. Right-click → Install or drop into C:\Windows\Fonts.
  • -Linux: Drop into ~/.local/share/fonts then run fc-cache -fv. CLI tools: fontconfig, FontForge.
  • -Android: TTF/OTF in res/font/. Variable fonts on Android 8+. Downloadable Fonts on 8+.
  • -iOS: TTF/OTF in Xcode bundle, list in Info.plist UIAppFonts. SF Pro is the system font.
  • -Chromebook: No native installer. Web fonts work; install Linux fonts via Crostini.
  • -Cross-platform: TTF for native compatibility everywhere. WOFF2 for the web.

macOS

macOS has the cleanest desktop font management of any major OS. Font Book ships built-in, handles installation and validation, supports collections, and provides activation controls. macOS natively supports TTF, OTF, TTC (TrueType Collection), and the legacy DFONT format unique to Mac.

Install Locations

PathScopeNotes
~/Library/FontsCurrent user onlyDefault for Font Book installs
/Library/FontsAll usersRequires admin password
/System/Library/FontsmacOS built-inDon't modify; system-managed

Workflow

  • Quick install: Double-click the font file → Font Book opens → click "Install Font"
  • Bulk install: Drag font files into ~/Library/Fonts via Finder
  • Validate before installing: Font Book → File → Validate Fonts catches corrupted files and duplicates
  • Activate / deactivate: Right-click in Font Book to disable a font without removing it
  • Pro management: Suitcase Fusion or FontExplorer X for activation per-project, font sets, server sync

DFONT and Format Conversion

DFONT (Mac Data Fork Font) is the legacy format that ships with macOS system fonts. It uses TrueType outlines internally, essentially TTF data in a Mac-specific container. For cross-platform projects, convert DFONT to TTF using our DFONT to TTF converter. Conversion is lossless. macOS 10.15+ has been gradually moving toward standard TTF/OTF.

Common Issues

Font won't install: usually a corrupted file or duplicate font name conflict. Run Font Book → File → Validate Fonts. Font appears installed but doesn't show up: restart the app, or use atsutil databases -remove in Terminal to clear the font database cache.

Windows

Windows supports TTF, OTF, TTC (TrueType Collection), and the legacy FON format. Windows 10 and 11 also support variable fonts. The legacy EOT format Microsoft created for Internet Explorer is now obsolete, IE retired in 2022, and modern web work should use WOFF2.

Install Locations

PathScopeNotes
C:\Windows\FontsAll usersRequires admin; canonical install location
%LOCALAPPDATA%\Microsoft\Windows\FontsCurrent user (10/11)No admin needed; per-user install

Workflow

  • Right-click install: Right-click the font file → "Install" (current user) or "Install for all users" (admin)
  • Bulk install: Settings → Personalization → Fonts → drag font files into the page
  • Verify install: Settings → Fonts shows everything installed; preview any font by clicking
  • ClearType: Run cttune.exe to tune anti-aliasing for your monitor
  • Restart the application (or sometimes Windows itself) if fonts don't appear in Word/Photoshop after install

EOT and Format Conversion

EOT was Microsoft's proprietary web font format with DRM. It only ever worked in Internet Explorer, was rejected for W3C standardization in favor of WOFF, and is now obsolete with IE's retirement. Convert EOT files to WOFF2 for modern web use.

Common Issues

Font installed but not in apps: restart application or system. Adobe Creative Cloud and MS Office cache the font list and need full restart. Blurry rendering: enable ClearType, update graphics drivers, check monitor scaling (125%/150% can produce poor rendering on older fonts without proper hinting).

Linux

Linux uses the fontconfig system to manage fonts, with FreeType as the rasterizer. Most modern distributions (Ubuntu, Fedora, Arch) handle fonts identically, drop files into the right directory, run the cache update, done. Linux is also where most command-line font tooling lives (fonttools, FontForge, fc-cache, ttf2eot).

Install Locations

PathScopeNotes
~/.local/share/fontsCurrent user (modern)Preferred for personal fonts
~/.fontsCurrent user (legacy)Older convention; still works
/usr/share/fontsAll users (distro)Distro-managed; don't edit manually
/usr/local/share/fontsAll users (manual)Local admin installs go here

Workflow

# Install for current user
mkdir -p ~/.local/share/fonts
cp my-font.ttf ~/.local/share/fonts/

# Update font cache
fc-cache -fv

# List all installed fonts
fc-list

# Find a specific font family
fc-list : family style | grep -i inter

# Check if a font is available
fc-match "Inter Bold"

Command-Line Font Tools

  • FontForge: scriptable font editor for serious modification work, glyph edits, subsetting, format conversion
  • fonttools / pyftsubset: Python library and CLI for subsetting, instance generation from variable fonts, OpenType layout debugging
  • woff2_compress / woff2_decompress: reference implementation of WOFF2 compression for build pipelines
  • fc-cache, fc-list, fc-match: the fontconfig CLI for installation cache management and font discovery

GUI Options

Font Manager (gnome-font-viewer, GNOME Fonts) provides preview and installation through a GUI, similar to macOS Font Book. KDE has its own font management in System Settings. Both work fine for casual users; serious font work happens in the terminal.

Android

Android supports TTF and OTF for native apps. TTC requires Android 9+. Variable fonts work on Android 8+. WOFF and WOFF2 are only for WebView; native UI components don't accept them. The system font is Roboto, free, optimized for screen rendering, zero APK size impact.

Adding Custom Fonts to an App

Place font files in res/font/ within your Android Studio project. Reference them in XML or programmatically:

<!-- res/values/styles.xml -->
<TextView
    android:fontFamily="@font/inter_bold"
    android:text="Hello"/>

<!-- Or programmatically -->
val typeface = ResourcesCompat.getFont(this, R.font.inter_bold)
textView.typeface = typeface

// Compose
Text(
  text = "Hello",
  fontFamily = FontFamily(Font(R.font.inter_bold))
)

Downloadable Fonts

Android 8+ supports Downloadable Fonts via Google Play Services, fonts download on-demand from the Google Fonts catalogue, dramatically reducing APK size. Eliminates the need to bundle fonts in your APK at all for any of the 1,500+ Google Fonts.

Reducing APK Size

  • Subset aggressively: use our font subsetter with Latin-only for English-only apps; 70-90% size reduction
  • Limit weights: Regular, Medium, Bold cover 95% of UI cases. Light, Black, Italic variants double font footprint each
  • Variable fonts: a single Roboto Variable replaces 6+ static weight files
  • System fonts free: Roboto family via android:fontFamily="sans-serif" variants adds zero bytes

React Native

For React Native: drop TTF files in your project, configure react-native.config.js with a fonts asset path, and run npx react-native-asset (replaces the deprecated react-native link). Reference fonts by their PostScript name (which may differ from filename).

iOS

iOS supports TTF, OTF, and TTC. Variable fonts work on iOS 12+. The system font is SF Pro (San Francisco), beautifully designed, free, supports Dynamic Type for accessibility, and adds zero bytes to your app. For most apps, system fonts are the right answer.

Adding Custom Fonts to an App

  1. Drag font files (.ttf or .otf) into your Xcode project
  2. Ensure the font is added to your target's Copy Bundle Resources in Build Phases
  3. Open Info.plist and add the font filenames under UIAppFonts
  4. Reference the font by its PostScript name (often differs from the filename)
// Swift / UIKit
let label = UILabel()
label.font = UIFont(name: "Inter-Bold", size: 16)

// SwiftUI
Text("Hello")
    .font(.custom("Inter-Bold", size: 16))

// Debug, list available font family names
for family in UIFont.familyNames {
    print(family)
    for name in UIFont.fontNames(forFamilyName: family) {
        print("  \(name)")
    }
}

Common Issues

Font not appearing: most common cause is using filename instead of PostScript name. Run the debug snippet above. Second most common: not added to Copy Bundle Resources. Third: missing from UIAppFonts in Info.plist.

App Store Licensing

Apple's App Review occasionally rejects apps with improperly licensed fonts. Document your licenses, store proof of purchase, and have it ready if questioned. Open-source fonts (OFL, Apache 2.0) are unambiguously safe, see our open source font licenses guide.

Reducing App Size

  • SF Pro for any system-feeling UI, free and supports Dynamic Type natively
  • Subset aggressively for English-only apps
  • Variable fonts to replace 6-12 static weights
  • Custom fonts need manual Dynamic Type support, use UIFontMetrics.default.scaledFont(for:)

Chromebook

Chrome OS is the most font-restricted of the major platforms. There's no built-in system font installer, you can't just drop a TTF file somewhere and have apps pick it up. Chrome OS ships with a sensible default set (Roboto, Noto Sans/Serif covering most languages, monospace fonts), and uses font substitution for common "web-safe" fonts (Arial, Times New Roman, Verdana).

Web Fonts

Web fonts work normally on Chromebooks, Chrome browser renders WOFF2, WOFF, TTF, and OTF via @font-face identically to any other platform. Google Fonts work without any special setup. For web development, Chromebook is functionally identical to any other Chrome environment.

Custom Fonts via Linux (Crostini)

If you have Linux (Crostini) enabled on your Chromebook, you can install fonts inside the Linux container, same workflow as standard Linux. These fonts are available in Linux applications running through Crostini (LibreOffice, GIMP, Inkscape, command-line tools) but are not exposed to Chrome OS itself or to Android apps running on the Chromebook.

# In Crostini terminal
mkdir -p ~/.local/share/fonts
cp my-font.ttf ~/.local/share/fonts/
fc-cache -fv

# Now usable in Linux apps only

Google Docs and Workspace

Google Docs has its own font picker via the "More fonts" option, which exposes hundreds of Google Fonts directly. You cannot add custom fonts outside the Google Fonts library to Google Docs on Chromebook, this is the cleanest workflow for typography work on Chrome OS without dropping into Linux.

Cross-Platform Projects

When the same fonts need to render consistently across macOS, Windows, Linux, iOS, Android, and the web, the answer is rarely "one format for everything." Each platform has its own optimal format and rendering pipeline.

Format Choice by Context

ContextRecommended FormatWhy
Web (modern)WOFF297%+ browser support, best compression
Mobile apps (iOS / Android)TTFNative support on both platforms
Desktop apps (Win / Mac / Linux)OTF or TTFOTF for advanced typography; TTF for compatibility
Print / publishingOTFFull OpenType features, ligatures, small caps
Game enginesTTF (engine converts to SDF)Unity/Unreal generate atlases at build time

Cross-Platform Rendering Differences

Even with identical fonts, rendering varies between platforms because each uses a different rasterizer:

  • macOS Core Text: generally bolder appearance, smooth anti-aliasing, accurate to designer intent
  • Windows DirectWrite: ClearType subpixel rendering, sharper but historically more aggressive sub-pixel positioning
  • Linux FreeType: historically the "most accurate" outline rendering, depends on hinting strategy configured
  • Android: Roboto-tuned subpixel rendering, optimized for mid-DPI mobile displays
  • iOS: Core Text variant, optimized for high-DPI Retina displays

These differences mean a font that looks great on Mac may appear thin on Windows or over-aliased on Linux. Always test on actual devices before locking brand fonts into a multi-platform product.

CSS System Font Stacks

For native-feeling cross-platform typography on the web, system font stacks let each OS render in its own native UI font:

/* Modern system UI font stack */
font-family:
  -apple-system,           /* iOS / macOS Safari */
  BlinkMacSystemFont,      /* macOS Chrome */
  "Segoe UI",              /* Windows */
  Roboto,                  /* Android */
  Oxygen-Sans,             /* KDE Linux */
  Ubuntu,                  /* Ubuntu */
  Cantarell,               /* GNOME */
  "Helvetica Neue",        /* macOS legacy */
  sans-serif;              /* fallback */

/* Or just use system-ui (modern browsers) */
font-family: system-ui, sans-serif;

Universal Format Compatibility

TTF is the most universally compatible format. It works natively on Windows, macOS, Linux, iOS, Android, ChromeOS (via Linux), and most legacy systems. OTF works almost as well, with slightly newer support requirements on some older systems. For web specifically, WOFF2 is the standard. There's no font format that's optimal everywhere, choose the right one per context.

No Font is Truly Universal

Even "web-safe" fonts like Arial, Georgia, and Verdana are not truly universal. They exist on most systems but with slight version differences and metrics variations. For guaranteed visual consistency across platforms, embed your fonts (apps), self-host your fonts (web), or use system stacks (when native-feeling typography is acceptable).

Convert Fonts for Any Platform

Browser-based, no installation. Works on every OS. Output ready for web, mobile, or desktop, TTF, OTF, WOFF2, and more, all in one tool.

Start Converting Now
Sarah Mitchell

Written & Verified by

Sarah Mitchell

Typography expert specializing in font design, web typography, and accessibility

Fonts by Platform FAQs

Common questions across macOS, Windows, Linux, Android, iOS, Chromebook, and cross-platform projects