Skip to content

Releases: AkaraChen/font

v1.0.0-beta.1

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:41
7615750

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 AKR house name
(AKR Sans SC NFM, AKR Hand SC Text, …). Fonts installed from a
v0.1.x release 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.x tags 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-face on 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 DualAKR 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.ttfAKRCasualSCDual-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-face on 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 NFMAKR 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.ttfAKRHandSCNFM-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-face on 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 TextAKR 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.ttfAKRHandSCText-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-face on 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...

Read more

SarasaNZSSlab NFM v0.1.5

Choose a tag to compare

@github-actions github-actions released this 27 Jul 13:50
eca47dd

SarasaNZSSlab NFM v0.1.5

Default programming ligatures expanded (KIT-240): fold Iosevka dlig into default calt.

Changes

  • Editors that only enable “font ligatures” / calt now get discretionary sets too:
    • double chaining: ++ -- ## ~~
    • logic / bars: /\ \/ {| |} [| |]
    • markdown checkboxes: - [ ] - [x]
    • counter-arrows, =<, and other former-dlig ligations
  • Build step: scripts/expand-default-ligatures.py (runs from 06-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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 11:28
ada4c58

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)
  • Add tools/measure_stroke_width.py + scripts/calibrate-stroke.sh for 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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 08:06
340c9df

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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 07:49
649c5a5

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=W glyphs (☰ ⚡ ㆴ) 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 with narrow-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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 07:21
7826fd7

SarasaNZSSlab NFM v0.1.1

Terminal metrics hygiene on top of v0.1.0 (KIT-237).

Changes

  • OS/2.xAvgCharWidth set to half-cell (500, was ~832)
  • head bbox recomputed from half/full glyphs only (drops multi-em outliers that inflated xMax to ~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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 04:59

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/*.ttf

Repo: https://github.com/AkaraChen/font
KIT-236

RadonWenKai NFM v0.1.0

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 16:02
304bd2f

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 + PANOSE bProportion=9
  • Ligature gate is a HarfBuzz shaping test: == === != -> <- => <= >= :: |> all ligate under plain liga+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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 13:54
eca47dd

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 → calt ligatures, ss01ss04, cv01cv15, …)
  • 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 .liga glyphs + GSUB calt

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.0

License

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

Choose a tag to compare

@AkaraChen AkaraChen released this 27 Jul 17:08
9a41106

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.sh

Note: 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.