CLI-Referenz
Verwenden Sie die Wippy-CLI, um Projekte zu initialisieren, die Runtime auszuführen, Abhängigkeiten zu verwalten, Registry-Einträge zu untersuchen und Module zu veröffentlichen.
Dies ist eine Befehlsreferenz. Beispiele zu Quellcode, Lock-Datei, Registry-Einträgen oder Veröffentlichungsmetadaten setzen ein bestehendes Projekt beziehungsweise Modul voraus und bilden kein einzelnes End-to-End-Projekt.
Globale Flags
Verfügbar bei allen Befehlen:
| Flag | Kurz | Beschreibung |
|---|---|---|
--config |
Konfigurationsdatei, wiederholbar; spätere Dateien überschreiben frühere (Standard: .wippy.yaml). wippy publish definiert eine andere befehlsspezifische Option. |
|
--verbose |
-v |
Debug-Logging aktivieren |
--very-verbose |
Debug mit Stack-Traces | |
--console |
-c |
Farbige Konsolenausgabe |
--silent |
-s |
Konsolenausgabe deaktivieren |
--event-streams |
-e |
Logs an den Event-Bus streamen |
--profiler |
-p |
pprof auf localhost:6060 aktivieren |
--memory-limit |
-m |
Speicherlimit (z.B. 1G, 512M) |
Die Reihenfolge für das Speicherlimit ist --memory-limit, dann GOMEMLIMIT, dann der Standard von 1 GB.
Die globale Option --config kann mehrfach übergeben werden, um Konfigurationsdateien zu komponieren. Dateien werden von links nach rechts zusammengeführt. Jede explizit benannte Datei muss existieren; ohne --config ist .wippy.yaml optional. Die erste Datei verankert relative Pfade. Danach werden --profile-Overlays und zuletzt --set-Überschreibungen angewendet. Siehe Konfiguration.
wippy publish überschattet die globale Option mit dem befehlsspezifischen --config <dir>. Dort ist der Wert das Verzeichnis mit wippy.yaml, nicht eine wiederholbare Runtime-Konfigurationsdatei.
wippy init
wippy.lock erstellen oder die Einstellungen für Quell- und Modulverzeichnis aktualisieren. Der Befehl legt weder Anwendungsquellcode noch Registry-Einträge an.
wippy init
wippy init --src-dir ./src --modules-dir .wippy
| Flag | Kurz | Standard | Beschreibung |
|---|---|---|---|
--src-dir |
-d |
./src | Quellverzeichnis |
--modules-dir |
.wippy | Modulverzeichnis | |
--lock-file |
-l |
wippy.lock | Pfad zur Lock-Datei |
wippy run
Die Runtime starten oder einen Befehl ausführen.
wippy run # Start runtime
wippy run list # List available commands
wippy run migrate # Run a named custom command
wippy run snapshot.wapp # Run from pack file
wippy run acme/http # Run module from hub
wippy run acme/http@1.2.3 # Run specific version
wippy run --exec app:worker # Start runtime and execute a single process
| Flag | Kurz | Beschreibung |
|---|---|---|
--override |
-o |
Entry-Werte überschreiben (namespace:entry:field=value); field kann kind sein, um die Entry-Art zu ändern |
--set |
Konfigurationswert überschreiben (section.path=value, wiederholbar, hat Vorrang vor der Konfigurationsdatei) |
|
--exec |
-x |
Prozess ausführen und beenden (namespace:entry) |
--host |
Terminal-Host-ID für --exec (automatisch erkannt, wenn nur ein terminal.host existiert) |
|
--registry |
Registry-URL für Hub-Module | |
--profile |
Ein Runtime-Profil aus .wippy.yaml oder gepackten Runtime-Metadaten anwenden (wiederholbar, in Reihenfolge angewendet) |
Das Ausführen eines Hub-Moduls (wippy run org/module) löst es einmal auf, hält es in wippy.lock fest und legt die verifizierten Packs lokal ab. Nachfolgende Läufe derselben Referenz starten aus dem Lock — ohne Netzwerkzugriff. Ein Versions-Selektor, der nicht mehr zum Lock passt, wird mit dem Hinweis abgelehnt, wippy update auszuführen.
Bei einer lokalen Anwendung repariert wippy run einen veralteten Lock, bevor irgendein Runtime-Dienst startet. Es lädt die Abhängigkeitsdeklarationen aus den Quellen, und wenn der Lock sie bereits erfüllt, löst es den Graphen ausschließlich aus lokalen und installierten Belegen erneut auf (verifiziert-offline, ohne Netzwerkzugriff). Stimmt diese Offline-Auflösung mit dem Lock überein, läuft der Boot unverändert weiter. Gelingt sie, weicht aber ab, wird sie zum Kandidaten-Graphen; der Hub wird nur dann um Auflösung gebeten, wenn der Offline-Durchlauf scheitert oder der Lock die Quelldeklarationen nicht mehr erfüllt. Packs, die dem Kandidaten-Graphen fehlen, werden heruntergeladen und verifiziert, und erst dann wird wippy.lock neu geschrieben. Ein Lock, der eine Deployment-Wurzel auswählt, ist maßgeblich und wird nie erneut aufgelöst.
--exec blockiert, bis der gestartete Prozess sein Ergebnis liefert, und gibt dann den Exit-Code des Prozesses als Exit-Code der CLI weiter. Strg-C während --exec bricht den laufenden Prozess ab, und die Runtime fährt trotzdem sauber herunter; ein zweites Signal erzwingt den sofortigen Abbruch.
--set schreibt jeden Laufzeit-Konfigurationswert über die Befehlszeile, pro Blatt über .wippy.yaml zusammengeführt:
wippy run --set cluster.enabled=true \
--set cluster.membership.join_addrs=node-2:7946,node-3:7946 \
--set cluster.raft.bootstrap_expect=3
Werte werden nach Form konvertiert: true/false zu Bool, Ganz- und Gleitkommazahlen zu Zahlen, alles andere bleibt ein String (Zeitdauern wie 5s werden geparst, wo die Option eine erwartet).
wippy test
Den Test-Entrypoint ausführen: den Prozess-Entry, der den Use Case test deklariert. Die Runtime bootet, führt diesen Entry aus und beendet sich. wippy run führt Test-Entrypoints nicht automatisch aus; Testen läuft immer über wippy test.
wippy test # Run tests from the local project
wippy test snapshot.wapp # Run tests from a pack file
wippy test acme/module@1.2.3 # Run tests from a hub module
| Flag | Kurz | Beschreibung |
|---|---|---|
--override |
-o |
Entry-Werte überschreiben (namespace:entry:field=value) |
--host |
Terminal-Host-ID (automatisch erkannt, wenn nur ein terminal.host existiert) |
|
--registry |
Registry-URL für Hub-Module | |
--set |
Konfigurationswert überschreiben (section.path=value, wiederholbar) |
|
--profile |
Ein Runtime-Profil anwenden (wiederholbar, in Reihenfolge angewendet) |
wippy lint
Lua-Code auf Typfehler und Warnungen prüfen.
wippy lint
wippy lint --level warning
wippy lint --json
wippy lint --rules
Validiert quellcodehaltige Einträge der Kinds function.lua, library.lua, process.lua und workflow.lua. Vorkompilierte .bc-Einträge enthalten keinen parsbaren Quellcode und werden übersprungen.
| Flag | Kurz | Standard | Beschreibung |
|---|---|---|---|
--lock-file |
-l |
wippy.lock |
Pfad zur Lock-Datei |
--level |
warning |
Minimaler Schweregrad: error, warning, hint |
|
--ns |
Filter nach Namespace-Mustern (z.B. app, lib.*) |
||
--code |
Filter nach Fehlercodes (z.B. E0001,E0004) |
||
--rules |
false |
Style-/Quality-Lint-Regeln aktivieren | |
--summary |
false |
Ausgabe nach Fehlercode gruppieren | |
--limit |
0 |
Maximal angezeigte Diagnosen (0 = unbegrenzt) | |
--json |
false |
JSON-Ausgabe | |
--no-color |
false |
Farbige Ausgabe deaktivieren | |
--cache-reset |
false |
Lua-Cache vor dem Linten leeren | |
--profile |
Ein Workspace-Profil aus der zusammengeführten Runtime-Konfiguration anwenden (wiederholbar) | ||
--set |
Einen Wert der zusammengeführten Runtime-Konfiguration überschreiben (section.path=value, wiederholbar) |
wippy add
Eine Modulabhängigkeit hinzufügen.
wippy add acme/http
wippy add acme/http@1.2.3
wippy add acme/http@latest
| Flag | Kurz | Standard | Beschreibung |
|---|---|---|---|
--lock-file |
-l |
wippy.lock | Pfad zur Lock-Datei |
--registry |
Registry-URL |
wippy install
Abhängigkeiten aus der Lock-Datei installieren.
wippy install # Install all
wippy install acme/http # Install specific module
wippy install --refresh acme/http # Re-fetch a specific module
| Flag | Kurz | Standard | Beschreibung |
|---|---|---|---|
--lock-file |
-l |
wippy.lock | Pfad zur Lock-Datei |
--refresh |
false | Jedes Modul neu herunterladen, Cache umgehen | |
--force |
false | Alias für --refresh |
|
--repair |
false | Alias für --refresh |
|
--registry |
Registry-URL | ||
--profile |
Ein Workspace-Profil aus der zusammengeführten Runtime-Konfiguration anwenden (wiederholbar) | ||
--set |
Einen Wert der zusammengeführten Runtime-Konfiguration überschreiben (section.path=value, wiederholbar) |
wippy update
Abhängigkeiten aktualisieren und Lock-Datei neu generieren.
wippy update # Update all
wippy update acme/http # Update specific module
wippy update acme/http demo/sql # Update multiple
| Flag | Kurz | Standard | Beschreibung |
|---|---|---|---|
--lock-file |
-l |
wippy.lock | Pfad zur Lock-Datei |
--src-dir |
-d |
./src | Quellverzeichnis |
--modules-dir |
.wippy | Modulverzeichnis | |
--registry |
Registry-URL | ||
--profile |
Ein Workspace-Profil aus der zusammengeführten Runtime-Konfiguration anwenden (wiederholbar) | ||
--set |
Einen Wert der zusammengeführten Runtime-Konfiguration überschreiben (section.path=value, wiederholbar) |
wippy artifacts
Mit Build-Zeit-Dateisystem-Artefakten arbeiten.
wippy artifacts materialize
Ein Artefakt-Dateisystem aus einem vorhandenen Pack validieren und materialisieren.
wippy artifacts materialize snapshot.wapp app:package_fs
wippy artifacts materialize snapshot.wapp app:package_fs --root build
| Flag | Standard | Beschreibung |
|---|---|---|
--root |
.wippy |
Materialisierungs-Wurzel |
Die Ressource wird über ihren vollständigen namespace:name adressiert, muss meta.artifact.format deklarieren, und dieses Format muss in der CLI registriert sein. Der Befehl löst keine Modulabhängigkeiten auf, verändert wippy.lock nicht, ruft keine Paketmanager auf und nimmt an der Runtime-Komposition nicht teil. Siehe Build-Zeit-Artefakte.
wippy pack
Ein Snapshot-Pack (.wapp-Datei) erstellen.
wippy pack snapshot.wapp
wippy pack release.wapp --description "Release 1.0"
wippy pack app.wapp --embed app:assets --bytecode "**"
| Flag | Kurz | Beschreibung |
|---|---|---|
--lock-file |
-l |
Pfad zur Lock-Datei |
--description |
-d |
Pack-Beschreibung |
--tags |
-t |
Pack-Tags (kommagetrennt) |
--meta |
Benutzerdefinierte Metadaten (key=value) | |
--embed |
fs.directory-Entries einbetten (Muster) | |
--embed-all |
Alle fs.directory-Entries einbetten (nicht mit --embed kombinierbar) |
|
--list |
fs.directory-Entries auflisten (Trockenlauf) | |
--exclude-ns |
Namespaces ausschließen (Muster) | |
--exclude |
Entries ausschließen (Muster) | |
--bytecode |
Lua zu Bytecode kompilieren (** für alle) | |
--profile |
Ein Runtime-Profil aus .wippy.yaml vor dem Packen anwenden (wiederholbar, in Reihenfolge angewendet) |
Ohne --embed oder --embed-all greifen die Embed-Muster auf den embed:-Abschnitt des Modul-Manifests wippy.yaml zurück. Das Packen einer Anwendung übernimmt auch eingebettete Ressourcen aus ihren Abhängigkeits-Packs, und nur die Befehle des Hauptmoduls werden vom resultierenden Pack bereitgestellt.
Die Ausgabedatei wird atomar geschrieben: Das Pack wird in eine temporäre Datei im Zielverzeichnis gebaut, synchronisiert, verifiziert und erst dann über das Ziel umbenannt, wobei es die Berechtigungen einer vorhandenen Datei übernimmt. Ein fehlgeschlagener Pack-Lauf lässt die vorherige Datei unangetastet. Eine Ausgabe zu benennen, die zugleich eine der Eingaben des Packs ist — derselbe Pfad oder ein Hard- bzw. Symlink, der auf dieselbe Datei zeigt — wird abgelehnt, statt die Eingabe mitten im Lesen abzuschneiden.
--meta kann keine reservierten Metadaten schreiben. Der Schlüssel registry sowie alles unter den Präfixen wippy. oder system. gehört dem Pack-Format und wird abgelehnt.
Ressourcen, die meta.artifact.format deklarieren, werden beim Packen validiert, sodass ein fehlerhaftes Artefakt hier scheitert und nicht erst beim Konsumenten. Siehe Build-Zeit-Artefakte.
wippy publish
Modul im Hub veröffentlichen.
wippy publish
wippy publish --version 1.0.0
wippy publish --dry-run
Liest aus wippy.yaml im aktuellen Verzeichnis.
| Flag | Beschreibung |
|---|---|
--version |
Zu veröffentlichende Version |
--dry-run |
Validieren ohne zu veröffentlichen |
--label |
Als veränderbares Label statt Version veröffentlichen |
--release-notes |
Release-Notizen |
--protected |
Version als geschützt markieren |
--embed |
fs.directory-Entries nach ID oder Name einbetten |
--config |
Pfad zum Verzeichnis mit wippy.yaml (Standard: .) |
--registry |
Registry-URL |
--create |
Modul in der Registry erstellen, falls noch nicht vorhanden |
--module-visibility |
Sichtbarkeit für neu erstellte Module (nur --create): public oder private (Standard: private) |
--module-type |
Modultyp: library, application, agent oder plugin (überschreibt type: in wippy.yaml) |
--module-display-name |
Anzeigename für neu erstellte Module (nur --create) |
Der Modultyp wird normalerweise als type: in wippy.yaml deklariert (siehe Veröffentlichen); --module-type überschreibt ihn für eine einzelne Veröffentlichung. Ist keiner der Werte gesetzt, erhalten neu erstellte Module standardmäßig den Typ application mit einer Deprecation-Warnung.
wippy search
Module im Hub suchen.
Die Suche verwendet, sofern vorhanden, das gespeicherte Authentifizierungstoken
der ausgewählten Registry. Mit wippy auth login suchen Sie mit Ihrer
Registry-Identität; --registry bestimmt, welche Zugangsdaten verwendet werden.
wippy search http
wippy search "sql driver" --limit 20
wippy search auth --json
| Flag | Standard | Beschreibung |
|---|---|---|
--json |
false | Ausgabe als JSON |
--limit |
20 | Maximale Ergebnisse |
--registry |
Registry-URL |
wippy auth
Registry-Authentifizierung verwalten.
wippy auth login
wippy auth login
wippy auth login --token YOUR_TOKEN
| Flag | Beschreibung |
|---|---|
--token |
API-Token |
--registry |
Registry-URL |
--local |
Zugangsdaten lokal speichern |
wippy auth logout
wippy auth logout
| Flag | Beschreibung |
|---|---|
--registry |
Registry-URL |
--local |
Lokale Zugangsdaten entfernen |
wippy auth status
wippy auth status
wippy auth status --json
| Flag | Beschreibung |
|---|---|
--json |
Ausgabe als JSON |
wippy readme
README eines Moduls aus dem Hub abrufen.
wippy readme wippy/terminal
wippy readme wippy/terminal@1.2.3
wippy readme --json wippy/terminal@latest
| Flag | Beschreibung |
|---|---|
--json |
Ausgabe als JSON |
--registry |
Registry-URL (Standard: aus Zugangsdaten) |
wippy registry
Registry-Einträge abfragen und inspizieren. Beide Unterbefehle akzeptieren --profile und --set, um die zusammengeführte Runtime-Konfiguration zu formen, unter der die Einträge geladen werden.
wippy registry list
wippy registry list
wippy registry list --kind "function.lua.*"
wippy registry list --ns "app.*" --json
wippy registry list --meta "type=api" --meta "enabled=true"
| Flag | Kurz | Beschreibung |
|---|---|---|
--kind |
-k |
Nach Art filtern (Glob-Muster) |
--ns |
-n |
Nach Namespace filtern (Glob-Muster) |
--name |
Nach Name filtern (Glob-Muster) | |
--meta |
Nach Metadaten filtern (wiederholbar) | |
--json |
Ausgabe als JSON | |
--yaml |
Ausgabe als YAML | |
--registry-meta |
Registry-eigene Metadaten (owner, root) in die JSON- oder YAML-Ausgabe aufnehmen; erfordert --json oder --yaml |
|
--lock-file |
-l |
Pfad zur Lock-Datei |
Metadaten-Operatoren für --meta:
| Operator | Bedeutung |
|---|---|
field=value |
Exakte Übereinstimmung |
field~regex |
Regex-Übereinstimmung |
field*substr |
Enthält Teilstring |
field^prefix |
Beginnt mit Präfix |
field$suffix |
Endet mit Suffix |
wippy registry show
wippy registry show app:http:handler
wippy registry show app:config --yaml
| Flag | Kurz | Beschreibung |
|---|---|---|
--field |
-f |
Bestimmtes Feld anzeigen |
--json |
Ausgabe als JSON | |
--yaml |
Ausgabe als YAML | |
--raw |
Rohe Ausgabe | |
--lock-file |
-l |
Pfad zur Lock-Datei |
wippy version
Versionsinformationen ausgeben.
wippy version
wippy version --short
Benutzerdefinierte Befehle
Jeder process.lua- oder process.wasm-Entry kann als benannter Befehl registriert werden, indem command-Metadaten hinzugefügt werden:
entries:
- name: migrate_runner
kind: process.lua
meta:
command:
name: migrate
short: Run database migrations
security:
actor:
id: app:migrations
policies:
- app.security:migrations
groups:
- app.security:operators
source: file://runner.lua
method: main
modules:
- io
- registry
- funcs
Ausführen mit:
wippy run migrate
Alle verfügbaren Befehle auflisten:
wippy run list
wippy run list akzeptiert --profile und --set, sodass die Auflistung dieselbe zusammengeführte Laufzeitkonfiguration widerspiegelt, die wippy run verwenden würde.
Befehl-Metadatenfelder
| Feld | Erforderlich | Beschreibung |
|---|---|---|
name |
Ja | Befehlsname, verwendet mit wippy run <name> |
short |
Nein | Kurzbeschreibung, angezeigt in wippy run list |
main |
Nein | Diesen Entry als Standard-Entrypoint markieren. Wird ein Pack oder Hub-Modul ohne Befehlsnamen ausgeführt, wird der einzelne main-Entry dieses Use Case ausgeführt; ein einzelner Entrypoint wird auch ohne main ausgewählt, mehrere Entrypoints ohne main sind ein Fehler |
use_case |
Nein | Entrypoint-Kategorie, Standard run. Der Entry, der use_case: test deklariert, ist das, was wippy test ausführt |
security |
Nein | Sicherheitskontext, unter dem der Befehl läuft, wenn er über die CLI gestartet wird |
Jede Art von Prozess-Entry funktioniert (process.lua, process.wasm). Befehlsnamen werden nicht auf Eindeutigkeit geprüft; deklarieren mehrere geladene Entries denselben Namen, läuft der erste Treffer in Registry-Reihenfolge. Argumente nach dem Befehlsnamen werden als String-Payloads an den Prozess übergeben.
Befehlssicherheit
Ein Befehls-Entry deklariert den Actor und den Policy-Scope, unter dem sein CLI-Start läuft:
entries:
- name: migrate_runner
kind: process.lua
meta:
command:
name: migrate
short: Run database migrations
security:
actor:
id: system.migrations
meta:
role: operator
policies:
- app.security:migrations_policy
groups:
- app.security:operators
source: file://runner.lua
method: main
| Feld | Beschreibung |
|---|---|
actor.id |
Actor-Identität für den gestarteten Prozess |
actor.meta |
Actor-Attribute, die von Policies ausgewertet werden |
policies |
Registry-IDs (namespace:name) einzelner Policies, die dem Scope hinzugefügt werden |
groups |
Registry-IDs von Policy-Gruppen, deren Policies dem Scope hinzugefügt werden |
Der Block steht innerhalb von meta.command, weil er nur für den CLI-Startpfad gilt — der Operator hat den Befehl auf seinem eigenen Deployment gestartet, und das ist der Vertrauensanker. Auf gewöhnliche Spawns desselben Prozess-Entries hat er keine Wirkung; diese folgen dem eigenen security:-Block des Entries.
Die Deklaration ist fail-closed und wird validiert, bevor der Prozess startet:
- Unbekannte Felder innerhalb von
securitywerden abgelehnt. - Ein leerer
security-Block (kein Actor, keine Policies, keine Gruppen) wird abgelehnt. securityohnenamewird abgelehnt — ein Befehl muss benennbar sein, um gestartet werden zu können.- Eine Policy oder Gruppe, die nicht aufgelöst werden kann, verweigert den Start; die Auflösung ist atomar, sodass nie ein unvollständiger Scope installiert wird.
Lässt der Block actor weg, wird der Actor des Aufrufers geerbt. Lässt er sowohl policies als auch groups weg, wird der Scope des Aufrufers geerbt.
Beispiele
Entwicklungs-Workflow
# Initialize dependency lock metadata
wippy init
wippy add wippy/test
wippy add wippy/llm
wippy install
# Check for errors
wippy lint
# Run with debug output
wippy run -c -v
# Override config for local dev
wippy run -o app:db:host=localhost -o app:db:port=5432
Produktions-Deployment
# Create release pack with bytecode
wippy pack release.wapp --bytecode "**" --exclude-ns "test.**"
# Run from pack with memory limit
wippy run release.wapp -m 2G
Debugging
# Execute single process
wippy run --exec app:worker
# With profiler enabled
wippy run -p -v
# Then: go tool pprof http://localhost:6060/debug/pprof/heap
Abhängigkeitsverwaltung
# Add new dependency
wippy add acme/http@latest
# Force re-download
wippy install --force
# Update specific module
wippy update acme/http
Veröffentlichung
# Login to hub
wippy auth login
# Validate module
wippy publish --dry-run
# Publish
wippy publish --version 1.0.0 --release-notes "Initial release"
Umgebungsvariablen
| Variable | Wirkung |
|---|---|
WIPPY_TOKEN |
Registry-Auth-Token; hat Vorrang vor gespeicherten Zugangsdaten (ein via hub.auth.authenticate gesetztes Token rangiert noch höher) |
WIPPY_REGISTRY |
Standard-Registry-URL (wird von --registry überschrieben) |
WIPPY_CACHE_DIR |
Cache-Verzeichnis für via wippy run org/module ausgeführte Hub-Module (Standard: ~/.wippy/cache) |
GOMEMLIMIT |
Fallback für das Speicherlimit, wenn --memory-limit nicht gesetzt ist |
Werte in .wippy.yaml können OS-Umgebungsvariablen mit ${env:NAME} referenzieren, aufgelöst beim Laden der Datei; eine fehlende Variable lässt das Laden der Konfiguration fehlschlagen. Nackte ${name}-Referenzen werden stattdessen aus dem vars:-Abschnitt der Konfiguration aufgelöst.
Konfigurationsdatei
.wippy.yaml für persistente Einstellungen erstellen:
logger:
encoding: console
logmanager:
stream_to_events: true
profiler:
enabled: true
address: localhost:6060
override:
app:gateway:addr: ":9090"
app:db:host: "localhost"
Siehe auch
- Konfiguration — Referenz der Konfigurationsdatei
- Observability — Monitoring und Logging