Prosody

poetry workbench

A poetry workbench with a real phonetics engine, and no server behind it.

Prosody scans your lines, checks them against the form you chose, finds rhymes by phoneme distance rather than spelling, and defines every word it suggests. It is one HTML file. The pronouncing dictionary, the thesaurus, 56,288 definitions and the whole interface are inside it. Open it with the wi-fi off and nothing changes.

Open Prosody Download the file (4.2 MB)

No account. No sign-up. Nothing is uploaded — there is nowhere to upload it to.

Prosody with a Shakespearean sonnet open: scansion in the left margin, the poem in the middle, and craft notes on the right.
Sonnet 18, eight lines in. The margin marks stress and syllable count; the panel on the right has already noticed that line 4 does not rhyme with line 2, and named the two pyrrhic substitutions in lines 2 and 6.

What it actually does

Scansion that comes from sound

Syllables and stress are read out of a pronouncing dictionary, not guessed from spelling — which is why it gets fire, flower and every right. It also knows when verse swallows a syllable: heav'n, ev'ry, flow'r are scanned the way the line needs them.

Rhyme by phoneme distance

Every pair of the 39 English phonemes has a distance, and rhyme is edit distance over the sounds after the stressed vowel. So perfect, near, slant, weak and identical rhyme fall out of one measurement instead of five word lists — and moon/room is correctly a near rhyme, not a miss.

Forms that check themselves

Choose a villanelle and it tracks both refrains, tells you which line owes a repeat, and says so when the repeat has drifted. Sestinas get their end-word rotation laid out. Sonnets, ballads, pantoums, triolets, syllabics, and a dozen more.

Craft notes, not grammar notes

Where the metre strains and what substitution you used. Where the caesurae fall and whether they ever move. Which lines run on and which stop on a word that cannot end a phrase. How long your sentences are against how long your lines are. Which words open too many lines.

56,288 definitions

Every suggested word carries its own meaning — hover it and the definition appears. A thesaurus that offers you abate without saying what it means is asking you to gamble.

Search on several conditions at once

Means the same as grief, two syllables, rhymes with alone, not a word already in the poem. When nothing satisfies all of it, it says which condition to drop and how many that would give you.

The Find panel with meaning, rhyme and syllable conditions filled in.

The question a stuck poet actually has

Every other tool answers one thing at a time: what rhymes with this, what means this, what fits this beat. But nobody is ever stuck on one condition. They want something like grief, two syllables, rhyming with alone, that I haven't used yet.

Shape is a hard filter, because you cannot compromise on the thing that makes the line scan. Sense and rhyme are graded, because they always are — so results arrive in tiers and you can see exactly which condition each answer bent.

Ask for something meaning grief that rhymes with alone and it tells you plainly that nothing in the dictionary does both, then hands you moan and bemoan and lets you make them mean it. That is more honest than an empty box, and closer to how the line actually gets written.

The Sound panel showing phoneme class percentages, alliteration and internal rhyme.

What the poem is made of

The texture of a poem is measurable: what proportion of it is plosive, fricative, nasal, liquid. A line that is 40% liquids hums; one that is 40% plosives hits. Prosody counts it and tells you which one you wrote.

It also finds the rhymes you did not plan — words echoing across lines the form never asked to match — and separates them from the ones the scheme already accounts for. Internal rhyme you meant is craft; internal rhyme you did not notice is usually the reason a stanza feels muddy.

How it works

One file, no requests

The whole thing is a single prosody.html. There is no build step to run, no package to install, no account to make and no API to call. Save it anywhere and it keeps working — on a plane, on a stick, in ten years when this domain has lapsed.

That constraint is why the interesting parts exist. A pronouncing dictionary, a thesaurus, a sense-relation graph and three million lines of poetry frequency data do not fit in an HTML file by accident.

4.2 MBthe entire application, one file
~0.6 sfrom open to ready
0network requests while you write
56,288definitions, decoded on demand
13 msa cold rhyme sweep of the dictionary
175assertions in the test suite

The compression, briefly

iPronunciations are integer phoneme codes in one packed byte buffer, with a precomputed 39×39 distance matrix beside it, so a rhyme sweep is arithmetic over typed arrays rather than string comparison.

iiThe thesaurus is delta-encoded integer lists in a variable-length base-42 scheme over a character pool chosen so the data can sit in HTML without escaping.

iiiThe definitions were 2.9 MB of English prose. They are token-coded against a table of the 12,288 commonest pieces that appear in them, and the space between two words is not stored at all — the decoder puts it back, because a space between two letters is the only thing that can be there. That is 1.2 MB, decoded one row at a time, only for the word you actually asked about.

ivEvery data blob lives in an inert <script type="text/prosody-data"> element rather than a JavaScript string, so the HTML parser handles it instead of the JS parser, and the element is removed after reading so the source can be collected.

The bug worth mentioning

Halfway through, the thesaurus started answering floor with homosexual. Line 36,450 of the dictionary was ths — a word with no vowel, which the loader skipped and the exporter did not, so every word id after it was off by one. Four tables were silently misaligned and every individual lookup still looked plausible.

The fix was one line in the build. The lesson was the test that now asserts the number of dictionary lines the app read equals the number the build wrote — the kind of check that only gets written after an off-by-one has cost you an afternoon.

Everything in it is licensed for this

The CMU Pronouncing Dictionary (BSD-2-Clause), WordNet 3.1 (Princeton's licence) and the Gutenberg Poetry Corpus (public domain). All three permit commercial redistribution, all three required notices ship in the file itself, in the credits screen and in LICENSES.txt. No in-copyright poem text is embedded anywhere.

Three themes, one typeface stack

Prosody in the Dusk theme, showing the definitions of the word harbour.
Dusk — the definitions panel. Every sense, in WordNet's own order.
Prosody in the Riso theme, showing the word fitter.
Riso — the fitter, finding words for one exact slot in a line.

Price

The writing surface is free. Everything about it is.

Free
$0
  • The whole writing surface
  • Scansion, every rhyme type
  • Thesaurus, definitions, sound map
  • The multi-condition finder
  • Sonnets, ballads, syllabics
  • Villanelle, sestina, pantoum
  • The full craft critique
  • More than 3 saved poems
Start writing
Pro
$24 once, yours forever
  • The repeating forms, checked live
  • Refrain and rotation tracking
  • The full craft critique
  • Unlimited poems
  • Export and printable scansion
  • Every future update

One payment, no subscription, no account. A licence key arrives on the page straight after checkout. The app checks it against this server once, then verifies it itself — offline, with a signature — every time you open it after that. A licence that needed a server to be up would not be a licence you own.