Interface et réactif
Un jeune plan RmlUi, remarquable en droite-à-gauche et en accessibilité ; le moteur réactif n'est pas encore relié à la vue.
2 Strong · 6 Solid · 4 Partial · 0 Emerging
Mesuré contre : Qt · GTK · Flutter · React · Dossiers : base/gui(s'ouvre dans un nouvel onglet) · base/reactive(s'ouvre dans un nouvel onglet) · base/app(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

Repensé depuis les premiers principes
Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.
La manière SoftanzaLes déclarations Softanza font contrat ; le balisage que lit le moteur d'interface n'en est qu'une projection, générée et jamais écrite à la main.
Gardé des meilleures pratiques
- La mise en page et la saisie viennent de RmlUi plutôt que d'une boîte à outils maison. Il a été choisi pour sa licence permissive, son rendu fourni par l'hôte, l'absence de JavaScript et un vrai modèle de saisie. source(s'ouvre dans un nouvel onglet)
- Le format de description reprend une idée de QML : chaque élément est un nom doté de propriétés typées. Les éléments anonymes imbriqués sont refusés, donc chaque boîte a un nom. source(s'ouvre dans un nouvel onglet)
- Le travail asynchrone repose sur libuv, boucle d'événements multiplateforme éprouvée, plutôt que sur un réacteur fait maison. Les scripts soumettent et récupèrent leur travail, sans jamais être rappelés. source(s'ouvre dans un nouvel onglet)
Repensé
- Le balisage est généré, jamais écrit à la main. Un fichier .panel fait contrat ; RmlUi et HTML n'en sont que des projections, car le balisage manuel échappe aux contrôles. source(s'ouvre dans un nouvel onglet)
- L'arbre d'accessibilité est produit à partir de l'intention déclarée, non deviné depuis le balisage, ce qui informe mieux les lecteurs d'écran. Tout élément focalisable a un rôle et un nom. source(s'ouvre dans un nouvel onglet)
- Le code réactif s'exprime en mots simples, des fonctions qui attendent, des valeurs qui se mettent à jour seules, plutôt qu'en métaphores comme rappels et abonnés, qui masquent un flux simple. source(s'ouvre dans un nouvel onglet)
- Une application est un monde vivant, porteur de sens : un domaine, une vie tendue vers des buts, un corps. Fichiers, base de données et interface n'en sont que la tuyauterie. source(s'ouvre dans un nouvel onglet)
A young but genuinely coherent GUI plane, built on vendored RmlUi and actually running — windows open, events flow, it renders through the GPU plane and an SVG tier. Two standouts reflect the library's DNA: RTL/bidi fully owned and accessibility built in from the grammar up. The rest is early: a four-primitive vocabulary, flexbox-only layout, imperative view-binding, and a full reactive runtime that ships but is not yet wired to the GUI. The whole plane is on local main only, not yet pushed.
Ce qu'un artisan en fait, et ce qui se distingue
- RTL/bidi fully owned end to end
- accessibility mandatory at authoring time, exposed via AccessKit
- a recorder-not-painter render model with a deviceless SVG tier
- an event surface that counts dropped events
Ce qui est dû
- wire the reactive runtime to the GUI (G5 clause 2)
- a richer widget set
- the semantic theme system (G6)
- IME & two-way text editing
La manière Softanza, exécutée
Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.
Un seul mot déclaré, rtl, est traduit dans la propriété de direction propre au moteur : l'auteur n'écrit jamais le balisage du moteur à la main.
oRtl = new stzUiDocument(
'DEFINE PANEL p ( FONT "app", CHILDREN [r] ) RATIONALE "x"' + char(10) +
'DEFINE BOX r ( TEXT_DIRECTION rtl, HEIGHT 20 ) RATIONALE "x"')
chk("TEXT_DIRECTION rtl becomes --rmlui-direction",
StzFindFirst("--rmlui-direction: rtl", oRtl.ToRml()) > 0)
chk("...and never the CSS spelling RCSS rejects",
StzFindFirst("; direction:", oRtl.ToRml()) = 0)[OK] TEXT_DIRECTION rtl becomes --rmlui-direction [OK] ...and never the CSS spelling RCSS rejects
exécuté le 2026-10-01 21:18 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/gui/gui_stzui_narrated.ring(s'ouvre dans un nouvel onglet)
Une application se déclare comme un monde de choses, de vérités et de relations, et elle s'explique elle-même en texte clair.
oApp = new stzApp("SonibankVisits")
oApp {
AddThingQ(:Account) { Has([ :number, :chapter, :balance ]) IsTrue(:balance, "@ >= 0") }
AddThingQ(:Client) { Has([ :code, :name, :city ]) Owns(:Account) }
AddThingQ(:Visit) { Of(:Client) Has([ :agent, :date, :subject ]) }
AddRelation(:Account, :belongsTo, :Client)
}
oApp.Explain()WORLD SonibankVisits lives in: memory (not persisted)
BEING
account (number, chapter, balance)
true when balance @ >= 0
client (code, name, city)
visit (agent, date, subject)
RELATIONS
client owns account
visit of client
account belongsto clientexécuté le 2026-10-01 21:18 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/app/00_stzapp_narrated.ring(s'ouvre dans un nouvel onglet)
Les couloirs, un par un
Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16, from a read-only main worktree.

