The subset fonts in this example use CSS unicode-range to load progressively, as needed. To quote MDN:
The unicode-range CSS descriptor sets the specific range of characters to be used from a font defined by @font-face and made available for use on the current page. If the page doesn't use any character in this range, the font is not downloaded; if it uses at least one, the whole font is downloaded.
See Appendix below for information on further font optimization strategies.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 _ - ( ) [ ] { } # % \' " ‘ ’ “ ” * . , : ; ! ? / \ | @ & • + = < > ← ↑ → ↓ $ ^ ~ ©
ª º ¹ ² ³ ¼ ½ ¾ « » ¡ ¿ ¦ § ¶ · ± ¬ ↔ ¢ £ ¤ ¥ ´ ¯ ¨ ¸ ® ° ↕ ↖ ↗ ↘ ↙ µ
Ā Ă Ą Ć Ĉ Ċ Č Ď Ē Ĕ Ė Ę Ě Ĝ Ğ Ġ Ģ Ĥ Ĩ Ī Ĭ Į İ Ĵ Ķ Ĺ Ļ Ľ Ń Ņ Ň Ō Ŏ Ő Ŕ Ŗ Ř Ś Ŝ Ş Š Ţ Ť Ũ Ū Ŭ Ů Ű Ų Ŵ Ŷ Ÿ Ź Ż Ž Đ Ħ IJ Ŀ Ł Ŋ Œ Ŧ ā ă ą ć ĉ ċ č ď ē ĕ ė ę ě ĝ ğ ġ ģ ĥ ĩ ī ĭ į ĵ ķ ĺ ļ ľ ń ņ ň ō ŏ ő ŕ ŗ ř ś ŝ ş š ţ ť ũ ū ŭ ů ű ų ŵ ŷ ź ż ž đ ħ ı ij ĸ ŀ ł ʼn ŋ œ ŧ
Ă Ạ Ả Ấ Ầ Ẩ Ẫ Ậ Ắ Ằ Ẳ Ẵ Ặ Ẹ Ẻ Ẽ Ế Ề Ể Ễ Ệ Ĩ Ỉ Ị Ơ Ọ Ỏ Ố Ồ Ổ Ỗ Ộ Ớ Ờ Ở Ỡ Ợ Ũ Ư Ụ Ủ Ứ Ừ Ử Ữ Ự Ỳ Ỵ Ỷ Ỹ Đ ă ạ ả ấ ầ ẩ ẫ ậ ắ ằ ẳ ẵ ặ ẹ ẻ ẽ ế ề ể ễ ệ ĩ ỉ ị ơ ọ ỏ ố ồ ổ ỗ ộ ớ ờ ở ỡ ợ ũ ư ụ ủ ứ ừ ử ữ ự ỳ ỵ ỷ ỹ đ ₫
Ǻ Ȁ Ȃ Ḉ Ḍ Ḏ Ȅ Ȇ Ḕ Ḗ Ḝ Ǧ Ḡ Ḥ Ḫ Ȉ Ȋ Ḯ Ḷ Ḻ Ṃ Ṅ Ṇ Ṉ Ǫ Ȍ Ȏ Ȫ Ȭ Ȱ Ṍ Ṏ Ṑ Ṓ Ȑ Ȓ Ṛ Ṟ Ș Ṡ Ṣ Ṥ Ṧ Ṩ Ț Ṭ Ṯ Ȕ Ȗ Ṹ Ṻ Ẁ Ẃ Ẅ Ȳ Ẏ Ẓ Ǽ Ǿ Ə Ɲ DŽ LJ NJ DZ ẞ Ω ǻ ȁ ȃ ḉ ḍ ḏ ȅ ȇ ḕ ḗ ḝ ǧ ḡ ḥ ḫ ȉ ȋ ḯ ḷ ḻ ṃ ṅ ṇ ṉ ǫ ȍ ȏ ȫ ȭ ȱ ṍ ṏ ṑ ṓ ȑ ȓ ṛ ṟ ș ṡ ṣ ṥ ṧ ṩ ț ṭ ṯ ẗ ȕ ȗ ṹ ṻ ẁ ẃ ẅ ȳ ẏ ẓ ǽ ǿ dž lj nj dz ȷ ə ɲ π Dž Lj Nj Dz ʹ ʺ ʻ ʼ ʾ ʿ ˈ ˉ ˊ ˋ ˌ ̀ ́ ̂ ̃ ̄ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̏ ̑ ̒ ̕ ̛ ̣ ̤ ̥ ̦ ̧ ̨ ̮ ̱ ̵ ⁰ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ‐ ‒ – — ― ⟨ ⟩ ‰ ‚ „ ‹ › † ‡ … ⁄ ℓ № ′ ″ ‾ − ≤ ≥ ≈ ≠ ⁒ ∂ ∅ ∆ ∏ ∑ ∕ ∙ √ ∞ ∫ ≡ ▷ ◁ ฿ ₡ ₦ ₨ ₩ ₪ € ƒ ₭ ₱ ₲ ₴ ₵ ₸ ₹ ₺ ₼ ₽ ₿ ˝ ˆ ˇ ˘ ˜ ˙ ˚ ˛ ™ ℮ ■ □ ▲ △ ▶ ▼ ▽ ◀ ◆ ◇ ◊ ☐ ☑ ♡ ♥ ✓
There are ways to further optimize Recursive:
0
, Casual 1
, Weight 300-800
), variable fonts can be “instanced” or “partially instanced” with the FontTools Instancer. You can do it locally on the command line or in a Python script. Alternatively, the Google Fonts API allows you to do this by requesting a special URL, and the “Get Recursive” section of the Recursive Minisite has a UI to help construct these URLs.unicode-range
to your specific use case. E.g. if you are specifically writing in only English & Spanish, you could make a subset for this, using the FontTools Subsetter or by adapting my Recursive subsetting script if you want.Sia
on the homepage.If you want to optimize these fonts but don’t want to use fonts from Google Fonts and also don’t want to dig into code to optimize them on your own, please consider reaching out to Arrow Type to commission custom subsetting & instancing.