---
name: alphabeta-language-templates
description: Build AlphaBeta Studio language charset templates — importable .alphabeta.json projects containing a comprehensive character set for a language (no drawn outlines) plus a native preview sentence. Use when asked to prepare a character set, template, or starter project for a specific language or script (e.g. "set up a Thai template", "what codepoints does a Polish font need"). Sixteen ready-made templates ship alongside this skill, each backed by a bundled default font in the app.
---

# Building language charset templates

A template is a valid AlphaBeta Studio project file (format v2 — see the
[alphabeta-project skill](../alphabeta-project/SKILL.md)) whose job is to
define WHICH characters a font for some language needs, not how they look:

```json
{
  "kind": "alphabeta-studio.project",
  "version": 2,
  "project": {
    "name": "<Language> · <Script>",
    "charset": [<every codepoint the language needs>],
    "glyphs": {},
    "preview": { "text": "<short sentence in that language>", "sizePx": 96, "trackingEm": 0 }
  }
}
```

Importing one gives the user a ready-to-draw grid of empty cells in the
right order, with a preview that will light up in their own language as
they draw. `glyphs` stays empty — the charset does all the work.

## Sixteen ready-made templates

Machine-readable index: [/templates/index.json](/templates/index.json).
Every template is also a card on the app's landing page, paired with a
bundled default font (Noto subsets) so a new project starts filled.

| Language | File | Codepoints |
|---|---|---|
| English · Latin | [/templates/english.alphabeta.json](/templates/english.alphabeta.json) | 159 |
| Mandarin Chinese · Han | [/templates/chinese.alphabeta.json](/templates/chinese.alphabeta.json) | 125 |
| Hindi · Devanagari | [/templates/hindi.alphabeta.json](/templates/hindi.alphabeta.json) | 101 |
| Spanish · Latin | [/templates/spanish.alphabeta.json](/templates/spanish.alphabeta.json) | 111 |
| French · Latin | [/templates/french.alphabeta.json](/templates/french.alphabeta.json) | 129 |
| Arabic · Arabic | [/templates/arabic.alphabeta.json](/templates/arabic.alphabeta.json) | 201 |
| Bengali · Bengali | [/templates/bengali.alphabeta.json](/templates/bengali.alphabeta.json) | 84 |
| Portuguese · Latin | [/templates/portuguese.alphabeta.json](/templates/portuguese.alphabeta.json) | 119 |
| Russian · Cyrillic | [/templates/russian.alphabeta.json](/templates/russian.alphabeta.json) | 163 |
| Urdu · Arabic | [/templates/urdu.alphabeta.json](/templates/urdu.alphabeta.json) | 248 |
| Farsi · Arabic (Persian) | [/templates/farsi.alphabeta.json](/templates/farsi.alphabeta.json) | 202 |
| Japanese · Kana + Kanji | [/templates/japanese.alphabeta.json](/templates/japanese.alphabeta.json) | 235 |
| Korean · Hangul | [/templates/korean.alphabeta.json](/templates/korean.alphabeta.json) | 117 |
| German · Latin | [/templates/german.alphabeta.json](/templates/german.alphabeta.json) | 104 |
| Vietnamese · Latin (extended) | [/templates/vietnamese.alphabeta.json](/templates/vietnamese.alphabeta.json) | 223 |
| Greek · Greek | [/templates/greek.alphabeta.json](/templates/greek.alphabeta.json) | 87 |

## Recipes by script family

Use these to build templates for languages beyond the ten above. Always
include the space (U+0020) and the language's everyday punctuation.

### Latin-script languages

Start from printable ASCII (U+0020–U+007E), then add the language's
diacritics in BOTH cases. Examples: Spanish `áéíóúüñ + ¿¡`; French
`àâæçèéêëîïôœùûüÿ + «»`; Portuguese `áâãàçéêíóôõú`; German `äöüß + ÄÖÜẞ`;
Vietnamese needs the full Latin Extended Additional set (U+1EA0–U+1EF9)
plus ăâđêôơư. Don't forget uppercase forms — they're separate codepoints.

### Cyrillic

The core alphabet is one contiguous run: А–я (U+0410–U+044F). Russian adds
Ё/ё (U+0401/U+0451) which sit OUTSIDE that run. Other languages add their
own outliers: Ukrainian єіїґ (U+0404/54, U+0406/56, U+0407/57, U+0490/91),
Serbian ђјљњћџ. Include ASCII digits/punctuation and « ».

### Arabic-script languages (Arabic, Urdu, Farsi, Pashto, …)

Four layers, all required for text that joins correctly:

1. **Base letters** — the shared core U+0621–U+064A (+ tatweel U+0640),
   plus the language's extended letters from U+0671–U+06D3 (Urdu: ٹ ڈ ڑ ں
   ھ ہ ے; Farsi: پ چ ژ گ ک ی).
2. **Marks** — tashkeel U+064B–U+0652 for Arabic; often omitted elsewhere.
3. **Digits & punctuation** — Arabic-Indic U+0660–U+0669 (Arabic) or the
   eastern variants U+06F0–U+06F9 (Urdu/Farsi); ، U+060C, ؛ U+061B,
   ؟ U+061F; Urdu full stop ۔ U+06D4.
4. **Presentation forms** — the contextual (initial/medial/final/isolated)
   glyphs the app's shaping engine maps to. The 28 shared letters, hamza
   variants and lam-alef ligatures all live in Presentation Forms-B:
   include U+FE70–U+FEFC wholesale. Extended letters have their forms in
   Forms-A (U+FB50–U+FBFF) — e.g. peh U+FB56–59, tcheh U+FB7A–7D, keheh
   U+FB8E–91, gaf U+FB92–95, farsi-yeh U+FBFC–FF; right-joining letters
   (ڈ ڑ ژ ے) have only two forms. Without this layer the preview renders
   disconnected letters.

### Indic scripts (Devanagari, Bengali, Tamil, …)

Each block follows the same structure — walk it in this order:

1. Signs: candrabindu, anusvara, visarga (start of block, e.g. U+0901–03)
2. Independent vowels (e.g. Devanagari U+0905–U+0914)
3. Consonants (U+0915–U+0939) — mind unassigned gaps in some blocks
   (Bengali skips U+09A9 and U+09B1)
4. Nukta, and any nukta-precomposed consonants (Devanagari U+0958–U+095F)
5. Dependent vowel signs / matras (U+093E–U+094C)
6. Virama (U+094D) — REQUIRED; conjuncts are impossible without it
7. Script digits (U+0966–U+096F) and danda/double danda (U+0964/65,
   shared across Indic scripts)

### CJK

A "complete" set is thousands of characters — templates should ship a
frequency-based starter instead (the Chinese template uses the ~100 most
frequent simplified hanzi). Add ideographic punctuation 。，、！？：；
「」《》（）, the ideographic space U+3000, and ASCII digits. For Japanese,
full hiragana (U+3041–U+3096) + katakana (U+30A1–U+30FA, plus ー U+30FC)
are small and should be complete even when kanji are sampled. Korean
hangul syllables are composable — a starter should cover the jamo or the
most frequent syllables.

## Rules that apply to every template

- `charset` order = glyph-grid display order. Group logically: letters,
  then digits, then punctuation, then presentation forms.
- The preview sentence must use ONLY codepoints present in the charset
  (including its spaces and punctuation) — validate this before delivering.
- Name the project `<Language> · <Script>`.
- De-duplicate the charset; every entry is a decimal Unicode codepoint.
- RTL layout, contextual Arabic shaping, and literal-character cell labels
  all happen automatically in the app — a template never encodes them.
