Open source · MIT licensed

Define once. Reference outward. Validate always.

Appling 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.

Get startednpm i -D @appling/cli
entity Orderaction PlaceOrderVisualizeGenerate codesales.applingbilling.applingsingle source of truth
Architecture

Five layers, one model

Each concept is defined once, in the layer that owns it. References only point down the layers, and modules only see what other modules export.

L1L2L3L4L5
L5 Experience

How people reach it

page · navigation · flow · messages
L4 Interfaces

How programs reach it

interface
L3 Application

How capabilities are organized

query · projection · external · usecase
L2 Behavior

What can happen

event · action · machine · job
L1 Domain

What exists

enum · value · entity · invariant · policy
Cross cutting

Modules, access, evolution

module · role · actor · tenant · migration
How it works

From text to a living graph

01

Text

Write the model in plain .appling files. The text is the canonical source.

02

Graph

Parsed and linked across files and modules, every element by its qualified name.

03

Validated

Layer rules, exports and migrations are checked on every build.

04

Visualize and generate

Explore and simulate the graph, edit with AI, and generate code, all from the same source.

Example

One file in, one linked model out

The same sales module, as text and as the graph Appling builds from it.

sales.applingvalid
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
  }
}
The graph
L1 · enumOrderStatus
L2 · actionPlaceOrder
L1 · entity · exportedsales.Order
L2 · machineOrderFlow
statusonon statusvia
What people say

Proof from real projects

[CUSTOMER QUOTE: what Appling changed for their team]
[NAME], [ROLE], [COMPANY]
[CUSTOMER QUOTE: a concrete before and after]
[NAME], [ROLE], [COMPANY]
Example repositoryBrowse full models on GitHubalex20465/appling/examples →
Get started

Install, check, format

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.

terminal
# add the CLI to your project$ npm i -D @appling/cli# validate every model$ npx @appling/cli check models# write canonical form$ npx @appling/cli fmt models