Nishi FamilyCompare › Sovereign Typography vs the Font Toolchain

Nishi Compare · measured, not asserted

Sovereign Typography vs the Font Toolchain

Nishi vs the field — every Nishi cell is measured against real organ source at emit time; each gap names the watch contract that will close it.

A zero-dependency parametric font generator -- in-house glyphs, a complete stroke toolkit, real self-validating TTFs across Latin/Han/Hangul/Katakana -- vs FreeType, HarfBuzz, fontTools, and Noto. HONEST: young on coverage + shaping; genuinely alone on sovereignty (everyone else is built ON these tools).

Overview

The purpose, declared position and evidence coverage of this domain. Source presence and completed acceptance are different measures.

Where we are. Measured 2026-08-19. Original in-house glyphs, a complete stroke toolkit, a parametric weight generator, a self-validating TTF emitter, a box-AA rasterizer, data-URI embedding, four scripts from one engine and a legibility census are present; zero-toolchain sovereignty is the exceed. Absent: WOFF2, single-file variable fonts, hinting, shaping and pan-Unicode coverage (about 40 glyphs today against 101k Han alone -- named honestly as a multi-year mountain). 2026-09-02: the domain gained its READ half -- nx_ttf_fontlib (R5) parses and rasterizes professional faces with every metric read from the file (gate 23/23 on Liberation Sans and Microsoft Arial, 95 of 95 ASCII advances agreeing through our parser) and the browser paints through it; the emit half (R0 WOFF2, R1 variable) is unchanged and its Brotli codec is now declared shared with the browser's web-font loading so there can only ever be one.

Where we need to go. Be web-ready and legible small on our own toolchain, then shape complex scripts and climb coverage block by block with the permille published -- never copying a glyph, never depending on the toolchain everyone else is built on.

The unit. 1 u = one measured session-leg. Calibration from landed rungs: the mangagen panel compositor went from existing substrate to shipped and live-verified in ONE leg (2026-08-13); the citations rung went from 3 to 55 domains in one leg across seven seats (2026-08-18); a greenfield engine with a bite-proven gate has measured 2 to 4 legs. Estimates recalibrate as rungs land and PR7 actuals write back.
Cost to web-ready: 3.5 u. Through M0.
Cost to legible small: 6 u. Through M1.
Cost to world scripts: 13 u. Everything below; coverage is a ladder whose top is out of sight by design.

Latest recorded release

2026-09-02 · R5

Liberation family + OFL LICENSE landed on the NAS under knowledge/fonts/ via nx_untar (magic-detected ustar); the gate's Liberation half passes 12/12 on the NAS; its house-font half awaits nx_font_full on the NAS (queued).

Release history and work log

Release entries describe recorded changes; they do not establish that every capability passed evaluation.

10 of 16 capabilities measured|2 of them measured exceeds|6 open|coverage 625/1000|adoption 3 full / 7 partial

Evidence profile — what the gaps on this board actually are

Measured by nx_swcompare_evidence, read back by nx_evprofile_lib. Every figure is a count with its denominator — there is deliberately no score, no grade and no percentage anywhere in this band, because a stored scalar is a field a seat can edit and a counted partition is not.

evidence|grounded 9/9|unsupported 0|gates green 1/1|proven able to fail 0/1|never bitten 1|green at 0/0 0|open gaps 5|of them unnamed 0|of them proof withheld 0|flips ready 0

proven able to fail counts the gates that have a RECORDED RED — nx_gate_bite mutated the gate subject, rebuilt it, watched the gate go red, and that record is inside the shared TTL. never bitten is its complement over the same denominator: those gates ran and were green, and nothing has ever shown them able to detect anything, so their green is a statement about this run and not about the gate. green at 0/0 is a separate and much weaker observation — the gate printed GREEN on a zero denominator, so its own tooth counter says it examined nothing. A gate can be green, non-zero, and still never bitten; that is the common case and it is now visible instead of implied.

partition: grounded + unsupported = 9 vs present 9 · named + unnamed + withheld = 5 vs open 5 · both reconcile

liar-kill conj=GPQN · all four conjuncts held

graded document: BUILDROOT tree, 3805 bytes · gates map: PRIMARY · stamped 15d 1h ago · STALE against the shared TTL of 604800s — this is evidence about a build nobody can vouch for now · source ../knowledge/status/evstamp_typography.verdict

Gap classWhat it is, and the work it names
STALEThis profile is older than the shared TTL, or its clock ran backwards. It is reported as unusable rather than as fresh, because being wrong in the direction of refusing is the safe direction.
This band reports the referee counts. The per-axis worklist rows — which axis is unsupported, which watch is ready to flip, which gap is unnamed — are printed by nx_swcompare_evidence typography itself and are not carried on the stamp, so this page names the classes and the producer names the rows. That split is stated rather than hidden: a count without a worklist is not actionable, and this band is honest about which half of that it is.

Production map

Follow the dependencies, declared acceptance criteria and recorded priorities. Inspect source binding before treating a rank as executable work.

Ranking source binding: PLAN_MATRIX_BOUND_ONLY. Recorded priorities require current acceptance evidence and resource checks before execution.

Ranking matches the captured plan and matrix only. Latest execution outcome, research freshness, accepted delivery and investment return are unverified.

Recorded priority estimates

Order from nx_compare_rank (nx_dr_ocm: (deficit + cost-of-delay + option + enables) x sponsor x self-sufficiency x momentum / cost). FINISH rows are rungs whose symbol is present but whose organ is short of full adoption: listed before new work by this heuristic. Priority is not measured delivery cost or execution readiness. Stamp: # asof=1789563214 domain=typography target_version=0.1 rungs=7 done=1 open=6 finish=0 ranker=nx_dr_ocm

#StageRungPriorityDerivation
#10.1WOFF2 emit (R0) fw_encode266v=4 m=1 c=15
#20.1Single-file variable font (R1) fv_gvar150v=3 m=1 c=20
#3laterShaping conformance against the third-party oracle (R6) fs_shape_tests1285v=9 m=1 c=7
#4laterShaping GSUB and GPOS (R3) fs_shape333v=5 m=1 c=15
#5laterTrueType hinting (R2) fh_hint200v=5 m=1 c=25
#6laterCoverage by Unicode block (R4) gen_unicode_block50v=2 m=1 c=40

Declared roadmap — contract, acceptance, executor, effort

RungCloses withDefinition of done (pre-declared)ExecutorEst.
WOFF2 emit (R0)fw_encodeA WOFF2 container around the self-validating TTF with a sovereign Brotli codec -- ONE codec, whose decoder is the browser's web-font rung BR28 (bwf_load), so emit and load cannot disagree; a browser loads it through the existing data-URI embed and the decoded sfnt checksums to 0xB1B0AFBAOrgan1.5 u
Single-file variable font (R1)fv_gvarfvar and gvar tables carrying the weight axis from ONE stroke definition; a browser renders light through bold from one file; instances match the discrete emits byte-for-byte at the named weightsOrgan2 u
TrueType hinting (R2)fh_hintAutohint-class instructions for small sizes; legibility at 9 to 12 px measured by the legibility census improves by a PRE-DECLARED margin over unhintedOrgan2.5 u
Shaping GSUB and GPOS (R3)fs_shapeKerning, ligatures and contextual substitution tables emitted and a sovereign shaper applying them; Arabic joining on a banked word set matches HarfBuzz glyph sequencesOrgan3 u
Coverage by Unicode block (R4)
after R3
gen_unicode_blockA per-block generator extending the stroke engine across scripts with measured coverage permille of Unicode 17 per block; the mountain is climbed block by block and the number is published, never rounded upOrgan4 u
TrueType READ engine -- our fonts and everyone's, parsed and rasterized by our own code (R5)tf_adv_em1000DONE 2026-09-02 (actual 1 u): nx_ttf_fontlib reads sfnt, cmap format-4 on both the idDelta and the glyphIdArray path, glyf including composite glyphs, hmtx, hhea and the kern table, with EVERY metric read from the file -- the first cut assumed unitsPerEm 1000 and ascender 760 (true only of our emitted house font) and would have halved every professional face silently. Gate 23/23 GREEN on Liberation Sans 2.1.5 and Microsoft Arial (95 of 95 ASCII advances agree through our parser) plus a runtime-synthesised cmap; adopted by the browser render core the same day (browser rung BR26). The domain now owns BOTH halves of the toolchain it replaces: emit (R2, the keystone) and read.Organ1 u
Shaping conformance against the third-party oracle (R6)
after R3
fs_shape_testsThe unicode-org text-rendering-tests suite (shaping and positioning cases with expected output -- the oracle HarfBuzz, CoreText and DirectWrite grade against) run through the sovereign shaper with pass and fail per script published; done when the Latin and Arabic cases report counts on the page and a planted wrong glyph order is caught. The browser's shaping rung BR4 grades against the same suite so there is one oracle for both boards.Organ1.5 u

Milestones

MilestoneRungsCumulative
M0 · Web-readyR0,R1,R54.5 u
M1 · Legible smallR26 u
M2 · World scriptsR3,R4,R614.5 u
Ladder verdict. NOT DECLARED. This board names no dated best-in-class or frontier target and no rung roles (sotatarget and rungrole rows on its plan); the ranker labels it NO-LADDER until it does, and until then its rungs climb toward a target nobody has written down. Bars: 0 (fresh 0, attested 0, stale 0, unattested 0), verdict NO-BAR against the current month 2026-09.

Inspect a rung and its prerequisites

Declared nodes 7. Rank input binding: PLAN_MATRIX_BOUND_ONLY. Dependency order is authored. Implementation, acceptance evidence, authority and resource readiness are unverified. No action is recommended or dispatched here.

Plan SHA-256 cc77e8fc91a5f0e82b708512631863b55bf9fe004932361fb8dc6bea56d230ea. Target rows 0; role rows 0. Existing risks and release worklog retain their own scope; no node completion is inferred.

Use Enter or Space on a rung to inspect its contract. Prerequisite links locate another rung in this list; open its summary to inspect it. Estimates are authored effort, not forecasts.

  1. R0 — WOFF2 emit

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: fw_encode

    Acceptance: A WOFF2 container around the self-validating TTF with a sovereign Brotli codec -- ONE codec, whose decoder is the browser's web-font rung BR28 (bwf_load), so emit and load cannot disagree; a browser loads it through the existing data-URI embed and the decoded sfnt checksums to 0xB1B0AFBA

    Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  2. R1 — Single-file variable font

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: fv_gvar

    Acceptance: fvar and gvar tables carrying the weight axis from ONE stroke definition; a browser renders light through bold from one file; instances match the discrete emits byte-for-byte at the named weights

    Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  3. R2 — TrueType hinting

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: fh_hint

    Acceptance: Autohint-class instructions for small sizes; legibility at 9 to 12 px measured by the legibility census improves by a PRE-DECLARED margin over unhinted

    Authored effort: 2.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  4. R3 — Shaping GSUB and GPOS

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: fs_shape

    Acceptance: Kerning, ligatures and contextual substitution tables emitted and a sovereign shaper applying them; Arabic joining on a banked word set matches HarfBuzz glyph sequences

    Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  5. R4 — Coverage by Unicode block

    Prerequisites: R3 (acceptance unverified)

    Contract: gen_unicode_block

    Acceptance: A per-block generator extending the stroke engine across scripts with measured coverage permille of Unicode 17 per block; the mountain is climbed block by block and the number is published, never rounded up

    Authored effort: 4. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  6. R5 — TrueType READ engine -- our fonts and everyone's, parsed and rasterized by our own code

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: tf_adv_em1000

    Acceptance: DONE 2026-09-02 (actual 1 u): nx_ttf_fontlib reads sfnt, cmap format-4 on both the idDelta and the glyphIdArray path, glyf including composite glyphs, hmtx, hhea and the kern table, with EVERY metric read from the file -- the first cut assumed unitsPerEm 1000 and ascender 760 (true only of our emitted house font) and would have halved every professional face silently. Gate 23/23 GREEN on Liberation Sans 2.1.5 and Microsoft Arial (95 of 95 ASCII advances agree through our parser) plus a runtime-synthesised cmap; adopted by the browser render core the same day (browser rung BR26). The domain now owns BOTH halves of the toolchain it replaces: emit (R2, the keystone) and read.

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  7. R6 — Shaping conformance against the third-party oracle

    Prerequisites: R3 (acceptance unverified)

    Contract: fs_shape_tests

    Acceptance: The unicode-org text-rendering-tests suite (shaping and positioning cases with expected output -- the oracle HarfBuzz, CoreText and DirectWrite grade against) run through the sovereign shaper with pass and fail per script published; done when the Latin and Arabic cases report counts on the page and a planted wrong glyph order is caught. The browser's shaping rung BR4 grades against the same suite so there is one oracle for both boards.

    Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

Learning and practice paths

No structured learning path is declared for this plan. Existing research, roadmap and worklog remain available above.

Capability comparisons

Compare the field, search individual capabilities and open their source and adoption evidence. Documented presence does not establish comparative quality.

Position map — centrality and distinctiveness

The four-quadrant map the field uses for brand strategy (Dawar and Bagga, HBR June 2015), re-derived from this matrix on every publish. Centrality is the share of the category's feature mass a player covers, each feature weighted by how many hold it; distinctiveness is the average lead over each rival on the rows the player holds; breadth is the depth-weighted share of the whole matrix (the bubble); depth is how deeply the rows held are held; momentum is the day-over-day move off the spine (green rising, red falling, grey until day two); the dashed path runs first day → previous day → today. Dividers are the category means. Axes are fitted to the field of play, so read the tick numerals, not the frame. Rival marks are documented presence, so a rival's position reads the record, never its quality. The picture grades its own readability below; the table beside it is the same data for a screen reader or a second method.

Views. 2D cut: centrality, distinctiveness · 3D cube: centrality, distinctiveness, breadth · axes registered: centrality, distinctiveness, breadth, depth, momentum · a board picks its own in knowledge/compare/typography.cdmap (cut|x|y, cube|x|y|z); absent = the HBR defaults
Position map, two-dimensional cutOne bubble per player. Bubble area is breadth, the ring colour is momentum, the dashed lines are the category means, and both axes are fitted to the field of play with their tick numerals shown. Every value is repeated in the table that follows. 400 500 600 700 800 900 1000 240 260 280 300 320 340 360 380 400 centrality (permil, fitted 400–1000) distinctiveness (permil, fitted 240–400) mean 733 mean 317 Unconventional Aspirational Peripheral Mainstream Nishi, centrality 666, distinctiveness 366, breadth 458, depth 733, momentum 0 FreeType, centrality 770, distinctiveness 277, breadth 458, depth 814, momentum 0 HarfBuzz, centrality 500, distinctiveness 347, breadth 333, depth 888, momentum 0 fontTools, centrality 875, distinctiveness 287, breadth 520, depth 757, momentum 0 Noto, centrality 854, distinctiveness 312, breadth 541, depth 722, momentum 0 Nishi FreeType HarfBuzz fontTools Noto

bubble area = breadth · ring = momentum (green rising, red falling, grey until day two) · dashed = category means · axes fitted to the field of play: centrality 400–1000, distinctiveness 240–400 of 0–1000 permil (the full range put every player in one corner)
readability of the 2D cut, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 0 (a fact of the data: two players that close are that close) · data spread 589 permil of the plot · quadrant words unseated 0
text contrast, measured with wcag2-ratio (floors from contrast.conf), light theme: labels 16.24 (floor 4.50) · notes 16.24 (floor 4.50) · quadrant words 5.89 (floor 4.50) · tick numerals 5.89 (floor 4.50) · axis titles 5.59 (floor 4.50) · dark theme: labels 13.78 (floor 4.50) · quadrant words 5.55 (floor 4.50) · axis titles 5.97 (floor 4.50) · dark classes under their floor 0 (one figure serves both themes: a dark shortfall is a token to fix, never a class to hide) · classes refused under their floor 0 (a refused class is not drawn; the scale classes are measured, never hidden) · export: SVG PNG (receipt, rendered by the estate's own rasteriser from this page)
Position map, three-dimensional cubeThe same players in an isometric cube. Each axis is fitted to its own field of play and carries numerals on the floor grid and the vertical axis; each bubble drops a dotted line to its floor shadow so height reads as height. Values are in the table that follows. 400 500 600 700 800 900 1000 240 260 280 300 320 340 360 380 400 300 350 400 450 500 550 600 centrality distinctiveness breadth HarfBuzz: centrality 500, distinctiveness 347, breadth 333 FreeType: centrality 770, distinctiveness 277, breadth 458 fontTools: centrality 875, distinctiveness 287, breadth 520 Noto: centrality 854, distinctiveness 312, breadth 541 Nishi: centrality 666, distinctiveness 366, breadth 458 Nishi FreeType HarfBuzz fontTools Noto
axes fitted: centrality 400–1000 · distinctiveness 240–400 · breadth 300–600 permil · farther bubbles are painted first, nearer ones over them · the floor shadow is each bubble's (x, y) at height 0
readability of the 3D cube, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 0 (a fact of the data: two players that close are that close) · data spread 375 permil of the plot
Position map, small multiplesEvery pair of registered axes as one small cut. Each panel fits both axes to the field of play, the dashed lines are the category means, bubble area is breadth and the ring colour is momentum; the legend below names the colours. 400 1000 240 400 distinctiveness vs centrality Nishi: centrality 666, distinctiveness 366 FreeType: centrality 770, distinctiveness 277 HarfBuzz: centrality 500, distinctiveness 347 fontTools: centrality 875, distinctiveness 287 Noto: centrality 854, distinctiveness 312 400 1000 300 600 breadth vs centrality Nishi: centrality 666, breadth 458 FreeType: centrality 770, breadth 458 HarfBuzz: centrality 500, breadth 333 fontTools: centrality 875, breadth 520 Noto: centrality 854, breadth 541 400 1000 700 950 depth vs centrality Nishi: centrality 666, depth 733 FreeType: centrality 770, depth 814 HarfBuzz: centrality 500, depth 888 fontTools: centrality 875, depth 757 Noto: centrality 854, depth 722 400 1000 480 520 momentum vs centrality Nishi: centrality 666, momentum 500 FreeType: centrality 770, momentum 500 HarfBuzz: centrality 500, momentum 500 fontTools: centrality 875, momentum 500 Noto: centrality 854, momentum 500 240 400 300 600 breadth vs distinctiveness Nishi: distinctiveness 366, breadth 458 FreeType: distinctiveness 277, breadth 458 HarfBuzz: distinctiveness 347, breadth 333 fontTools: distinctiveness 287, breadth 520 Noto: distinctiveness 312, breadth 541 240 400 700 950 depth vs distinctiveness Nishi: distinctiveness 366, depth 733 FreeType: distinctiveness 277, depth 814 HarfBuzz: distinctiveness 347, depth 888 fontTools: distinctiveness 287, depth 757 Noto: distinctiveness 312, depth 722 240 400 480 520 momentum vs distinctiveness Nishi: distinctiveness 366, momentum 500 FreeType: distinctiveness 277, momentum 500 HarfBuzz: distinctiveness 347, momentum 500 fontTools: distinctiveness 287, momentum 500 Noto: distinctiveness 312, momentum 500 300 600 700 950 depth vs breadth Nishi: breadth 458, depth 733 FreeType: breadth 458, depth 814 HarfBuzz: breadth 333, depth 888 fontTools: breadth 520, depth 757 Noto: breadth 541, depth 722 300 600 480 520 momentum vs breadth Nishi: breadth 458, momentum 500 FreeType: breadth 458, momentum 500 HarfBuzz: breadth 333, momentum 500 fontTools: breadth 520, momentum 500 Noto: breadth 541, momentum 500 700 950 480 520 momentum vs depth Nishi: depth 733, momentum 500 FreeType: depth 814, momentum 500 HarfBuzz: depth 888, momentum 500 fontTools: depth 757, momentum 500 Noto: depth 722, momentum 500
Nishi FreeType HarfBuzz fontTools Noto
10 panels over 5 registered axes, every pair once (the lower axis on x, the higher on y) · each panel fitted to its own field of play, first and last tick numerals shown · no labels in a small cut, the legend names the colours; the grade below reports the mark terms only (MM summed over the panels, spread averaged)
readability of the small multiples, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 3 (a fact of the data: two players that close are that close) · data spread 506 permil of the plot
PlayerQuadrantcentralitydistinctivenessbreadthdepthmomentumRows heldDays on spineFirst seen
NishiUnconventional6663664587330 since 2026-09-151022026-09-15
FreeTypeMainstream7702774588140 since 2026-09-15922026-09-15
HarfBuzzUnconventional5003473338880 since 2026-09-15622026-09-15
fontToolsMainstream8752875207570 since 2026-09-151122026-09-15
NotoMainstream8543125417220 since 2026-09-151222026-09-15
DayMatrix rows reviewedPlayers recorded
2026-09-15165
2026-09-16165

players 5|matrix rows 16|feature mass 48|centrality mean 733|distinctiveness mean 317|axes 5|spine days 2 (shown 2)|rows written today 0|readability defects 2D 0 cube 0|spine knowledge/status/cdmap/typography.spine

How this is scored. Every Nishi mark is measured: the generator reads the real organ source on disk and requires the implementing symbol to exist (no self-grading). A watching tag names the organ and symbol contracted to close a gap — the mark flips itself on the next compare beat when that workstream ships, and the comparewatch- plane row flips with it. A dark tag means the organ file EXISTS but does not declare the contracted symbol: something shipped there under another name, and until the contract is repointed to the real entry point (the plan rung and this row) or the function is renamed, that capability is invisible to this board — a build lost to darkness, named so it is not. The flip is necessary, not sufficient: it proves the symbol exists, never that the capability is good. The bar is the rung's pre-declared done-rule, proven by its gate — a symbol shipped without the behaviour behind it is a defect, and the flip is exactly what makes that defect visible instead of quiet. Competitor marks record documented capability presence — presence, not depth or scale. Adoption is measured too: every measured row carries where its organ stands on the estate's ladder (source → built → promoted → registered → invoked; libraries by importer reach minus validation importers; gates by the execution surfaces that run them). A row is fully adopted only at the top of its ladder; anything short is tagged partial with the exact remedy, so a build nobody promoted can no longer read as shipped. Census stamps: importers asof 1789497476, gate census asof 1789498715 (unix seconds; -1 = census absent).

Capability matrix — measured against source

leads / measured exceed present partial absent · click any capability for its evidence

CapabilityNishiFreeTypeHarfBuzzfontToolsNoto
In-house original glyphs (no license)Measured exceed: nf_glyph in runtime/nx_nishi_font_core.nx, verified at emit. Nishi designs its own glyphs in-house (no glyph copied, no license); FreeType/HarfBuzz render others' fonts, fontTools manipulates them, Noto is a font -- none GENERATE original letterforms sovereignly Adoption: LIB-WIRED importers=14 nonval=14 — fully adopted (top of its ladder).
Pros Nishi leads, a measured exceed; ahead of FreeType, HarfBuzz, fontTools, Noto; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
Complete stroke toolkit (H/V/diagonal/curve)Measured: ellipse exists in runtime/nx_font_curve.nx, verified at emit. Every shape a letterform needs, from primitives; the reference tools consume outlines, they don't compose glyphs from strokes rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on disk; ahead of HarfBuzzCons not adopted yet: source exists, never compiled: /api/build it
Parametric weight-axis generatorMeasured: emit_ttf exists in runtime/nx_font_gen.nx, verified at emit. fontTools + Metafont do parametric/variable design as Best [metafont]; Nishi generates light/regular/bold from ONE stroke definition (weight = stroke radius) -- parity in kind, young Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on disk; ahead of FreeType, HarfBuzzCons behind fontTools (leads); not adopted yet: source exists, never compiled: /api/build it
Real self-validating TTF emitterMeasured: csum exists in runtime/nx_font_ttf_emit.nx, verified at emit. fontTools is the reference sfnt writer [fonttools]; Nishi emits a valid sfnt (all tables, big-endian, per-table checksums) that SELF-VALIDATES by re-parsing its own bytes (whole-file checksum == 0xB1B0AFBA) [opentype-otff] -- correct, minimal Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).
not adopted: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked)
Pros Nishi has it, measured on disk; ahead of HarfBuzzCons behind fontTools (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked)
Anti-aliased rasterizerMeasured: nf_blit_glyph_mem exists in runtime/nx_nishi_font_core.nx, verified at emit. FreeType is the Best rasterizer (hinting, subpixel, LCD) [freetype-hinting]; Nishi has a 4x supersample box-AA raster for its own renderer -- present, far behind on hinting/subpixel Adoption: LIB-WIRED importers=14 nonval=14 — fully adopted (top of its ladder).
Pros Nishi has it, measured on disk; ahead of HarfBuzz; fully adopted on the estate ladderCons behind FreeType (leads)
TrueType READ engine -- parse + rasterize real fonts (sfnt, cmap, glyf, composites, hmtx, kern)Measured: tf_adv_em1000 exists in runtime/_hdl_build/nx_ttf_fontlib.nx, verified at emit. FreeType is THE reader and rasterizer (Best) and HarfBuzz reads the same tables to shape (Best); fontTools parses and writes them (Yes); Noto is a font, not a reader. Nishi reads sfnt, cmap format-4 on both paths, glyf with composites, hmtx, hhea and the kern table, every metric READ from the file (gate 23/23 GREEN 2026-09-02 on Liberation Sans and Microsoft Arial -- 95 of 95 ASCII advances agree through our parser), nonzero-winding 4x4 supersampled AA, per-size glyph cache, and hands advances plus pair kern to the browser (browser rung BR26). No hinting, no subpixel, ASCII-only glyph cache so far -- named, not hidden. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=5 nonval=4 — fully adopted (top of its ladder).
Pros Nishi has it, measured on disk; ahead of Noto; fully adopted on the estate ladderCons behind FreeType (leads), HarfBuzz (leads)
data-URI @font-face web embedMeasured: font-face exists in runtime/nx_font_web_embed.nx, verified at emit. Standard web-font embedding; Nishi base64s its own .ttf into an @font-face data-URI (zero external load) -- parity rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on diskCons not adopted yet: source exists, never compiled: /api/build it
Multi-script (Latin+Han+Hangul+Katakana)Measured: gen_hangul exists in runtime/nx_font_universal.nx, verified at emit. HarfBuzz shapes + Noto covers all scripts as Best; Nishi generates 4 scripts from ONE stroke engine (breadth proof, not coverage) -- young rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on diskCons behind HarfBuzz (leads), Noto (leads); not adopted yet: source exists, never compiled: /api/build it
Legibility census + pioneer benchmarkMeasured: row exists in runtime/nx_font_legib_census.nx, verified at emit. Nishi measures its own legibility across screen tiers + benchmarks vs the field; the reference tools don't self-grade type quality -- a sovereign measurement axis Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on disk; ahead of FreeType, HarfBuzz, fontTools, NotoCons not adopted yet: source exists, never compiled: /api/build it
Zero-toolchain sovereigntyMeasured exceed: main in runtime/nx_font_ttf_emit.nx, verified at emit. THE exceed: Noto is built ON fontTools+HarfBuzz; EVERYONE depends on the toolchain. Nishi generates + emits + embeds fonts with ZERO external dependency -- an axis no one else has Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).
not adopted: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked)
Pros Nishi leads, a measured exceed; ahead of FreeType, HarfBuzz, fontTools, NotoCons not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked)
Single-file variable font (fvar/gvar)Open — watching runtime/nx_font_variable.nx : fv_gvar, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. fontTools/Noto ship single-file variable fonts as Best; Nishi emits discrete weights, not one gvar file yet -- honest gap rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching fv_gvar
Pros none measured yetCons behind fontTools (leads), Noto; open contract, nothing on disk yet
Complex-script shaping (GSUB/GPOS)Open — watching runtime/nx_font_shape.nx : fs_shape, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. HarfBuzz is THE shaping engine (Arabic joining, Indic reorder, kerning) [harfbuzz]; Nishi has none -- the biggest gap for Arabic/Indic
watching fs_shape
Pros none measured yetCons behind HarfBuzz (leads), Noto; open contract, nothing on disk yet
Shaping conformance against the third-party oracle (R6)Open — watching runtime/nx_font_shape.nx : fs_shape_tests, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH fs_shape_tests: the unicode-org text-rendering-tests suite (shaping and positioning cases with expected output -- the oracle HarfBuzz, CoreText and DirectWrite grade against) run through the sovereign shaper with pass and fail per script published; one oracle shared with the browser board (rung BR4). FreeType and HarfBuzz are graded against it (Best); fontTools and Noto exercise it indirectly (Yes). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching fs_shape_tests
Pros none measured yetCons behind FreeType (leads), HarfBuzz (leads), fontTools, Noto; open contract, nothing on disk yet
WOFF2 compressionOpen — watching runtime/nx_font_woff2.nx : fw_encode, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. Standard web compression [woff2]; Nishi emits raw TTF only -- honest gap
watching fw_encode
Pros none measured yetCons behind FreeType, HarfBuzz, fontTools, Noto; open contract, nothing on disk yet
TrueType hintingOpen — watching runtime/nx_font_hint.nx : fh_hint, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. FreeType/autohint is Best; Nishi has no hinting -- gap for small sizes [truetype-ref]
watching fh_hint
Pros none measured yetCons behind FreeType (leads), fontTools, Noto; open contract, nothing on disk yet
Full pan-Unicode coverageDARK — runtime/nx_font_universal.nx EXISTS but does not declare gen_unicode_block: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. Noto is THE coverage reference [noto] (Unicode 17 = 101k+ Han alone) [unicode17]; Nishi has ~40 glyphs = a multi-year mountain, honestly named
watching gen_unicode_block
Pros none measured yetCons behind Noto (leads); open contract, nothing on disk yet
Rival-claim provenance. Every Yes, Best or Part mark in a rival column is a claim about someone else's product. rows with rival marks 13 · cited 7 · uncited 6. A cited row carries a reference mark that resolves to a pinned mirror (the refs gate measures that); an uncited row is an observation read and is badged in its evidence until a reference lands. The badge is the receipt, never the proof: a mark proves a mirror exists, not that the mirror supports the code.

Delivery and evidence

Inspect risks, technical debt, rendered observations, experiments and references. Read scope and limitations alongside every result.

Release history and work log

The worked plan, on the board. Every leg appends what it measured, landed, retracted, learned and left queued, per rung, so a crash leaves the next seat a ledger here rather than a transcript to mine. Kinds: measure, land, retract, lesson, queue. Newest last.
WhenRungKindEntry
2026-09-02R5landnx_ttf_fontlib now reads every metric from the file (upem, hhea, cmap glyphIdArray path, composites, kern); gate 23/23 on Liberation Sans and Microsoft Arial (95/95 advances agree through our parser), bite-proven; adopted by the browser render core the same day (BR26).
2026-09-02R5measureHand-baked oracle advances proven equal to floor(hmtx*1000/upem) for all 95 ASCII chars and retired: the file is the ruler.
2026-09-02R5landLiberation family + OFL LICENSE landed on the NAS under knowledge/fonts/ via nx_untar (magic-detected ustar); the gate's Liberation half passes 12/12 on the NAS; its house-font half awaits nx_font_full on the NAS (queued).
2026-09-02R6lessonOne shaping oracle for both boards: the unicode-org text-rendering-tests suite is the third-party referee for R3/R6 and browser BR4, mirrored and pinned in browser.refs.
2026-09-02R5measureThe engine rasterizes any cmap-mapped codepoint (tf_glyph_cp over the shared tf_raster): the browser probe page renders accented Latin, Greek, Cyrillic, em dash and arrow from Liberation outlines with bold and italic slots, measure gate 20/20 with a covered/uncovered codepoint pair (browser BR30). Unmapped scripts still fold to nothing; the notdef cell is queued under browser BR39.
On these two registers. Rows are declared in the domain's plan file and carry the debt id, which is the join key back to the sovereign debt plane — that plane, not this page, is the authority on state. Reconciling them automatically (the regen reading the plane and refreshing these rows) is a named, owed rung; until it lands, treat an id here as a pointer to look up, not a status to trust.
Honest verdict. The coverage above is capability presence measured against source — not depth, scale, or polish, where mature rivals may lead. Exceeds are claimed only where a mechanism backs them. Every open gap is a watch contract: it names the organ and symbol that closes it, and this page flips the cell itself when that workstream ships.

Person · product · place — not yet measured for this domain

Every compare carries this layer. Declare knowledge/compare/typography.ppp (rows surface|nishi or c1..c4|label|url|connect naming OUR live surface and each rival's front door), run nx_ppp_probe domain typography, and this section fills itself on the next beat: the same ruler on both sides — privacy and CX (third-party hosts, tracker classes, cookies, security headers), design and longevity (design hygiene, computed WCAG contrast, render-blocking resources, unsized media, script weight, theme and motion queries), findability (landmarks, skip link, on-site search, breadcrumb, headings, internal links).

The field — discovered, not chosen

Rows written by nx_field_discover from typography.seeds: the industry's own lists (Wikipedia wikitext, GitHub topics, awesome lists) read mechanically, every candidate counted across seeds. The matrix columns above are a SEAT'S pick; this band is the population they were picked from, and the stats line measures one against the other. A rival here is a lead, never a verdict — it earns a column when its capabilities are read and pinned.

field|seeds=4|scanned=4|fetched=4|reused=0|failed=0|named=4|candidates=4|mentions=4|capped=0 rival|FreeType|1|1|col0-freetype|https://freetype.org/freetype2/docs/hinting/text-rendering-general.html|named rival|HarfBuzz|1|1|col1-harfbuzz|https://harfbuzz.github.io/|named rival|fontTools|1|1|col2-fonttools|https://fonttools.readthedocs.io/en/latest/|named rival|Noto|1|1|col3-noto|https://notofonts.github.io/|named
RankRivalSeedsMentionsFirst seedKindLink
1FreeType11col0-freetypenamedhttps://freetype.org/freetype2/docs/hinting/text-rendering-general.html
2HarfBuzz11col1-harfbuzznamedhttps://harfbuzz.github.io/
3fontTools11col2-fonttoolsnamedhttps://fonttools.readthedocs.io/en/latest/
4Noto11col3-notonamedhttps://notofonts.github.io/

field candidates 4|shown 4 of 4|matrix columns in the field 4 of 4|discovered rivals with no column 0|malformed rows 0 (counted, never rendered)|read-capped 0

Gaps from the record — what the estate does that no board carries

The record census (nx_goalmap record) reads the invoked-tool population and every plan queue row and files each organ or directive that NO matrix, plan or gates row names. A row here is a callout the boards missed: adjudicate it onto a board or declare it infrastructure. Census state BLIND (age 83555 s), sources read 4 of 7 declared — a BLIND census is a FLOOR: unread sources can only add rows.

kindnameboardsourceevidence

rows shown 0|this board's directives 0|estate-wide un-boarded organs 492 (listed in full on /compare/ecosystem)|census rows 611|malformed 0 (counted, never rendered)

References

Beyond a link list. Every reference below resolves twice — the publisher's copy and, where banked, the estate's own non-rottable library mirror with a content pin — and carries its evidence class plus the exact claim on this page it grounds. Keyed marks like [key] in the matrix notes jump here. A dash means honestly absent, never assumed.
  1. [freetype-hinting] The FreeType Project. On Slight Hinting, Proper Text Rendering, Stem Darkening and LCD Filters (FreeType 2.6.2 documentation): native vs auto-hinting, stem darkening, LCD subpixel filters, linear alpha blending and gamma. publisher · read in our library knowledge/fetched/cmp_typography_freetype-hint.html · pin h043573d8c7f3695ee9c139b19f7cf6c2325a7869e89a14850ec4d5a933198dc6 · accessed 2026-08-18 · vendor-docGrounds: The FreeType column: "Anti-aliased rasterizer" (FreeType is Best: hinting, subpixel, LCD) and "TrueType hinting" (FreeType/autohint is Best) -- the documented rasterizer features our 4x supersample box-AA raster is honestly graded far behind.
  2. [harfbuzz] HarfBuzz project. HarfBuzz Manual (version 14.3.1): the text shaping library that converts Unicode input into positioned glyphs for any writing system, driving OpenType GSUB/GPOS and AAT layout, with FreeType/CoreText/DirectWrite integration. publisher · read in our library knowledge/fetched/cmp_typography_harfbuzz.html · pin he522a30b49a6066944e84191b82e889dd4b2154f59f9ba73f0d4a2c815f1285f · accessed 2026-08-18 · vendor-docGrounds: The HarfBuzz column: "Complex-script shaping (GSUB/GPOS)" (HarfBuzz is THE shaping engine -- Arabic joining, Indic reorder, kerning) and the shaping half of "Multi-script (Latin+Han+Hangul+Katakana)"; our nx_font_shape is _ABSENT_ against exactly this manual.
  3. [fonttools] fontTools project. fontTools documentation: the Python family of libraries and utilities for manipulating fonts -- ttLib sfnt reader/writer, ttx, subsetting, merging, and variable-font building from designspace files (MIT). publisher · read in our library knowledge/fetched/cmp_typography_fonttools.html · pin h26d5317f50eb39055d82187287cdb3175d3d89a10cdfe7d16fb393e723427d1e · accessed 2026-08-18 · vendor-docGrounds: The fontTools column: "Real self-validating TTF emitter" (fontTools is the reference sfnt writer), "Parametric weight-axis generator" and "Single-file variable font (fvar/gvar)" (fontTools builds variable fonts as Best) -- the toolchain our zero-dependency emit_ttf is measured against.
  4. [noto] Noto Fonts project (Google). Noto dashboard: a collection of high-quality fonts in sans, serif, mono and other styles covering more than 1,000 languages and over 150 writing systems, from Latin, Arabic, Chinese and Cyrillic to Linear B and Zanabazar Square. publisher · read in our library knowledge/fetched/cmp_typography_noto.html · pin hd69df9a725a55719408be7592c72ca76152fabd0d11f3d98791b0ebdaddd7d14 · accessed 2026-08-18 · vendor-docGrounds: The Noto column: "Full pan-Unicode coverage" (Noto is THE coverage reference) and the coverage half of "Multi-script (Latin+Han+Hangul+Katakana)"; the 150-plus-script number is the mountain the row honestly names against our ~40 glyphs.
  5. [opentype-otff] Microsoft Typography. OpenType Specification 1.9.1, The OpenType Font File (otff): big-endian sfnt table directory, required tables (cmap head hhea hmtx maxp name OS/2 post), per-table checksums and the head checksumAdjustment computed so the whole-font checksum equals 0xB1B0AFBA; GSUB/GPOS layout tables and the fvar/gvar/avar variation tables. publisher · read in our library knowledge/fetched/cmp_typography_otspec-otff.html · pin h28f41ba0bce538c72c4141f574e9cf7e868dd88819e7e86eb626b80d6ab5e959 · accessed 2026-08-18 · published-standardGrounds: "Real self-validating TTF emitter" -- the row's "whole-file checksum == 0xB1B0AFBA", big-endian tables and per-table checksums are this section of the standard verbatim; also the definition behind "Single-file variable font (fvar/gvar)" and "Complex-script shaping (GSUB/GPOS)".
  6. [truetype-ref] Apple Inc. TrueType Reference Manual: the TrueType font format, glyph outlines, the instruction set used for hinting, and the sfnt table catalogue (including Apple-specific tables). publisher · read in our library knowledge/fetched/cmp_typography_ttref.html · pin h045e8fe3ed94276de32e463a11b75ba4cdebc91f1d0cbb2fc9c5605d4f3da8a1 · accessed 2026-08-18 · published-standardGrounds: "TrueType hinting" -- the row's gap is the TrueType instruction set this manual defines (fpgm/prep/glyf instructions), which nx_font_hint does not emit; and the outline format nx_font_ttf_emit writes.
  7. [woff2] W3C. WOFF File Format 2.0. W3C Recommendation, 08 August 2024 edition: Brotli-compressed, content-aware preprocessed font packaging for lower network bandwidth. publisher · read in our library knowledge/fetched/cmp_typography_woff2.html · pin h65dfdde1efb57bf123526b9c15a4025ecc78158426a28fefdb396ecf4fc26dc8 · accessed 2026-08-18 · published-standardGrounds: "WOFF2 compression" -- the standard web-font compression every incumbent supports and nx_font_woff2 does not implement (raw TTF data-URI only), the honest gap the row names.
  8. [unicode17] The Unicode Consortium. Unicode 17.0.0, released 9 September 2025: 159,801 characters (4,803 new), and CJK Unified Ideographs Extension J with 4,298 ideographs pushing the CJK ideograph count past 100,000. publisher · read in our library knowledge/fetched/cmp_typography_unicode17.html · pin h245e1a6f30f5c10a11836c315bef19a9c6c4695df5d96c62811ddf62af16031a · accessed 2026-08-18 · published-standardGrounds: "Full pan-Unicode coverage" -- the row's "Unicode 17 = 101k+ Han alone" is this release page's own statement (over 100,000 CJK ideographs after Extension J), the size of the coverage mountain the row names.
  9. [metafont] Knuth, D. E. METAFONT (CTAN package page, version 2.71828182, 2021; Knuth License): a programmatic, parametric specification of a font producing bitmaps and TeX metrics -- the original parametric type-design system. publisher · read in our library knowledge/fetched/cmp_typography_metafont.html · pin h1da2bcf8d9082793885eeabdf77be885b227ebe55cc96d97b15d07d432a34563 · accessed 2026-08-18 · vendor-docGrounds: "Parametric weight-axis generator" -- the row's "fontTools + Metafont do parametric/variable design as Best": Metafont is the precedent for generating a family from one stroke definition, which is exactly what nx_font_gen does with weight = stroke radius (parity in kind, young).

generated by nx_swcompare_matrix (sovereign NishiLang organ) from knowledge/compare/typography.matrix · source checks show implementation presence; runtime and user-outcome evidence are reported separately · JavaScript supports page controls