Feeds
Per-ecosystem feed configuration lives under heimdall.ecosystems. Only NuGet
is supported in the MVP.
Schema
heimdall:
ecosystems:
nuget:
feeds:
- name: <string> # logical feed identifier (URL path segment)
upstream: <url> # absolute http(s) URL of the upstream registry
cacheTtl: <TimeSpan> # optional per-feed override
rules: # ordered list of filter rules
- type: <ruleName>
<ruleSpecificFields>
The name becomes the URL path segment — a feed named strict serves
/nuget/strict/v3/.... Names must be unique within an ecosystem.
Worked example
heimdall:
ecosystems:
nuget:
feeds:
- name: strict
upstream: "https://api.nuget.org/v3/index.json"
cacheTtl: "00:10:00"
rules:
- type: minAgeDays
days: "14"
- type: allowDeny
patterns: "Microsoft.*;System.*;Newtonsoft.*;Serilog.*;Polly.*;Microsoft.AspNetCore.*"
- name: relaxed
upstream: "https://api.nuget.org/v3/index.json"
cacheTtl: "00:02:00"
rules:
- type: minAgeDays
days: "1"
Two feeds against the same upstream with different policies — useful when CI
should use strict and a sandbox environment can pull from relaxed.
Fields
name
Feed identifier. Becomes the URL segment in /nuget/{name}/v3/....
Case-sensitive. Required, non-empty.
upstream
Absolute URL of the upstream NuGet v3 service index. Heimdall fetches this
once at startup (via NuGetV3UpstreamClient) to resolve resource URLs, then
caches it for the feed's cacheTtl. Required, must be a valid absolute URL.
cacheTtl
Per-feed TTL for registration documents. Optional; falls back to the L1
strand default (cache configuration). The format is a
.NET TimeSpan — "00:10:00" for ten minutes, "1.00:00:00" for one day.
rules
Ordered list of filter rules. The pipeline short-circuits on the first deny — see Filtering pipeline architecture. Two rule types are shipped:
minAgeDays—days: <integer>allowDeny—patterns: <semicolon-separated globs>
Rules are evaluated per version, on every metadata response and on the
download gate. The exact deny reason is returned in ProblemDetails when a
binary is rejected.
Adding a feed
- Pick a unique
namewithin thenugetecosystem. - Decide on the upstream URL (usually
https://api.nuget.org/v3/index.json). - Decide on rules and TTL.
- Save
config.yml. The hot-reload picks up the new feed on the next request — clients can immediately hit/nuget/{newName}/v3/index.json.