Theatre Register

About Theatre Register

A catalogue of Broadway and West End theatre history, and everything that documents it — the shows, the productions, the people who made them, the theatres they played in, and the recordings that survive.

The question this exists to answer

Pick up a cast recording and you can usually find out what show it is. What you often cannot find out is which production it documents.

That sounds like a small distinction until you try to use it. Hello, Dolly!'s original Broadway production produced at least three recordings across six years, with different casts. Chess has seventeen recordings, and one of them bills itself as the "1984 London cast" — there was no 1984 London production. Somewhere between the sleeve and the truth, the thread gets dropped.

Nobody has that thread in a form you can get at. CastAlbums.org has been running since 2006 and holds 48,241 recordings across 12,640 shows, which is a remarkable achievement — but it keeps the production as free text tucked after a > in the recording title. MusicBrainz credits the composer and drops the cast entirely; ask it about either Kiss of the Spider Woman recording and it returns "John Kander" as the only performer. Ovrtur holds the join properly and charges a subscription with no way to export.

So the gap is not that nobody catalogues cast albums. Plenty of people do, and some of them do it very well. The gap is the join between a recording and the night it came from.

Chasing that join leads somewhere bigger. You cannot say what a recording documented without holding the productions — and once you hold the productions, you find that most of them were never recorded at all. Thousands of nights of theatre with nothing left but a programme and a cast list. That is why this is a catalogue of theatre history rather than of records.

What it holds today

Measured against web/site.sqlite3, 2026-08-16.

Shows939the works with a page. 1866 to 2026
Productions13,459every staging, in scope or not
— of those, in scope1,536belonging to one of the 939
Works10,618titles a production can point at. No page
People7,139performers, writers, designers
Venues135theatre buildings
Albums237the thinnest tier by a long way
Images11,336sleeves, portraits, venues, playbills
Cast credits46,793person to production
Licensing records939who licenses the show for performance

Read two of those together: 13,459 productions and 237 albums. The recordings are far and away the thinnest part of this catalogue, and they are the part the central question depends on. We would rather show you that than round it off. docs/model.md sets out what it costs.

Who runs it

One person, as a personal project. It is free, there is nothing to buy, and there is no advertising. Anyone can correct it — see contributing — and corrections are where most of the improvement comes from.

There is more about how your data is handled on the privacy page, and what you may do with the catalogue on the terms of use.


For anyone reading the code

Everything below is written for somebody working on the site rather than reading it.

The shape of the system

/Volumes/Desiree/broadway-data          read-only. Not ours.
        │
        │  tools/site.py  load()
        ▼
  in-memory dataset  ── overlay, image index, production grouping
        │
        │  tools/build-db.py
        ▼
  web/site.sqlite3   ── one file, every table, full record kept as JSON
        │
        ├─ web/app.py              Flask. Routes and view logic
        ├─ web/collections_spine.py  the editorial layer
        └─ web/templates/          all markup

Nothing in web/templates/ knows anything about broadway-data. That is the rule the whole layout exists to enforce, and web/app.py's own docstring explains what it was like before: markup lived in Python f-strings interleaved with the logic that decides which productions are duplicates, which made every design change a Python change.

Where to go next

  • docs/model.md — the tiers, the tables, identifiers, and how data gets in
  • docs/routes.md — every URL the site serves and what it does
  • docs/collections.md — the editorial spine, and why a collection can be cut
  • docs/images.md — the picture programme, its rights position, and blurring
  • docs/contributing.md — the contribution loop, both directions
  • docs/scope.md — what this deliberately does not do, and why
  • docs/in-flight.md — what is being built right now, and what is not true yet

The research record sits in findings/, the settled decisions in decisions.md, and the model with its hard cases in schema.md. Those are sources. This is documentation, and where the two disagree the code wins and tools/doccheck.py is supposed to say so.

The rest of the documentation

The model
Four tiers, and a reader enters at any of them.
Routes
Every URL the site serves. `tools/doccheck.py` compares the tables on this page
The editorial spine
864 ways into 939 shows.
Pictures
The catalogue holds 11,336 images. They
The contribution loop
It runs in two directions and they are different problems.
What this deliberately does not do
The refusals are load-bearing. Most of them are settled in `decisions.md`, which
In flight
What is being built right now and is therefore not yet true. Every entry names

The research record is in findings/, the settled decisions in decisions.md, and the model with its hard cases in schema.md. Those are sources. This is documentation, and where they disagree the code wins.