Skip to content

Choose your path

A Mateu UI is one model. You make three choices, and none of them constrains the others:

  1. How you author it: YAML files, the visual editor (which writes those files), or code in Java, C# or Python.
  2. Where it renders: a web browser (Vaadin or Oracle Redwood / Visual Builder), the Mateu mobile app, or IntelliJ on the desktop.
  3. How it is served: by a backend (five Java frameworks, ASP.NET Core or FastAPI), or as a static bundle on a CDN with no backend at all.

You can change your mind about (2) and (3) without touching what you wrote in (1).

A product listing with search and a status column, authored three ways. All three produce the same wire model and render identically in every renderer.

specs/ui/products.yaml
type: Listing
title: Products
searchable: true
rowsSource:
ref: products # a named endpoint in sources.yaml
columns:
- {type: GridColumn, id: id, label: Id, identifier: true}
- {type: GridColumn, id: name, label: Name}
- {type: GridColumn, id: price, label: Price}
- {type: GridColumn, id: status, label: Status, dataType: status}
specs/ui/routes.yaml
type: Routes
routes:
- route: products
layout: products.yaml

The rows come from a REST endpoint declared once in sources.yaml (with sample data until the API exists). The visual editor writes these files for you. Served by a backend, or bundled into static files.

The difference is not in what you can show but in where the behaviour lives. In YAML the screen reads and writes REST endpoints directly (or through a proxy, so secrets stay on a server). In code the screen owns its data access and can run any logic on the server. You can mix the two: layout in YAML, behaviour in code.

Whichever path you take, the UI is made of the same building blocks: a mount, an app shell and menu, routes, pages, partials, actions, data sources and state, plus field types, translations, environments, access rules and project settings. Read What a Mateu UI is made of for the map, with the same product catalogue as its running example. The UX guide then shows what they look like on screen: the app shell, the six page types and the component catalogue.

You are…Start with
Building screens over APIs that already exist, without writing codeQuickstart: YAML, then the visual editor
A Java team (Spring Boot, Quarkus, Micronaut, Helidon)Quickstart: Java
A .NET teamC#
A Python teamPython
Designing in Figma firstFigma design-to-code
Composing UIs owned by several teams into one consoleUI federation
  • IntelliJ IDEA: File › New › Project… › Mateu. VS Code: command palette › Mateu: New Project…. Both ask how you author (code, code + YAML, YAML served by a backend, YAML static) and which runtime.
  • Maven archetype: mvn archetype:generate -DarchetypeGroupId=io.mateu -DarchetypeArtifactId=mateu-archetype -DarchetypeVersion=<release> -DgroupId=com.acme -DartifactId=my-app (add -Dauthoring=yaml or -Dauthoring=static for the YAML flavours). See Create your project.
  • A starter: the repository’s starters/ folder has one minimal project per runtime (Spring MVC, WebFlux, Quarkus, Micronaut, Helidon MP, .NET, Python, YAML, static). CI builds and boots every one of them.