Font Migration: How to Move Fonts Between Computers and Operating Systems
One guide for moving a font library to a new machine or a different platform, covering what survives the crossing between macOS and Windows, then the exact procedure on each system
In Simple Terms
TTF and OTF files move between macOS and Windows unchanged. Apple-only containers (DFONT, TTC) and discontinued Type 1 files (.pfb/.pfm) need converting first, and a font that looked right on a Mac can look blurry on Windows because Windows leans on TrueType hinting that macOS ignores.On macOS the working set is ~/Library/Fonts plus ~/Library/FontCollections. Back both up, move them with Migration Assistant or a manual copy, then clear the cache with sudo atsutil databases -remove and restart.On Windows the working set is C:\Windows\Fonts plus %LOCALAPPDATA%\Microsoft\Windows\Fonts, and every font needs a matching registry entry to appear in applications. Inventory with PowerShell first, and restart the Font Cache Service afterwards.A per-seat font license does not automatically follow you to a second machine or a second operating system. Check the license before you copy anything.
In this article
Font migration is the job of moving an installed font library from one machine to another, or from one operating system to another, without losing files, organization, or the ability to open old work. It sounds like copying a folder. It usually is not, because operating systems keep fonts in several places at once, register them in system databases that a plain copy does not touch, and cache them aggressively enough that a correctly copied font can still fail to appear in your applications.
There are three common versions of this task. Moving to a new machine on the same platform, which is mostly a transfer-and-verify exercise. Moving between macOS and Windows, which adds format and rendering questions on top. And moving a desktop library into web use, which is really a conversion and licensing exercise rather than a migration. This guide covers the first two in full and points you at the right tools for the third.
Start with the cross-platform section below if you are changing operating system, since it determines which files are even worth carrying over. Then jump to the macOS procedure or the Windows procedure for the platform you are landing on. If both machines run the same system, you can go straight to that platform's section.
Moving Fonts Between Operating Systems
Font files themselves are largely portable. What is not portable is the container format some fonts ship in, the way each system renders outlines, and the licence that permits the installation. Work through those three before you copy anything.
Which Formats Survive the Crossing
| Format | macOS | Windows | What to do |
|---|---|---|---|
| TTF | Yes | Yes | Copy as is |
| OTF | Yes | Yes | Copy as is |
| TTC (collection) | Yes | Partial | Extract individual faces to TTF for reliability |
| DFONT | Yes (legacy) | No | Convert to TTF before moving to Windows |
| Type 1 (.pfb / .pfm) | Dropped in Sonoma | Dropped in Windows 10 | Convert to OTF, both platforms ended support in 2023 |
| WOFF / WOFF2 | Web only | Web only | Not installable, keep alongside the desktop originals |
Anything in the bottom half of that table needs converting before it will install on the other side. Our online font converter handles the common cases in the browser, and the Type 1 migration section of the legacy formats guide covers the PostScript families in detail, including what happens to kerning data on the way out.
Why the Same Font Looks Different After the Move
The two systems render outlines differently, and the difference is not a bug on either side. Windows uses DirectWrite and ClearType, which lean on the TrueType hinting instructions inside a font to snap stems onto the pixel grid. macOS uses Core Text, which renders the outline more or less faithfully and largely ignores hinting. The practical consequences run in both directions.
Mac to Windows
Fonts that were never hinted look fine on the Mac they came from and can look blurry or uneven on Windows at body sizes. If the font is destined for a website, run it through ttfautohint before converting. See the Windows section for the settings.
Windows to Mac
Heavily hinted fonts usually render slightly heavier on Windows than they will on macOS, so text that was tuned to fill a layout can come up short. Re-check line lengths in long documents rather than assuming the layout is identical.
Either direction
System fonts are not portable. San Francisco on macOS and Segoe UI on Windows are licensed for use on their own platform, so a document that relied on one will substitute on the other. Replace those with a font you have licensed for both.
Check the licence before you copy
Many desktop licences are sold per seat, and a seat usually means a machine or a named user rather than a person's whole hardware collection. Migrating to a new machine while keeping the old one active can quietly put you over the count, and installing on a second operating system is sometimes a separate grant again. Read the font licence types reference or run the files through the font license checker before a bulk copy.
Planning Any Font Migration
The same five steps apply whichever direction you are moving. The platform sections below give the specific commands for each one.
Inventory what is installed
Count the fonts, note where they live, and flag anything in a format the destination cannot read. A migration is the cheapest moment you will ever get to delete fonts you have not used in five years.
Back up before you touch anything
Copy the font folders and the organization data (Font Book collections on macOS, the registry export on Windows) to external storage. Verify the file count in the backup matches the source.
Validate the files
Corrupt fonts are the most common cause of a migration that half works. Validate before the move so you are not debugging a new machine and a broken file at the same time.
Convert what needs converting
Handle DFONT, TTC, and Type 1 files at this point, while you still have a system that can read them. Keep the originals.
Transfer, register, and clear the cache
Copying files into place is not installation on either platform. Both systems keep a font database that has to pick up the change, and both cache aggressively enough that a restart is usually part of the process.
Budget the time honestly
A library of a few hundred fonts, done properly, takes 30 to 90 minutes including validation and cache rebuilds. Done carelessly it takes days, because duplicate and corrupt fonts surface one design file at a time over the following weeks.
Migrating Fonts on macOS
macOS keeps fonts in four places, and only two of them are yours to move. Getting this distinction right is the difference between a clean migration and a Mac that boots to placeholder boxes in the menu bar.
Where macOS Stores Fonts
~/Library/Fonts
Personal fonts for the current user, no admin rights needed. This is the primary folder to migrate and where most purchased and downloaded fonts end up.
/Library/Fonts
Fonts available to every user on the machine. Requires administrator rights. Migrate it if you deliberately installed shared fonts there, for example on a studio workstation.
/System/Library/Fonts
Protected system fonts, guarded by System Integrity Protection. Never copy, move, or delete these. macOS restores them on reinstall and nothing you need is stored only here.
~/Library/Application Support/Adobe/Fonts
Adobe Fonts synced through Creative Cloud. Do not migrate these. Sign in to Creative Cloud on the new Mac and they re-download automatically.
~/Library/FontCollections
Not fonts, but the Font Book database of collections, favourites, and enabled or disabled states. Migrate it alongside the fonts or you will rebuild your organization by hand.
Inventory and Back Up
# Count and list what is installed for this user
find ~/Library/Fonts -type f \( -name "*.ttf" -o -name "*.otf" -o -name "*.ttc" \) | wc -l
du -sh ~/Library/Fonts
# Flag anything that will not survive a move to Windows
find ~/Library/Fonts -type f \( -name "*.dfont" -o -name "*.pfb" -o -name "*.ttc" \)
# Back up fonts and Font Book organization together
BACKUP_DIR=~/Desktop/Font_Backup_$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR"
cp -R ~/Library/Fonts "$BACKUP_DIR/User_Fonts"
cp -R ~/Library/FontCollections "$BACKUP_DIR/FontCollections"
cp ~/Library/Preferences/com.apple.FontBook.plist "$BACKUP_DIR/"Before transferring, open Font Book, select all fonts with Cmd+A, and run File then Validate Fonts. Fix or remove anything reported under Serious Problems. Minor problems are usually safe to carry across. Migrating a corrupt font simply moves the problem to a machine where it is harder to diagnose.
Choose a Transfer Method
Migration Assistant, for a whole new Mac
Applications, then Utilities, then Migration Assistant. Choose "From a Mac, Time Machine backup, or startup disk" and connect the old machine. Fonts, collections, and activation states all come across without manual work. The trade-off is that it moves everything else too and takes 30 minutes to 3 hours.
Best when the new Mac is genuinely replacing the old one and you want the whole environment.
Manual copy, for control
# On the old Mac
cp -R ~/Library/Fonts /Volumes/ExternalDrive/Font_Migration/
cp -R ~/Library/FontCollections /Volumes/ExternalDrive/Font_Migration/
# On the new Mac, with Font Book and design apps closed
cp -R /Volumes/ExternalDrive/Font_Migration/Fonts/* ~/Library/Fonts/
cp -R /Volumes/ExternalDrive/Font_Migration/FontCollections/* ~/Library/FontCollections/
# Rebuild the font database, then restart
sudo atsutil databases -removeKeep the -R flag so permissions survive the copy, and test with a small batch before moving several thousand files. Never copy anything out of /System/Library/Fonts.
Font Book export, for a subset
Select the fonts or collections you want, then File and Export Fonts. On the new Mac use File and Add Fonts, then choose whether to install for the user or the whole computer. This is the right method when you are deliberately leaving most of the library behind, but it does not carry collections across, so you rebuild those by hand.
Clean Up in Font Book
Once the files are in place, open Font Book and do three things. Run Edit then Look for Duplicates, and resolve them, preferring the copy in ~/Library/Fonts over older versions elsewhere. Re-run File then Validate Fonts on the new machine, since a transfer can truncate files. Then disable fonts you do not need: application launch times and font menus both suffer past roughly 200 active families, and disabled fonts stay installed and can be re-enabled at any time.
Troubleshooting on macOS
Fonts do not appear after the copy
Clear the font database and restart. Run sudo atsutil databases -remove, then sudo atsutil server -shutdown and sudo atsutil server -ping, then reboot. If they are still missing, check ownership with ls -la ~/Library/Fonts, which should show your username, and check Font Book in case they arrived disabled.
Fonts missing in Adobe or Office apps only
Both suites keep their own font caches. Quit every Adobe app, remove ~/Library/Application Support/Adobe/CoreSync/, then restart Creative Cloud and let the fonts re-sync. For Office, quit all applications and remove ~/Library/Preferences/com.microsoft.office.plist before relaunching.
Font Book will not open or crashes
Remove ~/Library/Preferences/com.apple.FontBook.plist and restart. If it still crashes, boot into Safe Mode by holding Shift during startup, validate all fonts from there, and remove whatever the validator flags. A single malformed font is almost always the cause.
System UI shows placeholder boxes
This means protected system fonts were damaged, which only happens if something wrote into /System/Library/Fonts. Do not try to repair it by hand. Reinstall macOS over the top, which keeps your data and restores the system fonts.
Migrating Fonts on Windows
Windows differs from macOS in one way that matters more than any other: a font file sitting in the Fonts folder is not installed until it also has a registry entry. Copying files alone produces the classic symptom of a font that is visibly present on disk and invisible in every application.
Where Windows Stores Fonts
System fonts, all users
C:\Windows\Fonts, which requires administrator rights. Registered under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts.
Per-user fonts
%LOCALAPPDATA%\Microsoft\Windows\Fonts, available since Windows 10 build 1809 and installable without admin rights. Registered under HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts.
Application fonts
Adobe and Office install some fonts into their own directories. Creative Cloud synced fonts live under C:\Users\[user]\AppData\Roaming\Adobe\CoreSync\plugins\livetype and re-download on sign-in, so leave them out of the migration.
Inventory with PowerShell
# List every registered system font
$fonts = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts'
$fonts.PSObject.Properties | Where-Object { $_.Name -notmatch '^PS' } |
Select-Object @{N='FontName';E={$_.Name}}, @{N='FileName';E={$_.Value}} |
Sort-Object FontName | Format-Table -AutoSize
# Flag legacy Type 1 files that need converting before migration
Get-ChildItem "C:\Windows\Fonts" -Include *.pfm,*.pfb -Recurse -ErrorAction SilentlyContinue |
ForEach-Object { Write-Host "Type 1 font found: $($_.Name)" -ForegroundColor Yellow }
# Export a full inventory for the record
Get-ChildItem "C:\Windows\Fonts" |
Select-Object Name, Extension, @{N='SizeKB';E={[math]::Round($_.Length/1KB,1)}}, LastWriteTime |
Export-Csv -Path "font-inventory.csv" -NoTypeInformation
# Include per-user fonts (Windows 10 1809 and later)
$userFontPath = "$env:LOCALAPPDATA\Microsoft\Windows\Fonts"
if (Test-Path $userFontPath) { Get-ChildItem $userFontPath | Format-Table Name, Extension }Export the registry keys as well as the files. The CSV tells you what you had, and the registry export tells you how it was registered, which is what you will compare against if fonts go missing on the new machine.
Install on the New Machine
For a handful of fonts, select them in Explorer, right-click, and choose Install for all users, which writes both the file and the registry entry. For a bulk migration, copy the files and register them in one pass. The script below is also the basis of the Group Policy startup script further down.
$FontSource = "D:\Font_Migration"
$FontDest = "C:\Windows\Fonts"
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
Get-ChildItem $FontSource -Include *.ttf,*.otf -Recurse | ForEach-Object {
$destPath = Join-Path $FontDest $_.Name
if (-not (Test-Path $destPath)) {
Copy-Item $_.FullName $destPath -Force
$fontName = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
New-ItemProperty -Path $RegPath -Name "$fontName (TrueType)" -Value $_.Name -Force
Write-Host "Installed: $($_.Name)"
}
}ClearType and Hinting
If any of these fonts are headed for a website, hinting is the step that decides whether Windows users see sharp text or mush. ClearType aligns glyph outlines to the pixel grid using the hinting instructions in the font, so an unhinted font that looked perfect on a Mac can render badly in Chrome and Edge on Windows.
| Scenario | Hinting approach | Result on Windows |
|---|---|---|
| Body text, 12 to 18px | ttfautohint, required | Sharp, consistent stems |
| Headings, 24px and up | Auto-hint or leave unhinted | Acceptable either way |
| High-DPI displays | Less critical | Pixel density compensates |
| No hinting at body size | Not applicable | Blurry, uneven stem widths |
# Install the toolchain (Python 3.8+ from python.org or the Microsoft Store)
pip install fonttools[woff] brotli ttfautohint-py
# Hint first, then convert. The order matters.
ttfautohint ^
--stem-width-mode=qqq ^
--increase-x-height=14 ^
--hinting-range-min=8 ^
--hinting-range-max=50 ^
input.ttf input-hinted.ttf
python -m fontTools.ttLib -o output.woff2 input-hinted.ttf
# Note: ^ is line continuation in CMD. Use a backtick in PowerShell.WSL runs the same Linux font tooling if you would rather follow instructions written for macOS or Linux. If you do not want a local toolchain at all, the webfont generator produces WOFF2 files and the matching @font-face CSS in the browser.
Deploying Across an Organization
For a fleet rather than a single machine, there are two supported routes. A Group Policy computer startup script running the install script above, pointed at a network share, covers domain-joined estates. For cloud-managed devices, package the fonts and an install script as a Win32 app with the IntuneWinAppUtil tool, upload it to Microsoft Intune, set a detection rule that checks for a known font file in C:\Windows\Fonts, and assign it to device groups. Broader fleet policy, including licence tracking at that scale, is covered in the enterprise font management guide.
Troubleshooting on Windows
Font is in the Fonts folder but not in applications
The registry entry is missing. Either right-click the file and choose Install for all users, or add the value directly with reg add against HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts, naming the value after the font and setting the data to the filename.
Font cache problems after a bulk install
Windows caches font data hard, and a stale cache explains the large majority of post-migration oddities. Run net stop fontcache, delete the contents of %WinDir%\ServiceProfiles\LocalService\AppData\Local\FontCache\, run net start fontcache, then reboot.
Text looks blurry in Chrome or Edge
The font is almost certainly unhinted. Re-process it with ttfautohint before serving it, and confirm ClearType is switched on by searching for ClearType in Windows Settings and running the tuner.
Cannot install font
Usually a corrupt file, insufficient permissions, or a font that is already installed. Run the install elevated, clear the font cache as above, and check the file itself with the font analyzer before assuming Windows is at fault.
Post-Migration Checklist
Work through this on the destination machine before you close the migration out. Most of the failures that surface weeks later would have been caught by items four and five.
- 1. Backup of the source library verified by file count, and kept until the new machine has been in real use for a month
- 2. Legacy formats converted, with the originals archived rather than deleted
- 3. Fonts copied into the correct per-user or system location for the platform
- 4. Fonts registered: Font Book shows them on macOS, or the registry entry exists on Windows
- 5. Font cache cleared and the machine restarted
- 6. Duplicates resolved, keeping the newest copy from the most trustworthy source
- 7. Fonts re-validated on the destination machine, not just the source
- 8. Font Book collections restored, or their Windows equivalent documented
- 9. Two or three real project files opened and checked for substitution warnings
- 10. Licence positions checked, and fonts deactivated on the retired machine if seats are capped
- 11. A fresh backup taken from the new machine
Summary: A Font Migration That Holds Up
Font migration goes wrong in predictable ways: files copied without being registered, caches never cleared, corrupt fonts carried forward, and formats that the destination system cannot read. Inventory first, back up the organization data as well as the fonts, convert the legacy formats while you still have a machine that can open them, and treat the cache rebuild as part of the install rather than an optional extra.
If the destination for these fonts is a website rather than another desktop, the job changes shape: convert to WOFF2, hint for Windows rendering first, and confirm the licence covers web delivery before you deploy anything.
Written & Verified by
Sarah Mitchell
Typography expert specializing in font design, web typography, and accessibility
Font Migration FAQs
Common questions about moving fonts between machines and operating systems
