Screenplay
Screenplay
Specify the behavior once
You already model a feature end to end on the whiteboard — the events, the command that produces them, and the read model they build. Then implementation details scatter that meaning across several layers. Screenplay records the desired functionality in one declarative .play model. Its versioned semantic model is the contract runtimes and renderers are being migrated to consume; none of them gets to redefine or silently weaken what it says. Get started → · Why Screenplay →
Start here
Section titled “Start here”The friction it removes — one model instead of four hand-synced layers — and the cases where a hand-written slice is still the better fit.
Get startedWrite your first .play file and watch the editor light up with highlighting, completions, and live diagnostics — in minutes.
The design principles, the top-level structure of a .play file, and a map of every construct.
Module, feature, slice, construct, sub-language, Stage, Studio — the vocabulary, defined once.
The whole production in one file
Section titled “The whole production in one file”A .play file is a set of typed slices aligned with Event Modeling — the atomic units of behavior.
Strongly-typed value types that declare their compliance attributes once, so every usage inherits them.
Commands and eventsDeclare the intent, the validation, the authorization, and the facts it produces — all together.
Projections and queriesTurn events into read models with the embedded Projection Declaration Language, then expose them as queries.
ScreensDeclare the UI at three levels — from pure intent that Studio generates to a filled template with inline React.
Reactions and capturesReact to events with automations, and turn external data into events with change data capture.
Go deeper
Section titled “Go deeper”PDL and CDL are built-in first-class grammars; registered inline language tags are carried as bounded realization attachments.
The grammarThe full EBNF grammar — the precise, exhaustive definition of the language.
Frequently asked questionsIndentation vs. braces, the escape hatch to C#/React, how Screenplay relates to Arc and Chronicle.
Screenplay owns the script, not the cast. A .play file expresses portable desired functionality; Stage and generated applications are replaceable performances of that meaning. Cratis Arc and Chronicle are the first realization target, not dependencies of the language or its semantic authority. See Why developers choose Cratis for how that realization fits into the wider platform.