SSOT Template Markup Language — framework-unabhängige UI-Deklaration.

Frontend-Code mischt zwei Dinge: Ihre Entscheidungen und Framework-Verdrahtung. Welche API aufrufen, welche Felder zeigen, in welcher Reihenfolge, unter welchen Bedingungen — diese Entscheidungen sind in React Hooks oder Vue Composables vergraben. Beim Framework-Wechsel oder Refactoring werden Entscheidungen neu interpretiert oder gehen verloren.

STML trennt sie. Entscheidungen bleiben in Standard-HTML mit data-*-Attributen. Framework-Verdrahtung wird generiert oder delegiert.

GitHub-Repository

Was erhalten bleibt

Alles im STML-HTML ist eine Benutzerentscheidung:

  • Welche API-Endpunkte aufrufen (data-fetch, data-action)
  • Welche Felder anzeigen oder erfassen (data-bind, data-field)
  • In welcher Reihenfolge Elemente erscheinen (DOM-Struktur)
  • Wie es aussieht (Tailwind-Klassen, HTML-Tags)
  • Welcher Text Benutzer sehen (Überschriften, Platzhalter, Button-Labels)
  • Welche Bedingungen die Sichtbarkeit steuern (data-state)
  • Welche Komponenten spezielle UX handhaben (data-component)
  • Listenverhalten — Paginierung, Sortierung, Filterung

Nicht React. Nicht Vue. Es ist, was Ihre Seite tut, in Standard-HTML5 deklariert.

Validierung

Der integrierte Validator prüft STML gegen OpenAPI vor der Code-Generierung:

  • Existiert die operationId? Ist die HTTP-Methode korrekt?
  • Stimmen Request-, Response-Felder und Parameter mit dem Schema überein?
  • Sind Sort/Filter/Include-Spalten in den erlaubten Listen?
  • Existieren referenzierte Komponenten?

Erkennt Frontend-API-Inkonsistenzen zur CI-Zeit, nicht zur Laufzeit.

stml validate specs/my-project    # 12 symbolische Prüfungen gegen OpenAPI

data-*-Attribute

AttributWas es deklariert
data-fetchLädt Daten von einem GET-Endpunkt
data-actionSendet Daten an einen POST/PUT/DELETE-Endpunkt
data-fieldErfasst ein Request-Body-Feld
data-bindZeigt ein Response-Feld an
data-param-*Operation benötigt einen Pfad-/Query-Parameter
data-eachIteriert über ein Array-Feld
data-stateBedingte Anzeige
data-componentDelegiert an eine benutzerdefinierte Komponente
data-paginatePaginierte Liste
data-sortSortierbare Liste (Standard-Spalte und -Richtung)
data-filterFilterbare Liste (welche Spalten)
data-includeBezieht verwandte Ressourcen ein

Lizenz

MIT — GitHub