The font manager Linux never got — and Windows & macOS make you pay for.
Preview, organize, activate and install fonts across all three desktop platforms,
from one clean, fast, native app. Your fonts never leave your machine.
⬇ Download · 🌐 Website · 💻 Source Code · 👤 The Developer
The library: every family rendered live, one toggle away from any app's font menu.
- Why ZFontManager?
- Feature tour
- Your whole library, rendered live
- Activate & deactivate — the killer feature
- Try a font before committing
- Apply a font in Photoshop or Illustrator
- Auto-activate for Affinity by Canva
- Browse and download free fonts
- Installing fonts
- Activate a whole library at once
- When two fonts share a name
- A trash can, not a shredder
- Organize: tags, collections, favorites, notes
- Find anything
- Compare fonts side by side
- The waterfall view
- Peek inside a font
- Export a specimen sheet
- The command palette
- Themes, sound & motion
- Your language
- Back up your curation
- Keyboard shortcuts
- Translations
- Getting ZFontManager
- Platform notes
- Privacy
- FAQ
- Building from source
- About the developer
- Contributing
- License
If you've ever worked with type on Linux, you know the drill: fonts live in scattered folders, previewing means opening each file one by one, and "managing" them means a terminal and crossed fingers. On Windows and macOS the situation is better — but the good tools cost real money.
ZFontManager is the answer to both:
- One app, three platforms. The same clean interface on Linux, Windows and macOS.
- Native and fast. Not a website in a box — it starts quickly, scrolls smoothly through hundreds of families, and feels at home on your desktop.
- Speaks your language. Nine languages, picked up from your system automatically — English, Deutsch, Español, Français, Português (Brasil), Русский, 日本語, 简体中文 and 繁體中文.
- Yours. Free, open source (GPL-3.0), no account, no cloud, no telemetry. Everything happens on your machine.
Note
ZFontManager is currently at version 0.3.0 — see the changelog for what's new. It's already very usable day-to-day, but expect the occasional rough edge — and please report anything odd!
On first launch, ZFontManager scans the standard font locations on your system — both the system-wide ones and your personal user fonts — and builds your library automatically. You can add extra folders to watch in Settings, and the app notices when new fonts appear in them.
Every font family is shown in its own typeface, not as a generic name in a list. Type any sentence into the preview box at the top — your brand name, a headline you're working on — and the entire library re-renders in it instantly. A size slider takes the preview anywhere from small print to poster size.
Fonts with many weights and italics are grouped into a single family card. Expand the card and every style — Light, Regular, Bold, Black, the italics — renders live underneath.
Three views, switchable from the top bar:
| View | What it's for |
|---|---|
| Grid | Big, comfortable cards — the browsing view |
| List | Compact rows with style count, format and size — the overview |
| Waterfall | One family shown at every size at once — the type-nerd view |
This is what separates a font manager from a font viewer.
A huge font library is wonderful — until you open the font picker in your design app and have to scroll past 900 entries. Deactivating a font in ZFontManager removes it from other applications' font menus without uninstalling it. The files stay exactly where they are; the font just goes to sleep. Flip the toggle again and it's back.
- Toggle a single family with one click (or press Space)
- Select many families and activate/deactivate them all at once
- Deactivated fonts stay in your library, gently dimmed, ready to wake up
Each platform has its own proper mechanism under the hood (see Platform notes) — but from where you sit, it's just a switch.
Tip
Keep your everyday fonts active and park the other 800 decorative ones. Your design app's font menu becomes usable again, and every font is still one click away.
Not sure you want that font cluttering your menus permanently? Right-click → "Activate until close" wakes a font up for this session only. When you quit ZFontManager, it's automatically put back to sleep. Perfect for auditioning a typeface in your design app without any cleanup afterwards.
On Windows and macOS, right-click a family → "Apply in Photoshop…" or "Apply in Illustrator…" (also in the command palette for the selected family). ZFontManager hands the font to the running app: every selected text layer or text frame switches to it, and if nothing is selected, a new text layer is added with the family name as its sample. A sleeping font is woken "until close" first, so auditioning never installs anything permanently.
Note
This integration is new in 0.3.0 and could not be tested against a real Photoshop or Illustrator before release. It fails safely (every problem shows up as a toast, nothing is changed in your document), but if it misbehaves for you, please open an issue with the app version and what the toast said.
Open a document in Affinity and ZFontManager can switch on the fonts it asks for, automatically, for as long as Affinity is running — then switch them back off when you quit. Nothing is installed permanently.
Turn it on under Settings → Affinity by Canva auto activation. It needs Affinity 3.2 or newer with Settings → Model Context Protocol enabled (restart Affinity afterwards).
Note
Affinity by Canva ships for Windows and macOS only, so this section is hidden on Linux and the watcher never runs there.
Nearly two thousand open-licence families — everything on Google Fonts — from inside the app. Switch it on under Settings → Online font browser, and an Online section appears in the sidebar. Search by name, filter by category or licence, show variable fonts only, and add a family to your library with one click. Downloaded families are tagged Online so they're easy to find.
Open a family and you see your sample text rendered live in it, alongside the licence — its name, a link to the full text, and the Reserved Font Name where the OFL declares one. The preview fetches one face through the same gated client; adding the family reuses that file rather than downloading it twice. The licence text is stored alongside the font.
This is the first feature that talks to the internet, so it's built carefully:
- Off by default. A fresh install never contacts a font provider.
- Switching it on sends nothing. A request goes out only when you open the Online section and search or download — never in the background.
- Search is local. The catalogue is fetched once and cached for seven days; typing filters it on your machine. The provider sees one request per week, not one per keystroke.
- Two named hosts, both listed under the toggle:
api.fontsource.orgfor the catalogue andraw.githubusercontent.comfor the files. - Nothing about your library leaves the machine. The "in library" badge is computed locally.
Files come straight from the google/fonts repository — the canonical source everything else mirrors — so you get the complete font, not a web-optimised subset. That's why Bunny Fonts and Fontsource's own CDN aren't used for downloads: both serve only script-subsetted web files, which would install a dozen partial copies of each style. Fontshare isn't offered because its licence forbids redistribution.
Drag anything into the window:
- individual font files (TTF, OTF, TTC, WOFF and friends),
- whole folders,
- even ZIP archives — fresh from a font site, no unzipping needed.
Then pick how the file should be handled:
- Add to library — the font stays exactly where it is and is registered from there. Good for fonts on an external drive or in a project folder.
- Copy to system folder — the font is copied into your library folder and the original is removed.
You can point the library folder somewhere else entirely under Settings → Library folder. A progress toast keeps you informed on big drops, and anything already in your library is skipped rather than duplicated.
Ctrl A (⌘ A on macOS) selects every font currently in view — the whole library, or just what your filters and search have narrowed it to. Right-click the selection and activate or deactivate the lot in one go, with a single undo if you change your mind. It's also in the command palette as Select all.
Install a font that clashes with one already in your library and ZFontManager says so instead of quietly picking a winner. The detail panel lists every file involved, tells you which copy is the active one, and lets you act on each file separately — keep it, remove it, or send it to the Trash. System fonts are marked as protected and can't be removed either way.
Uninstalling a font never silently deletes anything. Removed fonts go to a restorable Trash inside the app — the actual files are kept safe. Made a mistake? Open the Trash tab, hit Restore, and the font is back exactly where it was. Only "Empty Trash" or a per-item "Delete permanently" actually removes files, and both are clearly marked.
Four complementary ways to impose order on font chaos:
- Tags — free-form labels on any family ("condensed", "80s", "client-x"). Tags appear in the sidebar and act as instant filters. Tag many fonts at once via multi-select.
- Collections — folders you curate by hand, per project or per client. Right-click any font → Collections → add it. A font can live in as many collections as you like.
- Favorites — one star for your go-to typefaces, with its own sidebar view. Press F on any selected font.
- Notes — a small text field per family for things you'd otherwise forget: "licensed for Client X only", "kerning breaks above 60px".
- Search by name, live as you type (press / to jump to the box).
- Filter by classification — Serif, Sans, Mono, Script, Display and more.
- Filter by writing system — Latin, Cyrillic, Greek, and others.
- Variable fonts only — one switch to see just the flexible ones.
- Hide fonts the OS won't let you turn off — on Windows and macOS, drop the system fonts and see only what you can actually act on.
- Sort by name, style count, or file size.
The sidebar also narrows the library by state: Activated, Activated until close, Deactivated, Last imported and System fonts. Each one is reachable from the command palette too, so you can jump straight there without reaching for the mouse.
Filters combine, and the empty state always tells you which filters are active so you're never staring at a mysteriously empty library.
Select two to four families — Ctrl+Click each one, or hold Shift and use the arrow keys — and a small bar appears at the bottom of the window with a Compare button. Click it (or just press C, or right-click the selection) and the compare view opens: the same preview text rendered in parallel, resizable, so you can finally settle "which of these three sans-serifs is the one" with your own eyes instead of your memory.
One family, every size from small to huge, stacked on one screen. This is how type designers evaluate a font — you can instantly see where it gets muddy, where the details shine, and whether it holds up at footnote size.
Click any family and the detail panel slides in:
- Every style listed with live samples and per-style export
- Variable font axes — drag sliders for weight, width, slant and whatever else the font offers, and watch the preview morph in real time
- OpenType features — ligatures, small caps, stylistic alternates, oldstyle numerals… toggle them and see exactly what they do before you enable them in your design app
- Character map — every glyph the font actually contains; click a character to copy it
- The practical facts — format, file size, file path, license info when the font declares one, plus your tags and notes
Right-click a family → Export specimen and get a beautiful, shareable PNG type specimen — the classic "alphabet + sizes + sample text" sheet. Perfect for sending to a client ("option A or option B?") without them needing the font installed.
You can also export the font files themselves (single style or whole family), or export your entire font list as metadata for spreadsheet people.
Press CtrlK and type. Jump to any view, open any collection, switch themes, rescan, find a specific font by name — everything in the app is a few keystrokes away. If you use it in your editor or browser, it works exactly the way you expect.
- Dark and light themes, plus a System option that follows your desktop. Same glass aesthetic, different light.
- Interface sounds — soft, synthesized feedback for toggles and events. Three levels: on, subtle, or off.
- Reduced motion — replaces the springy animations with quick fades, independently of (or together with) your system-wide preference.
- A first-launch tour glides a spotlight over the interface and teaches the essentials in a minute. Replayable anytime from Settings.
ZFontManager follows your desktop language on first launch, and you can override it any time in Settings → Language (or from the command palette).
Available now: English, Deutsch, Español, Français, Português (Brasil), Русский, 日本語, 简体中文, 繁體中文.
More are welcome — see Translations.
Your tags, collections, favorites and notes are the real work — the fonts themselves you can always re-download. Settings → Export library data saves all of it to a single file; Import merges it back in, on this machine or another one.
The whole app is keyboard-navigable — every card, button and menu. Press ? inside the app (or click Shortcuts in the sidebar) for this same list in a pretty overlay.
Navigate
| Keys | Action |
|---|---|
| Ctrl K | Open the command palette |
| / | Jump to search |
| ↑ ↓ ← → | Move through the library |
| Home / End | First / last font |
| Tab | Walk every control, font cards included |
| Esc | Close panels, deselect |
Select
| Keys | Action |
|---|---|
| Enter | Select the focused card |
| Shift ↑/↓ | Extend the selection |
| Ctrl + Click | Add a font to the selection |
| Shift + Click | Select a range |
| Ctrl A | Select every font in view |
Act on the selection
| Keys | Action |
|---|---|
| Space | Activate / deactivate |
| C | Compare the selected fonts (2–4) |
| F | Favorite / unfavorite |
| Del | Move to Trash (always restorable) |
| Shift F10 or ≡ Menu | Open the context menu — arrows browse it |
| ? | Show the shortcuts overlay |
Every piece of interface text lives in one JSON file per language under
src/locales/. Adding a language, or fixing a single phrase that
reads awkwardly, is a small pull request — no Rust, no TypeScript, no build
tooling required.
- docs/TRANSLATING.md — how to add a language or fix wording
pnpm i18n:check— reports coverage, unknown keys and placeholder mistakes
Two ways to help, both fine:
- Send a pull request with a new or corrected language file.
- Just ask. Open an issue naming the language you want and it gets added — no git required. Reviewing a draft as a native speaker counts too, and is often the part that's actually missing.
Partial translations are welcome: anything not yet translated falls back to English, so a half-finished language file still ships something useful. Plural rules are handled per language — the checker tells you which forms yours needs.
The easiest way is the official download page, which always has the latest build for your platform:
Prefer to build it yourself? See Building from source below — it's three commands.
ZFontManager speaks each operating system's native font language — no hacks, no "portable font folder" tricks.
| Platform | How activation works, in plain words |
|---|---|
| 🐧 Linux | Uses fontconfig, the same system every Linux app reads fonts through. Deactivating tells fontconfig to skip the font — apps simply stop offering it. Nothing is moved or deleted. |
| 🪟 Windows | Uses the per-user font registration Windows itself uses. The toggle reflects what Windows actually lists: fonts in a folder you added show up inactive until you switch them on, which registers them for your user account right where they are — an external drive is fine. Deactivating unregisters the font; the file stays put. No admin rights needed for your own fonts. |
| 🍎 macOS | Uses a managed move-aside: deactivated fonts are parked in a dedicated folder the app controls, and restored to the exact original location on reactivation. |
Fonts added with Add to library stay where they are on every platform. On Linux and macOS the app links them into your font folder so the rest of the system can see them; the original file is never moved, copied or deleted.
Tip
On Linux, use the .deb or .rpm. They install cleanly and use your own
system libraries. An AppImage is not part of every release: the ones GitHub
Actions produces need FUSE 2, which many current distributions no longer
install by default, and they are linked against the build runner's libraries,
so older distributions can refuse to start them. When one is offered it's a
convenience, not the recommended path.
Two integrations are platform-bound and are hidden where they don't apply: Photoshop / Illustrator (Windows and macOS) and Affinity by Canva (Windows and macOS).
Important
Some applications only refresh their font list when they start. If a newly activated font doesn't show up in an app that's already running, restart that app — that's the app's cache, not a lost font.
Warning
System fonts are protected. Fonts your operating system needs to draw its own interface can't be deactivated or trashed from ZFontManager, so you can explore fearlessly. On Windows and macOS their cards show a small OS lock badge instead of a toggle, with the reason on hover. On Linux, fontconfig can exclude any font, so everything gets a toggle.
Short version: out of the box, nothing is sent anywhere.
- ❌ No account, no sign-up, no license key
- ❌ No telemetry, no analytics, no crash reporting
- ❌ Nothing about your fonts, tags, collections or notes is ever uploaded — there is no feature that does this, switched on or off
- ✅ All of it lives in local files on your machine
- ✅ The only time a fresh install touches the internet is when you click a link on the About page, and that just opens your browser
We would rather tell you exactly what the app can talk to than ask you to trust an adjective. Here is the complete list:
| Feature | Default | What it contacts | Leaves your machine? |
|---|---|---|---|
| Affinity auto-activation | Off | localhost:6767 — Affinity's own server, on your computer |
No. Loopback only |
| Online font browser | Off | api.fontsource.org for the catalogue; raw.githubusercontent.com for font files and licences |
Yes — your IP and the fonts you download, to those two hosts only. Nothing about your existing library. |
When either feature is off, the app makes no connection attempt at all: no watcher runs, no probe fires, no catalogue is fetched. The Affinity conversation never leaves your computer — no DNS lookup, no packet on your network. The font browser does reach two real servers, and the row above says exactly which and what they receive: your IP address, the catalogue request, and the fonts you choose to download. Both hosts publish a privacy policy, neither is an ad network, and nothing is sent until you act.
Anything added in future goes in that table, off by default, disclosed before you switch it on.
Don't take our word for it — the entire source code is public.
Does deactivating a font delete it?
No. Deactivating only hides the font from other applications' font menus. The files stay exactly where they are, and the font stays in your ZFontManager library (shown dimmed). One click brings it back.
I uninstalled a font by accident. Is it gone?
No — it's in the Trash tab, and the actual files are kept safe. Click Restore and it goes back exactly where it came from. Fonts are only truly removed when you explicitly choose Delete permanently or Empty Trash.
Will this mess with my system fonts?
No. Fonts the operating system needs are protected — the app won't let you deactivate or trash them.
Which font formats are supported?
The common desktop formats: TTF, OTF, TTC collections, WOFF/WOFF2, and variable fonts. If your design app can use it, ZFontManager can almost certainly manage it.
A font I activated doesn't appear in my design app.
Most likely the app was already running and only reads the font list at startup. Restart the app and the font will be there. (Some apps also have their own "refresh font list" command.) For Photoshop and Illustrator you can skip the font menu entirely: right-click the family → Apply in Photoshop… / Apply in Illustrator….
Can I move my tags and collections to another computer?
Yes — Settings → Export library data gives you a single backup file containing your tags, collections, favorites and notes. Import it on the other machine and it merges in.
Is it really free?
Really free. Free to use, free to share, and the source code is free to read and modify under the GPL-3.0 license. There is no paid tier, no "pro" version, no unlock.
Something broke. Where do I complain?
Please do! Open an issue on the GitHub issue tracker with what you did and what happened. Screenshots help a lot.
You don't need to understand the code to build it — just have
Node.js (with pnpm), Rust, and
the Tauri prerequisites for your
platform installed. Then:
git clone https://github.com/TheHolyOneZ/ZFontManager.git
cd ZFontManager
pnpm install
pnpm tauri buildThe finished installer/bundle lands in src-tauri/target/release/bundle/.
For a live development window instead, use pnpm tauri dev.
For maintainers: cutting a release
- Bump the version in
package.json,src-tauri/Cargo.toml,src-tauri/tauri.conf.jsonandsrc/lib/version.ts, and add a section toCHANGELOG.md. - Push. The GitHub Actions workflow builds the installers — Windows
.exe/.msi, macOS Apple Silicon and Intel.dmg, Linux.deb/.rpm, and an AppImage — and opens a draft release with them attached. Ship the AppImage only if it has been tried on a real distribution; leaving it out is fine. - Download the assets and run
node prepare-release.mjs --from <folder>. It collects the installers intozfontmanager/releases/, writesSHA256SUMS.txt, and rewrites the download page's version, links, sizes and checksum table. Any installer that isn't shipping is hidden on the page rather than listed. Uploadzfontmanager/, paste the changelog section into the draft, publish.
For the curious: what it's made of
| Layer | Technology |
|---|---|
| App shell & system integration | Tauri v2 + Rust |
| Interface | React 19 + TypeScript |
| Animation | Motion (spring-based) |
| Build tooling | Vite + pnpm |
The Rust side handles everything that touches your system — scanning,
installing, activation, the trash — while the interface side does the
rendering, previews and organization. Design principles and the product
spec live in the docs/ folder.
ZFontManager is built by TheHolyOneZ — born from the simple frustration that Linux never had a proper font manager, and the good ones elsewhere cost money.
| 👤 Developer | github.com/TheHolyOneZ |
| 🌐 More projects | zsync.eu |
| ⬇️ Download & landing page | zsync.eu/zfontmanager |
| 💻 This project's source | github.com/TheHolyOneZ/ZFontManager |
Found it useful? A ⭐ on the repository genuinely helps others discover it.
Pull requests are welcome. Two things are worth knowing before you start: everything has to work on Linux, Windows and macOS, and any interface text you touch has to be translated into all nine languages.
Both are explained, with the reasoning, in CONTRIBUTING.md. Translations have their own shorter guide in docs/TRANSLATING.md — no code required.
ZFontManager is free software, released under the GNU General Public License v3.0.
In human terms: you may use it, share it, and change it — and if you distribute a changed version, it must stay just as free for the next person.
ZFontManager · your fonts, your machine, your rules
Made with care (and a mild grudge against font chaos) by TheHolyOneZ
