Skip to content

mblode/static-to-variable

Repository files navigation

static-to-variable

Turn static fonts into one variable font.

npm

Point it at your separate thin, regular, and bold files and it builds one variable font that slides across every weight in between. Bundling them doesn't work, the outlines don't line up, so it redraws each weight onto a shared skeleton and skips any glyph it can't convert cleanly.

View the static-to-variable demo

Install

npm install -g static-to-variable

Needs Node 24.11+, Python 3.11+, and uv.

Use it

From a folder with your font files:

static-to-variable init    # finds fonts, writes stv.config.json
static-to-variable build   # variable font to build/
static-to-variable release # final TTF and WOFF2

Reverse it with static-to-variable split MyFamily-VF.ttf (one static per weight). Stuck? Run static-to-variable doctor.

Going further

  • Italics, named instances, per-glyph fixes: schema and Inter example.
  • Teach your coding agent the CLI: npx skills add mblode/static-to-variable.
  • CLI docs.

Licenses

The code is MIT. Your fonts keep their own licenses, and that matters: converting a font counts as modifying it, which most commercial EULAs forbid, so you need the foundry's permission. Open licenses like the SIL OFL (most of Google Fonts) allow it. Your own fonts are fine.


Crafted by Matthew Blode

Releases

Packages

Contributors

Languages