Typestate

How it works

An English definition goes in. A running, versioned backend comes out.

Define

You describe three kinds of thing, each in plain English.

Entities are the data. β€œAn invoice with a customer name, a total amount in euro cents, and a paid flag that starts false.” Typestate derives the storage schema from that sentence, and works out the migration when the sentence changes.

Flows are the operations. One flow does one job: what it takes, the steps, the validations, what it returns, and what happens when something is wrong.

Endpoints expose flows over HTTP, with access rules and rate limits stated the same way.

Compile

The platform compiles each definition to type-checked code and runs a real type checker over the result. A failure gets one repair attempt before the draft is marked as failed, with the reason in English.

You never see the code, and you cannot submit any. That is deliberate: the moment code becomes the thing people edit, the English stops being true.

Deploy

Dev takes anything, at any time. Deploy as often as you like and call the live URL to check the behaviour yourself.

Production is different. Changes go through a changeset: a recorded set of definitions to release, with the diffs and the schema work laid out, which a person reads and approves. Editing anything the changeset covers invalidates the approval, so what ships is always what somebody agreed to.

Iterate

Every definition is versioned. Diffs are computed on demand and written for a reader, not a compiler. Deploy one flow without dragging every other change in flight along with it.