Architektur
Wie winget-Source-API, Site-Kontext, Spiegelung und Edge-Nodes zusammenspielen.
winget-Source-API
kvellman setzt den winget-Source-REST-Vertrag exakt um, sodass die winget-CLI es wie jede andere Quelle behandelt:
GET /api/{siteToken}/information— Quell-Metadaten und unterstützte Versionen.POST /api/{siteToken}/manifestSearch— Volltextsuche.GET /api/{siteToken}/packageManifests/{id}— Manifest-Auslieferung mit serverseitiger Auflösung.
Site-Kontext
winget sendet keine eigenen Header, daher steckt der Standort-Kontext im URL-Site-Token
(primär), ergänzt durch Subnetz und mTLS-Client-Zertifikat. Der aufgelöste Kontext steuert
serverseitige InstallerUrl-Platzhalter ($REPO_URL, $SITE, $LOCATION, $LANG) — so kann
dasselbe Manifest auf eine standortlokale SMB/DFS-Freigabe zeigen, ohne geforkt zu werden.
Manifeste, Overlays & Ablage
Manifeste sind versioniertes YAML, beim Upload gegen die offiziellen winget-JSON-Schemas validiert.
Lokale Änderungen liegen als Overlay über dem unangetasteten Upstream, und Overlay-Vorlagen
je Paket machen wiederkehrende Anpassungen (z. B. eine interne Mirror-URL mit $VERSION/$ARCH)
über Versionen hinweg einfach. Installer lassen sich nach S3/MinIO oder SMB spiegeln; Hashes werden
bei der Auslieferung neu berechnet.
Edge-/Mirror-Nodes
Edge-Nodes sind schlanke Cache-Proxys, die die winget-API + Downloads lokal ausliefern und lazy von der Origin holen. Sie halten einen Offline-Suchindex, enrollen via mTLS und werden zentral eingeschränkt (welche Pakete, welche Installer-Architekturen/-Scopes) und von der Origin überwacht.
Stack
Nuxt 4 (Vue 3 + Nitro), TypeScript, PostgreSQL + Drizzle ORM, S3-kompatible Ablage, BullMQ/Redis für Hintergrundjobs. Ausschließlich On-Premise — voll selbst-hostbar, inklusive Air-Gap-Betrieb.