A static NuGet package feed generator. ☁️ + 📦 = ❄️
- Serverless. Create static feeds directly on Azure Storage, Amazon S3, or any S3-compatible storage (MinIO, Yandex Cloud, Scaleway, etc.). No compute required.
- Cross platform. Sleet is built in .NET and runs anywhere the dotnet CLI is supported — Linux, macOS, and Windows.
- Fast. Static feeds use the NuGet v3 feed format so clients resolve packages with simple HTTP requests.
- Simple. A straightforward command line tool to add, remove, and update packages.
- Flexible. Configure credentials via files, environment variables, command line args, .netconfig, or AWS-specific patterns to fit any workflow.
- Package retention. Automatically prune old package versions with configurable stable/prerelease limits and release label grouping.
- Version badges. Generate shields.io-compatible version badges for your packages.
- External search. Plug in a custom search endpoint for dynamic query results.
- Cache control. Set CDN-friendly
Cache-Controlheaders for immutable and mutable feed files.
- Package binaries are typically kept outside of git repos — static feeds provide a long term storage solution that can be paired with checked in code.
- NuGet feeds are read for restore far more often than they are updated.
- Cloud storage accounts are a cheap and secure way to share nupkgs for public or private feeds.
- You keep full control of your packages.
Sleet requires .NET 8.0 or later.
dotnet tool install -g sleet
sleet should now be on your PATH.
- Download the latest SleetExe nupkg from NuGet.org.
- Extract tools/Sleet.exe to a local folder and run it.
Install the SleetLib NuGet package to access Sleet functionality programmatically from your own .NET applications.
Create a feed on Azure Storage in three steps:
# 1. Generate a config file
sleet createconfig --azure
# 2. Edit sleet.json with your storage account URL and credentials
# 3. Push packages (the feed is created automatically on first push)
sleet push mypackage.1.0.0.nupkgFor other storage backends see the guides below.
| Command | Description |
|---|---|
createconfig |
Create a new sleet.json config file |
init |
Initialize a new feed |
push |
Push packages to a feed |
delete |
Delete a package from a feed |
stats |
Display package count on a feed |
validate |
Verify all packages and resources are valid |
download |
Download all packages from a feed to a local folder |
destroy |
Delete all files from a feed |
recreate |
Rebuild a feed from its packages |
feed-settings |
Read or modify feed settings |
retention prune |
Apply package retention rules |
retention settings |
Configure package retention limits |
See commands for full details and options.
Full documentation can be found under /doc.
- Setting up an Azure feed
- Setting up an AWS S3 feed
- Setting up a local feed with IIS hosting
- Integration with CI Server
- Setting up a private feed on AWS using S3 + CloudFront + Lambdas
Also see this getting started blog post for a walkthrough.
We welcome contributions! If you are interested in contributing to Sleet, report an issue or open a pull request to propose a change.
To build and run tests locally:
# Linux / macOS
./build.sh
# Windows
./build.ps1CI runs on Linux, macOS, and Windows.
Sleet was created to achieve the original goals of the NuGet v3 feed format: provide maximum availability and performance for NuGet restore by using only static files.
The v3 feed format was designed to do all compute when pushing a new package since updates are infrequent compared to the number of times a package is read for restore. Static files also remove the need to run a specific server to host the feed, allowing a simple file service to handle it.
Sleet is.. cold static packages from the cloud. ☁️ + 📦 = ❄️
- Sleet.Azure provides MSBuild props/targets for running Sleet.
- Sleet.Search provides a search service for Sleet feeds.