Find any font. Use it anywhere.
fontina reads every font on your machine and makes any of them available to any application. No installing, no administrator, on GNU/Linux, macOS and Windows.
- No network
- No telemetry
- Free software
$ fontina scan --system Fonts scanned 28 candidates in 0.03s: 28 parsed (28 faces), 0 unchanged, 0 removed, 0 failed $ fontina list --script Arab --license OFL id family style wght wdth flags license path 1 Amiri Regular 400 100 -----F OFL-1.1 /home/you/Fonts/Amiri-Regular.ttf 1 face(s) $ fontina activate family:Amiri activated Amiri Regular $ fc-match Amiri Amiri-Regular.ttf: "Amiri" "Regular" $
The last two lines are the whole product. fc-match is fontconfig, not fontina: another program, asked which font it would use, answering with the one that was just activated. Nothing was installed, nothing was copied, no password was typed. The commands are the getting-started chapter; that last answer is the assertion scripts/acceptance makes on six distributions on every change to the program.
What it does
Finds and indexes
Every container format — TTF, OTF, TTC, WOFF, WOFF2 — parsed through fontations into a searchable SQLite index. scan
Answers questions
Which faces cover a script, which are variable, which file duplicates which, what licence each one carries. list, facets, dupes
Activates
Makes a font visible to every application, per user and in place, with conflict detection. It never touches a system directory. activate
Draws real glyphs
Shaped, rasterised previews in the terminal over kitty graphics, iTerm2, sixel or half-block text. preview
Exports
CSS @font-face rules, self-contained HTML specimens, and JSON against a published schema. css, specimen, --json
Checks
Health checks with stable identifiers, so a broken name table or a missing hinting program is a finding rather than a surprise. check
And a browser over the same index
fontina ui is the same library with a keyboard on it: facets on the left, families in the middle, the face itself on the right. It shows what is in a font — coverage, axes, features, metrics — and hands the looking to something that can draw. One session, six frames.
filter nothing narrowed — f narrows, / searches 5 families ╭ families ──────────────────────────────────╮╭ Amiri Regular ─────────────────────────────────────────────────────────╮ │ Amiri 1 ││ style weight 400 · width 100% · normal │ │ Bricolage Grotesque 1 V ││ state not active │ │ Inter 2 ││ │ │ Nabla 1 VC ││ features │ │ Source Serif 4 1 ││ liga ○ Standard ligatures │ │ ││ pnum ○ Proportional figures │ │ ││ ss01 ○ Stylistic set 1 │ │ ││ ss02 ○ Stylistic set 2 │ │ ││ ss03 ○ Stylistic set 3 │ │ ││ ss04 ○ Stylistic set 4 │ │ ││ ss05 ○ Stylistic set 5 │ │ ││ ss06 ○ Stylistic set 6 │ │ ││ ss07 ○ Stylistic set 7 │ │ ││ glyphs 6710 · 1699 codepoints │ │ ││ Arab ██████████ 1217 │ │ ││ Latn ██▌░░░░░░░ 291 │ │ ││ Zyyy █▍░░░░░░░░ 160 │ │ ││ Zinh ▍░░░░░░░░░ 31 │ │ ││ features 25: ccmp dnom fina init liga locl mark medi numr pnum rlig │ │ ││ rtlm │ │ ││ │ │ ││ licence OFL-1.1 free │ │ ││ │ │ ││ designer Khaled Hosny │ │ ││ file ../../fixtures/Amiri-Regular.ttf │ │ ││ │ │ ││ metrics 1000 upm · asc 1124 · desc -634 · gap 0 │ │ ││ shape cap 646 · x-height 433 · x/em 0.43 │ │ ││ │ │ ││ │ │ ││ │ ╰────────────────────────────────────────────╯╰────────────────────────────────────────────────────────────────────────╯ $ fontina families / search f narrow F flags x clear ⇥ pane ⏎ open ⌫ back ␣ select t tag c collection a/A activate … ? help
Families, and a filter line that says the library is not narrowed yet.f — Narrow by: script, foundry, your own tags, counted in families.⏎ opens a family: its faces, and the command that lists them.m — every character the font has, by Unicode block.⇥ to the controls: a variable font on sliders, and its features.? — the keys, over whatever you were looking at.
Not a screenshot and not a recording: the browser draws text, so these are that text, read at build time from the snapshot files a test in the CLI asserts on every run. They cannot go stale without a test going red first.
One program, two ways in
The browser is not a second interface with its own vocabulary. Whatever it is showing, the row at the bottom is the command line that would show the same thing — so the way you learn the command line is by using the browser, and the way you script what you just did is to copy the row.
$ fontina families $ fontina families --variable --vendor ATLR search: grot▏ tagged 1 face as favourite
A filter is a flag. A search is a prompt. An action says what it did, until the next reload. Four states of one row, from the test that pins them.
Install
One static binary, the manual, completions and man pages. No installer, nothing to configure.
# GNU/Linux and macOS: put the binary on your PATH tar xf fontina-vX.Y.Z-x86_64-unknown-linux-musl.tar.gz install -Dm755 fontina ~/.local/bin/fontina # Debian and Fedora packages are built from the same binary sudo dpkg -i fontina_X.Y.Z-1_amd64.deb sudo rpm -i fontina-X.Y.Z-1.x86_64.rpm # or from source, with Rust 1.88 or newer cargo install --git https://github.com/oddurs/fontina fontina-cli
Every archive, with checksums and provenance, and how to verify one. Then fontina scan --system ~/Fonts, which is where the top of this page started.
Free software, in these specific ways
The licence is GPL-3.0-or-later. These are the properties behind it, each one you can check.
- It makes no network connections
- Not for updates, not for metadata, not for anything. The core and the command line contain no networking code at all, and a catalogue feature would have to live in a separate package to stay that way.
- It collects nothing
- No analytics, no crash reporting, no identifiers. There is nothing to opt out of because there is nothing there.
- It never asks for elevation
- Everything is per user. It does not modify system font directories, and a font manager that needs administrator rights to show you your own fonts has misunderstood the problem.
- It reports restrictions rather than enforcing them
- A font's
OS/2.fsTypebits are data about the file, not permission the program grants you. fontina tells you what a font claims and then does what you asked. Deciding what you may do with a file on your own machine is not a font manager's job. - It keeps its answers in open formats
- An SQLite index you can open with any tool, JSON against a published schema, CSS Fonts Level 4 as the style model, SPDX for licences. Nothing here is a format only fontina can read.
The project
News
- 0.2.0, and a browser you can work in 2026-09-14
- fontina 0.1.0, the first release 2026-09-04
- The font manager, in the terminal 2026-09-04
- The core and the command line exist 2026-09-03
Older news, or the RSS feed.
Releases
- fontina 0.2.0 (changes)
- Released 2026-09-14. Binaries for GNU/Linux, macOS and Windows, with checksums, provenance and an SBOM.
- Development: main (roadmap, changes)
- Status: 2026-09-04, milestone M1 delivered: organise, activate, watch, preview, browse. Next is M2, typography in the browser.