When can an invoice be sent?
- Only the owner can send it.
- It must be a draft.
- It must contain at least one line item.
- Sending it changes its status to sent.
Changing the framework or database leaves these four rules intact.
Meant Lang is a small, checkable language for how an application should behave: who can act, under what conditions, and what changes. Your team and coding agents can check the model. Engineers choose how to build it.
See an exampleRequirements written in English can leave decisions open to interpretation. Agents can fill those gaps with assumptions.
Meant gives you a small, clearly defined language for describing intended behavior: who can act, under what conditions, and what changes. Your team makes those decisions explicit, giving agents less to guess.
Who can send it? What if it is empty? Can it be sent twice? An agent needs these decisions before it can build the behavior you intended.
Here, the model says when SendInvoice is allowed and what it changes. Storage, API routes, framework, and deployment belong to a separate engineering design.
concept Invoice
dimension status = draft | sent
concept DenyCode
field copy: string
values
NOT_DRAFT "Only a draft invoice can be sent."
EMPTY_INVOICE "An invoice needs at least one line item."
shape Draft of Invoice
where status = draft
shape Empty of Invoice
where no LineItem
action SendInvoice of Invoice
by owner
requires Draft else NOT_DRAFT
requires not Empty else EMPTY_INVOICE
effect
status = sentscenario SendingAnEmptyDraft
with Draft, Empty
the owner sends it via SendInvoice -> denied EMPTY_INVOICEThe invoice has no line items, so SendInvoice is denied.
✓ Matches the scenario expectationSelect a scenario to see its recorded simulator result. Inspect the evidence and its limits ↗
The same invoice rules can work in a small application or an existing system. Choose a design below to see what an engineer might build.
Changing the framework or database leaves these four rules intact.
Handle the invoice workflow in a Django application, with SQLite for storage and an email provider for delivery.
Handle requests in a TypeScript API and send emails through a queue and background worker.
Add the workflow to the existing Java service. Use its system of record and an outbox with the existing mail service.
These are example designs. Meant does not choose the stack or generate the application.
Whichever design you choose, test the application against the four rules.
Product managers and engineers decide the rules, exceptions, and outcomes in the business’s own words.
An agent drafts the model. Deterministic checks catch structural mistakes. Simulation explores supported claims and can expose counterexamples.
The engineer chooses the architecture, stack, and integrations. Agents work from those decisions and the agreed model.
Test that the application behaves as agreed. Review changes to the requirements before asking an agent to implement them.
Point your coding agent at one workflow in your codebase. It drafts the model from the code, and you decide what the model means.
How it works →bun add -g meant-langRun `meant` and follow its instructions to build a Meant model of the <workflow> workflow in this app.Permission checks, stored entities, status fields, handlers, guard clauses, and tests become declarations, each citing the file and line it came from.
New vocabulary waits for your verdict, and contradictions in the code are marked as undecided instead of guessed.
Check, simulation, and report show the falsified claims, unverified prose, and open questions to settle with your team.
No LLM decides whether a model passes its structural checks.
A counterexample disproves a claim. A passing bounded search covers only the conditions searched.
Some requirements remain in prose that the simulator cannot execute. Reports list them for review.
The current toolkit checks models. Automatic application conformance and runtime enforcement are not implemented.
Prose is a useful starting point. A model adds references, conditions, outcomes, and expectations that the checker and simulator can inspect. You can keep requirements in prose; reports identify what remains unverified.
The current toolkit does not generate applications. The model is an input to engineering design and agent-assisted implementation. Engineers choose the architecture, stack, integrations, and operational tradeoffs.
No. Structural checks and bounded simulation provide evidence about the model. Application tests, integration checks, and reviews must separately establish that the implementation follows the intended behavior.
Start by reviewing the rules and scenarios with an engineer. Agents can help draft the syntax. You decide whether the model says what the business means.
Yes. Meant is a developer preview: install it with bun add -g meant-lang (Bun 1.4 or later). The source is on GitHub under the MIT license. Read the project status.
Read the rules, follow the three scenarios, and see what the simulator checks.
Explore the language