Sound change applier

Write historical sound changes in IPA, run them on words, and see each rule apply step by step.

Start from a preset

Settings

IPA, separated by spaces or new lines. Use ˈ / ˌ for stress, + for a morpheme boundary, . for a syllable break.

One rule or class per line, written T > X / L _ R. Lines starting with // are ignored. See the syntax guide below.

A rule can override this with @sim, @ltr, or @rtl.

Word format

When unchecked, . is kept and rules can match it with $.

Derivation

Rules as understood

    Step by step

    Syntax guide

    How the rules work

    Writing a rule

    A rule is target > change / left _ right. The _ marks where the target sits, and / left _ right may be left off to apply everywhere. → works the same as >.

    • t > d / V _ V: plain sounds.
    • ∅ > ɪ / s + _ z: ∅ inserts a sound.
    • l > ∅ / C + _ #: ∅ on the right deletes.
    • s > ʃ / _ i: context can be one-sided.
    • k > g @ltr: put @sim, @ltr, or @rtl at the end to override the global direction for that rule.
    Features and classes

    Use [+voice -continuant] for feature bundles, with + or - in front of every feature. Single capitals are classes: C (non-vowel) and V (vowel) exist by default.

    • N = m/n/ŋ: define a class from IPA symbols.
    • S = [+fricative]: define a class from features.
    • Known features include vowel consonantal sonorant continuant stop fricative affricate nasal approximant rhotic lateral voice labial dental alveolar retroflex palatal velar uvular glottal high low front back round tense stressed long aspirated ejective.
    • Shortcuts work too: cons for consonantal, cont for continuant, approx, lat, lab, alv, pal, vel, asp, and more.
    • [αback] with α β γ δ copies a value: [+nasal] > [αlabial βalveolar γpalatal δvelar] / _ [+stop αlabial βalveolar γpalatal δvelar] assimilates nasal place.
    • Changing features rewrites to the nearest IPA symbol, adding ̃ ː ʰ ʼ ◌̥ ◌̬ as needed. If no exact symbol exists you get a warning and the closest match.
    Contexts and boundaries
    • #: word edge, as in [-sonorant +voice] > [-voice] / _ (+) #.
    • +: morpheme boundary. Write it in words with +, e.g. kæt+z. (+) makes it optional.
    • $: syllable boundary. Write it in words with ., and uncheck “Ignore syllable dots” so rules can see it.
    • (X): optional element. {a, b}: pick either branch. X*: zero or more of X.
    • (C)% is not a thing here. Optionality is plain (C).
    Application direction

    Rules run top to bottom; the table shows each intermediate form, with · when a rule changes nothing. Order matters: try swapping the Russian l > ∅ and devoicing lines in the preset to see feeding go wrong.

    • sim: find all matches first, then change them at once (good for clean, parallel changes).
    • ltr: scan left to right and keep applying (needed for spreading, like vowel harmony).
    • rtl: scan right to left.
    Words and IPA input
    • Separate words with spaces or new lines (up to 500 are shown).
    • ˈ marks the next syllable stressed; ˌ marks secondary stress. Stress is a [+stressed] vowel feature rules can match.
    • Affricates like tʃ dʒ ts, tie bars, and modifiers ʰ ʷ ʲ ˠ ˤ ʼ ː ˑ ˔ plus combining diacritics are parsed as one segment.
    • Unknown symbols still run, but feature rules cannot match them.
    Sharing and deep links

    Every change updates the address bar. Copy the link and anyone who opens it sees your exact words, rules, direction, and dot setting.

    If you build links by hand, the parameters are w (words), r (rules), m (sim, ltr, or rtl), and dots (1 or 0).

    Got a good one?

    Share your sound system and favorite derivations with the club on Discord, or bring it to a Friday workshop.

    Join our Discord