Releases: AkaraChen/font
Release list
v1.0.0-beta.1
v1.0.0-beta.1
A coordinated release of every family in this repository, built from
source at 761575048afa08e84ae20f319f2833108d11b553 with the pinned Nix toolchain.
Renamed families. Every product now uses the
AKRhouse name
(AKR Sans SC NFM,AKR Hand SC Text, …). Fonts installed from a
v0.1.xrelease carry their old family names, so editor and terminal
settings that name a font will not follow the upgrade — update them to
the new family name. The old tags are left in place.
The
v0.1.xtags predate the rename and were serif-only.
AKR Casual SC Dual v1.0.0-beta.1
Built from source at this commit — nix build .#casual-coding-sc-release.
What is in the release
| family | AKR Casual SC Dual |
| PostScript / file stem | AKRCasualSCDual |
| profile | coding — terminal and editor face: strict dual-width cell, Nerd icons |
| region | SC |
| weights | Regular, Bold |
| formats | ttf, woff2 |
Formats
.ttf— TrueType outlines, hinting intact. The product the family is designed as — install this one unless you have a reason not to..woff2— The same TrueType outlines in a Brotli container, for@font-faceon the web. Byte-identical glyf data to the TTF; verified per release (fontkit verify-formats).
The AKRCasualSCDual-1.0.0-beta.1.zip carries every file above plus the licences and a README.txt.
Grid
- Latin advance 500 / CJK advance 1000 at UPM 1000 — strict 2:1, so terminal cells line up
- Line box: hhea 950 / -250, typo 880 / -220
Where it comes from
Recursive and Yozai are reserved font names; this product carries neither in its family name. Donors are credited in name IDs 5 and 10.
| role | upstream | pin |
|---|---|---|
| Latin | recursive | v1.085 |
| CJK | yozai | v0.868 |
Donors are credited in name ID 5 and name ID 10 of every product, in the bundled README.txt, and here. Redistributed under the SIL OFL 1.1.
Migration — the family was renamed
RecursiveYozai Dual → AKR Casual SC Dual. This is a breaking change with no in-font compatibility alias. An editor, terminal or CSS rule configured with RecursiveYozai Dual will not find this font; it will silently fall back to your default monospace, which looks like the font broke rather than like it was renamed.
- Update your config to
AKR Casual SC Dual. - File stems follow:
RecursiveYozaiDual-Bold.ttf→AKRCasualSCDual-Bold.ttf. - Uninstall the old family. Nothing stops both from being installed, and while they coexist a font picker shows two entries that draw the same outlines.
The old names carried upstream Reserved Font Names in name ID 1, which the OFL does not permit a redistributed derivative to do. Attribution moved to name IDs 5 and 10 — see the table above. Full note: docs/naming-migration.md.
Verify
nix build .#casual-verify # the family's own gate: cell, EAW, icons, features
just verify casual # products vs the committed fingerprint baseline
Pins, grid and matrix: casual/font.toml.
AKR Hand SC NFM v1.0.0-beta.1
Built from source at this commit — nix build .#handwriting-coding-sc-release.
What is in the release
| family | AKR Hand SC NFM |
| PostScript / file stem | AKRHandSCNFM |
| profile | coding — terminal and editor face: strict dual-width cell, Nerd icons |
| region | SC |
| weights | Regular, Bold |
| formats | ttf, woff2 |
Formats
.ttf— TrueType outlines, hinting intact. The product the family is designed as — install this one unless you have a reason not to..woff2— The same TrueType outlines in a Brotli container, for@font-faceon the web. Byte-identical glyf data to the TTF; verified per release (fontkit verify-formats).
The AKRHandSCNFM-1.0.0-beta.1.zip carries every file above plus the licences and a README.txt.
Grid
- Latin advance 500 / CJK advance 1000 at UPM 1000 — strict 2:1, so terminal cells line up
- Line box: hhea 950 / -250, typo 880 / -220
Where it comes from
Radon and LXGW WenKai are reserved font names; this product carries neither in its family name. Donors are credited in name IDs 5 and 10.
| role | upstream | pin |
|---|---|---|
| Latin | monaspace | v1.400 |
| CJK | wenkai | v1.522 |
Donors are credited in name ID 5 and name ID 10 of every product, in the bundled README.txt, and here. Redistributed under the SIL OFL 1.1.
Migration — the family was renamed
RadonWenKai NFM → AKR Hand SC NFM. This is a breaking change with no in-font compatibility alias. An editor, terminal or CSS rule configured with RadonWenKai NFM will not find this font; it will silently fall back to your default monospace, which looks like the font broke rather than like it was renamed.
- Update your config to
AKR Hand SC NFM. - File stems follow:
RadonWenKaiNFM-Bold.ttf→AKRHandSCNFM-Bold.ttf. - Uninstall the old family. Nothing stops both from being installed, and while they coexist a font picker shows two entries that draw the same outlines.
The old names carried upstream Reserved Font Names in name ID 1, which the OFL does not permit a redistributed derivative to do. Attribution moved to name IDs 5 and 10 — see the table above. Full note: docs/naming-migration.md.
Verify
nix build .#handwriting-verify # the family's own gate: cell, EAW, icons, features
just verify handwriting # products vs the committed fingerprint baseline
Pins, grid and matrix: handwriting/font.toml.
AKR Hand SC Text v1.0.0-beta.1
Built from source at this commit — nix build .#handwriting-text-sc-release.
What is in the release
| family | AKR Hand SC Text |
| PostScript / file stem | AKRHandSCText |
| profile | text — reading face: no terminal cell claim, no Nerd icons |
| region | SC |
| weights | Light, Regular, Bold |
| formats | ttf, woff2, otf |
Formats
.ttf— TrueType outlines, hinting intact. The product the family is designed as — install this one unless you have a reason not to..woff2— The same TrueType outlines in a Brotli container, for@font-faceon the web. Byte-identical glyf data to the TTF; verified per release (fontkit verify-formats)..otf— PostScript/CFF outlines, converted from the TrueType ones with qu2cu. The curves are refit within 1 font unit and TrueType hinting is dropped, so this is the same design and not the same file — for print and desktop publishing workflows that want CFF.
The AKRHandSCText-1.0.0-beta.1.zip carries every file above plus the licences and a README.txt.
Grid
- Latin advance 500 / CJK advance 1000 at UPM 1000
- Line box: hhea 880 / -220, typo 880 / -220
Where it comes from
Radon and LXGW WenKai are reserved font names; this product carries neither in its family name. Donors are credited in name IDs 5 and 10.
| role | upstream | pin |
|---|---|---|
| Latin | monaspace | v1.400 |
| CJK | wenkai | v1.522 |
Donors are credited in name ID 5 and name ID 10 of every product, in the bundled README.txt, and here. Redistributed under the SIL OFL 1.1.
Migration — the family was renamed
RadonWenKai Text → AKR Hand SC Text. This is a breaking change with no in-font compatibility alias. An editor, terminal or CSS rule configured with RadonWenKai Text will not find this font; it will silently fall back to your default monospace, which looks like the font broke rather than like it was renamed.
- Update your config to
AKR Hand SC Text. - File stems follow:
RadonWenKaiText-Bold.ttf→AKRHandSCText-Bold.ttf. - Uninstall the old family. Nothing stops both from being installed, and while they coexist a font picker shows two entries that draw the same outlines.
The old names carried upstream Reserved Font Names in name ID 1, which the OFL does not permit a redistributed derivative to do. Attribution moved to name IDs 5 and 10 — see the table above. Full note: docs/naming-migration.md.
Verify
nix build .#handwriting-verify # the family's own gate: cell, EAW, icons, features
just verify handwriting # products vs the committed fingerprint baseline
Pins, grid and matrix: handwriting/font.toml.
AKR Pixel SC NFM v1.0.0-beta.1
Built from source at this commit — nix build .#pixel-coding-sc-release.
What is in the release
| family | AKR Pixel SC NFM |
| PostScript / file stem | AKRPixelSCNFM |
| profile | coding — terminal and editor face: strict dual-width cell, Nerd icons |
| region | SC |
| weights | Regular |
| formats | ttf, woff2 |
Formats
.ttf— TrueType outlines, hinting intact. The product the family is designed as — install this one unless you have a reason not to..woff2— The same TrueType outlines in a Brotli container, for@font-faceon the web. Byte-identical glyf data to the TTF; verified per release (fontkit verify-formats).
The AKRPixelSCNFM-1.0.0-beta.1.zip carries every fil...
SarasaNZSSlab NFM v0.1.5
SarasaNZSSlab NFM v0.1.5
Default programming ligatures expanded (KIT-240): fold Iosevka dlig into default calt.
Changes
- Editors that only enable “font ligatures” /
caltnow get discretionary sets too:- double chaining:
++--##~~ - logic / bars:
/\\/{||}[||] - markdown checkboxes:
- [ ]- [x] - counter-arrows,
=<, and other former-dligligations
- double chaining:
- Build step:
scripts/expand-default-ligatures.py(runs from06-narrow-symbols.sh) - Based on v0.1.4 product + ligature post-process
Still not present in Iosevka (nothing to enable): e.g. Fira-style &&, **.
Product
| File | Notes |
|---|---|
SarasaNZSSlabNFM-Regular.ttf |
Family SarasaNZSSlab NFM |
SarasaNZSSlabNFM-Bold.ttf |
same |
SarasaNZSSlabNFM-0.1.5.zip |
both + README |
Verify
python3 serif/scripts/verify-2to1.py --check-nerd --check-eaw out/nerd/*.ttf
# half=500 full=1000, eaw-violations=0; calt lookups 63→99
PR: #6
Issue: KIT-240
SarasaNZSSlab NFM v0.1.4
SarasaNZSSlab NFM v0.1.4
CJK/Latin optical weight match via measured stem widths (KIT-239).
Changes
- Recalibrate pathops embolden against IosevkaNSlab vertical stems:
- Regular embolden
14 → 7.5(was ~+13 U too heavy on 中) - Bold embolden
32 → 24(was ~+16 U too heavy)
- Regular embolden
- Add
tools/measure_stroke_width.py+scripts/calibrate-stroke.shfor re-tuning
Product
| File | Notes |
|---|---|
SarasaNZSSlabNFM-Regular.ttf |
Family SarasaNZSSlab NFM |
SarasaNZSSlabNFM-Bold.ttf |
same |
SarasaNZSSlabNFM-0.1.4.zip |
both + README |
Verify
python3 serif/scripts/verify-2to1.py --check-nerd --check-eaw out/nerd/*.ttf
# half=500 full=1000, eaw-violations=0
PR: #5
SarasaNZSSlab NFM v0.1.3
Fixes "my terminal doesn't detect this as a monospaced font".
What was wrong
post.isFixedPitch is the flag hosts read to answer "is this mono?" — macOS Core Text (kCTFontTraitMonoSpace), Chromium / VS Code font pickers, terminals' "monospace only" filters.
FontForge recomputes that flag from the advance histogram, so the Nerd patch step saw a dual-width font and cleared it to 0. Upstream Sarasa ships 1 on exactly the same 2:1 grid:
post.isFixedPitch |
|
|---|---|
upstream SarasaMonoSlabSC (our base) |
1 |
upstream SarasaTermSlabSC |
1 |
| v0.1.0 – v0.1.2 | 0 ❌ |
| v0.1.3 | 1 ✅ |
Verified through macOS Core Text
v0.1.2 : symbolicTraits=0x80000000 monospace=NO
v0.1.3 : symbolicTraits=0x80000400 monospace=YES
PANOSE bProportion is now pinned to 9 (Monospaced) as well, and verify-2to1.py fails on either flag so the Nerd patch can't silently clear them again.
Outlines, advances, Nerd icon set and the EAW fix from v0.1.2 are unchanged — this release only touches the two "I am monospaced" flags.
Known limitation
fontconfig (Linux) derives spacing by scanning advances and classifies any dual-width font as proportional regardless of these flags. Nothing in the font can change that without collapsing the 2:1 grid.
Install
Remove the older version first (same family name can shadow the new one), install, then restart the terminal.
SarasaNZSSlab NFM v0.1.2
Fixes the long-standing "⏵⏵ renders full-width / columns don't line up" bug.
What was wrong
A terminal never asks the font how wide a character is — it sizes the cell from Unicode's East_Asian_Width table via wcwidth(). U+23F5 ⏵ is EAW=N (neutral), so every terminal gives it exactly one cell, with no setting that can change that. v0.1.1 shipped it at advance 1000 — one cell of space, two cells of ink. 1006 codepoints were affected (⏵ ▸ ✓ ⌘ ⌥ ⌫ ↑ ⇧ ➔ …).
v0.1.1's fix targeted OS/2.xAvgCharWidth and the head bbox, which addressed the right-margin gap but not per-glyph advances.
What changed
| v0.1.1 | v0.1.2 | |
|---|---|---|
U+23F5 ⏵ advance |
1000 | 500 |
| EAW violations | 1033 | 0 |
2:1 grid (A=500 / 中=1000) |
OK | OK |
| Nerd icons at half cell | 9496 | 9496 |
- 860 symbols take upstream Sarasa Term's properly designed 1-cell drawings; the remaining 146 are x-compressed and centred.
- 23
EAW=Wglyphs (☰ ⚡ ㆴ) that shipped at half advance are re-centred in the full cell. - Ambiguous-width symbols (
▶ → ① ×,EAW=A) intentionally stay full-width — terminals let you choose 1 or 2 cells for those. Set your terminal to "ambiguous = wide", or rebuild withnarrow-symbol-widths.py --include-ambiguous.
Outlines, Nerd icon set and CJK metrics are otherwise unchanged. New gate: verify-2to1.py --check-eaw.
Install
Zip SarasaNZSSlabNFM-0.1.2.zip, or the individual TTFs. Pick family SarasaNZSSlab NFM. Restart the terminal after installing.
SarasaNZSSlab NFM v0.1.1
SarasaNZSSlab NFM v0.1.1
Terminal metrics hygiene on top of v0.1.0 (KIT-237).
Changes
OS/2.xAvgCharWidthset to half-cell (500, was ~832)headbbox recomputed from half/full glyphs only (drops multi-em outliers that inflatedxMaxto ~2900)- Mitigates large empty band on the right in some terminals after selecting this font
Unchanged
- Glyph outlines / Nerd icon set / 2:1 advances (
A=500,中=1000, Nerd PUA half) - Patcher: Nerd Fonts v3.4.0,
--complete --single-width-glyphs(not--mono)
Verify
verify-2to1.py --check-nerd passed on Regular + Bold (9496 Nerd codepoints @ half).
Install
Download the zip or individual TTFs; pick family SarasaNZSSlab NFM.
Built from main @ 7826fd7 (metric fix applied to v0.1.0 product TTFs via fix-terminal-metrics.py).
SarasaNZSSlab NFM v0.1.0
SarasaNZSSlab NFM v0.1.0
Coding mono: MonoSlab Latin + 霞鹜新致宋 Opt + full Nerd icons, dual-width 2:1 SC.
Assets (Nerd only)
| File | Style |
|---|---|
SarasaNZSSlabNFM-Regular.ttf |
Regular |
SarasaNZSSlabNFM-Bold.ttf |
Bold |
SarasaNZSSlabNFM-0.1.0.zip |
both + install note |
Family name in font menus: SarasaNZSSlab NFM
Build pins
- Sarasa Gothic
v1.0.40(4b908c7…) - LXGW Neo ZhiSong Plus
v1.066, embolden s=14 / s=32 - Nerd Fonts FontPatcher
v3.4.0,--complete --single-width-glyphs(not--mono)
Install
Download the zip or TTFs → install system-wide / per-user fonts → pick SarasaNZSSlab NFM in terminal / IDE.
Verify / rebuild
cd serif && ./scripts/build.sh
python3 scripts/verify-2to1.py --check-nerd out/nerd/*.ttfRepo: https://github.com/AkaraChen/font
KIT-236
RadonWenKai NFM v0.1.0
RadonWenKai NFM — Monaspace Radon Latin × 霞鹜文楷 LXGW WenKai CJK, Nerd Font Mono, strict 2:1.
| Latin / icons | Monaspace Radon NF v1.400 (pre-patched Nerd build) |
| CJK | LXGW WenKai v1.522 · Medium |
| Grid | EN 500 / CJK 1000 @ UPM 1000 |
| CJK slant | 7.5°, measured from Radon's stems (it declares italicAngle 0 but leans) |
| Weight match | Regular = WenKai Medium as designed · Bold = Medium + embolden s=15 |
| Ligatures | Radon liga/calt + ss01–ss10 folded into calt → on by default |
| Faces | Regular, Bold |
Verified
- 2:1 + East_Asian_Width: ASCII/box/halfwidth kana = 500, Han/fullwidth/CJK punctuation = 1000, 0 EAW violations
- 9 164 Nerd/PUA icons on one cell each;
post.isFixedPitch=1+ PANOSEbProportion=9 - Ligature gate is a HarfBuzz shaping test:
== === != -> <- => <= >= :: |>all ligate under plainliga+calt(10/10) - Stroke match on the shipped TTFs: Latin v-stem 73.3 / CJK 77.9 (Regular), 107.2 / 107.7 (Bold)
Install
Download RadonWenKaiNFM-0.1.0.zip (or the individual TTFs) and install both faces. Enable "font ligatures" in your editor; no extra OpenType toggle is needed.
Notes
- Not an official Monaspace / GitHub Next or LXGW product. Both upstreams are SIL OFL 1.1; the OFLs ship inside the zip.
- ⚠ Monaspace's OFL reserves its subfamily names, "Radon" included — this family name is a project source-encoding label and should be renamed before any wider redistribution.
- Known limits: WenKai's own GSUB/GPOS is not merged (no CJK
locl/vertical forms); no Italic face; no hinting.
Build recipe + all pins: kai/README.md (KIT-248)
LilexSansSC Dual v0.1.0
LilexSansSC Dual v0.1.0
Coding dual-width face: Lilex (Latin / programming ligatures) + IBM Plex Sans SC (CJK), strict 2:1 (EN 550 / CJK 1100).
First public product for sans/ after swapping the Latin base from IBM Plex Mono → Lilex (KIT-245 / PR #8).
Assets
| File | Notes |
|---|---|
LilexSansSCDual-Regular.ttf |
Regular |
LilexSansSCDual-Bold.ttf |
Bold |
LilexSansSCDual-0.1.0.zip |
both TTFs + OFL-Lilex + OFL-IBM-Plex + README |
Family name in font menus: LilexSansSC Dual
Highlights
- Latin base: Lilex 2.700 (GSUB/GPOS/GDEF preserved →
caltligatures,ss01–ss04,cv01–cv15, …) - CJK: IBM Plex Sans SC
@ibm/plex-sans-sc@1.1.0(hinted complete TTF) - Grid: EN 550 / CJK 1100 (Lilex native cell 600, X-scaled ~8.3%)
- Verified: 2:1 advances + 107
.ligaglyphs + GSUBcalt
Install
Download the zip or TTFs → install system-wide / per-user fonts → pick LilexSansSC Dual in terminal / IDE. Enable font ligatures if you want == / => / != style programming ligatures.
Rebuild
cd sans && ./scripts/build.sh
# → out/LilexSansSCDual-{Regular,Bold}.ttf
./scripts/package-release.sh 0.1.0License
SIL OFL 1.1 — Lilex RFN “Lilex”, Plex RFN “Plex”. Compound name is a project label; not an official Lilex or IBM face.
Repo: https://github.com/AkaraChen/font
PR: #8
KIT-245
FusionPixel12 NFM v0.1.1
FusionPixel12 NFM v0.1.1
Fixes Chinese quotes (and the rest of the ambiguous-width punctuation) painting on top of the next character in terminals.
The bug
Fusion's zh_hans flavor draws “ ” ‘ ’ … · ‥ ․ ‧ at 1200 — two cells — with the ink parked in the right half of the em box. A terminal never asks the font how wide a character is: it sizes the cell from wcwidth, and EAW=Ambiguous codepoints get exactly one cell in every default configuration.
So “ got 600 of cell but 1200 of ink, and the overflow landed on the following character — “心里颇不宁静” rendered with the opening quote stamped across 心.
Upstream's latin / ja / ko flavors of the same release draw those same nine at 600; only the zh_hans / zh_hant flavors use the full-width -ZH_CN forms, so only this build was affected.
The fix
“ ” ‘ ’ |
… · ‥ ․ ‧ |
|
|---|---|---|
| v0.1.0 | 1200 | 1200 |
| v0.1.1 | 600 | 600 |
New pipeline step 03-narrow-ambiguous.sh transplants the half-width drawings from the latin flavor of the same pinned release — same 12px grid, same hand, nothing scaled or redrawn. It runs before the Nerd patch so the head bbox recompute sees the final outlines.
Targets are derived by comparing the two flavors rather than hard-coded, so a future upstream bump stays honest. A donor glyph whose ink escapes [0, 600], or a base glyph shared by more than one codepoint, is a hard failure rather than a silent squeeze.
verify.py --check-eaw now gates all nine at half advance with ink inside the cell, wired into both 05-verify.sh and package-release.sh so a regression can't ship.
Same class of bug and same remedy as serif/'s 06-narrow-symbols.sh, which pulls 1-cell symbols from Sarasa Term.
Unchanged
Base, grid, the 31 hand-drawn ligatures, and the Nerd Fonts v3.4.0 icon set are all identical to v0.1.0. Pipeline steps were renumbered: nerd-patch 03→04, verify 04→05.
Verified
calt ok: 31 ligature rules, samples present
eaw ok: 9 ambiguous punctuation glyph(s) @ half=600
nerd ok: 5/5 sample PUA present @ half=600
ok half=600 full=1200
Install
Copy FusionPixel12NFM-Regular.ttf into your OS fonts directory, replacing the v0.1.0 file. In your terminal/editor pick family FusionPixel12 NFM, set size to a multiple of 12px (12 / 24 / 36) for crisp pixels, and enable font ligatures.
Build
cd pixel && ./scripts/build.shNote: the pinned nerdfonts/patcher Docker image still ships without fontforge (upstream breakage; latest is the same digest). Use brew install fontforge + NERD_PATCH_METHOD=fontforge ./scripts/04-nerd-patch.sh until it is republished.
PR: #14 · Issue: KIT-250
Fusion Pixel Font is OFL-1.1; the ligature drawings and build scripts are MIT.