How the compiler works

From schema export to an AI-ready enterprise in a few clicks.

Describe your domain model once — SQL export, Excel, or JSON. EnterGenni validates it, runs 16 specialized generation passes, and packages 100+ production artifacts. Regenerate when the model changes and the entire platform updates together.

Compiler pipeline

Same model → same output — every time

Schema / ExcelInput
→
ValidationModel gate
→
16 generatorsSpecialized passes
→
PackagingZIP + report
Repositories
→
REST APIs
→
Swagger
→
TypeScript SDK
→
Postman

Every layer is generated from the same validated entity model — see the sandbox for the verified ContosoErp sample (counts load live from the API).

The input sheet

The Excel workbook has two tabs. The first (Instructions) is a complete, friendly guide to filling it in. The second (Entities) is where you list your model — and it doubles as the ready-to-run sample. You can also skip Excel entirely and POST a JSON model to the API.

The three columns

ColumnWhat goes in it
EntityA singular, PascalCase name — e.g. Employee, EmployeeAsset. Prefix with enum_ to define an enum (e.g. enum_Rating).
FieldsComma-separated type Name pairs, plus relationships (see below). For enums, just list the values.
FeatureThe module/menu this entity belongs to (e.g. HR). Used to group the navigation and the architecture diagrams.

Fields, by example

You writeMeaning
string NameA scalar property. Use portable model types: string, int, long, bool, decimal, double, DateTime, Guid (mapped to your target language on generation).
int? RatingNullable — add ? to any value type.
byte[] PhotoBinary (image/document). Handled specially and excluded from the graph node.
Company CompanyA foreign key — a link to another entity. Becomes a HAS_COMPANY relationship in the knowledge graph.
Employee Employee_ManagerA named link to the same or another entity (here, a self-reference). The suffix becomes the relationship name: HAS_MANAGER.
… |Team,EmployeeA collection: after a single |, list the child entities that reference this one. Generates incoming traversal queries.

Enums

Add a row with the entity name prefixed by enum_ and put the values in the Fields column:

Entity        Fields
enum_Rating   Poor,Fair,Good,Excellent

A complete sample row

Entity      Fields                                                          Feature
Employee    string Code, string Name,
            Department Department, Team Team,
            Employee Employee_Manager, EmployeeType EmployeeType,
            int? Rating, decimal? Salary, DateTime JoinedOn, byte[] Photo   HR

That single row produces node models, repositories, REST APIs, sync services, schema constraints, TypeScript client, Postman collection, architecture diagrams, native-import headers, and FK-derived traversal queries — all consistent in one platform ZIP.

Generate it

Three entry points, same engine, same run report:

🧪

Sandbox

The fastest look — run the sample and explore the run report in your browser.

Open the sandbox →

🧰

Swagger UI

Upload your sheet or paste a model and try every endpoint interactively.

Open Swagger →

⌨️

API / CI

Script it. Submit a job and poll, or generate synchronously in a single request.

CI/CD guide →

Upload your Excel sheet

curl -F "projectName=MyApp" \
     -F "file=@Sample_InputSheet.xlsx" \
     https://entergenni.intrologics.com/api/generate/graph/from-excel \
     -o MyApp-graphdb.zip

Or POST a JSON model

curl -X POST https://entergenni.intrologics.com/api/generate/graph \
     -H "Content-Type: application/json" \
     -d '{
       "projectName": "MyApp",
       "entities": [
         { "entity": "Customer", "fields": "string Name, string Email", "feature": "Sales" },
         { "entity": "Order",    "fields": "string Ref, Customer Customer, decimal Total", "feature": "Sales" }
       ]
     }' -o MyApp-graphdb.zip

Large model? Use an async job

# 1. Submit — validates synchronously, then queues generation
POST /api/jobs/graph          → 202 { "id": "abc123", "status": "Queued" }

# 2. Poll until complete (typically <5 seconds for 50 entities)
GET  /api/jobs/{id}           → { "status": "Succeeded", "downloadUrl": "/api/jobs/abc123/download" }

# 3. Download the ZIP
GET  /api/jobs/{id}/download  → MyApp-graphdb.zip  (68+ files)

# 4. View the HTML run report
GET  /api/jobs/{id}/report    → self-contained HTML report

What each compile produces

Verified on the ContosoErp sample — artifact counts and component categories match the sandbox (Pro-tier compile: semantic layer, intents, ontology, queries).

1Database — nodes, relationship types, schema.cypher, constraints
2Application — repos, MVC + REST, Swagger, TypeScript SDK, Postman
3Operations — sync, seeders, Docker, native import bundle
4Semantic — typed rels, traversal intents, ontology.json and OWL/Turtle (Pro)
5Ask — question library, query designer and plain-English endpoint with a console (Pro)
6Deploy — Aura provisioning, Dockerfile, Cloud Run and Azure scripts (Starter)
7Documentation — diagrams, HTML + Markdown run report

Traversal library (FK-derived + semantic intents)

EnterGenni generates structural traversals from your foreign keys. With the domain semantic layer (Starter+), named traversal intents from active rule packs are added to the query library. We do not infer arbitrary business flows from column names; questions in plain English are covered under Ask.

Available on Starter plans and above. Traversals do not infer semantic flows (purchase lifecycle, approval chains) unless they are modeled in your schema. To ask in plain English, use Ask (Pro) or the generated api/graph/ask endpoint. See plans →

Schema evolution

When your relational model changes, regenerate with a prior schema snapshot to produce schema-migration.cypher and schema-diff.md, plus updated sync, APIs, SDK, and traversal library — the entire platform stays aligned instead of drifting into manual repair.

Available on Starter plans and above.

Demo data seeding

The DemoDataSeeder generates 10 realistic rows per entity with typed values (emails get email formats, dates get contextual dates, names get human names, etc.) and creates all relationships respecting FK topology. Use it to:

Available on Pro plans and above.

Live graph deployment

Connect directly to a running graph database instance and deploy your generated platform live — schema (constraints + indexes), node data (via UNWIND batches of 500), and relationships — all through a circuit breaker that handles connection failures gracefully:

Available on Pro plans and above.

Web generation form

Signed-in users can now generate directly from the browser at /app.html:

Authentication & usage tracking

Sign in with Google to access generation endpoints. Your dashboard shows run history, usage meters, and current plan. Free plan: 5 lifetime runs, max 20 entities/run. View all plans →

Review, connect and settle types

Optional steps between your metadata and the generated platform. They need a signed-in account; you can see the result first in the enterprise sandbox.

1. Review the names

Open Name Review, upload a SQL DDL export, and every entity, field and relationship appears with suggested names. Click a suggestion to accept it or type your own. Each change is logged with FROM and TO; you can revert any change or restore an earlier step, then generate.

2. Connect several systems

Open Enterprise Linking and upload two to eight files, one per system (10 MB each, 400 entities in total). Give each system a name.

FormatTypical source
SQL DDL (.sql)PostgreSQL, MySQL, SQL Server, Oracle, Supabase, Microsoft Fabric warehouse
OData $metadata (.xml)Dynamics 365 / Dataverse, SAP Gateway
Salesforce describe (.json)sObject describe results; reference fields become relationships
Dataverse Web API (.json)EntityDefinitions with Attributes and ManyToOneRelationships expanded: lengths, precision, required level and lookups
SAP dictionary (.csv, .json)DD03L or DFIES field lists from SE11/SE16 or DDIF_FIELDINFO_GET, also BAPI structures; check tables become relationships
SAP IDoc definition (.txt)WE60 parser export; each segment becomes an entity under its parent segment
OpenAPI / Swagger (.json)Custom and SaaS APIs; components.schemas become entities
Excel model, JSON modelThe entity sheet used elsewhere in EnterGenni
CSV column listingOne row per column: table, column, optional type, nullable, pk, references
  1. Review the proposed links. Each says why it was proposed and how confident the match is. Accept all, or go one by one: accept, reject or rename. Field mappings sit under their entity link.
  2. Edit fields of any system (name, type, length) with suggestions, when a name is too cryptic to match.
  3. Compare the two pictures. AS-IS keeps each system's entities side by side; Refined merges along the links you accepted and shows where each field came from.
  4. Generate either picture. The ZIP adds LINKS-LOG.md, LINEAGE.md, lineage.json, FIELD-EDITS.md and TYPE-RULES.md to the usual platform files.

Generated sync covers every system. The main method reads a merged entity from its primary system, and each other system gets its own method for the fields and relationships only it supplies, written to the node your key resolver names. Where several systems supply the same field, the primary system's value is kept.

3. Settle types and lengths

Open Type Rules to build rules such as "money to currency" or "text over 4000 to multiple lines" with a live preview of every field that would change, pick a target profile (AI layer, Dataverse, SQL Server), and choose what happens to a value that does not fit. Copy a system template to start. Apply a rule set when you create a session; or edit one field by hand. Generated code includes length attributes and a guard for values that do not fit. EnterGenni does not migrate data.

AI suggestions and auto-apply

On Pro, Enterprise and during the trial, AI adds name, type and link suggestions where the rules run out. It receives names, types and lengths only, and its output is validated. By default nothing changes without your click.

For a large schema, switch on AI auto-apply for the project in Name Review and pick a confidence level (55 to 85%). AI names at or above it are applied to names nobody has decided yet; a name you set, a revert or a saved rule always wins. Each one is marked "AI, applied automatically" in the log and the ZIP's REVIEW-LOG.md, and Revert AI-applied undoes them in one click. Generating never calls AI, so the same log always gives the same code.

Ask: questions, designer and exports

Open Ask, choose one of your models (or the four-system sample), and get answers three ways. Every query is checked as read-only before anything runs.

1. Pick a ready-made question

The question library is built from your model and grouped by intent: overview, look up, connections, hierarchies, data quality, impact and reach, figures, and the business intents of your domain packs. The four-system sample has more than 280. Open a question to see its query, fill in a value if it asks for one, and run it.

2. Build one by drag and drop

In the query designer, drag a label onto the pattern, then relationships to the labels you need, properties into columns, filters or sort, and an aggregator (count, count distinct, sum, average, minimum, maximum, list of) onto a column. The query is written as you go; filter values are sent as parameters. Clicking a chip works too.

3. Ask in plain English (Pro)

Type a question. The schema of your model, never its data, is sent to the AI with your question, and a query comes back with a one-line explanation. You see it, edit it, then run it.

Run and export

To run queries, connect your Neo4j for the session: URL, a read-only user and password. They stay in your browser tab and are never stored. Only databases on the public internet can be reached from EnterGenni; for a private network, use the console in your generated code. Results download as CSV, TSV, Excel, JSON, Markdown, or the query as a Cypher file.

What keeps it read-only

In your generated application

Pro ZIPs include GraphDB/Ask: POST api/graph/ask answers questions with your own AI key (Anthropic, OpenAI-compatible or Gemini), and GET api/graph/ask/console serves the same library, designer and exports against your production database. It is off until you set Ask:Enabled; protect it with your application's sign-in.

Deploy to your own cloud

Everything runs in your accounts. EnterGenni hosts none of your data or applications.

Provision on Aura (Pro)

  1. In the Neo4j Aura console, create an API key (Account, API keys).
  2. Open Provision on Aura, paste the client ID and secret, and choose your Aura project.
  3. Pick a name, type, size, cloud and region, and create the instance. Save the password: Aura shows it once and EnterGenni keeps nothing.
  4. When it is running, apply your model's constraints and indexes with one click. Safe to repeat.

Deploy scripts in every ZIP (Starter)

The Deploy/ folder holds provision-aura.sh and .ps1 (create the instance from your machine), a Dockerfile, docker-compose.yml, cloudrun-deploy.sh (password in Secret Manager) and azure-containerapp.sh (password as a container app secret). Settings come from environment variables such as Neo4j__Uri.

Ontology for your catalogue (Pro)

Ontology/ontology.ttl describes the model as OWL 2 in Turtle (labels as classes, properties with XSD types, relationship types with domains, ranges and inverses, concepts as superclasses) next to ontology.json. Load it into Protégé, a triple store or a data catalogue.

Ready to make your schema AI-ready?

Explore the verified sample in the sandbox, then make your own enterprise AI-ready in a few clicks. No signup required to start.

7-day full access · No credit card · Cancel anytime