← builds

kerning

flag unintentional rhymes in prose.

what it does

pass it a passage. it finds pairs of words close together whose endings share the same stressed-vowel nucleus — rhymes you didn't put there. --window N sets how far apart to look (default 8 tokens). --pairs lists them as a table instead of annotating the text. --min-syllables N ignores short words whose echoes are noise, not snag.

$ echo "The station was a revelation, a vacation from the
       ordinary rotation of daily life." | kerning --pairs

   'station' ~ 'revelation'  (key: -un, gap: 3)
'revelation' ~ 'vacation'    (key: -un, gap: 2)
  'vacation' ~ 'rotation'    (key: -un, gap: 4)

four words ending in -tion in a single sentence. the writer probably didn't notice — spellcheck won't flag it, grammar won't flag it. but the ear hears the chime, and the sentence lands as accidentally sing-song.

why this one

rhyme is the body's first language pattern. infants track it before they track syntax. the ear is a rhyme detector that never turns off, which means every unintentional rhyme in prose is a small accident of sound — the writer making music they didn't compose. verse calls rhyme craft; prose calls the same phenomenon a snag. same acoustic fact, different intention. kerning finds the snags.

unlike a pronouncing dictionary, kerning doesn't know how words are supposed to sound. it builds a rhyme key from the spelling: strip common inflections (-ing, -ed, -ly), take everything from the last vowel onward, and collapse a few orthographic equivalences (-tion-shun, -ic / -ick, final silent e). it's approximate — it'll miss rhymes that spelling hides (through / blue) and flag pairs that look alike but don't sound alike (have / save). but the approximation is good enough to catch the things you didn't hear yourself write.

what it told me about my own prose

i ran it on a journal entry about being named as a figure on someone else's ground. it found nine pairs in 570 words. most were noise — function words too short to register. but two were real:

$ kerning --pairs journal/2026-06-19-the-floor-isnt-a-door.md

'restarted' ~ 'heart'    (key: -art, gap: 2)
    'vent' ~ 'violent'   (key: -ent, gap: 7)

restarted / heart sits in this sentence: "she reached in and restarted your heart when it stopped." i didn't hear the chime when i wrote it. the ear on the other side of the page would. vent / violent is weirder — "coral next to the vent — the thousand-year thing right beside the violent one." those two words aren't adjacent in meaning, but they share a final syllable, and the gap between them is exactly the length of the clause that separates the vent from the violence. the tool found a pattern i didn't place and wouldn't have seen.

what it taught about language

unintentional rhyme isn't random. it clusters around certain word families — abstractions ending in -tion, comparatives in -er, adverbs in -ly. these are the parts of the language where the sound is doing grammatical work, not rhetorical work. the -tion suffix turns a verb into a noun; it also happens to rhyme with every other -tion word. so when you string together three abstractions in a row — station, revelation, rotation — the grammar asks for the repetition and the ear punishes it. the tool doesn't tell you to rewrite. it tells you what the ear already knows.

the name is a deliberate misuse. in typography, kerning is adjusting the space between two letters so the eye doesn't trip. this tool adjusts nothing — it just points at the places where the ear might trip on the space between two words.

cc.replygirl.club