# Nerd Fonts: How to Install Patched Developer Fonts and Patch Your Own

> Nerd Fonts is a font aggregator, patched font collection and FontForge-based patcher that adds icon glyphs from Font Awesome, Material Design Icons, Octicons and others to programming fonts. Adopt it if your terminal, editor or statusline needs icons; skip it if you need a single, minimal, unmodified font.

**ryanoasis/nerd-fonts** — Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more

- Repository: https://github.com/ryanoasis/nerd-fonts
- Website: https://NerdFonts.com
- Stars: 64,755 · Forks: 3,960
- Language: CSS
- License: NOASSERTION
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/ryanoasis-nerd-fonts

## What Nerd Fonts actually adds to a programming font

The problem is narrow and concrete. Terminal prompts, statuslines, file-tree plugins and editor sidebars want to draw small icons next to text, and ordinary programming fonts do not contain those icons. The usual workaround is to configure a fallback font, which means the terminal has to switch fonts mid-line and often gets the spacing wrong. Nerd Fonts takes the other route: it patches the icon glyphs directly into the font file, so one font covers both letters and icons.

The README describes the project as patching developer targeted fonts with a high number of glyphs from popular iconic fonts such as Font Awesome, Devicons, Octicons and others. It ships 67 already patched font families, according to the features list, and states that over 10,000 glyphs and icons are combined across the current sets. Those sets include Powerline with Extra Symbols, Font Awesome, Material Design Icons, Weather, Devicons, Octicons, Font Logos (formerly Font Linux), Pomicons and Codeicons.

The audience is therefore anyone whose tooling prints private-use-area characters: shell prompt users, Vim and Neovim users, terminal multiplexer statuslines, and editor plugin authors who ship icon fonts as a dependency. If your setup never prints those codepoints, the patched font is just a larger file with unused glyphs.

## How the patcher works and what the three glyph widths mean

The core of the project is font-patcher, described in the README as a FontForge Python script that can patch any font. It reads an input font, merges the icon glyph sets into it, and writes a patched font. The repository also carries a bash script, referred to as Gotta Patch 'em All, that re-patches all the fonts in the collection, which is how the prebuilt families in patched-fonts/ are produced.

The design decision that matters most is the width option. The patcher includes an option to create monospaced (fixed-pitch, fixed-width) or double-width (non-monospaced) glyphs, and the README notes a proportional variant as well. This refers to the Nerd Font glyphs themselves, not necessarily the font as a whole. That distinction is easy to miss and it explains most rendering complaints: an icon that looks too wide or too narrow in a terminal is usually a width-variant mismatch, not a broken font.

The Dockerfile shows the build dependency chain honestly. It builds FontForge from a pinned commit with the GUI, docs, native scripting, libspiro and the Python extension disabled, then installs the patcher's runtime dependencies and sets PYTHONIOENCODING=utf-8. The container declares /in and /out as volumes and copies the repository to /nerd, with an entrypoint at /nerd/bin/scripts/docker-entrypoint.sh. So the patcher is not a thin wrapper around a system tool; it is a compiled FontForge plus a script.

## Installing Nerd Fonts on macOS, Linux, Windows and Arch

The README lists nine installation routes and is explicit about which one to pick. For a font family package with bold and italic variations, download a release archive. On macOS or Linux with Homebrew, use Homebrew Fonts. To automate installation or use it in scripts, use the install script. On Windows, Chocolatey or Scoop repositories are listed, though the README labels them unofficial. On Arch Linux there are Extra and AUR packages. PowerShell users get an interactive installer. There is also a font fallback option for installing one font to cover all cases, cloning the repo for complete control, and patching your own font.

The install script is the most portable of the scripted options. The README points at install.sh in the repository root, and the script takes a font name argument:

```bash
./install.sh Hack
```

After it runs, the patched family should appear in your system font list under the Nerd Font name. The README also documents a way to install every font at once, which is only sensible if you actually want the whole collection on disk.

On Arch, the README points at the Extra repository and the AUR rather than a single command, so check the package name for the family you want before installing. The README does not document a rollback procedure for any of these routes, so removing a font means using your platform's font manager or package manager directly.

## Patching your own font with the Font Patcher

The reason to patch your own font is that the family you want is not among the 67 prebuilt ones. The README's option 9 covers this, and the repository ships font-patcher at the root plus a FontPatcher.zip archive. The script is a FontForge Python script, so FontForge with Python support has to be available before it will run.

The Dockerfile is the project's own answer to that dependency problem. It builds a container that carries FontForge and the runtime libraries, mounts /in and /out, and runs the entrypoint from /nerd/bin/scripts/docker-entrypoint.sh. That is the cleanest path if you do not want to install FontForge on your machine, and it is the one place in the repository where the exact build steps are written down.

The practical caveat is the licence of the font you feed in. The patcher merges glyphs into someone else's font file, and the repository's own package.json declares the project licence as SEE LICENSE IN LICENSE file rather than a plain identifier, while the Dockerfile label says MIT. Those two statements are not the same claim, and the repository also carries a license-audit.md file, which suggests the maintainers track upstream licences separately. Patching a font does not change what its own licence permits you to redistribute.

## Where Nerd Fonts is the wrong tool

The README opens its important notices with two warnings that are easy to skim past. First, master branch file paths are not considered stable, and the README asks you to verify your repository URI references. Anything that pins a raw URL to a file on master can break without a version bump. Second, cloning the repository is not recommended due to repository size unless you are contributing to development. That rules out the clone-and-copy workflow for most users, even though option 8 exists for people who want complete control.

A second limitation is scope. Nerd Fonts adds icon glyphs; it does not add ligatures, does not change hinting, and does not fix the underlying typeface. If your complaint about a font is that its italics are badly drawn, patching will not help.

A third is the fallback overlap. Option 7 exists precisely because installing one font to cover everything is a supported strategy, which means the project itself acknowledges that a single-font install is not always what you want. If you already have a working fallback configuration and it renders correctly, replacing it with a patched font buys you a larger file and a new set of codepoint collisions to debug.

Finally, the package.json test script is `echo "Error: no test specified" && exit 1`. There is no automated test suite declared there, so verification of a patched font is a visual check against the cheat sheet, not a test run.

## Nerd Fonts compared with a plain font plus fallback

The real alternative is not another patcher. It is leaving your font untouched and configuring a separate icon font as a fallback in the terminal or editor. That approach keeps your primary font byte-identical to upstream, so upstream updates apply cleanly and you never wonder whether a rendering difference comes from the patch or the original.

The trade-off is mechanical. A fallback setup depends on the application honoring the fallback chain, and the README's option 7 exists because the project knows this is a common configuration. With a patched font, the icon is at the same codepoint in the same file, so there is no chain to get wrong. With fallback, you keep the original font's metrics exactly as the designer shipped them.

A second comparison is against the upstream font repositories themselves. Nerd Fonts tracks original font names and versions in its patched fonts table, listing entries such as 0xProto, 3270 and Adwaita Mono with their upstream versions. That means you can always go to the upstream project for the unpatched font. If you only need one or two icons and your terminal supports image protocols or a statusline that draws them itself, the patched font is unnecessary weight.

## Licence, release cadence and upgrade cost

The repository is not archived, and the last push was on 2026-09-05. Releases are irregular rather than scheduled: v3.4.0 landed on 2025-04-24, v3.5.0 on 2026-08-02, and v3.5.1 on 2026-08-21. The gap between v3.4.0 and v3.5.0 is over a year, so do not plan around a predictable upgrade window.

Upgrade cost depends on how you installed. If you used Homebrew, Arch packages, Chocolatey or Scoop, your package manager handles the swap and the main risk is a font family being renamed. If you downloaded a release archive, you repeat the download and install by hand. If you patched your own font, you re-run the patcher against the new release, which for the container route means pulling the updated image.

On licensing, the repository files do not agree with each other and you should treat the question as unresolved. The repository's package.json carries `"license": "SEE LICENSE IN LICENSE file"`, the Dockerfile label declares MIT, and the repository metadata reports NOASSERTION. The glyph sets merged into the fonts come from separate projects such as Font Awesome, Material Design Icons and Octicons, each with its own terms, and license-audit.md exists in the repository root. Read the LICENSE file and license-audit.md before redistributing a patched font in a product or a bundled application. This is a description of what the files say, not legal advice.

## Conclusion

Adopt Nerd Fonts if your terminal, prompt or editor plugin expects private-use-area icon glyphs and you want them inside a font you already like. Do not adopt it if you need a minimal font with no added glyphs, or if you cannot accept that the master branch file paths are documented as unstable and that the repository is large enough that cloning is discouraged. Before committing, verify the exact release archive for your chosen family on the releases page, check the licence of the upstream font you intend to patch rather than assuming the MIT label of the patcher covers it, and confirm on the cheat sheet that the specific icon you need exists in the current glyph sets.

## FAQ

### What are the Nerd Fonts?

Nerd Fonts is a project that patches developer targeted fonts with extra icon glyphs drawn from sets such as Font Awesome, Devicons, Octicons, Material Design Icons and Powerline with Extra Symbols. It ships 67 already patched font families and also provides a FontForge Python script to patch fonts that are not in the collection.

### What is the most popular nerd font?

The README does not rank the patched families by popularity, so no ordering is documented. It lists families such as Hack, Source Code Pro, 0xProto, 3270 and Adwaita Mono with their upstream versions, and the font-downloads page on NerdFonts.com shows previews of all of them.

### Is Cascadia code a nerd font?

The README does not list Cascadia Code among the patched font families, so it cannot be confirmed from the repository documentation. The README's option 9 covers patching your own font with the Font Patcher if the family you want is not already in the collection.

### How do I install Nerd Fonts on Linux?

The README lists Homebrew Fonts for macOS and Linux, an install script for automation, and Arch Extra and AUR packages for Arch Linux. The install script takes a font name, for example ./install.sh Hack, and the patched family then appears in your system font list.

### How do I use Nerd Fonts icons in a terminal?

Install a patched family, then set your terminal font to the Nerd Font variant of that family. The README points at the NerdFonts.com cheat sheet for searching glyphs, and notes that the patcher can produce monospaced, double-width or proportional versions of the Nerd Font glyphs themselves.

### How do I add icons to a font that is not already patched?

Use the Font Patcher, a FontForge Python script described in the README as able to patch any font. It requires FontForge with Python support, and the repository's Dockerfile builds that environment and runs the patcher through /nerd/bin/scripts/docker-entrypoint.sh with /in and /out mounted.

## Sources

- [Issues](https://github.com/ryanoasis/nerd-fonts/issues)
- [Project website](https://NerdFonts.com)
- [README](https://github.com/ryanoasis/nerd-fonts/blob/master/README.md)
- [Releases](https://github.com/ryanoasis/nerd-fonts/releases)
- [ryanoasis/nerd-fonts on GitHub](https://github.com/ryanoasis/nerd-fonts)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/ryanoasis-nerd-fonts
