Getting started
Run a kvellman origin and add it as a winget source in minutes.
What is kvellman?
kvellman is a self-hosted, winget-compatible package repository. You register it as an additional winget source — the winget CLI queries it exactly like the official Microsoft source. No client modifications, no custom installers.
1. Run the origin (Docker)
The Community edition runs from a single docker compose stack (app + PostgreSQL). With a domain
pointing at your host and ports 80/443 open:
git clone <open-core-repo> kvellman && cd kvellman
cp .env.deploy.example .env.deploy # set DOMAIN, NUXT_SESSION_PASSWORD, POSTGRES_PASSWORD
docker compose --env-file .env.deploy up -d
Database migrations run automatically on start. Open https://your-domain to create the first
admin account.
2. Provide a package
In the web UI: create a site token (Admin → Site tokens), then upload a manifest or import one from the upstream winget catalog. Optionally store the installer locally so it is served from your origin.
3. Add the source on a client
winget requires HTTPS for a REST source. On a Windows client (PowerShell):
winget source add --name kvellman --type Microsoft.Rest --arg "https://your-domain/api/<site-token>"
winget search --source kvellman <term>
winget install --source kvellman <Package.Identifier>
That's it — clients now install internal software through your own winget source.
Next steps
- Deployment — Docker, reverse proxies (Caddy/Traefik), edge nodes, TLS.
- Architecture — how the winget API, site tokens and mirroring fit together.
- Editions & licensing — Community vs Enterprise.