phonetik 0.3.2

Phonetic analysis engine for English. Rhyme detection, stress scanning, meter analysis, and syllable counting with a 126K-word embedded dictionary.
Documentation

phonetik

A Rust library and HTTP server for English phonetic analysis. Rhyme detection, stress scanning, meter identification, and syllable counting — backed by the full CMU Pronouncing Dictionary compiled directly into the binary.

No files to download. No API keys. No runtime dependencies. Phonetik::new() and go.

What it does

  • Rhyme finding — perfect, slant, and near rhymes with confidence scores
  • Stress analysis — extract stress patterns from any English text
  • Meter detection — identify iambic pentameter, trochaic tetrameter, etc.
  • Phoneme lookup — ARPAbet transcriptions for 126K words
  • Syllable counting — per-word and batch
  • Rhyme map — detect phoneme repetition patterns across lines of verse
  • Word comparison — phonetic similarity scoring between any two words

Install

[dependencies]
phonetik = "0.3"

Or install the binaries:

cargo install phonetik

This gives you phonetik-server (HTTP API) and phonetik-mcp (MCP tool server).

Usage

use phonetik::Phonetik;

let ph = Phonetik::new();

// Rhymes
for r in ph.rhymes("love", 10) {
    println!("{} ({:?}, {:.0}%)", r.word, r.rhyme_type, r.confidence * 100.0);
}
// ABOVE (Perfect, 100%)
// DOVE (Perfect, 100%)
// GLOVE (Perfect, 100%)
// MOVE (Slant, 60%)
// GROOVE (Slant, 60%)

// Meter
let scan = ph.scan("uneasy lies the head that wears the crown");
println!("{}{}", scan.visual, scan.meter.name);
// x / x / x / x / x / — iambic pentameter

// Comparison
let cmp = ph.compare("cat", "bat").unwrap();
println!("{:.0}% similar, {:?}", cmp.similarity * 100.0, cmp.rhyme_type);
// 67% similar, Perfect

// Lookup
let info = ph.lookup("extraordinary").unwrap();
println!("{}: {} syllables", info.word, info.syllable_count);
// EXTRAORDINARY: 6 syllables

How it works

The entire CMU Pronouncing Dictionary is compiled into the binary at build time. Every phoneme is encoded as a single byte — no strings in the hot path. Rhyme detection is algorithmic:

  • Perfect rhymes are resolved by grouping words that share identical sound from their last stressed vowel onward. One hash lookup.
  • Slant rhymes use a vowel distance matrix and coda suffix matching. Words sharing the same consonant ending but different vowels (love/move) are found by index traversal, not pairwise comparison.
  • Near rhymes walk a precomputed graph of consonant clusters that differ by one edit. Same vowel, slightly different ending (night/nice).

Server

The crate includes an HTTP server binary behind the server feature (enabled by default):

cargo install phonetik
phonetik-server
# Phonetik starting on :1273 [126052 words]

Endpoints: /health, /syllables, /syllable-counts, /rhymes, /rhymes/perfect, /rhymes/slant, /rhymes/near, /compare, /scan, /rhymemap, /document

MCP

phonetik includes an MCP (Model Context Protocol) server so AI assistants can use it as a tool. Runs over stdio — no network, no auth.

cargo install phonetik

Add to your MCP client config (Claude Code, Cursor, etc.):

{
  "phonetik": {
    "command": "phonetik-mcp"
  }
}

Tools: lookup, rhymes, scan, compare, analyze_document

Feature flags

Both server and mcp are enabled by default. For library-only use:

[dependencies]
phonetik = { version = "0.3", default-features = false }

License

MIT