# fnt: apt for fonts, a command line font manager for macOS and Linux

> fnt is a shell script that installs fonts from Debian sid and Google Fonts onto macOS and Linux systems, with a search command, a terminal preview, and a Makefile that installs the binary, the man page and zsh completion.

**alexmyczko/fnt** — apt for fonts, the missing font manager for macOS/linux

- Repository: https://github.com/alexmyczko/fnt
- Stars: 650 · Forks: 24
- Language: Shell
- License: NOASSERTION
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/alexmyczko-fnt

## A package manager for typefaces, and the gap it fills

The project describes itself as apt for fonts, the missing font manager for macOS and Linux, and the reason is spelled out in a short Why section. If you run Debian stable you do not get the latest fonts unless someone backports them actively, and the situation is worse on Linux distributions that are not Debian based at all. On macOS, the argument is that fink, brew and macports do not come with a great list of available fonts to install. So the tool fills a genuine gap: an apt-like front end over font packages, aimed at the person who wants a specific typeface now rather than after a distribution catches up. The audience is a Linux or macOS user who installs and removes fonts occasionally and does not want to hunt through a distribution package index or a font foundry site for each one. The privacy argument sits alongside the packaging argument: the README points at concerns about Google Fonts and their own FAQ, and suggests hosting the fonts yourself instead, which is a separate option from installing fonts with a package manager.

## Two font sources, filtered by name prefix

The font repositories section is the core of the design and it is refreshingly simple. There are two sources. The first is Debian sid, which offers around 500 fonts, and only the ones whose package name starts with fonts- are considered. The second is the Google Fonts repository, offering around 2000 fonts, and only the ones prefixed google- are taken. That prefix based filtering is what lets a single search cover both sources without a metadata database, and it also explains the install scripts at the end of the README, where a grep for ^google separates the two sets so you can bulk install one repository without the other. The repository entries reflect the shape of the tool: a shell script named fnt, an Objective-C file FNT.m for a macOS GUI, a Makefile, a man page source, a completions directory, and a LICENSE that GitHub cannot classify.

## Installing the script, the man page and the completion

The documented install is a make install from a checkout, and the Makefile shows exactly what that touches.

```bash
make install
```

It installs the fnt binary into /usr/bin, the man page into /usr/share/man/man1 and gzips it, and the zsh completion file into the zsh site-functions directory. The comment in the Makefile explains why the directory creation is done in that way, since direct directory install and create is not portable to the BSD variants, which matters for a tool that explicitly supports macOS and FreeBSD. The install target also honours DESTDIR, so it can be staged into a package build rather than written straight to the system. If you would rather not build anything, the README says you can use your native package manager and points to a Repology page listing the distributions that carry fnt, and it adds that Debian stable has an official backport. The Makefile also offers two GUI builds, a macOS one compiled with clang against the Cocoa framework and a GNUstep one built with gcc and the gnustep libraries, both producing an FNT binary, and a release target that tars and xz compresses the source.

## The command surface: update, info, search, preview, install, list

The usage section shows the commands as a session. The first thing you do is update, which refreshes the font list, and then info, which reports how many fonts are available, showing 2196 in the example. Search takes a string and prints matching font names, preview renders a font in the terminal, install fetches a named font, and list shows what you already have with the file names and sizes.

```bash
$ fnt update
Updating...
$ fnt info
Information...
Available Fonts: 2196
$ fnt search agave
$ fnt install agave
$ fnt list
agave-b-autohinted.ttf [699]
agave-r-autohinted.ttf [2443]
```

Note the shape of the list output: the Agave family arrives as two files, an autohinted bold and an autohinted regular, with the size in brackets. That tells you the tool works on font files rather than on font families, so a family with several weights installs as several files. The commands are also the ones the zsh completion is written for, and the README suggests adding the standard compinit lines to your .zshrc.

```bash
# enable autocomplete function
autoload -U compinit
compinit
```

## The preview command renders fonts in the terminal

The preview command is the unusual part of the tool and the part that gets linked around the web. It draws the font as a block character rendering in the terminal, and the README shows a full page of it for a font named agave. The credits section says the preview mode works using chafa, which converts images to terminal graphics, and screenshots.debian.net, which is where the preview images come from. So the pipeline is: fetch a sample image rendered in the font, convert it to terminal art, print it. The README also points at shell.aiei.ch for creating your own screenshots, and it offers a shell one-liner that shows a random font preview every ten seconds, which is the kind of thing that makes people link to a project. The tool is also used for browsing rather than installing, since search and preview work without installing anything, which makes fnt a discovery tool as much as an installer.

## Bulk installing every font from either repository

The README ends the usage section with two shell loops that install in bulk, and they are worth reading because they show what the tool does not do for you. Installing everything from Debian means looping over the search results while excluding anything starting with google, and the README states the outcome: about 2700 font files, around 500 fonts, taking up 1.6 GB. Installing the Google set instead loops over results starting with google-, and the README says that ends at roughly 4200 font files, around 1600 fonts, at 1.4 GB. Both figures are in the README, and both are worth reading as expectations rather than targets, since a couple of gigabytes of fonts is a lot of disk and a lot of font menu entries on some systems. The loops are also not part of the tool, they are shell one-liners the README suggests you write yourself, which tells you the command set is deliberately small and leaves scripting to the shell.

## A custom licence, and a one dollar offer to package a font

Two administrative details are worth knowing. First, the licence is unusual: the project is marked as using a custom licence that GitHub cannot classify, and you are pointed at the LICENSE file for the details, so read it before shipping anything built on it. Second, the README documents a small but telling side business. If a font is missing, the author asks you to open an issue, and says that if the font comes with sources and its licence is DFSG compliant, they are happy to package it for a dollar, free if they like it. The DFSG requirement is the interesting constraint, because it is what makes a font redistributable in Debian in the first place, and the same standard is what the Debian sid repository draws from. The rest of the README is a link list: how to create or edit fonts with trufont, FontForge and Birdfont, how to serve fonts on the web as woff2 with the google/woff2 project, and background reading on fonts in Debian, plus links to Amiga font collections and a bitmap to vector converter.

## Conclusion

Adopt fnt if you want a single command to pull fonts from Debian sid and Google Fonts onto a macOS or Linux machine, especially if you keep hitting the fact that a stable distribution ships older font versions. Do not adopt it if you need a font manager with a graphical interface, a system-wide font cache workflow, or a licence that a corporate legal team will recognise, since the project uses a custom licence that GitHub cannot classify. Verify first that the fonts you want carry DFSG compliant licences, since the project only packages fonts it can redistribute, and check the Makefile install paths before running make install on a machine you care about.

## FAQ

### How do I install the fnt font manager?

Run make install from a checkout, which installs the fnt binary into /usr/bin, the man page into /usr/share/man/man1 and the zsh completion into the zsh site-functions directory. The README also points to a Repology page for distributions that package fnt, and notes that Debian stable has an official backport.

### Which font repositories does fnt pull from?

Two. Debian sid contributes around 500 fonts, limited to packages whose name starts with fonts-, and the Google Fonts repository contributes around 2000 fonts, limited to names prefixed google-.

### How does fnt preview a font in the terminal?

The preview command renders the font using chafa, which converts images into terminal graphics, with the sample images coming from screenshots.debian.net. The README also shows a one-liner that cycles through a random font preview every ten seconds.

### How much disk space do all the fonts take with fnt?

The README states that installing the whole Debian set gives about 2700 font files, around 500 fonts, at 1.6 GB, while the Google set gives about 4200 font files, around 1600 fonts, at 1.4 GB.

## Sources

- [alexmyczko/fnt on GitHub](https://github.com/alexmyczko/fnt)
- [Issues](https://github.com/alexmyczko/fnt/issues)
- [README](https://github.com/alexmyczko/fnt/blob/main/README.md)
- [Releases](https://github.com/alexmyczko/fnt/releases)

---

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