Canonical: https://thehedgeling.com/benchmarks/i18next-cli/RESULTS.html
Language: en-US

[← All benchmarks](https://thehedgeling.com/docs) 

# i18next-cli vs Hedgeling — comparison

Hedgeling 1.3.1, each project with its tuned configuration, against i18next-cli 1.87.0 with a per-project tuned configuration. Both tools ran on the same pinned project commits.

**8** projects · **20,193** Hedgeling strings · **18,678** i18next-cli strings · recall on the same Keycloak strip test: Hedgeling **99.13%** · i18next-cli **91.61%**

## Recall on the same strip test

2,181 messages in the Keycloak Admin Console were unwrapped from their t() calls back into hardcoded English, then both tools were run on the result. A message counts as found when it appears in what the tool shows the developer.

| tool and configuration | messages found | messages missed | recall |
| --- | --- | --- | --- |
| i18next-cli, out of the box | 1,588 | 593 | 72.81% |
| Hedgeling, out of the box | 2,157 | 24 | 98.90% |
| i18next-cli, tuned | 1,998 | 183 | 91.61% |
| Hedgeling, tuned | 2,162 | **19** | **99.13%** |

Out of the box, i18next-cli misses about one in four of these messages; Hedgeling with no configuration at all misses 24. Tuned as far as its options allow it still misses 183, against Hedgeling's 19. About seven in ten of those remaining misses are the same pattern: a success or error message passed straight to a notification helper. i18next-cli does not treat a string handed to a function as user-facing copy, so toast and alert text is invisible to it.

## Brownfield

Already internationalized. Precision is a residue ratio; the TP count is the headline metric (real i18n gaps found).

| project | fw | Hedgeling strings | i18next-cli strings | Hedgeling precision | Hedgeling TP | i18next-cli precision | i18next-cli TP |
| --- | --- | --- | --- | --- | --- | --- | --- |
| keycloak-admin-ui | react | 122 | 121 | 70% | 70/100 | 70% | 70/100 |
| directus | vue | 119 | 178 | 83% | 83/100 | 35% | 35/100 |
| all brownfield projects | 77% | 153/200 | 53% | 105/200 |  |  |  |

## Greenfield

No existing i18n pass. Precision is the headline accuracy number.

| project | fw | Hedgeling strings | i18next-cli strings | Hedgeling precision | Hedgeling TP | i18next-cli precision | i18next-cli TP |
| --- | --- | --- | --- | --- | --- | --- | --- |
| bulletproof-react | react | 103 | 123 | 100% | 100/100 | 99% | 99/100 |
| analog | angular | 116 | 28 | 82% | 82/100 | 32% | 9/28 |
| pocketbase-admin | svelte | 992 | 1,183 | 96% | 96/100 | 68% | 68/100 |
| hf-chat-ui | svelte | 528 | 368 | 100% | 100/100 | 94% | 94/100 |
| appwrite-console | svelte | 4,129 | 1,541 | 98% | 98/100 | 94% | 94/100 |
| supabase-studio | react | 14,084 | 15,136 | 97% | 97/100 | 81% | 81/100 |
| all greenfield projects | 96% | 573/600 | 84% | 445/528 |  |  |  |

**How to read this.** *Greenfield* projects have no existing i18n pass: precision is the headline accuracy metric. *Brownfield* projects already ship i18n, so extraction is gap-finding: precision is a residue ratio and the TP count is the meaningful number (real i18n gaps found). Hedgeling counts come from each project's tuned configuration. i18next-cli counts are the strings its `instrument` command would transform (dry run) with a per-project tuned configuration: file ignores, a custom scorer built from its own lint and dry-run diagnostics that skips noise and raises the confidence of everything else, and every lint tag accepted. For the Vue and Svelte apps its string set also includes the hardcoded-string findings of the community Vue and Svelte lint plugins; there is no Angular plugin, so Analog is JS/TS only on its side. Precision for both tools comes from 100-string samples labeled with the same rubric. Recall for both tools is the same Keycloak strip test: a message counts as found when it appears in what the tool shows the developer.
