Web font tooling has consolidated. Most of what people install is redundant with one Python package and one browser. Here is the short list that covers subsetting, conversion, inspection and fallback matching.
The fonttools Python package is the backbone of the ecosystem — it is what most other tools call underneath. The single most valuable command it gives you is subsetting:
pyftsubset Inter.ttf --unicodes=U+0000-00FF,U+2018-201F --layout-features='kern,liga' --flavor=woff2 --output-file=inter-latin.woff2
Cutting a full Unicode font to Latin plus punctuation routinely takes a multi-hundred-kilobyte file down to a small fraction of its size, because CJK and symbol coverage dominates most modern fonts. ttx, from the same package, dumps a font to XML so you can read exactly what is inside it when something behaves strangely.
Drop a font file into it and it tells you which OpenType features exist, which variable axes are present and their ranges, what languages are covered, and how to use each feature in CSS. This is the fastest way to find out whether the font you licensed actually contains the small caps or tabular figures you are paying for.
One variable font with a weight axis replaces six static weights, and it is almost always smaller than three of them. Declare the range in @font-face with font-weight: 100 900, then use ordinary font-weight values in CSS. For non-standard axes, font-variation-settings: 'opsz' 32. Check the axis ranges in Wakamai Fondue first — a font advertised as variable sometimes ships a single narrow axis.
Use font-display: swap so text renders immediately in a fallback, then match the fallback's metrics so the swap does not move anything: @font-face supports size-adjust, ascent-override, descent-override and line-gap-override. Declare a local fallback family with those overrides tuned to your web font and the layout shift on swap goes to roughly zero. Malte Ubl's fallback generator and the Font Style Matcher both compute the numbers for you.
Browsers partition their HTTP cache per site, so a font loaded from a third-party CDN is downloaded again for every site anyway — the shared-cache argument stopped being true years ago. Self-host, and you also remove a DNS lookup, a TLS handshake and a privacy question. google-webfonts-helper generates the exact subset files and @font-face block for any Google font.
<link rel="preload" as="font" type="font/woff2" href="/fonts/inter-latin.woff2" crossorigin> for the single font used by your headline and body text. The crossorigin attribute is required even for same-origin fonts, and omitting it causes a double download — an error common enough that it is worth checking in the Network panel. Preloading four fonts is worse than preloading none, because they compete with the CSS.
Desktop editors like FontForge or Glyphs matter if you are drawing or patching glyphs; for web delivery work they are overkill. Icon fonts have been superseded by SVG sprites, which are accessible, themeable with currentColor and do not render as a box when the font fails to load.