Skip to content

keryx font add

Description

Installs a font file into this project, or into your user library.

$ keryx font add brand ./Inter-SemiBold.ttf --licence OFL-1.1
installed "brand" into the project scope -> .keryx/fonts/brand.ttf

Usage

keryx font add <key> <file> [--user] [--licence <id>]
Flag Meaning Default
--user install into ~/.keryx/fonts/ instead of this project false
--licence record the licence this font is distributed under none

Local files only

add takes a path to a file you already have. It does not fetch from a URL or a font service.

That is deliberate rather than unfinished. keryx does fetch its render engine over the network — but from a signed release it can verify. An arbitrary font URL offers nothing equivalent, and a font is executable-adjacent content that ends up committed to a repository. Obtaining the font, and accepting its terms, stays with you; keryx files it.

The file is parsed before anything is written

An unreadable file is refused at install:

$ keryx font add bogus ./notes.txt
ERRO "bogus" is not a font keryx can draw with: parse font: sfnt: invalid bounds

A scope must only offer what it can deliver. Refusing at render time would mean a generation had already been paid for.

Supported formats are .ttf, .otf and .ttc. Variable fonts are not supported — name a static instance.

Keys are filenames, so they are restricted

A key becomes a filename inside the scope directory, so anything that could escape it is refused rather than quietly rewritten:

$ keryx font add ../escape ./brand.ttf
ERRO "../escape" is not a usable font key (letters, digits and hyphens)

Licences are recorded, never enforced

--licence writes what you declare into a fonts.yaml beside the files, along with where the file came from. keryx never checks it and never acts on it.

Committing a project font redistributes it, so the fact is worth recording. keryx does not guess: a licence cannot be reliably detected from a font file, and a wrong guess is worse than silence. When you install without one, it says so:

$ keryx font add brand ./Brand.ttf
installed "brand" into the project scope -> .keryx/fonts/brand.ttf
no licence recorded — committing a font redistributes it; --licence notes what it is

A project font does not travel yet

An installed project font lives in .keryx/fonts/ and nothing distributes it. A colleague who clones the project will not have it, and the reel renders in the fallback face. Until distribution lands, commit the file or use --user plus keryx font promote for anything shared.

See also