CJK web fonts, ready to use.
This monorepo builds versioned CJK web font subsets with font-splitter and serves them through jsDelivr's GitHub endpoint.
Pin a release tag in production:
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@vp-tw/cjk-web-fonts-jigmo@0.0.1/dist/index.css"
/>body {
font-family: "Jigmo", serif;
}The npm packages contain generated WOFF2 files and CSS. Original TTF files and downloaded archives are excluded. Each source manifest records the upstream URL, version, SHA-256 digest, and license.
Requirements:
- Docker
- Python 3.11 or newer
./scripts/build-jigmo.sh
./scripts/build-hanamin.sh
./scripts/build-taipei-sans-tc.sh
./scripts/build-fusion-pixel-font.sh
./scripts/build-glow-sans-tc-normal.sh
python3 scripts/audit_jigmo.py
python3 scripts/audit_hanamin.py
python3 scripts/audit_taipei_sans_tc.py
python3 scripts/audit_fusion_pixel_font.pyGlow Sans builds four weights concurrently. Set FONT_BUILD_CONCURRENCY to a
positive integer to match the available CPU and memory when needed.
For a concurrent rebuild of all five width packages on an 8-core workstation,
use FONT_BUILD_CONCURRENCY=2.
The build uses the versioned vdustr/font-splitter:0.2.2 image. The audit fails
if ordinary cmap codepoints, format 14 variation sequences, CSS coverage, file
count, or conservative CDN size limits do not match the source fonts.
fonts.json is the package registry used by CI and workspace validation. Run
the same checks locally with:
pnpm validate:workspace
pnpm test:workspace-tools
pnpm audit:packages
pnpm checkpnpm audit:packages inspects the exact files and sizes reported by
npm pack --dry-run --json. The versioned policy in
package-size-policy.json keeps the tarball below jsDelivr's documented default
150 MB package limit with repository headroom. Its 20 MB file budget also stays
below Statically's documented 25 MB file limit. Providers without official
numeric limits remain listed as unknown rather than receiving assumed limits.
Every CI run audits all package metadata and current artifacts without rebuilding
fonts. Affected packages are audited again after their generated files are
rebuilt, and the release workflow audits every package before publishing.
Pull requests rebuild only fonts affected by source manifests, generated files,
or their build and audit scripts. A font entry can declare buildInputs for a
helper shared by related packages; changing that helper selects only those
packages. Changes to commonBuildInputs rebuild every font. The
registry file itself contains catalog and orchestration metadata, so changing
fonts.json alone does not rebuild generated font artifacts. The
Full font rebuild workflow provides a manual uncached audit of the entire
repository.
Changesets versions and publishes each font package independently. Do not use an unpinned jsDelivr URL in production. A release must pass CI and a jsDelivr smoke test for the exact npm version before existing font repositories redirect users here.
Generated dist files are committed and verified in pull requests. Releases
publish those reviewed files directly; the release workflow must not rebuild
fonts.
The Astro and Svelte GitHub Pages site provides searchable live specimens, long-text Unicode coverage filtering, variant controls, preview colors and sizes, light/dark/system appearance, and exact-version embed code for jsDelivr, UNPKG, and Statically.
pnpm site:data
pnpm site:dev
pnpm site:buildCatalog metadata lives in fonts.json. site/generated/fonts.json is generated
from package metadata and published CSS coverage; do not edit it directly.
@vp-tw/cjk-web-fonts-tofu— Google Fonts Tofu packaged as browser-compatible WOFF2 subsets.@vp-tw/cjk-web-fonts-adobe-notdef— Adobe NotDef packaged as exact-coverage WOFF2 subsets.@vp-tw/cjk-web-fonts-last-resort— Unicode Last Resort 17.000 diagnostic glyphs packaged as exact-coverage WOFF2 subsets.
