zAppDev Create free account

Under the hood

How it is built

For architects and engineers who want the detail.

The language

One language for the logic of every tier

Write the logic once, inside the Intended Design, in a typed language any C# developer can read. It is checked against every entity, screen and service it touches.

✓Typed and checked✓Close to C#✓Part of the Intended Design
CRMService · CreateInteraction
function Domain.InteractionDTO CreateInteraction(
    Domain.InteractionDTO data) {
    var owner = Domain.PMOUser.GetAll()
        .First(o => o.Roles.Any(
            r => r.Name == Application.Roles.SalesMan));

    int accountId;
    if data.AccountId > 0
    {
        accountId = data.AccountId;
    }
    else
    {
        accountId = data.Account.CreateAccount().Id;
    }

    var lead = Domain.Lead.Init(
        data.FlowId, accountId, data.Title, owner);
    data.UpdateLead(lead);
    lead.Save();
    return Domain.InteractionDTO.Fill(lead);
}

The same language, everywhere logic lives

The languagetyped and checkedClass operationsrules and gettersForm actionsclick, save, openService operationsREST and MCPAutomation stepsscheduled and eventUnit testsrun in Studio

Produced, not copied

The engine turns the language into the language of the chosen stack: C# for .NET today. Because the logic is not written in that language, other targets can be added.

What you write
function Domain.InteractionDTO CreateInteraction(
    Domain.InteractionDTO data) {
    var owner = Domain.PMOUser.GetAll()
        .First(o => o.Roles.Any(
            r => r.Name == Application.Roles.SalesMan));

    int accountId;
    if data.AccountId > 0
    {
        accountId = data.AccountId;
    }
    else
    {
        accountId = data.Account.CreateAccount().Id;
    }

    var lead = Domain.Lead.Init(
        data.FlowId, accountId, data.Title, owner);
    data.UpdateLead(lead);
    lead.Save();
    return Domain.InteractionDTO.Fill(lead);
}
→produced
Generated C#
public MyApp.BO.InteractionDTO CreateInteractionImplementation(
    MyApp.BO.InteractionDTO data) {
    MyApp.BO.PMOUser owner = new MyApp.DAL.Repository()
        .GetAsQueryable<MyApp.BO.PMOUser>()
        ?.FirstOrDefault((o) => o.Roles.Any(
            (r) => r.Name == "SalesMan"));
    int? accountId = new int?();
    if ((data?.AccountId ?? 0) > 0) {
        accountId = (data?.AccountId ?? 0);
    }
    else {
        accountId = (data?.Account?.CreateAccount()?.Id ?? 0);
    }
    MyApp.BO.Lead lead = MyApp.BO.LeadExtensions.Init(
        (data?.FlowId ?? 0), accountId, (data?.Title ?? ""), owner);
    data?.UpdateLead(lead);
    new MyApp.DAL.Repository().Save<MyApp.BO.Lead>(lead);
    return MyApp.BO.InteractionDTOExtensions.Fill(lead);
}

Illustrative example in the style of a real operation. Logic that calls .NET libraries stays tied to .NET. The documentation has the full reference.

Batteries included, and extensible

The language ships with sixteen libraries. When you need more, you extend it, without leaving the Intended Design. AI agents can look up the language and its libraries through the MCP server, so they write against the real definitions.

AppLibApplication context: sessions, security and configuration.
CommonLibShared helpers: email, files and paths, URLs.
DomainYour business objects: create, find, save and query.
StandardLibraryFoundation types such as dates and collections.
ExcelLibCreate, read and edit Excel workbooks.
PDFLibCreate and manage PDF documents.
XmlLibParse and build XML.
FileIOLibFile system input and output.
RegExpLibRegular expressions, including readable verbal expressions.
WebLibWeb communication, including socket clients.
DebugLibLogging and diagnostics.
ThreadLibThreads and parallel work.
AutomationLibRun PowerShell scripts and read their results.
DeviceLibDevice sensors, such as location.
GTFSLibParse public-transport (GTFS) feeds.
UnitTestsAssertions for your tests.

Descriptions are summaries of each library’s contents. The documentation has the full reference.

When the editors run out

The escape hatch is back into the Intended Design. Generated files are overwritten on every build, so you never patch the output. You extend the Intended Design instead, in three ways.

Write it as logic

The language is a general, typed language. Anything the editors cannot express can be written as an operation, with the libraries above.

Bring your own libraries

Upload a .NET library (a DLL) and map its classes through the External API Editor, or build custom libraries to share across a team or a project.

Write your own target

Each target is a program, so a team can write one that encodes its own architecture and standards, and every Intended Design can use it.

Customising the platform was the subject of a public workshop at the MDENet Annual Symposium in 2022: watch the recording.

The engine

How the engine works

What the engine encodes

Engineering judgement about your target stack, captured once and applied to every file of every application. It is not advice to be interpreted. It runs as part of the build.

Best practicesDesign patternsArchitectural stylesIndustry trendsOpen-source libraries
Runs in the build, without inference

The engine

for each element in the model
  choose the right pattern
  apply the security rules
  use the proven libraries
  emit consistent code
Security standardsIndustry software standardsOptimisation rulesSpecialist expertise

Knowledge in a program, not in a document

Most engineering knowledge lives in wikis, guidelines and people’s heads. It has to be read, understood and applied by each person, every time. The engine applies it for you.

Described in textWiki guidelines→Read and interpreted→Applied differently
Encoded in a programThe engine→Executed in the build→No interpretation

Expertise, written once. AI helps write it and your experts review it. Then it runs on every application.

Every page, the same structure

One screen in the Intended Design, and the files produced for it.

In the Intended DesignOne screenfields, rules, actions, permissions
→produced
9client files
2server files
→for every page
517 of 517pages have the same structure

517 of 517 pages in one real business application have the same nine client files, and each has its own controller and view model. Counted from the generated solution, build 801.

Targets

One Intended Design, more than one target

Each target is produced by an implementation strategy that runs inside the engine.

One Intended Designchecked as a whole

Full-stack

Available
C# · ASP.NET Core · Angular

A single-page application: an Angular client served by an ASP.NET Core backend, on SQL Server or MariaDB.

Mobile

Preview
TypeScript · React Native

A native iOS and Android client generated from the screens. Logic, data and security stay on the application backend.

Your own

Encode your architecture once, and run it on every application.

AI decides what. The target knows how.

AI DECIDES WHATTHE TARGET KNOWS HOWAIhelps describe itIntended Designchecked as a wholeTargetpatterns, architecture,libraries, securityYour codeordinary, yoursAI DECIDES WHATAIhelps describe itIntended Designchecked as a wholeTHE TARGET KNOWS HOWTargetpatterns, architecture,libraries, securityYour codeordinary, yours

Open Studio

Create a free account and start from a template.

Create free account Read the documentation