How people reach it
page · navigation · flow · messagesAppling is a declarative language that describes a business application as one validated model. That text is the single source of truth: Appling visualizes it as a living graph and generates code from it, so people and AI always build from the same model.
npm i -D @appling/cliEach concept is defined once, in the layer that owns it. References only point down the layers, and modules only see what other modules export.
page · navigation · flow · messagesinterfacequery · projection · external · usecaseevent · action · machine · jobenum · value · entity · invariant · policymodule · role · actor · tenant · migrationWrite the model in plain .appling files. The text is the canonical source.
Parsed and linked across files and modules, every element by its qualified name.
Layer rules, exports and migrations are checked on every build.
Explore and simulate the graph, edit with AI, and generate code, all from the same source.
The same sales module, as text and as the graph Appling builds from it.
module sales { export Order enum OrderStatus { draft placed } entity Order { reference: String unique status: OrderStatus state default draft } action PlaceOrder on Order { requires { reference != "" } } machine OrderFlow on Order.status { transition draft -> placed via PlaceOrder } }
[CUSTOMER QUOTE: what Appling changed for their team]
[CUSTOMER QUOTE: a concrete before and after]
Every tool reads the same resolved semantic graph and changes it through the same edit operations. The graph comes first, then the IDE and code generation grow from it in parallel.
@appling/ide, @appling/ai@appling/codegen, codegen-django, codegen-ash@appling/lang, @appling/modelDone when the CLI can dump the graph of the examples and an edit operation survives fmt unchanged.
npx @appling/ide opens the workspace in the browser: an LSP backed editor and the zoomable graph, with selection synced between them.
Plan, step runner, map contract, task registry and prerequisite checks behind appling generate.
Django and Ash maps for entities, enums, value types, invariants and policies.
Edit elements and attributes in the graph. Migration entries appear once a release exists.
An MCP server for any client plus a chat panel. AI changes pass validation and arrive as reviewable diffs.
Actions, state machines, events, jobs, queries, projections, use cases and interfaces.
Test skeletons for invariants, preconditions, transitions and policies.
AI picks open registry entries, implements them, runs the related tests and marks them done.
makemigrations and mix ash.codegen, fed with Appling rename and retype steps so nothing is guessed as remove plus add.
The appling command checks your models and writes them in canonical form. Point it at a folder; files that reference each other load as one workspace.
check validates every .appling file and exits with 1 when it finds errors.
fmt rewrites files into canonical form. A second run changes nothing.