Server
Server-level settings live under heimdall.server.
Schema
heimdall:
server:
listen: "http://0.0.0.0:8080" # Kestrel bind URL
publicBaseUrl: "http://localhost:8080" # external URL clients reach Heimdall on
forwardedHeaders:
knownProxies: [] # individual proxy IPs to trust
knownNetworks: [] # CIDR networks to trust
search:
defaultTake: 20 # default page size for /query
Keys
listen
Kestrel bind URL (scheme + host + port). The default is
http://0.0.0.0:8080. Override with TLS termination upstream if needed —
Heimdall itself does not terminate TLS in the MVP.
publicBaseUrl
The external URL clients use to reach Heimdall. Required and must be
non-empty. Registration and service-index responses rewrite NuGet @id
fields to point at Heimdall using this base URL — without it, clients would
follow @id links straight back to nuget.org and bypass filtering.
If Heimdall sits behind a reverse proxy at https://nuget.internal.example,
set:
publicBaseUrl: "https://nuget.internal.example"
A trailing slash is tolerated but not required.
forwardedHeaders
When non-empty, registers ASP.NET Core's
UseForwardedHeaders
middleware to honour X-Forwarded-For and X-Forwarded-Proto from the listed
proxies.
forwardedHeaders:
knownProxies:
- "10.0.0.5"
knownNetworks:
- "10.0.0.0/24"
When both knownProxies and knownNetworks are empty the middleware is not
registered and Kestrel falls back to its loopback-only default — safer than
blindly trusting forwarded values.
search.defaultTake
Default page size for the query endpoint when the client omits or passes a
non-positive take. Constrained to 1..100 by the validator. Default 20.