Open-source, data-driven visualization of digital language capabilities across Apple, Android (AOSP), Google, Yandex, Microsoft, and independent community projects.
A language may have a technology on one platform but lack it on another. Overall / Cross-platform is an automatic OR aggregation, not a sixth vendor's manually invented scores.
- Interactive towers — editable SVG liquid-fill matrix; English default; Russian available.
- Create Your Language — submit one language/provider assessment with evidence and a live tower preview.
- Contribution guidelines — fork → JSON → Pull Request → review.
- About & methodology — bilingual explanation with examples of the OR calculation.
- Canonical dataset — assembled from the editable JSON files described above.
Edit lang/<BCP47>/<provider>.json, not data/scores.json.
Each language has lang/<code>/meta.json (id, localized name, optional order)
plus independent apple.json, google.json, android.json, microsoft.json,
yandex.json or community.json files as applicable. Providers without assessed
values do not need files. Unassessed null differs from 0.
Run python3 scripts/embed-data.py after changing a language. The script generates
data/languages.json, data/scores.json, data/language-data.json and embeds the
compiled dataset into index.html. These data/*.json outputs are generated,
not separate manually-maintained sources. All original legacy platformScores
(category estimates) were preserved per-provider and remain a fallback until
individual technologyScores are available.
To propose an update, use Create Your Language, download the
JSON and open a PR adding it to contributions/. A maintainer reviews evidence,
then runs python3 scripts/apply_contribution.py contributions/tyv-apple.json
(substitute filename), checks the git diff, rebuilds, and merges. The helper
preserves unrelated technologies and legacy category estimates.
Change canonical JSON files under lang/ without editing HTML or JavaScript. The table below describes configuration and generated compatibility outputs:
| File | Purpose |
|---|---|
data/languages.json |
Generated from lang/*/meta.json; adding a canonical language adds a column. |
data/categories.json |
Category order, descriptions, icons and nested technologies. |
data/scores.json |
Generated from lang/*/<provider>.json; null means not evaluated. |
data/config.json |
Site title, platform selection and bilingual metadata. |
data/language-data.json |
Generated combined file for compatibility; don't edit directly. |
After editing lang/, run python3 scripts/embed-data.py (or npm run build). This rebuilds both the combined JSON and the standalone HTML; it requires only Python 3. You can then open index.html without a local server, and GitHub Pages can serve the exact same file.
Editing in the browser is for experimentation only: use Download JSON to export edits, then transfer the resulting changes into the appropriate source JSON files.
For each language and individual technology, find the best evaluated implementation among Apple, Android AOSP, Google, Yandex, Microsoft and Independent / Community:
Overall(language, technology) = MAX(known provider values)
Overall(language, category) = MEAN(known Overall technology values in the category)
If Apple supports technology A at 80% and Google supports technology B at 90%, both can contribute to the same Overall category. Never simply MAX the vendors' aggregated category scores when detailed technology scores are available.
0= an explicitly assessed absence of support.null/ missing = not evaluated (not zero).- If all sources are unknown, Overall is unknown.
- If only part of a category is evaluated, its displayed average covers only those known technologies and is marked as incomplete (
*). - Until any detailed technology values exist for a category, the older group-level scores are retained. Overall takes the maximum known group score as a provisional fallback. Such results also carry an incomplete marker if some sources are unassessed.
- A score is an estimate of availability, not a scientific benchmark or endorsement by a vendor.
- Open
index.htmldirectly in Safari or Chrome. No server, internet or build system required. - Choose a provider in Platform. The Overall / Cross-platform option is automatically calculated and is read-only.
- Click a floor under a specific provider to edit its score. Click in Overall to inspect the computed estimate and known source(s).
- Export the updated JSON with Download JSON, or upload a dataset to continue editing.
- Open
info.htmlfor bilingual methodology. To open it in Russian directly, useinfo.html?lang=ru.
{
"id": "tyv",
"name": {"en": "Tuvan", "ru": "Тувинский"},
"platformScores": {
"apple": {"keyboard": 100, "keyboardTech": 0},
"google": {"keyboard": null}
},
"technologyScores": {
"google": {"machine": 75, "system": null},
"community": {"machine": 65}
}
}platformScores[providerId][groupId] stores legacy preliminary group estimates. technologyScores[providerId][technologyId] is the intended, more precise model. Group definitions and technology IDs live in groups[] of the JSON dataset. Do not write manually computed values under platformScores.overall. The front end ignores any such value.
Add new languages to languages[] and providers to platforms[]; provider IDs must be unique. Adding a provider causes Overall to include its data automatically. Android (AOSP) and Google services are distinct; Community includes open-source and independent tools.
index.html Offline interactive dashboard
info.html Bilingual explanation and methodology
assets/ Reserved for future assets
data/language-data.json Canonical JSON dataset
scripts/embed-data.py Sync JSON into offline HTML
scripts/test_aggregation.js Test OR / MAX logic without network
README.md This file
LICENSE MIT code license
DATA_LICENSE.md Data and third-party rights policy
When changing canonical JSON, regenerate the embedded copy:
python3 scripts/embed-data.py
node scripts/test_aggregation.jsAfter that, commit both the four editable JSON files and regenerated data/language-data.json and index.html.
- Create repository
Agisight/language-towerson GitHub. - Push the extracted files to
main. - In Settings → Pages, choose Deploy from a branch →
main/(root). - Your site will be available at
https://agisight.github.io/language-towers/when Pages finishes deploying.
No GitHub repository was created automatically by this export.
- Expandable per-technology floor details and provider-level evidence.
- Research provenance, dates, confidence levels and human review.
- More languages, custom comparisons, optional time-series history.
- Aggregation coverage indicators and weighting policies.
Original application code: MIT (see LICENSE). Language corpora, third-party media and community datasets are not automatically covered (see DATA_LICENSE.md). This is an independent project, not affiliated with or endorsed by Apple, Google, Yandex or Microsoft.
Language Towers — независимый проект оценки цифровой поддержки языков. Режим «Все платформы» автоматически собирает лучший результат по каждой подтехнологии среди Apple, Android, Google, Яндекса, Microsoft и независимых решений (логическое ИЛИ / максимум). Затем подсчитывается среднее известных подтехнологий категории. Если пока есть только старые оценки целых категорий, временно берётся максимум известных оценок категории.
0 = подтверждённое отсутствие поддержки, null = не оценено. Неизвестное никогда не превращаем в ноль; неполные оценки помечаются. Выберите конкретную платформу для правки данных, а общий режим остаётся вычисляемым и недоступным для ручного редактирования. Откройте index.html и info.html локально или разместите проект на GitHub Pages.
The toolbar uses native accessible <select> elements with consistent SVG chevrons, explicit labels, and visible keyboard-focus styles. This affects appearance only; platform selection, localization, and data scores are unchanged.
Use Print / PDF in the top toolbar. The HTML automatically fits the entire language matrix to a single A3 landscape page, including the last column. Enable Background graphics in Chrome/Safari print settings so colored liquid and glass fills are included. To output A4 instead, select A4 landscape and use the print dialog's Fit to page / Scale setting, or keep A3 and export to PDF.
The language/platform controls use native accessible select elements with custom chevron styling; their options and data logic are unchanged.
Create your assessment in Create Your Language, download a <language>-<provider>.json, upload it to the contributions/ directory of your GitHub fork and open a Pull Request.
GitHub Actions runs python3 scripts/validate_contributions.py to validate the schema and source-link format. Structural validation does not verify factual scores. A maintainer reviews evidence and manually incorporates approved assessments into data/scores.json.
The editor and the main interface currently use distinct tank renderers; do not assume they are visually pixel-identical.