SSOT Template Markup Language — deklarasi UI yang independen dari framework.

Kode frontend mencampur dua hal: keputusan Anda dan wiring framework. API mana yang dipanggil, field mana yang ditampilkan, dalam urutan apa, dalam kondisi apa — keputusan ini terkubur dalam React hooks atau Vue composables. Saat mengganti framework atau refactoring, keputusan diinterpretasi ulang atau hilang.

STML memisahkannya. Keputusan tetap dalam HTML standar dengan atribut data-*. Wiring framework dihasilkan atau didelegasikan.

Repositori GitHub

Struktur

┌─────────────────────────────────┐
│  STML (specs/)                  │  Keputusan Anda. Independen framework.
│  Apa yang diambil, ditampilkan, │  Bertahan dari rewrite apapun.
│  dikirim                        │
├─────────────────────────────────┤
│  Codegen / LLM                  │  Menghasilkan wiring framework.
│  React, Vue, Svelte, apapun    │  Dapat diganti.
├─────────────────────────────────┤
│  Runtime (artifacts/)           │  React TSX, Vue SFC, dll.
│  Hooks, state, rendering       │  Dihasilkan. Jangan diedit.
└─────────────────────────────────┘

Yang Dipertahankan

Semua dalam HTML STML adalah keputusan pengguna:

  • Endpoint API mana yang dipanggil (data-fetch, data-action)
  • Field mana yang ditampilkan atau dikumpulkan (data-bind, data-field)
  • Urutan kemunculan elemen (struktur DOM)
  • Tampilan (kelas Tailwind, tag HTML)
  • Teks yang dilihat pengguna (judul, placeholder, label tombol)
  • Kondisi yang mengontrol visibilitas (data-state)
  • Komponen yang menangani UX khusus (data-component)
  • Perilaku daftar — paginasi, pengurutan, pemfilteran

Bukan React. Bukan Vue. Ini apa yang dilakukan halaman Anda, dideklarasikan dalam HTML5 standar.

Validasi

Validator bawaan memeriksa silang STML terhadap OpenAPI sebelum kode dihasilkan:

  • Apakah operationId ada? Apakah metode HTTP benar?
  • Apakah field request, response, dan parameter cocok dengan schema?
  • Apakah kolom sort/filter/include ada dalam daftar yang diizinkan?
  • Apakah komponen yang direferensikan ada?

Menangkap ketidakcocokan frontend-API saat CI, bukan saat runtime.

stml validate specs/my-project    # 12 pemeriksaan simbolik terhadap OpenAPI

Atribut data-*

AtributYang dideklarasikan
data-fetchMemuat data dari endpoint GET
data-actionMengirim data ke endpoint POST/PUT/DELETE
data-fieldMengumpulkan field body request
data-bindMenampilkan field response
data-param-*Operasi membutuhkan parameter path/query
data-eachMengulang field array
data-stateDitampilkan secara kondisional
data-componentMendelegasikan ke komponen kustom
data-paginateDaftar berpaginasi
data-sortDaftar yang dapat diurutkan (kolom dan arah default)
data-filterDaftar yang dapat difilter (kolom mana)
data-includeMenyertakan sumber daya terkait

Lisensi

MIT — GitHub