Runtime-Konfiguration
Ce contenu n’est pas encore disponible dans votre langue.
Ein Image, viele Instanzen: Alles, was sich je Instanz unterscheidet, liest die App einmal vor dem ersten Render aus einer Datei, nicht aus dem Build. Diese Seite erklärt den Vertrag aus Spec 11; bei Widerspruch gilt die Spec.
Die Datei
/app/config.json, im Container beim Start aus den Umgebungsvariablen erzeugt (entrypoint.sh), oder wörtlich eure eigene aus branding/config.json dorthin kopiert. Geänderte Umgebungsvariablen übernimmt docker compose up -d (Container wird neu erstellt), eine geänderte eigene config.json docker compose restart app (Start läuft erneut):
{ "endpoints": { "relayUrl": "wss://relay.example.org" }, "defaultConnector": "wot", "branding": { "appName": "Waldgarten", "faviconUrl": "/branding/favicon.svg", "colorsUrl": "/branding/theme.json" }}endpoints:relayUrl(ws:/wss:),profilesUrl,supabaseUrl,supabaseAnonKey. Der Anon-Key ist öffentlich by design; er steht in jedem Browser.defaultConnector: eine der Connector-Ids der App (wot,supabase,local,mock).?connector=in der Adresse sticht ihn.branding:appName(setzt auch den Dokumenttitel),faviconUrl, und die Farben alscolors(hell und dunkel, im JSON) odercolorsUrl(dieselben Tokens in einer eigenen Datei).
Die Datei geht an jeden Browser. Keine Geheimnisse hineinschreiben.
Woher die Werte kommen
In dieser Reihenfolge, feldweise zusammengeführt: ein gesetztes Feld sticht, ein fehlendes fällt durch, ein leeres Objekt ändert nichts.
config.jsonder Instanz- einkompilierte
VITE_*-Werte, sofern vorhanden - die Standardwerte in
runtime-config.ts
Fehlt die Datei oder ist sie kaputt, startet die App mit Stufe 2 und 3 und nennt den Fehler in der Konsole. Ein Konfigurationsfehler führt nie zu einer weißen Seite. Die geladene Konfiguration ist für die Laufzeit der Seite unveränderlich.
Geprüft, bevor es gilt
Werte werden validiert, nicht durchgereicht. Ein Endpunkt muss eine URL mit passendem Schema sein, ein Connector-Name eine bekannte Id, ein Farbtoken ein Name, den das Toolkit definiert; Werte sind CSS-Farbangaben inklusive oklch(), rgb(), hsl(), und alles, was eine Deklaration verlassen oder etwas nachladen könnte (;, {}, @, url()), wird verworfen. Verworfenes wird in der Konsole gemeldet. Der Grund: Ein Tippfehler im Connector-Namen würde sonst in der letzten Verzweigung der App landen und der Instanz Demo-Daten statt ihres Netzwerks zeigen.
Farben getrennt
colorsUrl wird getrennt geladen: Ist theme.json kaputt, fehlen nur die Farben; Name, Relay und Connector Die Implementierung des DataInterface für eine konkrete Datenquelle, ergänzt um unterstützte Capabilities. Die Steckstelle des Stacks nach unten. GlossarConnector The implementation of the DataInterface for one data source, plus the capabilities it supports. The stack's socket downward. Glossary stehen weiter. Ist colorsUrl gesetzt und lesbar, sticht sie ein gleichzeitig vorhandenes colors. Die Tokens landen als CSS-Custom-Properties auf dem Wurzelelement, je Schema.
Was nicht dazugehört
Ein Instanz-Logo in der App-Shell (in v0.1 kein Feld, weil es keine Fläche dafür gibt; die Landingpage liefert ihres als eigene Datei aus), freies CSS (möglich, aber außerhalb der Kompatibilitätszusage), eigener Code in der App. Module lesen kein Branding: Ein Modul sieht in jeder Instanz gleich aus, abgesehen von den Tokens, die ohnehin global wirken.