Type Tunisian the way you do in chat, Latin letters, French spelling, Arabizi digits, and get Arabic script live, in any app.
# toTunKeyboard — Tunisian Arabizi keyboard for macOS
Type Tunisian the way you do in chat — Latin letters, French spelling, Arabizi digits — and get Arabic script **live, in any app**.
```
3assléma → عسلامة chnowa a7welek? → شنوة أحوالك؟ yezzi → يزّي
```
- **100% offline, rule-based.** No LLM, no network, no telemetry — a lexicon of common Tunisian words plus grapheme rules, in ~400 lines of Swift.
- **System-wide.** A menu bar toggle converts as you type, in every app. Finish a word (space, enter, punctuation) and it's replaced in place with Arabic script.
- **Deterministic.** The same input always produces the same output, and you can read the rules.
## Install
**Download**: grab `toTunKeyboard.zip` from the
latest release, unzip, and
move the app wherever you like. Releases are currently not notarized — if
macOS complains about an unverified developer, right-click the app → **Open**
(once).
**Or build from source** (needs Xcode command line tools):
```bash
git clone
github.com
cd totun
./make-app.sh
open toTunKeyboard.app
```
1. A **TN** item appears in the menu bar. On first launch macOS asks for **Accessibility** permission (System Settings → Privacy & Security → Accessibility) — that's what lets the app rewrite what you type.
2. Toggle with the menu bar item or **⌃⌥T** from anywhere. Enabled shows **تن**.
3. Type normally. Backspace edits the current word; arrows/Esc/clicking cancels it; ⌘/⌃ shortcuts are untouched; plain numbers (`2024`) pass through. `,` `;` `?` become `،` `؛` `؟`.
> `make-app.sh` signs with your Apple Development identity when available, so the Accessibility grant survives rebuilds. With the ad-hoc fallback, re-grant the permission after each rebuild.
## Typing conventions
Digits are the usual Arabizi set:
| `2` | `3` | `5` | `6` | `7` | `8` | `9` |
|---|---|---|---|---|---|---|
| ء (seat rules below) | ع | خ | ط | ح | غ | ق |
French-based digraphs and letters:
| You type | You get | Example …