Bulk Font Replacement in Figma — A Practical Guide to Native Features and Plugins
“I need to replace a font across 50+ places in a Figma file.” “The file I migrated from XD has fonts everywhere.” “I just want to bump every body text size from 14 to 16.” — Once you start working at scale in Figma, the need to change fonts in bulk inevitably comes up.
Figma offers a meaningful range of bulk-change capability out of the box, and there are situations where a plugin makes the task dramatically faster. The trick is knowing which tool fits the situation. Reaching for a plugin before understanding what’s possible natively can lead to overkill setups; sticking to native features when a plugin would save hours leads to hours of unnecessary manual work.
This article walks through, in the order you’d actually use them: native bulk-change features → where they fall short → plugin-assisted workflows → font size changes → XD migration specifics. Insights here are grounded in what we’ve learned building Pixel Fine Converter and verifying font behavior during XD-to-Figma conversion — including the common post-migration font sprawl that often needs cleanup.
What you’ll get from this article
- The right way to bulk-change fonts with native Figma features (Select all with same font / Text styles)
- When native features get tedious and which problems plugins are meant to solve
- How to triage “font size won’t change” issues
- How to handle font sprawl in files migrated from XD
- A safe workflow for changing fonts at scale
Related reading
For how to add Japanese fonts and troubleshoot missing ones, see Using Japanese Fonts in Figma. For font accuracy when converting from XD, see How accurately can Japanese text be converted from XD to Figma?. For fonts that don’t show up at all, see Figma fonts not showing up? Troubleshooting guide. This article focuses specifically on replacing fonts that are already in use, in bulk.
📝 Introduction — Three common scenarios for changing fonts
Bulk font changes in Figma break down into three distinct scenarios. The best approach differs for each, so identify your case before reading further.
Scenario A: A file already uses one font, and you want to swap it for another
Brand rebrand: replace Noto Sans JP with Hiragino Kaku Gothic ProN everywhere. Same font everywhere → bulk-select layers using that font → swap. Native features alone handle this cleanly.
Scenario B: Multiple fonts are mixed, and you want to consolidate or replace several at once
Common right after XD migration, or when multiple designers contributed to the file. “Hiragino, Yu Gothic, and MS Gothic are all in the file — unify everything to Noto Sans JP.” “Replace just the Latin fonts but leave the Japanese fonts.” Native features force you to repeat the selection cycle once per font; a plugin can do it in one pass.
Scenario C: Keep the font, but change size or weight in bulk
“Bump body text from 14px to 16px.” “Change every Bold to Medium.” If Text styles are set up, this is trivial in native Figma; if not, you’re back to a mix of manual selections and plugins.
These look like different problems, but they share a core question: how do you get Figma to recognize layers that share an attribute? Everything else flows from there.
🔧 Changing fonts with Figma’s native features
Before reaching for a plugin, exhaust what Figma already offers. For many cases, native features are sufficient.
The “Select all with same…” family
Figma can select every layer that shares a specific attribute with your current selection. Use the Edit menu: Edit → Select all with → Select all with same font (and variants).
Verified on the desktop app, the Select all with submenu offers eight options (font replacement workflows mainly use Select all with same font and Select all with same text properties):
| Edit menu option |
|---|
| Select all with same properties |
| Select all with same fill |
| Select all with same stroke |
| Select all with same effect |
| Select all with same text properties |
| Select all with same font |
| Select all with same instance |
| Select all with same variant |
To target “every layer using Noto Sans JP,” select one Noto Sans JP text layer and run Edit → Select all with → Select all with same font. Every Noto Sans JP layer in the file is selected at once; change the font in the right panel and they all update together.
Select all with same font is scoped to the current page
Select all with same font operates within the current page only. For files with multiple pages, you have to repeat it per page. If you need cross-page bulk changes, this is where plugins start to pay off (see below).
Bulk changes via Text styles
If the font is registered as a Text style, editing the style updates every layer that references it. This is the cleanest approach.
Steps:
- Open the target style from the right panel’s Text styles list
- Click Edit style
- Change the font / size / line height and save
- Every layer using that style updates instantly
For a file with well-maintained Text styles, a font change takes 30 seconds. For a file without them, you’ll need the techniques in the rest of this article.
Narrowing the selection range
If you only want to change “a specific frame” or “a specific page,” select that frame or page before running Edit → Select all with, and the operation scopes to that context.
Range selection precision often eliminates the need for a plugin.
⚠️ Where native features fall short — when plugins help
Native features cover most cases, but the following situations make native-only workflows impractical, and a plugin pays off.
Limit 1: Multiple fonts that need to converge to one
Select all with same font operates one font at a time. If you want “replace Hiragino, Yu Gothic, and MS Gothic with Noto Sans JP,” you repeat:
- Select all Hiragino with Select all with same font → swap to Noto Sans JP
- Select all Yu Gothic with Select all with same font → swap to Noto Sans JP
- Select all MS Gothic with Select all with same font → swap to Noto Sans JP
Three fonts is still tolerable. Files migrated from XD often have 10+ fonts mixed, and that’s where a one-pass plugin saves real time.
Limit 2: Working across pages or files
Native features are page-scoped. File-wide changes spanning many pages is what plugins are designed for.
Limit 3: Preserving weight structure during a swap
“Map Hiragino W3 / W6 / W8 to Noto Sans JP Regular / Medium / Bold” — that weight-aware mapping is awkward natively. Some plugins try to preserve the weight structure when swapping a font family, which is exactly the case they shine in.
Decision guide
| Scenario | Native features | Plugins |
|---|---|---|
| Same font → another font | ◎ | ○ |
| Bulk update via Text styles | ◎ | ○ |
| Consolidating multiple fonts into one | △ | ◎ |
| Cross-page / cross-file changes | △ | ◎ |
| Weight-aware mapping during a swap | △ | ◎ |
| Bulk Missing-fonts resolution | ○ | ◎ |
The difference is ○ vs ◎ in most cases — native features can do plenty. Try native first; switch to plugins once you feel the friction.
🔌 Bulk font replacement with plugins
Figma Community has several plugins focused on font replacement. Specific plugin names change over time through updates, renames, and removals, so this article points to evaluation criteria rather than recommending a single tool.
Typical plugin workflow
Most font-replacement plugins follow this flow:
- Install from Figma Community
- Open your file and launch the plugin
- The plugin scans and lists every font in use
- Pick a source font and a target font, then Replace
- Preview the result and either confirm or Undo
A good plugin tends to offer all five of these capabilities:
- Visibility into every font in use: you can’t replace what you can’t see
- Scope control: page / selection / single-frame replacement options
- Weight-structure preservation: Regular → Regular, Bold → Bold mapping
- Preview and Undo: you can see the result before committing
- Missing fonts detection: includes uninstalled fonts as replaceable targets
A checklist for choosing a plugin
Search Figma Community for “font replace,” “bulk font,” or “font changer.” Before installing, evaluate each option on:
- Last update within the past 6 months (older plugins risk breakage against Figma API changes)
- Downloads (Users) at a reasonable scale (1,000+ as a baseline; extremely low counts signal lack of validation)
- Free / paid / Pro tier breakdown (most are free; advanced features are sometimes paid)
- Scope control (pages-wide / selection / single frame switchable)
- Explicit Japanese font / CJK support (font name normalization, CJK handling documented)
Font replacement is a destructive operation
Font replacement is hard to reverse. Before running a large replacement, duplicate the file (File → Duplicate) or create a branch. Undo typically operates on the last replacement only — if a complex chain of replacements turns out wrong, restoring the original state can become genuinely difficult.
Resolving “Missing fonts” in bulk
Right after migrating from XD, files often have a long list of fonts that aren’t installed locally. The native Missing fonts dialog handles this case-by-case; a bulk replacement plugin processes many at once.
For a broader Missing fonts troubleshooting guide, see Figma fonts not showing up? Troubleshooting guide.
📏 When you want to change font sizes in bulk
“Keep the font but change the size everywhere.” “Drop every Bold to Medium.” The mental model is identical to font replacement.
Native bulk size changes
The same two routes apply:
- Select all with same text properties: pick layers sharing the exact same font + size + weight → change size
- Text styles: edit the style → every referencing layer updates
“Bump 14px body text to 16px” finishes in 5 seconds if a Text style is in place.
Why font size sometimes refuses to change
If you try to change a font size and it does nothing or is greyed out, the cause is usually one of these:
Cause 1: Component instance lock. The main component’s Text style is fixed and the instance can’t override it. Edit the main component, or detach the instance.
Cause 2: A Text style is linked. Linked styles control font / size / line height from the style definition. Use Detach style to break the link before editing freely.
Cause 3: “Mixed” values across the selection. When the selected layers have different sizes, the field shows “Mixed.” Type a new value into the Mixed field and every selected layer snaps to that value.
Cause 4: Weight changes vs family changes. Bold → Medium is a weight change, and it only works when the font family has those weights available. For fonts without that weight family, swap the family instead.
Changing size and weight together
For a coordinated size + weight change, updating the Text style is the safest path. Every layer using that style updates in sync.
Without Text styles, some replacement plugins offer “replace size only” or “replace weight only” modes — verify before installing.
🔄 Bulk font changes for files migrated from XD
Files coming from XD trigger bulk-font-change needs more often than typical native Figma files.
Why XD-migrated files end up with mixed fonts
Files that worked cleanly in XD often arrive in Figma with font sprawl, due to:
- Windows / Mac differences: a Windows-built file opened on Mac (or vice versa) shows MS Gothic / Meiryo / Yu Gothic / Hiragino as partially missing
- Multiple font variants in coexistence: Hiragino Kaku Gothic Pro / ProN / W6 — visually similar names that need consolidation
- Fallbacks to a default font: some layers fall back to Inter (Figma’s default) when the original font isn’t recognized
This is a natural byproduct of moving text data across tools, and no conversion tool can fully prevent it.
How Pixel Fine Converter approaches font fidelity
Pixel Fine Converter implements font-specific corrections during XD → Figma conversion, with different coverage on Free and Pro:
- Baseline correction for Japanese fonts (Hiragino / Yu Gothic / Meiryo / Noto Sans JP / Noto Sans CJK JP / MS Gothic): compensates for vertical-position drift introduced on the Figma side (Free / Pro common)
- Font name normalization: maps XD-side font name variants to forms Figma recognizes (Free / Pro common)
- lineHeight normalization (singleLineNormalize): resolves vertical offsets in single-line text (Pro feature)
This minimizes font sprawl right after import. It doesn’t eliminate it entirely, but it reduces the amount of bulk replacement you have to do afterward.
For the full specification, see Features: Fine-tuning and Guide: Fine-tuning.
One-click install from Figma Community
A workflow for cleaning up after migration
Recommended sequence right after converting from XD:
- Convert with Pixel Fine Converter (with Japanese font correction enabled)
- Open in Figma and list every font with a plugin scan
- If Missing fonts exist, replace Missing → substitutes in bulk
- Decide whether the remaining mixed fonts are intentional or should be consolidated, then replace in one pass
- Create / restore Text styles at this point — future font changes become native-feature trivial
That last step (Text styles) pays back compounding dividends on every font change afterward.
🛠️ A safe workflow for large-scale font changes
For changes touching 50+ places, a safety-oriented workflow prevents costly mistakes.
Recommended 5-step workflow
Step 1: Duplicate the file as backup. File → Duplicate. Leave the original alone until you’ve verified the result.
Step 2: Scope the change explicitly. Write down “which pages / frames” and “which fonts → which fonts” before starting. A Notion doc or Issue is fine.
Step 3: Run on a small subset first. Don’t full-file replace immediately. Run the plugin on one page, confirm the result, then proceed.
Step 4: Progress page by page. Page-at-a-time gives you a smaller blast radius if something goes wrong.
Step 5: Set up Text styles after replacement. Building them in during the cleanup makes the next round of changes trivial.
Common failure modes
- ❌ Replacing directly in production → unintended layers change with no rollback: always duplicate first
- ❌ Replacing while Missing fonts are present → substitutes land on the wrong fonts: resolve Missing first, then replace
- ❌ Replacing across Variants → Variant semantics break: handle component / Variant text carefully
- ❌ Bulk replacement without Text styles → partial edits later cost double the time: build Text styles into the cleanup
❓ Frequently asked questions
Can I bulk-replace every font with Figma’s native features alone?
You can if you’re replacing one font family at a time — that’s exactly what Select all with same font is for. To merge multiple mixed fonts into one in a single pass, a plugin is more practical.
Which specific font replacement plugin do you recommend?
We don’t recommend a specific plugin by name — updates, renames, and removals change the landscape too quickly. Search Figma Community for “font replace,” “bulk font,” or “font changer,” and evaluate using the 5-item checklist in this article.
My font size won’t change.
The three usual causes are ① component instance constraints, ② a linked Text style, ③ a Mixed-state field error. See the “Why font size sometimes refuses to change” section above.
A file I migrated from XD has dozens of Missing fonts.
Native Figma’s Missing fonts dialog can handle them, but a bulk replacement plugin scales better when there are many. The dedicated guide is Figma fonts not showing up? Troubleshooting guide.
What if I want to revert after a bulk replacement?
Undo (Cmd/Ctrl + Z) only works right after the action, and often stops working once the file is closed or a page is switched. Duplicating the file beforehand is the most dependable safety net.
Anything special about replacing inside Variants?
Replacements inside Variants propagate to all variants. To prevent unintended variants from changing, replace text per-variant manually or assign Text styles to the main component so style edits flow through cleanly.
Different team members see different results in a shared file.
That isn’t a replacement issue — it’s a Missing fonts issue. Some team members don’t have the fonts installed locally. Coordinate via Custom fonts or shared font installation. The full path is in Figma fonts not showing up? Troubleshooting guide.
🎯 Wrapping up
Bulk font changes in Figma reward picking the right tool for the file’s state — Text style maturity, font sprawl, and scale all change what’s optimal.
The key takeaways
- Same-font bulk changes finish in Figma’s native Select all with same font
- Files with Text styles in place require editing the style only — the cleanest route
- Mixed-font files or cross-page changes are where plugins genuinely save hours
- Font size won’t change issues are usually component-instance, style-link, or Mixed-state — not bugs
- Files just migrated from XD benefit from combining Pixel Fine Converter’s font correction (six fonts covered on the Free plan) with a bulk replacement plugin
- At scale, always: duplicate first → test small → progress page-by-page
The single highest-leverage habit is checking Text style maturity before you start. With styles in place, font changes are instant. Without them, plugins or manual work are required. Building Text styles in during a cleanup makes every future change cheap.
If font sprawl after migrating from XD is your starting condition, normalize font behavior at the conversion step with Pixel Fine Converter, then run a bulk replacement plugin afterward — that combination tends to be the lowest-friction path through the cleanup.
One-click install from Figma Community
Related pages
- Bulk Color Replacement in Figma — the color-side guide; companion in the style management trilogy
- Bulk Text Style Replacement in Figma — the text-style-side guide; companion in the style management trilogy
- Using Japanese Fonts in Figma — adding fonts, troubleshooting, XD migration notes
- Figma fonts not showing up? Troubleshooting guide — full Missing fonts triage
- How accurately can Japanese text be converted from XD to Figma? — baseline correction and glyph-rendering limits
- XD → Figma Migration: A Practical Guide — end-to-end migration workflow
- Features: Fine-tuning — Pixel Fine Converter’s font correction features
- Guide: Fine-tuning — full fine-tuning option specification