Generic Files

Upload any file to Feedz as long as it has a package ID and a valid version in its filename. Useful for distributing build artefacts, scripts, or any file that doesn't fit a specific package format.

File naming

The generic feed accepts any file type. The filename must follow the format:

<package-id>.<version>.<extension>

The version must be a valid Semantic Version or NuGet version. For example:

MyApp.1.3.0-beta.tar.gz
MyApp.2.0.0.zip
MyScript.1.0.0.ps1
Multi-part extensions other than .tar.gz are not currently supported.

Feed URL

The generic feed URL follows this format:

https://f.feedz.io/{organisation}/{repository}

Format detection

If a file uploaded to the generic feed is a recognised package type, Feedz treats it accordingly. For example, a NuGet package (.nupkg) uploaded via the generic endpoint will also appear in the NuGet feed for the same repository.

Authentication

Pass a personal access token or service account token via the feedz-api-key HTTP header. Uploading always requires authentication. Downloading from a public repository does not.

Uploading packages

Any tool that can make an HTTP POST request can upload to the generic feed.

# Add --force to overwrite an existing version
feedz.exe push \
  --org my-org \
  --repo my-repo \
  --pat T-xyzXYZ \
  --file MyPackage.1.0.0.tgz
# Add ?replace=true to overwrite an existing version
curl -f \
  -F "file=@MyPackage.1.0.0.tgz" \
  -H "feedz-api-key: T-xyzXYZ" \
  https://f.feedz.io/my-org/my-repo
# Add &replace=true to the URI to overwrite an existing version
$filepath = "C:\MyPackage.1.0.0.tgz"
$filename = [System.IO.Path]::GetFileName($filepath)
$uri = "https://f.feedz.io/my-org/my-repo?filename=$filename"
$headers = @{ "feedz-api-key" = "T-xyzXYZ" }

Invoke-WebRequest -Uri $uri -Method Post `
  -ContentType "application/octet-stream" `
  -InFile $filepath -Headers $headers

Downloading packages

The download URL for a generic package follows this format:

https://f.feedz.io/<org>/<repo>/packages/<id>/<version>/download
feedz.exe download \
  --org my-org \
  --repo my-repo \
  --pat T-xyzXYZ \
  --id MyPackage \
  --version 1.0.0
# Public repository — no authentication required
curl -fO "https://f.feedz.io/my-org/my-repo/packages/MyPackage/1.0.0/download"

# Private repository
curl -fO \
  -H "feedz-api-key: T-xyzXYZ" \
  "https://f.feedz.io/my-org/my-repo/packages/MyPackage/1.0.0/download"
# Public repository — no authentication required
Invoke-WebRequest `
  -Uri "https://f.feedz.io/my-org/my-repo/packages/MyPackage/1.0.0/download" `
  -OutFile "MyPackage.1.0.0.tgz"

# Private repository
$headers = @{ "feedz-api-key" = "T-xyzXYZ" }
Invoke-WebRequest `
  -Uri "https://f.feedz.io/my-org/my-repo/packages/MyPackage/1.0.0/download" `
  -Headers $headers `
  -OutFile "MyPackage.1.0.0.tgz"

The Feedz CLI also supports delta compression on download — pass --similarPackagePath to transfer only the changed bytes.

Automatic repackaging

When automatic repackaging is enabled, zip and tar archives in the generic feed are also available through the NuGet feed as .nupkg files. This lets tools like Octopus Deploy consume them via a standard NuGet client without needing to use the direct URL or CLI.