Chivabwe character data format

Every public character of the Chivabwe script has a permanent page and machine-readable representations, generated from the live character database.

The uploaded SVG is the authoritative visual of a character. The .svg file and the svg field in JSON are that exact SVG, byte-for-byte as stored (only active content such as scripts is ever removed, never geometry, paths, proportions or colour; see svgModified). PNGs and the text preview are secondary, derived representations. If a glyph uses a feature the PNG renderer cannot reproduce exactly (for example a gradient, a filter, embedded text or a non-round stroke join), no PNG is generated for that form — the SVG remains the only image, and pngUrl/textPreview are null. A PNG is never an approximation of the glyph.

URLs

Character page
/characters/<slug>
JSON
/characters/<slug>.json
SVG, initial form
/characters/<slug>.svg
SVG, non-initial form
/characters/<slug>.non-initial.svg
SVG, a variation
/characters/<slug>.variation-<id>.svg
PNG (512×512, white background)
/characters/<slug>.png, .non-initial.png, .variation-<id>.png
Directory
/characters
Whole catalogue + live statistics
/characters.json
Sitemap index
/sitemap.xml

The slug is the character’s Latin transliteration key, lower-cased. Punctuation is spelled out (for example the key C' becomes c-apostrophe), and non-ASCII letters become u<hex>. The slug is the character’s permanent address; the page’s rel="canonical" link always states it.

JSON fields

id, slug, url
Database id, URL slug, canonical page URL
name, latin, ipa
Record name, Latin transliteration, IPA (null if not recorded)
category, categoryLabel
base, combined, variation, number or punctuation
formKind
heritage or triform
orderPosition
Position in the library ordering (1-based)
libraryNote
Free-text note stored with the record, if any
forms
initial / nonInitial: svgUrl, svg (the exact uploaded SVG markup — authoritative), svgModified (true only if unsafe content was stripped), pngUrl (secondary; null if that glyph can't be reproduced exactly in PNG), textPreview (a low-resolution text illustration; null under the same condition)
variations
Joining-context variations: id, name, description, examples, applicableTo, svgUrl, pngUrl, svg
components
For combined characters: ordered component characters and variation used
related
Related characters with relation type
strokeCount, updatedAt
Recorded strokes; last update time

Only public character data is exposed. Fields that the database does not define are null or empty; nothing is inferred.

Catalogue statistics (/characters.json)

A single request returns every public character plus statistics computed from the current data on every request: total character count, a count and percentage for each category (base, combined, variation, number, punctuation), a count and percentage for each written-form style (heritage / tri-form), how many characters have a non-initial form, how many have positional variations (and the total count of those), how many have component breakdowns, how many have relationships (and a count per relationship type), and how many have IPA recorded. Nothing here is hard-coded — add, edit or remove a character and these numbers update on the next request.