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.
| Shows | 939 | the works with a page. 1866 to 2026 |
| Productions | 13,459 | every staging, in scope or not |
| — of those, in scope | 1,536 | belonging to one of the 939 |
| Works | 10,618 | titles a production can point at. No page |
| People | 7,139 | performers, writers, designers |
| Venues | 135 | theatre buildings |
| Albums | 237 | the thinnest tier by a long way |
| Images | 11,336 | sleeves, portraits, venues, playbills |
| Cast credits | 46,793 | person to production |
| Licensing records | 939 | who 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 indocs/routes.md— every URL the site serves and what it doesdocs/collections.md— the editorial spine, and why a collection can be cutdocs/images.md— the picture programme, its rights position, and blurringdocs/contributing.md— the contribution loop, both directionsdocs/scope.md— what this deliberately does not do, and whydocs/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.