fontina0.2.0

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.

DownloadGet started

~fontina
$ 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.

fontina ui6 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.

the status linefour moments
 $ 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.fsType bits 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.