BloxwapFont

One family for every script

The combined bloxwap-font.css merges Arabic, Armenian, Georgian, Hebrew and CJK companions into Bloxwap Sans and Bloxwap Mono with unicode-range.

Bloxwap Sans and Bloxwap Mono have companion families for Arabic, Armenian, Georgian, Hebrew, Japanese (JP), Korean (KR) and Simplified Chinese (SC). Each is a separate font file, so pages download the scripts they use.

The combined stylesheet hides that split. It declares one family name per style, and gives each file a unicode-range:

TextServed by
Latin, Greek, Cyrillic, figures, symbolsBloxwap Sans / Bloxwap Mono
ArabicBloxwap Sans Arabic / Bloxwap Mono Arabic
ArmenianBloxwap Sans Armenian / Bloxwap Mono Armenian
Georgian (Mkhedruli and Mtavruli)Bloxwap Sans Georgian / Bloxwap Mono Georgian
Hebrew and NiqqudBloxwap Sans Hebrew / Bloxwap Mono Hebrew
Japanese kanaBloxwap Sans JP / Bloxwap Mono JP
HangulBloxwap Sans KR / Bloxwap Mono KR
Han (hanzi) and shared CJK punctuationBloxwap Sans SC / Bloxwap Mono SC

The browser downloads a companion file only when the page contains characters in its range. An English page loads one file; a page with a Korean name in it loads the KR file too.

<link rel="stylesheet" href="https://bloxwap.github.io/font/bloxwap-font.css">
body { font-family: "Bloxwap Sans", system-ui, sans-serif; }
<p>Balance: $1,204.50</p>
<p lang="ko">잔액: $1,204.50</p>
<p lang="zh-Hans">余额:$1,204.50</p>
<p lang="ar" dir="rtl">الرصيد: ‎$1,204.50</p>
<p lang="he" dir="rtl">שָׁלוֹם עוֹלָם</p>
<p lang="hy">Հայաստան, Երևան</p>
<p lang="ka">ქართული ენა · ᲥᲐᲠᲗᲣᲚᲘ</p>

All these lines use the same font-family.

How the ranges are computed

The stylesheet is generated by packages/font/tools/webfonts.py on every font build, from the fonts themselves:

  • The base family claims every character it contains.
  • Each companion claims the characters it has that the base family does not. Shared characters go to the first font in this order: SC, JP, KR, Arabic, Hebrew, Armenian, Georgian. For Japanese kanji and punctuation, use the JP family by name to select its complete repertoire.
  • Runs of characters are merged into ranges within each Unicode block, so 3,500 scattered hanzi become one range instead of thousands.

Each companion is also declared under its own name ("Bloxwap Sans KR", "Bloxwap Mono Arabic", …) for when you want the complete font, Latin included, as a single file.

The file

This is the stylesheet that ships with this site, generated from the current fonts. Long unicode-range lists are shortened here.

bloxwap-font.css
/*
 * Bloxwap Font — https://bloxwap.github.io/font/
 * GENERATED by tools/webfonts.py (run by tools/postprocess.py). Do not edit by hand.
 * SIL Open Font License 1.1. © 2026 Bloxwap, Inc.
 *
 * One family name per style. Companion scripts are merged in with unicode-range,
 * so browsers download a companion font only when a page uses its script.
 */

/* Bloxwap Sans (+ SC, JP, KR, Arabic, Hebrew, Armenian, Georgian via unicode-range) */
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSans/variable/BloxwapSans%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+20-7E, U+A0-24D, U+250-2A7, U+2B0-2E4, … /* 31 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSans/variable/BloxwapSans-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+20-7E, U+A0-24D, U+250-2A7, U+2B0-2E4, … /* 31 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansSC/variable/BloxwapSansSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+3000-303A, U+30FB, U+4E00-4E1D, U+4E22-4E25, … /* 448 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansSC/variable/BloxwapSansSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+3000-303A, U+30FB, U+4E00-4E1D, U+4E22-4E25, … /* 448 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansJP/variable/BloxwapSansJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+3041-309F, U+30A1-30FA, U+30FC-30FF, U+31F0-31FF, … /* 449 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansJP/variable/BloxwapSansJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+3041-309F, U+30A1-30FA, U+30FC-30FF, U+31F0-31FF, … /* 449 ranges */;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansKR/variable/BloxwapSansKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+1100-11C2, U+3131-318E, U+3200-327B, U+AC00-D7A3;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansKR/variable/BloxwapSansKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+1100-11C2, U+3131-318E, U+3200-327B, U+AC00-D7A3;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansArabic/variable/BloxwapSansArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+60C-6FF, U+750-77F, U+8A0-8C7, U+FB50-FD3F, U+FE80-FEFC;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansArabic/variable/BloxwapSansArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+60C-6FF, U+750-77F, U+8A0-8C7, U+FB50-FD3F, U+FE80-FEFC;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansHebrew/variable/BloxwapSansHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+5B0-5F4, U+FB1D-FB4F;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansHebrew/variable/BloxwapSansHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+5B0-5F4, U+FB1D-FB4F;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansArmenian/variable/BloxwapSansArmenian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+531-58F, U+FB13-FB17;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansArmenian/variable/BloxwapSansArmenian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+531-58F, U+FB13-FB17;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansGeorgian/variable/BloxwapSansGeorgian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+10D0-10FF, U+1C90-1CBF;
}
@font-face {
  font-family: "Bloxwap Sans";
  src: url("fonts/BloxwapSansGeorgian/variable/BloxwapSansGeorgian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+10D0-10FF, U+1C90-1CBF;
}

/* Bloxwap Mono (+ SC, JP, KR, Arabic, Hebrew, Armenian, Georgian via unicode-range) */
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMono/variable/BloxwapMono%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+20-7E, U+A0-24D, U+250-2A7, U+2B0-2E4, … /* 30 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMono/variable/BloxwapMono-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+20-7E, U+A0-24D, U+250-2A7, U+2B0-2E4, … /* 30 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoSC/variable/BloxwapMonoSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+3000-303A, U+30FB, U+4E00-4E1D, U+4E22-4E25, … /* 448 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoSC/variable/BloxwapMonoSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+3000-303A, U+30FB, U+4E00-4E1D, U+4E22-4E25, … /* 448 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoJP/variable/BloxwapMonoJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+3041-309F, U+30A1-30FA, U+30FC-30FF, U+31F0-31FF, … /* 449 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoJP/variable/BloxwapMonoJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+3041-309F, U+30A1-30FA, U+30FC-30FF, U+31F0-31FF, … /* 449 ranges */;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoKR/variable/BloxwapMonoKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+1100-11C2, U+3131-318E, U+3200-327B, U+AC00-D7A3;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoKR/variable/BloxwapMonoKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+1100-11C2, U+3131-318E, U+3200-327B, U+AC00-D7A3;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoArabic/variable/BloxwapMonoArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+60C-6FF, U+750-77F, U+8A0-8C7, U+FB50-FD3F, U+FE80-FEFC;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoArabic/variable/BloxwapMonoArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+60C-6FF, U+750-77F, U+8A0-8C7, U+FB50-FD3F, U+FE80-FEFC;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoHebrew/variable/BloxwapMonoHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+5B0-5F4, U+FB1D-FB4F;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoHebrew/variable/BloxwapMonoHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+5B0-5F4, U+FB1D-FB4F;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoArmenian/variable/BloxwapMonoArmenian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+531-58F, U+FB13-FB17;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoArmenian/variable/BloxwapMonoArmenian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+531-58F, U+FB13-FB17;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoGeorgian/variable/BloxwapMonoGeorgian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+10D0-10FF, U+1C90-1CBF;
}
@font-face {
  font-family: "Bloxwap Mono";
  src: url("fonts/BloxwapMonoGeorgian/variable/BloxwapMonoGeorgian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
  unicode-range: U+10D0-10FF, U+1C90-1CBF;
}

/* Bloxwap Pixel */
@font-face {
  font-family: "Bloxwap Pixel";
  src: url("fonts/BloxwapPixel/variable/BloxwapPixel%5BROND%2Cwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Pixel";
  src: url("fonts/BloxwapPixel/variable/BloxwapPixel-Italic%5BROND%2Cwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}

/* Companion families under their own names (complete fonts, including Latin). */
@font-face {
  font-family: "Bloxwap Sans SC";
  src: url("fonts/BloxwapSansSC/variable/BloxwapSansSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans JP";
  src: url("fonts/BloxwapSansJP/variable/BloxwapSansJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans KR";
  src: url("fonts/BloxwapSansKR/variable/BloxwapSansKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Arabic";
  src: url("fonts/BloxwapSansArabic/variable/BloxwapSansArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Hebrew";
  src: url("fonts/BloxwapSansHebrew/variable/BloxwapSansHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Armenian";
  src: url("fonts/BloxwapSansArmenian/variable/BloxwapSansArmenian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Armenian";
  src: url("fonts/BloxwapSansArmenian/variable/BloxwapSansArmenian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Georgian";
  src: url("fonts/BloxwapSansGeorgian/variable/BloxwapSansGeorgian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Sans Georgian";
  src: url("fonts/BloxwapSansGeorgian/variable/BloxwapSansGeorgian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono SC";
  src: url("fonts/BloxwapMonoSC/variable/BloxwapMonoSC%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono JP";
  src: url("fonts/BloxwapMonoJP/variable/BloxwapMonoJP%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono KR";
  src: url("fonts/BloxwapMonoKR/variable/BloxwapMonoKR%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Arabic";
  src: url("fonts/BloxwapMonoArabic/variable/BloxwapMonoArabic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Hebrew";
  src: url("fonts/BloxwapMonoHebrew/variable/BloxwapMonoHebrew%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Armenian";
  src: url("fonts/BloxwapMonoArmenian/variable/BloxwapMonoArmenian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Armenian";
  src: url("fonts/BloxwapMonoArmenian/variable/BloxwapMonoArmenian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Georgian";
  src: url("fonts/BloxwapMonoGeorgian/variable/BloxwapMonoGeorgian%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Bloxwap Mono Georgian";
  src: url("fonts/BloxwapMonoGeorgian/variable/BloxwapMonoGeorgian-Italic%5Bwght%5D.woff2?v=388e7417ad") format("woff2");
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}

Every built family is included in the stylesheet:

FamilyStyleScriptsStatus
Bloxwap SansProportional + italicsLatin, Greek, Cyrillic and symbols2,617 glyphs
Bloxwap MonoMonospaced + italicsLatin, Greek, Cyrillic and symbols2,611 glyphs
Bloxwap Sans ArabicProportionalLatin, Greek, Cyrillic and symbols + Arabic3,480 glyphs
Bloxwap Mono ArabicMonospacedLatin, Greek, Cyrillic and symbols + Arabic3,474 glyphs
Bloxwap Sans KRProportionalLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Korean Hangul14,950 glyphs
Bloxwap Mono KRMonospacedLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Korean Hangul14,944 glyphs
Bloxwap Sans SCProportionalLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Simplified Chinese hanzi6,259 glyphs
Bloxwap Mono SCMonospacedLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Simplified Chinese hanzi6,253 glyphs
Bloxwap Sans JPProportionalLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Japanese kana + Japanese kanji5,157 glyphs
Bloxwap Mono JPMonospacedLatin, Greek, Cyrillic and symbols + CJK punctuation and symbols + Japanese kana + Japanese kanji5,151 glyphs
Bloxwap Sans HebrewProportionalLatin, Greek, Cyrillic and symbols + Hebrew2,720 glyphs
Bloxwap Mono HebrewMonospacedLatin, Greek, Cyrillic and symbols + Hebrew2,714 glyphs
Bloxwap Sans ArmenianProportional + italicsLatin, Greek, Cyrillic and symbols + Armenian2,716 glyphs
Bloxwap Mono ArmenianMonospaced + italicsLatin, Greek, Cyrillic and symbols + Armenian2,710 glyphs
Bloxwap Sans GeorgianProportional + italicsLatin, Greek, Cyrillic and symbols + Georgian2,711 glyphs
Bloxwap Mono GeorgianMonospaced + italicsLatin, Greek, Cyrillic and symbols + Georgian2,705 glyphs
Bloxwap PixelPixel display + italicsLatin, Greek, Cyrillic and symbols2,435 glyphs

Self-hosting it

Download bloxwap-font.css and the fonts/ folder it points to, and keep their relative layout: the CSS refers to fonts/<Family>/variable/<file>.woff2 relative to itself.

your-site/
  bloxwap-font.css
  fonts/
    BloxwapSans/variable/BloxwapSans[wght].woff2
    BloxwapSans/variable/BloxwapSans-Italic[wght].woff2
    BloxwapMono/variable/…
    BloxwapPixel/variable/…
    BloxwapSansKR/variable/…
    BloxwapSansHebrew/variable/…
    BloxwapSansArmenian/variable/…
    BloxwapSansGeorgian/variable/…

The ?v= query on each URL is a content hash for cache-busting; it is harmless on any server.

Caveats

  • Italics. Armenian and Georgian include italic faces. Arabic, Hebrew and the CJK companions use their upright faces in italic text.

  • Language. Set lang on content in other scripts (ar, hy, ka, he, ja, ko, zh-Hans). It drives line breaking, localized forms and screen readers.

  • Direction. Arabic and Hebrew need dir="rtl" on their containers; editable mixed-script text can use dir="auto".

  • Line height. Companions use taller vertical metrics than the Latin fonts, to fit Arabic marks and full-height CJK characters:

    FontsAscenderDescender
    Latin (Sans, Mono, Pixel)960−240
    Arabic1060−440
    Hebrew980−560
    Armenian and Georgian960−240
    Japanese, Korean and Chinese1000−300

    With line-height: normal, a line that mixes scripts can be taller than a Latin-only line. Set an explicit unitless line-height (for example 1.5) so lines stay even.

Edit on GitHub

On this page