The smallest useful app: one button that runs a concept, and one table that shows the result. If you understand this page, you understand the core of Apps — everything else is more of the same.

1. Prepare two concepts

In an ontology of your choice, create two concepts. The first computes a total per customer from a few inline facts:
Concept: customer_totals
The second builds on it and keeps only the big spenders:
Concept: top_customers
In a real ontology these would read from your data sources instead of inline facts — the app works exactly the same way. Once both concepts are saved and run, your ontology’s lineage shows the chain the app will execute: The ontology lineage: customer_totals feeding top_customers

2. Create the app

  1. Open Apps in the product navigation and click New App.
  2. Pick the ontology that holds your two concepts, give the app a name (say, Top Customers), and continue.
The New app screen with the name and ontology filled in You land in the App Editor with an empty app: one page, one empty section.

3. Add a run group

A run group says what to execute and when. This app needs exactly one:
  1. Open the Data panel in the left rail and add a run group.
  2. Set its trigger to button — it will run when the user clicks a button.
  3. Under execute, add top_customers. This is the concept the button runs; executing it computes its whole upstream lineage, including customer_totals.
  4. Add an output tap on top_customers and give it the id top. Taps are the named handles widgets read from.
Selecting the run group shows its full wiring in the inspector — trigger, execute list and output taps: The Data panel with the run group selected and its inspector open

4. Add the two widgets

In the Structure panel, add two widgets to the section:
  1. A run button bound to your run group. This renders the button that fires it.
  2. A rich table bound to the output tap top. This renders the results.
The live preview in the center updates as you go — before the first run, the table shows a placeholder: The editor with the run button and table in place

5. Save and run

Click Save app. The definition is validated against your ontology — if you typo’d a concept name, you get an error now, not at runtime. Then click Open app (or find it in the Apps catalog): you’ll see your button; clicking it runs the concept and the table fills with the customers over 1,000. The finished app after clicking the button

The whole app as JSON

The editor also has a JSON view showing the definition you just built visually. It looks like this:
Read it top to bottom and you can see the whole flow: the page binds to an ontology, the run group executes top_customers and exposes the tap top, and the two widgets point at the group and the tap.
Execute vs. display. execute and outputs don’t have to name the same concept. One run computes the whole upstream lineage, so a tap can read any concept along the way. Add a second tap { "id": "totals", "concept": "customer_totals" } and a second table bound to it — one button click now fills both tables from a single execution.
No button at all. Change the run group’s trigger from button to load and delete the run button widget — the table then fills automatically when the app opens. Triggers are covered in Selects, triggers and drill-downs.
Next: let the user tell the concept what to compute — Forms and parameters.