Russian Pronunciation and IPA Transcription Guide

← Back to Russian transcription ↑ All Languages

Table of Contents

About This Tool

This Russian transcription app uses the Wiktionary Russian Pronunciation Module (ru-pron, the version maintained by Benwing2, with its helpers ru-translit and ru-common) to generate phonetic transcriptions for Russian text. IPA (International Phonetic Alphabet) is a standardized system for transcribing speech sounds using symbols based on the Latin alphabet. This tool converts Russian orthography (spelling) into IPA, helping learners, linguists, and developers understand pronunciation.

Russian spelling does not show stress, and stress decides how most vowels sound. The module therefore needs to know which vowel is stressed before it can transcribe a word. The app obtains the stress in two ways:

  1. Lexicon first. A lexicon built from Wiktionary data dumps (about 500,000 entries) stores the position of the stressed vowel of each word form. If your word is found, the stress-marked form (for example вода́) is passed to the module. Homographs with different stress (for example за́мок / замо́к) are stored as several comma-separated forms, and each one is transcribed.
  2. Fallback for unknown words. If the word is not in the lexicon, the app transcribes it once for every possible stress position (one acute accent on each vowel in turn) and joins the results, for example /a/,/b/,/c/. Click the word to cycle through the candidates. A word with zero or one vowel is transcribed directly, because its stress is not in doubt.

You can also force the stress yourself by typing a combining acute accent (U+0301) after a vowel, and the letter ё is always treated as stressed when no other stress mark is present (see Stress Marks, Monosyllables and ё). Note, however, the known bug that a word which already carries an accent mark currently also receives a second, automatic stress in the fallback path.

About the examples on this page. Every IPA string below was produced by running the real engine, not written by hand. Unless a table says otherwise, the examples show the rule-based path, fed with stress-marked words (го́род), which is exactly what the browser produces for words found in the lexicon. For those words the browser picks the correct stress automatically; the lexicon itself is not available in the offline tool used to generate these examples.

Dialects & Limitations

Phonemic vs Phonetic

Quick Reference (Glossary)

Allophone
A variant pronunciation of a phoneme that doesn't change meaning, such as the reduced vowels [ɐ], [ə], [ɪ] that stand in for unstressed /a/, /o/, /e/ and /i/.
Akanye
The reduction of unstressed а and о: to ɐ immediately before the stress and to ə elsewhere, e.g. молоко́ /məɫɐˈko/.
Ikanye
The reduction of unstressed е, и, я to ɪ, e.g. де́ти /ˈdʲetʲɪ/.
Pretonic
The syllable directly before the stressed syllable. In the module it is the only unstressed position where а/о reduce to [ɐ] rather than [ə].
Tertiary Stress
An internal state in which a vowel is treated as stressed for reduction purposes but gets no stress mark in the output, for example in monosyllables: дом /dom/.
Secondary Stress
A weaker stress marked ˌ, entered with a grave accent (U+0300), e.g. воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/.
Hard Consonant
A consonant with no palatal articulation (твёрдый), e.g. the n in кон /kon/.
Soft (Palatalized) Consonant
A consonant pronounced with the middle of the tongue raised toward the hard palate, marked ʲ, e.g. конь /konʲ/.
Iotated Vowel
The letters е, ё, ю, я, which stand for /j/ + vowel at the start of a word and after another vowel or a sign, but only soften the preceding consonant after a consonant: я́ма /ˈjamə/ vs. мя́со /ˈmʲasə/.
Soft Sign (ь) / Hard Sign (ъ)
Letters that have no sound of their own: ь softens the preceding consonant, ъ keeps it hard and separates it from an iotated vowel.
Hushing Consonants
The sounds spelled ж, ш (always hard) and ч, щ (always soft), plus ц (hard except before я, ю, ё, ь; an affricate).
Retroflex (ʂ, ʐ)
The symbols the module uses for hard ш ʂ and hard ж ʐ.
Alveolo-palatal (ɕ, ʑ, t͡ɕ)
The soft hushing sounds: щ is the long ɕː, ч is the affricate t͡ɕ.
Affricate
A complex consonant beginning as a stop and releasing as a fricative, written with a tie bar: t͡s (ц), t͡ɕ (ч), d͡ʐ (дж).
Final Devoicing
Voiced obstruents become voiceless at the end of a word: хлеб /xlʲep/, год /ɡot/.
Voicing Assimilation
An obstruent takes over the voicing of the following obstruent: во́дка /ˈvotkə/ (д → [t]), сбор /zbor/ (с → [z]).
Gemination
A long (doubled) consonant, marked ː, e.g. ва́нна /ˈvanːə/. In most positions the module removes orthographic doubling, e.g. кла́сс /ˈkɫas/.
Clitic / Liaison Tie
The tie ‿ joins an unstressed preposition or particle to the next or previous word as one phonetic word: под сто́лом /pɐt͡s‿ˈstoɫəm/.
Foot Boundary
The symbol |, which the module inserts for a comma or dash: /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/.
Optional Segment
A segment in parentheses can be pronounced or omitted: (j) in ябло́ко /(j)ɪˈbɫokə/, (ː) in два́дцать /ˈdvat͡s(ː)ɨtʲ/, and ⁽ʲ⁾ (optional palatalization) in вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/.
Fronting
The shift of /a/ to æ and of /u/ to ʉ between soft consonants: пять /pʲætʲ/, лю́ди /ˈlʲʉdʲɪ/.
Retraction
The shift of /e/ to ɛ and of /i/ to ɨ after the always-hard ж, ш, ц: цена́ /t͡sɨˈna/, ши́на /ˈʂɨnə/.
Schwa
The neutral vowel ə, found in most unstressed а/о syllables not directly before the stress.
Lexicon (V4)
The compressed word list used by the app. Instead of storing IPA, the V4 format stores the stressed-vowel position of each word form, and the module generates the IPA from it.
Homograph
Words spelled alike but stressed differently, e.g. за́мок (castle) and замо́к (lock). Each form is transcribed separately and the results can be cycled by clicking.
Hiatus
Two adjacent vowels in different syllables; in the module two adjacent reduced vowels merge to ɐ‿ɐ, e.g. по абази́ну /pɐ‿ɐbɐˈzʲinʊ/.
NFD
Unicode Normalization Form Decomposed: accents are split off as combining characters (the module reads the stress as U+0301 after the vowel).

How to Read IPA Symbols

This table helps you understand the IPA symbols used in Russian transcriptions. For each symbol, we provide approximate English equivalents where possible. The app shows the transcription between slashes.

Vowel Symbols

IPA Example English Approximation Notes
/a/ ма́ма /ˈmamə/ "father" (shorter) Stressed а, or stressed я after a soft consonant when no soft consonant follows
/ɐ/ вода́ /vɐˈda/ "cup" (UK) Unstressed а/о in the syllable directly before the stress, and word-initial unstressed а/о
/ə/ молоко́ /məɫɐˈko/ "about" Unstressed а/о elsewhere; also word-final -я
/e/ ле́то /ˈlʲetə/ "say" (without glide) Stressed е after a soft consonant (or after /j/ at a word start)
/ɛ/ э́то /ˈɛtə/, же́ны /ˈʐɛnɨ/ "bed" Stressed э; also stressed е after the always-hard ж, ш, ц
/i/ и́ли /ˈilʲɪ/ "see" (without glide) Stressed и (soft consonant before it)
/ɪ/ де́ти /ˈdʲetʲɪ/ "sit" Unstressed е, и, я (ikanye)
/o/ до́ма /ˈdomə/ "more" (without glide) Stressed о
/ɵ/ тётя /ˈtʲɵtʲə/ "bird" with rounded lips Stressed ё (also in ьо), a rounded central vowel
/u/ ру́чка /ˈrut͡ɕkə/ "food" (without glide) Stressed у, ю
/ʊ/ пучо́к /pʊˈt͡ɕɵk/ "put" Unstressed у, ю
/ɨ/ ры́ба /ˈrɨbə/ No English equivalent ы; also и after ж, ш, ц. Say "i" with the tongue pulled back
/æ/ пять /pʲætʲ/ "cat" Fronted /a/ between soft consonants
/ʉ/ лю́ди /ˈlʲʉdʲɪ/ No English equivalent Fronted /u/ between soft consonants, a rounded close central vowel

Consonant Symbols

Russian has hard/soft pairs for most consonants. The soft member is written with the superscript ʲ (see Hard and Soft Consonants). Symbols that are the same as in English (p, b, t, d, k, f, m, n, s, z) are listed in the Mapping tables below.

IPA Example English Approximation Notes
/ɡ/ кни́га /ˈknʲiɡə/ "go" The tool prints the single-story IPA g (U+0261)
/x/ хорошо́ /xərɐˈʂo/ Scottish "loch" х; also the result of г before к/ч in мягк-, лёгк-, легч-
/ʂ/ ши́на /ˈʂɨnə/ "shoe" (tongue curled back) Always hard ш
/ʐ/ жена́ /ʐɨˈna/ "measure" (tongue curled back) Always hard ж
/t͡s/ пти́ца /ˈptʲit͡sə/ "cats" ц, and assimilated тс/дз
/t͡ɕ/ ту́ча /ˈtut͡ɕə/ "cheese" (soft) ч, always soft
/ɕː/ щёки /ˈɕːɵkʲɪ/ Long "sh" (soft) щ, always soft and long; also сч, зч, жч
/ʑː/ дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/ Long soft "zh" The second variant for зж/жж
/d͡ʐ/ дже́м /ˈd͡ʐʐɛm/ "judge" (tongue curled back) дж
/d͡ʑ/ до́чь бы /ˈdod͡ʑ‿bɨ/ Soft "judge" ч voiced before a voiced obstruent
/d͡z/ от зо́лота /ɐd͡z‿ˈzoɫətə/ "adze" дз/тз at a word boundary (rare)
/j/ я́ма /ˈjamə/ "yes" й; the glide in iotated vowels
/ɫ/ лук /ɫuk/ "full" (dark L) Hard л
/lʲ/ люк /lʲuk/ "million" (light L) Soft л
/r/ ры́ба /ˈrɨbə/ Spanish "pero" Alveolar trill or tap; soft [rʲ] before soft vowels

Diacritical Marks

Symbol Name Meaning Example
ˈ Primary stress Main emphasis in word, written before the stressed syllable кни́га /ˈknʲiɡə/
ˌ Secondary stress Weaker emphasis (typed as a grave accent) воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/
ʲ Palatalization Consonant is soft конь /konʲ/
⁽ʲ⁾ Optional palatalization Either soft or hard is acceptable вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/
ː Length mark Consonant is long (geminate) ва́нна /ˈvanːə/
(ː) Optional length Long or short is acceptable два́дцать /ˈdvat͡s(ː)ɨtʲ/
(j) Optional glide The /j/ may or may not be heard ябло́ко /(j)ɪˈbɫokə/
‿ Linking tie Words pronounced as one unit (clitic + host); module with phrases only, not shown by the app под сто́лом /pɐt͡s‿ˈstoɫəm/
| Foot boundary Pause (from a comma or dash); module with phrases only, not shown by the app /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/
͡ Tie bar Affricate (single unit) /t͡s/ in цена́ /t͡sɨˈna/

Interactive Features

Multiple Pronunciation Variants

For Russian, a word can have several candidate transcriptions for different reasons:

When multiple variants exist, click the word to cycle through them. The currently selected variant will be used for PDF/CSV export.

Russian Pronunciation Guide

This guide explains the pronunciation rules that the Wiktionary module actually implements. Russian spelling is only partly phonetic: vowels change with stress, consonants soften before certain vowels, and neighboring consonants influence each other's voicing and softness. The sections below follow the processing order of the module wherever possible; the Implementation Details section lists the exact stages.

Note: the app splits the input at spaces and transcribes each word on its own, and it strips punctuation. The liaison tie ‿, the foot boundary | and all cross-word effects below therefore show the capability of the module (which accepts whole phrases) and will not appear in the app's output.

Stress and Vowel Reduction (Akanye & Ikanye)

The module's allophones table gives each vowel three values: the stressed value, the value in the pretonic syllable (immediately before a primary or secondary stress), and the value elsewhere (all other unstressed syllables). The pretonic slot is only used before a real stress mark (acute or grave), not before a tertiary stress.

Letter Stressed Pretonic Elsewhere Examples
а a ɐ ə трава́ /trɐˈva/, голова́ /ɡəɫɐˈva/, ма́ма /ˈmamə/
о o ɐ ə молоко́ /məɫɐˈko/, борода́ /bərɐˈda/, го́род /ˈɡorət/
е e ɪ ɪ дети́ /dʲɪˈtʲi/, де́ти /ˈdʲetʲɪ/, челове́к /t͡ɕɪɫɐˈvʲek/
и i ɪ ɪ ви́дел /ˈvʲidʲɪɫ/, лицо́ /lʲɪˈt͡so/
я a (æ between soft consonants) ɪ ɪ мя́со /ˈmʲasə/, язы́к /(j)ɪˈzɨk/
ё ɵ (o after ж, ш) ɪ ɪ тётя /ˈtʲɵtʲə/, жёлтый /ˈʐoɫtɨj/
у u ʊ ʊ ту́ча /ˈtut͡ɕə/, пучо́к /pʊˈt͡ɕɵk/
ю u (ʉ between soft consonants) ʊ ʊ лю́ди /ˈlʲʉdʲɪ/, пя́тью /ˈpʲætʲjʊ/
ы ɨ ɨ ɨ ры́ба /ˈrɨbə/, часы́ /t͡ɕɪˈsɨ/
э ɛ ɨ ɨ э́то /ˈɛtə/, рэкети́р /rɨkʲɪˈtʲir/

Word-Initial Unstressed а and о

An unstressed а or о at the very beginning of a word is always ɐ, even when it is not in the pretonic syllable: океа́н /ɐkʲɪˈan/, авто́бус /ɐfˈtobʊs/.

Unstressed э

A word-initial unstressed э, and an unstressed э directly after a vowel, are rewritten as и before the vowel table is applied: эта́ж /ɪˈtaʂ/, аэропо́рт /ɐɪrɐˈport/. After a consonant it is reduced to ɨ (рэкети́р /rɨkʲɪˈtʲir/). Word-final unstressed -э is kept unreduced.

Adjacent Reduced Vowels

When a schwa is followed by another [ɐ] or [ə] (also across a joined word boundary), both become ɐ: по абази́ну /pɐ‿ɐbɐˈzʲinʊ/.

Optional [j] Before ɪ

A /j/ before an unstressed ɪ is optional when it stands at the start of a word or after a vowel: ябло́ко /(j)ɪˈbɫokə/, по-мо́ему /pɐ‿ˈmo(j)ɪmʊ/, ещё /(j)ɪˈɕːɵ/.

Stress Marks, Monosyllables and ё

In the app only combining marks survive input cleaning; the ASCII shorthands `, @ and ^ that the module accepts on Wiktionary are removed before the text reaches it.

Monosyllables

A word with a single vowel that carries no accent, is not an unstressed particle or preposition, and is not a prefix or suffix, receives tertiary stress: its vowel is not reduced but no mark is shown: дом /dom/, ель /jelʲ/, сын /sɨn/. If such a word stands next to an unstressed preposition or particle, it receives a real primary stress instead: на дом /nɐ‿ˈdom/.

ё

The letter ё is always a stressed vowel. If a word contains no explicit primary stress and has more than one vowel, the module adds an acute accent to its last ё: самолёт /səmɐˈlʲɵt/. A monosyllabic word with ё gets no printed mark: лёд /lʲɵt/, всё /fsʲɵ/. If the user marks another vowel as stressed, the ё loses its stress, which is why the fallback variants of ё-words can look odd (see Common Issues).

Hard and Soft Consonants (Palatalization)

Most Russian consonants come in hard and soft pairs. Softness is marked by ʲ. The module softens a consonant when it is followed by е, и, ё, ю, я or the soft sign ь, as implemented by the substitution of ʲ after any of m n p b t d k g f v s z x ɣ r l that is followed by a front or iotated vowel or by ь.

Hard Soft
кон /kon/ конь /konʲ/
брат /brat/ брать /bratʲ/
мат /mat/ мать /matʲ/
лук /ɫuk/ люк /lʲuk/
у́гол /ˈuɡəɫ/ у́голь /ˈuɡəlʲ/

Always Hard and Always Soft

Assimilative Softening in Clusters

A consonant also softens when a soft consonant follows it. The module has three groups of rules:

The Soft Sign ь and Hard Sign ъ

Hushing Consonants: ж ш ц ч щ

Retraction After ж, ш, ц

These consonants are always hard, so a following и is pronounced ɨ and a following е is pronounced ɛ, regardless of spelling (module table retracting): жи́знь /ˈʐɨzʲnʲ/, ши́на /ˈʂɨnə/, цирк /t͡sɨrk/, цена́ /t͡sɨˈna/, же́ны /ˈʐɛnɨ/, цель /t͡sɛlʲ/.

A written ю or ё after ж, ш is pronounced without the /j/ and without softening: жюри́ /ʐʊˈrʲi/, брошю́ра /brɐˈʂurə/, жёлтый /ˈʐoɫtɨj/.

Soft ч and щ

A written а, о, у after ч, щ is treated like я, ё, ю (a /j/ is inserted), so the vowel is fronted or iotated: чай /t͡ɕæj/, ща́вель /ˈɕːævʲɪlʲ/, пучо́к /pʊˈt͡ɕɵk/, ту́ча /ˈtut͡ɕə/.

Iotated Vowels: е ё ю я and /j/

Position Result Examples
Word-initial or after a vowel /j/ + vowel ель /jelʲ/, я́ма /ˈjamə/, ю́г /ˈjuk/, музе́й /mʊˈzʲej/
After a consonant Softens the consonant, vowel only мя́со /ˈmʲasə/, лёд /lʲɵt/, лю́ди /ˈlʲʉdʲɪ/
After ь Soft consonant + /j/ + vowel здоро́вье /zdɐˈrov⁽ʲ⁾je/, ра́достью /ˈradəsʲtʲjʊ/
After ъ Hard consonant + /j/ + vowel объе́ктом /ɐbˈjektəm/
й + е, й + я Doubled /j/ (the length survives only in the usual gemination positions) конве́йер /kɐnˈvʲejːɪr/, аллилу́йя /ɐlʲɪˈɫujːə/, фойе́ /fɐˈje/

Final Devoicing

Voiced obstruents become voiceless at the end of a word, or before the pause between two words when the next word does not begin with a voiced obstruent (the module lists b d g v ɣ z ž ĝ ĵ ǰ ӂ for this). The table below shows the pairs applied by the devoicing table.

Spelling Final Example
б p хлеб /xlʲep/, гриб /ɡrʲip/
в f ров /rof/, морко́вь /mɐrˈkofʲ/
г k друг /druk/, круг /kruk/
д t год /ɡot/, сад /sat/
ж ʂ нож /noʂ/, ложь /ɫoʂ/
з s глаз /ɡɫas/

Voicing Assimilation

Within a word and across a word boundary, obstruents agree in voicing with the following obstruent. The module repeats the assimilation until nothing changes, so that whole clusters are handled.

Dropped Consonants in Clusters

The module deletes or simplifies a consonant in these clusters (list phonetic_subs):

Cluster Result Examples
стн сн (т dropped) ле́стница /ˈlʲesʲnʲɪt͡sə/, че́стный /ˈt͡ɕesnɨj/
здн зн (д dropped) по́здно /ˈpoznə/, бе́здна /ˈbʲeznə/
лнц нц (л dropped) со́лнце /ˈsont͡sɨ/
рдц, ндц, ртц, нтц before affricate д/т dropped after р, н се́рдце /ˈsʲert͡sɨ/
нтг, ндг, стг, сдг т/д dropped after н, с рентге́н /rʲɪnˈɡʲen/
стлив слив сча́стливым /ˈɕːaslʲɪvɨm/, /ˈɕːæsʲlʲɪvɨm/
нтск, ндск н(т)ск, т optional гига́нтский /ɡʲɪˈɡan(t)skʲɪj/, голла́ндский /ɡɐˈɫan(t)skʲɪj/
стск, сдск written as с + ц + к (the т/д merges into an affricate) ма́рксистский /ˈmarksʲɪst͡skʲɪj/
-дцат- (numerals) optionally long ц; unstressed as -дцыт- два́дцать /ˈdvat͡s(ː)ɨtʲ/, тридца́тый /trʲɪˈt͡s(ː)atɨj/

Not implemented: the module does not drop the в in -вств- (чу́вство, здра́вствуйте) or turn -чн- into [ʂn] (коне́чно); see Common Issues.

щ, сч, зч, жч

Affricates and Assimilated Stops (тс, дз, тш, -ться)

Doubled Consonants (Gemination)

Doubled letters are first marked as long (ː), and most of the length is removed again in a later step. The default rules are:

The module can also be told to keep, drop or make all gemination optional (gem=y/n/o), but the app does not use this switch. For illustration, the same words with each setting:

Word Default gem = n gem = o gem = y
кла́сс /ˈkɫas/ /ˈkɫas/ /ˈkɫas(ː)/ /ˈkɫasː/
ва́нна /ˈvanːə/ /ˈvanə/ /ˈvan(ː)ə/ /ˈvanːə/
гру́ппа /ˈɡrupːə/ /ˈɡrupə/ /ˈɡrup(ː)ə/ /ˈɡrupːə/

Spelling Exceptions: -ого, что, мягк-

The transliteration helper apply_tr_fixes rewrites the Cyrillic spelling of a few frequent patterns before any sound rule runs:

Prepositions, Particles and Hyphens

Note: the app splits the input at spaces and transcribes each word on its own, and it strips punctuation. The liaison tie ‿, the foot boundary | and all cross-word effects below therefore show the capability of the module (which accepts whole phrases) and will not appear in the app's output.

Certain unaccented words are not stressed and are joined to a neighboring word with the tie ‿ so that they reduce and assimilate with it (module table accentless):

Examples: не зна́ю /nʲɪ‿ˈznajʊ/, на столе́ /nə‿stɐˈlʲe/, ты́ же /ˈtɨ‿ʐɨ/, говори́л ли /ɡəvɐˈrʲiɫ‿lʲɪ/, что-то /ˈʂto‿tə/, а ведь /ɐ‿ˈvʲetʲ/. The same word written with a stress mark is not a clitic, which changes the whole phrase: по не́бу /pɐ‿ˈnʲebʊ/ vs. по́ небу /ˈpo nʲɪbʊ/, а ведь /ɐ‿ˈvʲetʲ/ vs. а́ вот /ˈa vot/.

The words не and же are special-cased so that their final -е is not treated as an ordinary word-final -е: they become nʲɪ and ʐɨ. After a joined consonant, и turns into ɨ: под игло́й /pəd‿ɨˈɡɫoj/. A hyphen inside a word is converted into a space (кое-кто́ /kəjə ˈkto/), and a leading or trailing hyphen marks a prefix or suffix, which is never stressed.

Final -е and -я

Word-final unstressed -я is always ə: я́блоня /ˈjabɫənʲə/. Word-final unstressed -е is more complicated because its value depends on the part of speech. The module keeps a table pos_properties keyed by the kind of ending (after -о, after another vowel, after й/ь, after a paired consonant, after ж ш ц, after ч щ). The app always uses the default entry (def):

Ending Default value Examples
-ое ə му́дрое /ˈmudrəjə/
other vowel + е e зда́ние /ˈzdanʲɪje/
-ье e здоро́вье /zdɐˈrov⁽ʲ⁾je/
soft paired consonant + е e по́ле /ˈpolʲe/, мо́ре /ˈmorʲe/
ж, ш, ц + е ɨ бо́льше /ˈbolʲʂɨ/, се́рдце /ˈsʲert͡sɨ/
ч, щ + е e ле́гче /ˈlʲext͡ɕe/, убе́жище /ʊˈbʲeʐɨɕːe/

Other parts of speech (noun, adjective, preposition, pronoun, comparative, and forced values) can give ə or ɪ instead. These are available in the Lua module (option pos) but not in the app; for illustration:

Word Default pos = low (schwa) pos = hi ([ɪ])
по́ле /ˈpolʲe/ /ˈpolʲə/ /ˈpolʲɪ/
убе́жище /ʊˈbʲeʐɨɕːe/ /ʊˈbʲeʐɨɕːə/ /ʊˈbʲeʐɨɕːɪ/

Fronting of а and у Between Soft Consonants

When a or u (including ʊ) stands between two soft consonants, it is fronted to æ or ʉ: пять /pʲætʲ/, ня́ня /ˈnʲænʲə/, лю́ди /ˈlʲʉdʲɪ/, чай /t͡ɕæj/, ща́вель /ˈɕːævʲɪlʲ/. Next to a hard consonant nothing changes: мя́со /ˈmʲasə/.

If the following consonant is only optionally soft, the module returns two pronunciations, one with a hard consonant and an unfronted vowel, and one with a soft consonant and a fronted vowel: ля́мпя /ˈlʲampʲə/, /ˈlʲæmʲpʲə/, тя́нзи /ˈtʲanzʲɪ/, /ˈtʲænʲzʲɪ/, сча́стливым /ˈɕːaslʲɪvɨm/, /ˈɕːæsʲlʲɪvɨm/.

Hard л (Dark L)

A hard л is written as the dark ɫ, a soft л as lʲ: лук /ɫuk/ vs. люк /lʲuk/, ма́сло /ˈmasɫə/, жёлтый /ˈʐoɫtɨj/.

Punctuation and Special Input

Comprehensive Spelling-to-IPA Mapping

This section maps Russian spelling (orthography) to pronunciation (IPA). The tables describe the rules that the transcription engine really applies, and every example was produced by the engine from a stress-marked word. Remember that the stress position is the one thing the spelling does not give you.

1. Vowel Letters After a Consonant or at a Word Start

Russian has five "hard" vowel letters (а, о, у, ы, э) and five "soft" or iotated ones (я, ё, ю, и, е). After a consonant the soft letters mark that consonant as soft; at the start of a word, after a vowel, or after ь/ъ the letters я, ё, ю, е add a /j/. The values below are for the stressed position; see Stress and Vowel Reduction for unstressed values.

Letter After a hard consonant After a soft consonant (or iotated) Word-initial or after a vowel
а, я /a/ ма́ма /ˈmamə/ /a/, /æ/ between soft consonants: мя́со /ˈmʲasə/, пять /pʲætʲ/ /ja/ from я: я́ма /ˈjamə/
о, ё /o/ до́ма /ˈdomə/ /ɵ/ from ё: тётя /ˈtʲɵtʲə/ /jɵ/ from ё: ёлка /ˈjɵɫkə/
у, ю /u/ ту́ча /ˈtut͡ɕə/ /u/, /ʉ/ between soft consonants: лю́ди /ˈlʲʉdʲɪ/ /ju/ from ю: ю́г /ˈjuk/
ы, и /ɨ/ from ы (and и after ж, ш, ц): ры́ба /ˈrɨbə/, жи́знь /ˈʐɨzʲnʲ/ /i/ from и: ви́дел /ˈvʲidʲɪɫ/ /i/ from и: и́ли /ˈilʲɪ/
э, е /ɛ/ from э (and е after ж, ш, ц): э́то /ˈɛtə/, же́ны /ˈʐɛnɨ/ /e/ from е: ле́то /ˈlʲetə/ /je/ from е: ель /jelʲ/, е́сть /ˈjesʲtʲ/

2. Consonant Letters

Letter Hard Soft Notes
б ба́нка /ˈbankə/ бе́лый /ˈbʲeɫɨj/ Final devoicing → p
в вода́ /vɐˈda/ ви́дел /ˈvʲidʲɪɫ/ Final devoicing → f; special in voicing assimilation
г го́род /ˈɡorət/ кни́ги /ˈknʲiɡʲɪ/ Final devoicing → k; [v] in -ого/-его; [x] in мягк-, лёгк-
д до́ма /ˈdomə/ де́ти /ˈdʲetʲɪ/ Final devoicing → t
ж жена́ /ʐɨˈna/ - Always hard; final devoicing → ʂ
з зу́бы /ˈzubɨ/ зелёный /zʲɪˈlʲɵnɨj/ Final devoicing → s
й - музе́й /mʊˈzʲej/ Always j
к ко́шка /ˈkoʂkə/ кни́ги /ˈknʲiɡʲɪ/ Voiced before a voiced obstruent: вокза́л /vɐɡˈzaɫ/
л лук /ɫuk/ люк /lʲuk/ Hard is dark ɫ
м ма́ма /ˈmamə/ ме́сто /ˈmʲestə/ -
н нос /nos/ конь /konʲ/ Soft before soft т, д, ч, щ: ба́нтик /ˈbanʲtʲɪk/
п па́па /ˈpapə/ пять /pʲætʲ/ -
р ры́ба /ˈrɨbə/ ря́дом /ˈrʲadəm/ -
с сад /sat/ семь /sʲemʲ/ Voiced before a voiced obstruent: сбор /zbor/
т ту́ча /ˈtut͡ɕə/ тётя /ˈtʲɵtʲə/ Voiced before a voiced obstruent: футбо́л /fʊdˈboɫ/
ф фо́рма /ˈformə/ фи́лин /ˈfʲilʲɪn/ -
х хорошо́ /xərɐˈʂo/ хи́мия /ˈxʲimʲɪjə/ x; voiced ɣ before a voiced obstruent
ц пти́ца /ˈptʲit͡sə/ Цю́рих /ˈt͡sʲʉrʲɪx/ Hard except before я, ю, ё, ь; t͡s
ч - ту́ча /ˈtut͡ɕə/ Always soft t͡ɕ
ш ши́на /ˈʂɨnə/ - Always hard ʂ
щ - щёки /ˈɕːɵkʲɪ/ Always soft and long ɕː
ь, ъ объе́ктом /ɐbˈjektəm/ соль /solʲ/ No sound of their own; ъ keeps /j/ before iotated vowels

3. Digraphs and Clusters

Spelling IPA Context / Rule Example
сч ɕː Word-initial, and in счёт / счит- сча́стье /ˈɕːæsʲtʲje/, счёт /ɕːɵt/
зч, жч ɕː Always мужчи́на /mʊˈɕːinə/
сш, зш, сж ʂː, ʐː Complete assimilation сшить /ʂːɨtʲ/, сжать /ʐːatʲ/
зж, жж ʐː or ʑː Two variants, except at a prefix boundary жужжа́ть /ʐʊˈʐːatʲ/, /ʐʊˈʑːætʲ/
тс, дз t͡s Short; long across words, before vowels, after от-/под- де́тство /ˈdʲet͡stvə/, отсу́тствие /ɐt͡sˈsut͡stvʲɪje/
тш, дж, чш t͡ʂ, d͡ʐ Hard affricates лу́чший /ˈɫut͡ʂʂɨj/, дже́м /ˈd͡ʐʐɛm/
тц, дц + vowel t͡sː Always long отцо́м /ɐˈt͡sːom/
-тся, -ться t͡sə Long after a directly preceding stressed vowel у́чится /ˈut͡ɕɪt͡sə/, учи́ться /ʊˈt͡ɕit͡sːə/
-дцат- t͡s(ː) Optionally long; unstressed → -цыт- два́дцать /ˈdvat͡s(ː)ɨtʲ/
что, чтобы, ничто ʂt ч → ш in these words only что́ /ˈʂto/, ничто́ /nʲɪʂˈto/
-чн- t͡ɕn No special rule, even in words pronounced [ʂn] ску́чный /ˈskut͡ɕnɨj/
стн, здн, лнц sn, zn, nt͡s Middle consonant is dropped ле́стница /ˈlʲesʲnʲɪt͡sə/, по́здно /ˈpoznə/, со́лнце /ˈsont͡sɨ/
-вств- fstv The в is not dropped (see Known Issues) чу́вство /ˈt͡ɕufstvə/
мягк-, лёгк- xʲk г → х before к, ч мя́гкий /ˈmʲæxʲkʲɪj/, лёгкий /ˈlʲɵxʲkʲɪj/
-ого, -его vo, ve Adjective and pronoun endings, with exceptions кра́сного /ˈkrasnəvə/, его́ /(j)ɪˈvo/
Double consonant ː or single Long only between vowels after the stress or at certain prefixes ва́нна /ˈvanːə/, кла́сс /ˈkɫas/

4. Voiced-Voiceless Pairs

The module defines the pairs below in its devoicing and voicing tables. A voiced member devoices at the end of a word and before a voiceless obstruent; a voiceless member becomes voiced before a voiced obstruent.

Voiced Voiceless Becomes voiceless (example) Becomes voiced (example)
b p хлеб /xlʲep/ -
d t год /ɡot/ футбо́л /fʊdˈboɫ/
ɡ k друг /druk/ вокза́л /vɐɡˈzaɫ/
z s глаз /ɡɫas/ сбор /zbor/
v f ров /rof/ афга́нец /ɐvˈɡanʲɪt͡s/
ʐ ʂ нож /noʂ/ ка́ш бы /ˈkaʐ‿bɨ/
ɣ x - мо́х бы /ˈmoɣ‿bɨ/
d͡ʑ t͡ɕ - до́чь бы /ˈdod͡ʑ‿bɨ/

5. Special Words and Spelling Rewrites

Spelling Rewritten as Example
-ого, -его (adjectives, pronouns) -ово, -ево большо́го /bɐlʲˈʂovə/, чего́ /t͡ɕɪˈvo/
сегодня, сегодняшн- севодня сего́дня /sʲɪˈvodʲnʲə/
что, чтобы, ничто што, штобы, ништо что́ /ˈʂto/, ничто́ /nʲɪʂˈto/
мягк-, лёгк-, легч- мяхк-, лёхк-, лехч- ле́гче /ˈlʲext͡ɕe/
Word-final ъ (old spelling) (ignored) хлѣ́бъ /ˈxlʲep/

Using the Tool: Practical Notes

Why does one word sometimes show several transcriptions, and how do I choose?

Spelling does not show stress, so a word can map to more than one pronunciation. Homographs with different stress, such as за́мок /ˈzamək/ and замо́к /zɐˈmok/, are listed as separate variants. A word that is not in the lexicon is transcribed once for every possible stress position. Click the word to cycle through the variants and keep the one that matches the word you mean; see Multiple Pronunciation Variants. Open in the converter

How do I mark the stress myself?

Type a combining acute accent (U+0301) directly after the stressed vowel, for example рука́ /rʊˈka/. The letter ё counts as stressed when no other stress mark is present, and a combining grave accent (U+0300) gives secondary stress. A word typed with a stress mark, or containing ё, is transcribed exactly as marked and gives a single result. Details are in Stress Marks, Monosyllables and ё.

Why can the output differ from a pronunciation dictionary?

The module works from spelling and stress only. It does not know lexical exceptions, for example the vowel of the loanword кафе́ /kɐˈfʲe/, which speakers pronounce with [ɛ] after a hard consonant, and it does not implement the dropped в in -вств- or -чн- as [ʂn]. Dialects and fast-speech reductions are not modeled. See Dialects & Limitations and Common Issues.

Is the transcription phonemic or phonetic?

Phonetic. The Wiktionary module produces only a narrow phonetic transcription for Russian, so the app offers no phonemic form; see Phonemic vs Phonetic.

Implementation Details (for Developers)

Russian transcription is done in two layers: a JavaScript handler in scripts/utils.js (ipaHandlers.Russian) that finds out the stress, and the Lua module lua_modules/ru-pron_wasm.lua (the Wiktionary ru-pron module, Benwing2's version), which turns one stress-marked phrase into IPA. Two helpers are required: ru-translit.lua (apply_tr_fixes, tr_after_fixes) and ru-common.lua (decompose, remove_grave_accents and character classes). The Lua module is called as ru_ipa.ipa_string(text), which returns the list of pronunciations produced by export.ipa joined with ", ".

App Handler (JavaScript)

The handler is only active for the form Phonetic (the only form configured for Russian).

Case Condition Action Example
1. Lexicon hit Word (letters, marks and hyphens only; also tried in lowercase) found in ru_lexicon_v4.zip The V4 record holds one or more comma-separated stress-marked forms. Each is run through ru_ipa.ipa_string, duplicates are collapsed (the variant containing ˈ is preferred), and the result is returned as /ipa1/,/ipa2/. The record во́да, вода́ gives /ˈvodə/, /vɐˈda/
2. Not in lexicon, 0 or 1 vowel Letters of аэиуеюяёоы counted The single vowel receives a combining acute (U+0301) and the word is transcribed once. /ˈdom/
3. Not in lexicon, 2 or more vowels Same count One transcription per vowel position (acute added to each vowel in turn); the results are joined with commas. The user clicks the word to cycle through them. /ˈmuɕːɪnə/,/mʊˈɕːinə/,/mʊɕːɪˈna/

The input is sanitized first: everything except letters, combining marks, apostrophes and hyphens is removed (so digits, spaces, backticks and @ ^ disappear), and the text is normalized to NFKC. A stress mark typed by the user survives as U+0301; a word that already contains one (or contains ё) skips cases 2 and 3 and is transcribed once, as typed.

Lua Pipeline (export.ipa and ru_ipa_main)

The stages below follow the order in which the code runs. Example outputs are produced by calling ipa_string on the stress-marked example word. Stages 4 to 7 and several rules below concern multi-word input (clitic joints, foot boundaries, cross-word assimilation). The app transcribes each space-separated word separately (main.js splits lines on spaces and the handler strips punctuation), so these effects are visible only when the module is called with a phrase, as in the examples here.

Internal Notation (Intermediate Forms)

The module works on a Latin-based internal alphabet and uses helper symbols that are not present in the final IPA output:

Symbol Name Purpose Final output
⁀ Word boundary Added at the start and end of each word so that regular expressions can anchor on it Removed
‿ Joint Links an unstressed clitic to its host (stored as ⁀‿⁀) Kept as ‿
ʹ / ʺ Soft / hard sign Transliteration of ь and ъ; they trigger palatalization or a glottal stop Removed
ˑ Protected length Marks gemination that must never be removed (prefix boundaries, дц/тц before a vowel) Becomes ː
@ and / Syllable boundary @ is inserted by the syllabifier; / is an explicit boundary written by the user Removed
_ Assimilation blocker Prevents assimilation across it Removed
U+FFF2 Pseudoconsonant Replaces the hyphen at the start of a suffix or the end of a prefix, so that vowels and consonants there behave as if neighbored by a consonant Removed
U+0302 Tertiary stress (circumflex) A vowel treated as stressed without a visible mark Removed
ä ë ö ü ạ Iotated vowels я, е, ё, ю and semi-reduced я after the /j/ has been absorbed into softness Converted by allophones
c č ĉ ĵ ǰ ĝ ӂ š ž Single-letter consonants Internal letters for t͡s t͡ɕ t͡ʂ d͡z d͡ʑ d͡ʐ ʑ ʂ ʐ Converted by translit_conv

1. Spelling Rewrites (apply_tr_fixes)

Run once at the start (unless the caller says the text is already transformed). It works on Cyrillic text, before any lowercasing.

Rule Example Input Output Description
Alias letters, decompose accents хлѣ́бъ /ˈxlʲep/ Old letters are mapped to modern ones; accents are split off as combining characters
-ого/-его → -ово/-ево кра́сного /ˈkrasnəvə/ Pattern on Cyrillic text; the exceptions list is checked first
Exceptions: много, дорого, строго, убого, лого, ого, ... мно́го /ˈmnoɡə/ Table of case patterns; the г is protected by a placeholder (TEMP_G)
сегодня, сегодняшн- сего́дня /sʲɪˈvodʲnʲə/ г → в
что, чтобы, ничто что́ /ˈʂto/ ч → ш
[мл][яеё]г[кч] мя́гкий /ˈmʲæxʲkʲɪj/ г → х

2. Argument Checks and Marker Conversion

export.ipa(text, adj, gem, bracket, pos, zhpal, is_transformed) validates gem (y/o/n or empty) and pos (a key of pos_properties), lowercases the text and converts the ASCII shorthands to combining characters: `` and a double grave become a circumflex, ` a grave, @ a dot above, ^ a circumflex. The app never uses the shorthands, but the combining characters work the same way:

Rule Example Input Output Description
Grave accent → secondary stress воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/ The grave becomes ˌ later in the pipeline

3. Transliteration (tr_after_fixes)

Rule Example Input Output Description
э → ɛ before transliteration э́то /ˈɛtə/ The transliteration module does not always do this by itself
Vowel + йе → йй + е конве́йер /kɐnˈvʲejːɪr/ Gives the doubled /j/
е, э after a consonant → plain e, ɛ ле́то /ˈlʲetə/ Otherwise е is transliterated je
ю after ж, ш → u жюри́ /ʐʊˈrʲi/ Always-hard consonant: no iotation
ё after ж ч ш щ → o жёлтый /ˈʐoɫtɨj/ The /j/ is dropped (for ч, щ it is inserted again in step 9)
Implicit stress on ё самолёт /səmɐˈlʲɵt/ The last ё gets an acute accent unless the word has an explicit primary stress
Word-final ъ ignored хлѣ́бъ /ˈxlʲep/ Old orthography

4. Foot Boundaries and Spacing

Commas and dashes (with surrounding spaces) are converted to | , repeated spaces are collapsed.

Rule Example Input Output Description
, – — → | до́ма, а не в шко́ле /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/ IPA foot boundary

5. Stress for Monosyllables

The text is split into words and separators (capturing_split on spaces and hyphens). A single-vowel word without any accent that is not a prefix or suffix and not accentless gets primary stress if a neighboring word is an accentless particle, and tertiary stress (a circumflex) otherwise. The accentless classes are in accentless (pre, prespace, post, posthyphen).

Rule Example Input Output Description
Tertiary stress дом /dom/ Vowel not reduced, no mark
Primary stress next to a clitic на дом /nɐ‿ˈdom/ The preposition на is accentless
Accentless word keeps no stress не зна́ю /nʲɪ‿ˈznajʊ/ Reduced and joined

6. Joining Clitics

The separator after an accentless pre word (or prespace word when a space follows) and the separator before a post word (or posthyphen after a hyphen) is replaced by ‿. In a multi-word gem/pos list the spec of the absorbed word is removed so that one spec remains for each combined word.

Rule Example Input Output Description
pre + host по не́бу /pɐ‿ˈnʲebʊ/ Preposition joined to the following word
stressed по: no joining по́ небу /ˈpo nʲɪbʊ/ The accent turns it into a full word
post + host ты́ же /ˈtɨ‿ʐɨ/ Particle joined to the preceding word
prespace word followed by a space а ведь /ɐ‿ˈvʲetʲ/ а, о join only before a space

7. Hyphens and Word Markers

The words are joined again. A hyphen at the start of a suffix or the end of a prefix becomes the pseudoconsonant; all other hyphens become spaces. Then ⁀ is added at both ends of every word and around ‿, and ! and ? become separate words.

Rule Example Input Output Description
Inner hyphen → space кое-кто́ /kəjə ˈkto/ The two parts are processed as separate words
! and ? as separate words да! нет? /da! nʲet?/ Prevents interference with the word-final rules

8. Variants for зж and жж

Unless zhpal=n, a text containing ж is searched for the prefixes of geminate_pref that end in a sibilant. If one of them stands directly before ж, a marker ˑ is inserted so that the palatal variant is not generated. If зж or жж still occurs, two spellings are produced: the original and one with ӂӂ (ʑː). Each is transcribed separately.

Rule Example Input Output Description
Two variants дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/ Hard and soft long sibilant
Prefix boundary: one variant изжи́ть /ɪˈʐːɨtʲ/ из- is in geminate_pref
zhpal=n дро́жжи /ˈdroʐːɨ/ Only the hard variant

9. Opening Steps of ru_ipa_main

The function receives the normalized text and the original spelling (kept for the prefix check later).

Rule Example Input Output Description
Remove apostrophes - - Purely cosmetic apostrophes in names; apostrophes standing for ъ were handled by transliteration
[шж] + j + [ou] → [ou] брошю́ра /brɐˈʂurə/ Always-hard consonants never take an iotated vowel
[čǰӂ] + [aou] → insert j чай /t͡ɕæj/ Always-soft consonants always take palatal vowels
ьо → ьйо Асунсьо́н /ɐsʊn⁽ʲ⁾ˈsʲjɵn/ Read like ьё
Tertiary stress on final -о after a vowel or palatal то́кио, ра́нчо /ˈtokʲɪo/, /ˈranʲt͡ɕɵ/ The final о is not reduced
Remove dot-above, convert dot-below - - Dot below is only allowed on я or palatal а, otherwise an error is raised

10. Final -ться / -тся

final_tsja_processing looks up tsjapal in pos_properties. For every part of speech except imp (tsjapal is n) the ending is rewritten to cca (long) directly after a stressed vowel, otherwise to ca. For imperatives (pos=imp) the ending stays palatalized.

Rule Example Input Output Description
Stress directly before -ться учи́ться /ʊˈt͡ɕit͡sːə/ Long affricate
Stress elsewhere у́чится /ˈut͡ɕɪt͡sə/ Short affricate
pos=imp учи́ться /ʊˈt͡ɕit͡sʲsʲə/ Palatalized (not available in the app)

11. Ad-hoc Phonetic Substitutions (phonetic_subs)

An ordered list of two-element entries (pattern, replacement) applied in sequence; the order is deliberate and must not be rearranged. It contains the cluster-simplification and affricate rules:

Rule Example Input Output Description
h → ɣ; šč → ɕː щит /ɕːit/ щ becomes the long soft sibilant first
n[dt]sk → n(t)sk; s[dt]sk → sck гига́нтский, ма́рксистский /ɡʲɪˈɡan(t)skʲɪj/, /ˈmarksʲɪst͡skʲɪj/ Optional or merged т/д
-дцат- → c(c)yt (unstressed) or c(c)át два́дцать /ˈdvat͡s(ː)ɨtʲ/ Numerals in -дцать
[dt] + s/z → c, ĵ (short) or long variants де́тство, отсу́тствие /ˈdʲet͡stvə/, /ɐt͡sˈsut͡stvʲɪje/ Long across words, before a vowel, after от-/под-
[dtč] + š/ž → ĉ, ĝ лу́чший, дже́м /ˈɫut͡ʂʂɨj/, /ˈd͡ʐʐɛm/ Hard affricates
зч, жч → ɕː; сч → ɕː or ɕč мужчи́на, счёт, подсчёт /mʊˈɕːinə/, /ɕːɵt/, /pɐt͡ɕˈɕːɵt/ Different outcomes at word start, in счёт/счит-, after ц д т
[rn][dt][cč] → [rn][cč] се́рдце /ˈsʲert͡sɨ/ Dropped д/т
[dt][cč] + vowel → ˑ отцо́м /ɐˈt͡sːom/ Always long
[zs] + š/ž → š/ž (long) сшить, сжать /ʂːɨtʲ/, /ʐːatʲ/ Total assimilation
[mpbfv]ʹ + [st][eij] → optional ʹ ста́вьте /ˈstaf⁽ʲ⁾tʲe/ Optional palatalization of labials
sverxi → sverxy сверхинтере́сный /svʲɪrxɨnʲtʲɪˈrʲesnɨj/ и after the prefix сверх- is hard
stʹd → zd; tʹd → dd - - Soft-sign clusters; the second often degeminates
Consonant losses: [ns][dt]g, zdn, lnc, [sz]tliv, [sz]tn рентге́н, по́здно, со́лнце, ле́стница /rʲɪnˈɡʲen/, /ˈpoznə/, /ˈsont͡sɨ/, /ˈlʲesʲnʲɪt͡sə/ See Dropped Consonants
Initial unstressed э → и; э after a vowel → и эта́ж, аэропо́рт /ɪˈtaʂ/, /ɐɪrɐˈport/ A form of ikanye done before the vowel table
и → ы after a consonant at a close juncture под игло́й /pəd‿ɨˈɡɫoj/ Applies to the joint ⁀‿⁀

12. Voicing and Devoicing

Uses the tables devoicing and voicing. The loop is repeated until the text no longer changes, so assimilation can spread through a cluster. In the module a в before an obstruent both triggers and undergoes assimilation, but before a sonorant it does neither.

Rule Example Input Output Description
1. Absolutely final devoicing хлеб, морко́вь /xlʲep/, /mɐrˈkofʲ/ Including soft-sign-final words
2. Devoicing before the next word из го́рода, без ша́пки /ɪz‿ˈɡorədə/, /bʲɪʂ‿ˈʂapkʲɪ/ Not before a voiced obstruent
3. Assimilation, repeated ло́жка, сбор /ˈɫoʂkə/, /zbor/ Right to left within the cluster
3a. в as an obstruent всё, вдруг /fsʲɵ/, /vdruk/ в devoices before a voiceless obstruent and stays voiced before a voiced one; between a voiceless and a voiced obstruent it is transparent to voicing

13. Gemination Marks and Iotated Vowels

Rule Example Input Output Description
Doubled consonant letters → X + ː ва́нна /ˈvanːə/ Also the optional (X) form
j + [aeou] → ä ë ö ü я́ма /ˈjamə/ Table iotating
Remove j after a consonant before an iotated vowel мя́со /ˈmʲasə/ Softness replaces the glide

14. Gemination Handling (per word)

The text is now split into words and each is processed independently. The first step compares the pronounced and original spellings against geminate_pref and turns the first ː into ˑ at a prefix boundary. After that the gem option decides (y keep, o optional, n remove). By default:

Rule Example Input Output Description
Prefix boundary → ˑ расска́з /rɐsːˈkas/ Both spellings must match the entry (avoids false matches like Поттер)
лː → л тро́лль /ˈtrolʲ/ л is always degeminated
Between vowels right after the stress → ˑ програ́мма /prɐˈɡramːə/ Kept
Remaining n after the stress → (ː) бессмы́сленно /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/ Optional
ssk / zsk after the stress → ˑ ру́сский /ˈrusːkʲɪj/ Kept
Everything else except ɕː, ӂː кла́сс /ˈkɫas/ Removed

15. Soft and Hard Signs, Assimilative Palatalization

Rule Example Input Output Description
ʹi → ʹji семьи́ /sʲɪˈm⁽ʲ⁾ji/ /j/ before и after ь
ʺ + [aɛiouy] → ʔ + vowel - - Glottal stop after a hard sign before a non-iotated vowel (rare)
(ʹ) → ⁽ʲ⁾ - - Optional softness written in the spelling, e.g. п(ь)я́нка
[mnpbtdkgfvszxɣrl] + front vowel or ʹ → ʲ конь, пять /konʲ/, /pʲætʲ/ Main palatalization rule
[cĵ] + [äạöüʹ] → ʲ Цю́рих /ˈt͡sʲʉrʲɪx/ ц only softens before я, ю, ё, ь
Remove ʹ and ʺ соль /solʲ/ The signs have done their work

16. Final -я and -е

Unstressed word-final ä and ạ become ə; ⁀nʲe⁀ becomes ⁀nʲi⁀ and ⁀že⁀ becomes ⁀žy⁀. For final -е the function fetch_e_sub(ending) looks up pos_properties (through fetch_pos_property, which resolves aliases and falls back to the def entry). An unstressed [e] is protected by a temporary circumflex so that it is not reduced to [ɪ]. A final -э is kept unreduced.

Rule Example Input Output Description
Final -я → ə я́блоня /ˈjabɫənʲə/ Always
не, же alone ты́ же /ˈtɨ‿ʐɨ/ же → ʐɨ
vowel + je (-ое: ə; others: e) му́дрое, зда́ние /ˈmudrəjə/, /ˈzdanʲɪje/ Keys oe, ve
paired consonant + е → e по́ле /ˈpolʲe/ Key softpaired
ж, ш, ц + е → ɨ бо́льше /ˈbolʲʂɨ/ Key hardsib
ч, щ + е → e убе́жище /ʊˈbʲeʐɨɕːe/ Key softsib
pos=low / pos=hi по́ле /ˈpolʲə/, /ˈpolʲɪ/ Forced schwa or [ɪ] (not available in the app)

17. Retraction After ц, ш, ж

The table retracting turns e into ɛ and i into y (later ɨ) after c ĵ š ž ĉ ĝ and an optional length mark.

Rule Example Input Output Description
[cĵšžĉĝ] + e → ɛ цель, же́ны /t͡sɛlʲ/, /ˈʐɛnɨ/ Hard consonants cannot take /e/
[cĵšžĉĝ] + i → y ши́на, цирк /ˈʂɨnə/, /t͡sɨrk/ Pronounced ɨ

18. Syllabification

Syllable boundaries (@) are needed to find the stressed syllable and the pretonic syllable. They are inserted in nine steps:

Step Rule Description
1 Insert @ after each vowel (with its accents) Every vowel closes a syllable
2 Remove the word-final @ No empty last syllable
3 Move @ before ‿⁀ if a consonant follows A joined preposition's consonants start the next syllable
4 Move @ to before the last consonant of a cluster Default: a cluster is split before its last consonant
5 Move @ back before a "permanent onset" (perm_syl_onset) spr str skr spl skl sp st sk sf sx sc pr br tr dr kr gr fr vr xr pl bl kl gl fl vl xl ml mn šč dž, and soft sibilant + j
6 If the user wrote /, it replaces the automatic @ Explicit syllable boundary
7-8 Remove @ before a final cluster or after an initial cluster Only possible for user-inserted slashes and цз/чж
9 Move @ to after a linking ‿⁀ A boundary never stands directly before the link

19. Word-Initial а/о, Stress Marks and Vowel Allophony

An unstressed ⁀a or ⁀o is first rewritten to ɐ (done after syllabification because the syllabifier does not know ɐ as a vowel). The word is split at @. A syllable is real stressed if it contains an acute or grave, and tertiary if it contains a circumflex. Then each syllable is converted: a stressed one gets ˈ (acute) or ˌ (grave) in front, the circumflex is deleted, and the vowel is replaced using column 1; a syllable directly before a real stress uses column 2; all others column 3.

Internal vowel Stressed Pretonic Elsewhere Source letter
aaɐəа
ooɐəо
eeɪɪе after a consonant or ь/ъ
iiɪɪи
uuʊʊу
yɨɨɨы
ɛɛɨɨэ
äaɪɪя
ạaɐəя with dot below
ëeɪɪе at the start of a word or after a vowel or й
öɵɪɪё
üuʊʊю
əəəə(already reduced)
Rule Example Input Output Description
Initial unstressed а/о → ɐ океа́н /ɐkʲɪˈan/ Regardless of position relative to stress
Pretonic and elsewhere молоко́ /məɫɐˈko/ ə then ɐ
Tertiary stress → no mark ель /jelʲ/ Stressed value, no ˈ

20. Optional [j] Before ɪ

Rule Example Input Output Description
⁀jɪ → ⁀(j)ɪ ябло́ко /(j)ɪˈbɫokə/ Word-initial
Vowel + jɪ → (j)ɪ по-мо́ему /pɐ‿ˈmo(j)ɪmʊ/ After a vowel
After a joined consonant: j kept - - Not optional after a consonant across ⁀‿⁀

21. Palatal Assimilation in Clusters

These rules run on the IPA vowels and use the sets cons_assim_palatal.compulsory (ntʲ ndʲ xkʲ csʲ ĵzʲ ncʲ nĵʲ) and cons_assim_palatal.optional (slʲ zlʲ nsʲ nzʲ mpʲ mbʲ mfʲ fmʲ).

Rule Example Input Output Description
[dtsz] + nʲ: compulsory unless [rl] precedes пя́тница /ˈpʲætʲnʲɪt͡sə/ Optional ⁽ʲ⁾ after р or л
[sz] + [td]ʲ: compulsory unless [rl] precedes сте́на /ˈsʲtʲenə/ Also здесь, сде́лать
Compulsory pairs ба́нтик, мя́гкий /ˈbanʲtʲɪk/, /ˈmʲæxʲkʲɪj/ ntʲ, ndʲ, xkʲ, csʲ, ĵzʲ, ncʲ, nĵʲ
Optional pairs бессмы́сленно /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/ slʲ, zlʲ, nsʲ, nzʲ, mpʲ, mbʲ, mfʲ, fmʲ
n + [čǰɕӂ] → nʲ кончи́ть /kɐnʲˈt͡ɕitʲ/ Before alveolopalatals
Word-initial вп, вб → optional ⁽ʲ⁾ вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/ Only at the start of a word
бв → optional; not in обв- обвини́ть /ɐbvʲɪˈnʲitʲ/ Exception for the prefix об- + в
Labial + ʲ before /j/ → optional семья́ /sʲɪˈm⁽ʲ⁾ja/ Also здоро́вье
-лся: optional ⁽ʲ⁾ учи́лся /ʊˈt͡ɕiɫs⁽ʲ⁾ə/ Only after л

22. Brackets and Fronting of a and u

If bracket is set the words are enclosed in [ ] (the app does not use it). Then, to make the sequence rules easy, ʲ is added temporarily to the inherently soft č ǰ ɕ ӂ j. a, u and ʊ between two soft consonants (ʲ + vowel + any consonant + ʲ) are replaced by æ and ʉ using the table fronting; a vowel between a soft consonant and an optionally soft one produces two output strings.

Rule Example Input Output Description
Soft + a + soft → æ пять /pʲætʲ/ Fronting
Soft + u + soft → ʉ лю́ди /ˈlʲʉdʲɪ/ Fronting
Soft + a + optionally soft ля́мпя /ˈlʲampʲə/, /ˈlʲæmʲpʲə/ Two variants (hard and unfronted, soft and fronted)
bracket=y до́м /[ˈdom]/ Square brackets (not available in the app)

23. Conversion to IPA and Cleanup

Each output string goes through the final conversions. The table translit_conv replaces the internal single-letter consonants, translit_conv_j handles cʲ and ĵʲ, two adjacent reduced vowels merge, the dark L is written, and the helper symbols are removed.

Internal IPA Example
c, cʲ t͡s, t͡sʲ пти́ца /ˈptʲit͡sə/
č, ĉ t͡ɕ, t͡ʂ ту́ча /ˈtut͡ɕə/, лу́чший /ˈɫut͡ʂʂɨj/
ĝ, ǰ, ĵ d͡ʐ, d͡ʑ, d͡z дже́м /ˈd͡ʐʐɛm/, до́чь бы /ˈdod͡ʑ‿bɨ/, от зо́лота /ɐd͡z‿ˈzoɫətə/
š, ž, ɕ, ӂ ʂ, ʐ, ɕ, ʑ ши́на /ˈʂɨnə/, жена́ /ʐɨˈna/, щёки /ˈɕːɵkʲɪ/, дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/
g ɡ (U+0261) го́род /ˈɡorət/
l not followed by ʲ ɫ лук /ɫuk/ / люк /lʲuk/
ə + [ɐə] ɐ + ɐ по абази́ну /pɐ‿ɐbɐˈzʲinʊ/

24. Result

ru_ipa_main returns a list (one entry per variant). export.ipa concatenates the lists of all spelling variants, and export.ipa_string joins them with ", ". This is why the ж-variants appear inside one pair of slashes in the app when the handler's fallback path is used (see Known Issues).

Module Options Not Used by the App

Parameter Meaning Effect
adj Force the -ого → -ово rewrite inside ru_ipa_main Redundant here, since apply_tr_fixes already does it
gem y, o, n, or X/Y/... for each word Keep, make optional, or remove gemination (see the table in the gemination section)
bracket y / n Wrap the result in square brackets
pos Part of speech of each word Selects the value of unstressed final -е and the -ться behavior
zhpal y / n Force or suppress the soft ʑː variant of зж/жж
is_transformed Text already passed through apply_tr_fixes Skips the spelling rewrites

Note for maintainers: ru-translit.lua calls ulower and uupper without declaring them. They are defined as globals near the top of ru-pron_wasm.lua, so that file must be loaded first. The adapter also prints a small debugging line at load time.

Common Issues & Limitations

Known Transcription Problems

This table shows known issues where the automatic transcription may be incorrect. The "System Output" column is real engine output (for cases that concern the app's fallback path it is the handler's output, otherwise the output for the stress-marked word as the browser would produce it from the lexicon). The "Correct IPA" column is also real engine output, obtained from a correct stress, a correct option or a respelled input (named in the cell).

Input System Output Correct IPA Cause What to Do
чу́вство /ˈt͡ɕufstvə/ /ˈt͡ɕustvə/ (respelled input) The module has rules for стн, здн but none for -вств-, so в is kept and devoiced Respell as чу́ство
здра́вствуйте /ˈzdrafstvʊjtʲe/ /ˈzdrastvʊjtʲe/ (respelled input) Same: -вств- is not simplified Respell as здра́ствуйте
коне́чно /kɐˈnʲet͡ɕnə/ /kɐˈnʲeʂnə/ (respelled input) Only что-words get ч → ш; -чн- is otherwise unchanged, although коне́чно (and ску́чно) are pronounced with [ʂn] Respell with ш
ску́чно /ˈskut͡ɕnə/ /ˈskuʂnə/ (respelled input) Same Respell with ш
кафе́ /kɐˈfʲe/ /kɐˈfɛ/ (respelled input) Spelling-based softness: е is assumed to soften ф, but many loanwords keep the consonant hard and have [ɛ] Respell with э
оте́ль /ɐˈtʲelʲ/ /ɐˈtɛlʲ/ (respelled input) Same Respell with э
жужжать (not in the lexicon) /ˈʐuʐːətʲ, ˈʐuʑːɪtʲ/,/ʐʊˈʐːatʲ, ʐʊˈʑːætʲ/ /ʐʊˈʐːatʲ/, /ʐʊˈʑːætʲ/ (the module's two variants as separate items) The module returns two pronunciations for жж; the handler wraps the string, joined by a comma and space, in one pair of slashes. The page cycles values by splitting on /,, so each stress variant is shown as one item that still contains both ж-variants Read both parts inside the item
США /ˈʂːa/ Spelled-out letter names, with stress on the last syllable (no respelling reproduces them exactly: a respelled эсшэа́ gives /ɪʂɨˈa/ because unstressed э is reduced) Initialisms are read like ordinary words Do not rely on the output for initialisms
Лего (not in the lexicon) /ˈlʲeɡə/,/lʲɪˈvo/ /ˈlʲeɡə/ (the first variant) The -ого/-его rewrite works on spelling; the exception list only fits particular stress positions, so the variant with stress on the final о is pronounced like a genitive ending Pick the variant that matches the actual stress
мужчина (not in the lexicon) /ˈmuɕːɪnə/,/mʊˈɕːinə/,/mʊɕːɪˈna/ Variant 2 is the real stress One variant for every stress position; the first one is not necessarily right Click until the stress matches

Other Limitations

Help pages for related languages in this tool:


For technical issues or suggestions, please visit our GitHub repository.