Stop building the same app twice

Build real backoffice apps without a frontend

Define your app once in Java.
Mateu renders the UI, wires interactions, and connects everything to your backend.

No HTML. No CSS. No JavaScript.
No duplicated models. No API glue. No sync issues.



🧠 Understand the model

Mateu is simple β€” once you understand the model.

πŸ‘‰ Understand the Mateu mental model β†’


One model. Full app.

With Mateu, you define:

  • state
  • actions
  • behavior
  • relationships
  • navigation
  • layout
  • validation
  • UI reactions

Everything else is generated.


πŸš€ Build something real

πŸ‘‰ Build a full backoffice in 10 minutes β†’

See how Mateu is used to build a real admin app with:

  • forms
  • validation
  • CRUD
  • relationships
  • navigation
  • browser feedback

This is a real app

You’re not wiring components.
You’re not syncing frontend and backend.

You’re just defining your application.


Write this

@UI("")
public class Home {

  @ReadOnly
  int count = 0;

  @Button
  Runnable increment = () -> count++;

}

And get a working UI

No templates. No controllers. No frontend layer.


A real CRUD

@NotEmpty
String name;

@ForeignKey(search = PermissionIdOptionsSupplier.class, label = PermissionIdLabelSupplier.class)
@Stereotype(FieldStereotype.checkbox)
List<String> permissions;

@Button
public Message save() {
  return new Message("Saved successfully");
}

Mateu handles:

  • rendering
  • validation in the browser
  • option loading
  • interaction
  • user feedback

@Menu
MasterDataMenu masterData;

Menus, routing, and structure come from your classes.


One shell. Many services.

Each microservice can expose its own UI.

Compose them with RemoteMenu:

  • independent deployment
  • unified navigation
  • no frontend integration layer

Built for

  • internal tools
  • admin panels
  • microservice backoffices
  • CRUD-heavy systems

Why Mateu

  • ⚑ Less code
  • 🧠 One mental model
  • πŸ”₯ No frontend bugs
  • 🧩 No duplication
  • 🌐 Distributed-ready

Stop building the same app twice.

Define it once.

πŸ‘‰ Try the live demo
πŸ‘‰ Build a backoffice
πŸ‘‰ Read the docs


Built by developers who got tired of writing useless code.