A language for narrative structure. A live recognition engine.

A Structured Story

Every story is already a structure: people, the ties between, and the events that test. TropeLang is a way to write that structure down — not the prose, but the bones beneath.

You needn't name a trope to conjure it. You describe what happens — who trusts whom, what turns, what comes to light. The tropes are the shapes that structure reveals. A betrayal is a betrayal by its shape, not its wording: write the trust and the turn in your own voice, and it reads the same.

I am Schrödinger's Dramatic Irony

And nothing is forced to mean one thing before its time — a story can hold two readings at once, until it settles into one.

the_appraisal.trl live
// A grifter, a mark, and the turn. Hover a name; edit a line.
char vale [+Protagonist] [+Grifter]
char renn [+Mark] [+Collector] [+Paranoid]

scene the_appraisal {
  beat 1 { vale -- renn : "lets him see only the appraiser" }
  beat 2 { evt the_switch [&Betrays(agent=vale, target=renn)] }
}

Describe, don't direct

Declare a cast, wire the edges, annotate what happens. No control flow — just a record of what's true.

The shape is enough

A trope is a pattern, not a keyword — recognized even when the words never name it.

No hidden work

Every snippet on this site parses through the same engine as the editor. If it renders, it parsed.