# Hunspell Compatibility

Reference version: **Hunspell v1.7.3**.

MoonSpell currently does not claim full compatibility.

| Area | Status |
|---|---|
| `.dic` parser | Partial: word, flags, morphology |
| `.aff` parser | Partial: SET, FLAG, TRY, WORDCHARS, AF, AM, PFX, SFX, REP, MAP, PHONE, MAXNGRAMSUGS, SIMPLIFIEDTRIPLE, FORCEUCASE |
| Exact lookup | Implemented with a dictionary hash index |
| Case handling | Partial: Unicode case, Turkish I, CHECKSHARPS, KEEPCASE |
| PFX / SFX | Partial: recursive prefix/suffix chains, continuation flags and cross product |
| Affix conditions | Partial: literals, `.`, character classes, negation, multi-character boundaries |
| Cross product | Implemented for prefix + suffix and extended chains |
| Continuation flags | Partial: twofold suffix/prefix, complex prefixes, circumfix |
| Compound words | Partial: flags, begin/middle/end, min/max, dup/case/triple, permit/forbid, COMPOUNDRULE, pattern replacement, CHECKCOMPOUNDREP, simplified triple |
| REP / MAP / PHONE / TRY | Partial: REP/MAP/TRY, dictionary `ph:` rules, PHONE transformations, ICONV/OCONV |
| Suggestions | Partial: grouped suggestions, word pairs, NGRAM ranking, PHONE, `ph:`, REP/MAP/TRY, capitalization and non-BMP cases |
| Analysis API | Implemented: `analyze`, `stem`, `explain`, structured JSON |
| Performance | Dictionary hash index, native benchmark package and CI smoke benchmark |
| Official fixture runner | Implemented with strict good/wrong/suggestion mapping |

## Current baseline

Full-suite baseline on 2026-09-27:

- Good-word fixtures: `107/112`
- Wrong-word fixtures: `93/95`
- Suggestion Top-1: `152/173`
- Suggestion exact-list matches: `136/173`

The parser and engine are under active development. Full Compatibility may only be declared after all supported Hunspell fixture behavior and suggestion output are verified against the pinned reference version.

The suggestion totals use the same fixture mapping as Hunspell `-a`: entries that produce no suggestion are not paired with a `.sug` row.

Remaining high-complexity failures: German compounding, Hungarian compounding, Nepali zero-width-joiner handling and one OpenTaal compound-pattern case. These are documented as partial, not silently claimed as compatible.
