Now showing · Open source

A developer platform for cinema technology

Type-safe SDKs, CLI tools, UI components, a real-time event bridge and analytics for cinema platform APIs. One API surface — TypeScript, C# and Python.

1,265 tests 6 packages 3 languages MIT / BSL 1.1

Cinema platforms process billions in annual transactions. The APIs are production-grade. The developer ecosystem around them is not.

No typed clients. No component libraries. No event systems. Every integrator starts from scratch — reading raw API docs, hand-building request types, re-solving the same problems. Theatrical is the missing developer-experience layer, built so you can go from documentation to a working booking flow in an afternoon.

Six packages. Three languages.
One API surface.

┌─────────────────────────────────────────────────────────────────────┐
│                        Your Application                             │
├─────────────┬──────────────┬──────────────┬─────────────────────────┤
│  @theatrical│   templates  │  @theatrical │      @theatrical        │
│    /react   │  (CLI init)  │  /analytics  │       /events           │
│  Components │  Starters    │  Horizon     │  Real-time Bridge       │
├─────────────┴──────┬───────┴──────────────┴─────────────────────────┤
│                    │          @theatrical/cli                        │
│                    │     init · codegen · inspect                    │
├────────────────────┴────────────────────────────────────────────────┤
│   @theatrical/sdk (TS)  ·  Theatrical.Sdk (C#)  ·  theatrical (Py)   │
│        Auth · HTTP · Retry · Rate Limiting · 8 Resources            │
├─────────────────────────────────────────────────────────────────────┤
│                Cinema Platform APIs (OCAPI · GAS · Horizon)         │
└─────────────────────────────────────────────────────────────────────┘

Polyglot SDKs

One API surface across languages. Same types, same tests, same NZ cinema mock data.

TypeScript
Reference implementation npm install @theatrical/sdk
  • Zod runtime validation
  • 8 resource modules
  • 274 tests
  • Mock mode — zero credentials
C# / .NET
Alpha dotnet add package Theatrical.Sdk
  • .NET 8, async/await
  • System.Text.Json, nullable refs
  • 276 tests (xUnit)
  • IDisposable client
Python
Alpha pip install theatrical
  • Python 3.10+, async-first
  • httpx + pydantic v2
  • 339 tests (pytest)
  • mypy-strict clean
PackageRoleTestsLicense
@theatrical/sdkType-safe client — auth, HTTP, 8 resource modules, Zod validation274MIT
@theatrical/cliDeveloper tools — init, codegen, inspect171MIT
@theatrical/reactCinema UI — SeatMap, SessionPicker, OrderSummary, Loyalty62BSL 1.1
@theatrical/analyticsHorizon client, fluent query builder, CSV/JSON/DataFrame export72BSL 1.1
@theatrical/eventsReal-time event bridge — poll, diff, emit, HMAC-signed webhook71BSL 1.1
Starter templatesReact ticketing starter — living booking demo on the event bridge; scaffold with npx @theatrical/cli initBSL 1.1

Get started in 30 seconds

Mock mode returns real NZ cinema fixtures — Embassy Theatre Wellington, Roxy Cinema, Rialto Auckland — so you can build complete flows with no API access.

TypeScript

import { TheatricalClient }
  from '@theatrical/sdk';

const client =
  TheatricalClient.createMock();

const films =
  await client.films.nowShowing();

const { sessions } =
  await client.sessions.list({
    filmId: films[0].id,
  });

const order = await client.orders.create({
  sessionId: sessions[0].id,
  tickets: [{ type: 'adult', seatId: 'H7' }],
});

C# / .NET

using Theatrical.Sdk;
using Theatrical.Sdk.Types;

var client =
  TheatricalClient.CreateMock();

var films =
  await client.Films.NowShowingAsync();

var sessions =
  await client.Sessions.ListAsync(
    new SessionFilter {
      SiteId = "site_embassy_wellington"
    });

Python

from theatrical import TheatricalClient
from theatrical.types import SessionFilter

client = TheatricalClient.create_mock()

films = await client.films.now_showing()

result = await client.sessions.list(
    SessionFilter(site_id="site_embassy_wellington"),
)

What makes it different

04 / A

Real-time events from request-response APIs

Cinema platforms have no webhooks. The event bridge polls, diffs state changes, and delivers typed, HMAC-SHA256-signed webhooks. One failing endpoint never blocks the others.

04 / B

A CLI that teaches the platform

init scaffolds a wired-up project. inspect explores any endpoint interactively. codegen generates types from an OpenAPI spec. The tooling itself is the documentation.

04 / C

Components that know cinema

SeatMap with ARIA keyboard nav, wheelchair & companion markers. SessionPicker, OrderSummary, PaymentForm, Loyalty. Dark-mode-first, fully themeable via design tokens.