Stress, level, rank, gloss, audio and definitions for any of the 12,000 lemmas, inflected forms included, from memory.
Andrij Rudnitsky, who maintains the lang-uk stress dictionary this column is built on, described the reading problem exactly: a word you do not know stops the sentence, and opening a dictionary ends the reading. His answer was to containerize Daniel Klinger’s open Ukrainian-to-English dictionary, put an API on it, and read it from his watch. Dictate the word, see the meaning, keep going, under a second. This page is that idea run over this list’s own tiers, so the answer carries the stress, the validated level and the open recording as well as the definition, and so an inflected form lands on its headword: the text profiler’s form index knows 185,000 forms of the 12,000 lemmas, which is what speech to text hands over when a reader stops on операцію.
dmklinger/ukrainian is 30,111 Ukrainian headwords with stress marks, English definitions, gender and animacy, scraped by its author from the English Wiktionary and from DBnary (which carries definitions for words Wiktionary has no page for yet), with forms filled from the ULIF national dictionary. It is CC BY-SA 3.0, so every answer here that carries a definition carries that license and his name. The committed dmk-dictionary.json snapshot keeps the 9,444 entries whose headword is a list lemma (SHA-256 6a0769103618fd12 of the upstream file, fetched 2026-10-03), without the forms, which thread 04 already publishes for this list.
The 2,900 gaps, by frequency rank, are a generated worklist under contrib/dmklinger-ukrainian/, the same shape as the Wiktionary and dict_uk worklists: a maintainer can take the top of it and know which missing words would buy the most text.
The dictionary stresses its headwords, so it can be read against the stress column. It is not independent evidence: both read the English Wiktionary, so an agreement is mostly the same source seen twice. It is still a check that the column’s pipeline did not drop or move a mark on the way through, and the disagreements are a short list worth reading by eye.
Of the 9,100 covered lemmas, 613 are monosyllables and 1 is a headword the dictionary leaves unmarked, so 8,486 were compared. 13 agree on a variant the column lists second rather than its primary; 129 dictionary headwords carry Wiktionary’s either-stress notation (two marks, read here as two readings); hyphenated compounds are compared part by part, since the column marks the main stress alone where the dictionary marks every part.
| rank | lemma | the column | the dictionary | column status |
|---|---|---|---|---|
| 183 | проект | проє́кт | прое́кт | spelling variant |
| 925 | черговий | чергови́й | черго́вий | dictionary |
| 1,276 | само | са́мо | само́ | dictionary |
| 2,883 | все-таки | все́-таки | все-таки́ | dictionary |
| 3,935 | унаслідок | уна́слідок | унаслі́док | dictionary |
| 4,321 | Данило | Дани́ло | Данило́ | proper noun |
| 4,766 | Миколай | Микола́й | Мико́лай | proper noun |
| 5,923 | Олійник | Олі́йник | Олійни́к | proper noun |
| 6,054 | нульовий | нульови́й | нульо́вий | adjudicated |
| 7,869 | Аліна | А́ліна | Алі́на | proper noun |
| 8,323 | Володар | Во́лодар | воло́да́р | proper noun |
| 8,778 | минулорічний | минулорі́чний | минулорічни́й | adjudicated |
| 9,316 | Поділ | Поді́л | по́діл | proper noun |
| 9,630 | поверх | пове́рх | по́верх | adjudicated |
| 10,524 | підданий | пі́дданий | підда́ний | dictionary |
| 11,769 | черговий | чергови́й | черго́вий | dictionary |
The endpoint takes a word in the path or as q, and format=text returns the answer as plain text, three definitions at most, built to be read on a small screen. An Apple Shortcut, five actions:
https://www.jakelawrence.xyz/api/uk/lookup?q= followed by the Dictated Text variable, then &format=text. (A text variable in the query string needs no escaping; in the path it would.)What comes back:
curl -s 'https://www.jakelawrence.xyz/api/uk/lookup/операцію?format=text' опера́ція noun · B1 · rank 435 operation (a planned undertaking); surgery (procedure involving major incisions); transaction (finance: transfer of funds into, out of, or from an account) female, inanimate
Speech to text sometimes hands over a phrase; the lookup answers the first word and says which. A word that is not one of the 12,000 lemmas, or a form the paradigm tables do not list, comes back as a plain miss rather than a guess; the lemmatizer is the tool for naming an unknown word’s headword.
The JSON answer, one entry shown:
{
"query": "операцію",
"key": "операцію",
"via": "form",
"entries": [
{
"rank": 435,
"lemma": "операція",
"pos": "NOUN",
"level": "B1",
"gloss": "operation",
"ppm": 299.62,
"stress": {
"form": "опера́ція",
"variants": [],
"status": "dictionary"
},
"audio": "https://upload.wikimedia.org/wikipedia/commons/transcoded/d/dd/Uk-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D1%96%D1%8F.ogg/Uk-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D1%96%D1%8F.ogg.mp3",
"dictionary": [
{
"head": "опера́ція",
"pos": "noun",
"info": "female, inanimate",
"defs": [
"operation (a planned undertaking)",
"surgery (procedure involving major incisions)",
"transaction (finance: transfer of funds into, out of, or from an account)"
]
}
]
}
],
"text": "опера́ція noun · B1 · rank 435\noperation (a planned undertaking); surgery (procedure involving major incisions); transaction (finance: transfer of funds into, out of, or from an account)\nfemale, inanimate",
"meta": {
"list": "v0.2.0",
"column": "v1.0.0",
"forms": "v1.2.0",
"dictionary": {
"source": "https://github.com/dmklinger/ukrainian",
"license": "CC BY-SA 3.0",
"fetched": "2026-10-03"
},
"ms": 0,
"attribution": {}
}
}Per entry: rank and pos from the list, level and gloss from the validated course tier (null where the profile has no label; nothing is guessed), ppm (per million running words), stress with the primary form, the accepted variants and the column’s status, audio (a Wikimedia Commons recording or null), and dictionary, every dmklinger entry for the headword with its own label, gender and definitions in its order. via says whether the query matched a headword or an inflected form; text is the plain-text answer; meta names the tiers and carries the attribution.
| limit | value | over it |
|---|---|---|
| query length | 64 characters | 413, one word at a time |
| requests per IP | 120 / minute, 2,000 / hour | 429 with Retry-After in seconds |
| empty query | 400 |
Anonymous, no key, readable cross-origin. Answers are cacheable (a day at the edge, five minutes in a browser) because the data changes only with a deploy. The word is not logged; the only log line is whether it hit a headword, a form, or nothing. Answers that carry definitions are CC BY-SA 3.0 (dmklinger/ukrainian); the list fields are CC BY 4.0 and the stress fields CC BY-SA 4.0, as on the hub.
I build the AI tools and automations a team adopts, and the full-stack apps and data pipelines under them, and ship them to production. Tell me the problem in a sentence and I'll give you an honest read on fit within a day.
Work with me →