A static NuGet package feed generator. ☁️ + 📦 = ❄️
Sleet creates and updates NuGet v3 feeds as static files on Azure Blob Storage, Amazon S3, S3-compatible storage, or a local folder. NuGet clients restore packages straight from those files, so there is no server to run.
Documentation: emgarten.github.io/Sleet
- Sleet
- Serverless. Create static feeds directly on Azure Storage, Amazon S3, or any S3-compatible storage (Cloudflare R2, MinIO, Backblaze B2, etc.). No compute required.
- Cross platform. Sleet is built in .NET and runs on 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.
- Symbol server. Serve
.pdbfiles to debuggers from the same feed. See symbol server. - Package retention. Automatically prune old package versions with configurable stable/prerelease limits and release label grouping. See package retention.
- 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. See CDN and caching.
- 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 the .NET 8 SDK or later. See Install Sleet for all options.
dotnet tool install -g sleetsleet should now be on your PATH.
In CI scripts, pin a major version so a new major release can't change your build unexpectedly:
dotnet tool install -g sleet --version "7.*"A local tool manifest pins an exact Sleet version for a repository:
dotnet new tool-manifest
dotnet tool install sleetCommit the dotnet-tools.json file it creates, then run dotnet tool restore and use dotnet sleet.
With the .NET 10 SDK or later, dnx downloads and runs Sleet in one step:
dnx sleet createconfigThe SleetExe package contains a self-contained Sleet.exe for Windows x64 that doesn't need .NET installed.
- 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. See SleetLib.
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.nupkgThen add the feed's index.json URL as a package source in NuGet. See Use a feed with NuGet.
For other storage backends see the documentation.
| 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.
The documentation is published at emgarten.github.io/Sleet. The source files are in /doc.
Get started:
- Install Sleet
- Create an Azure feed
- Create an Amazon S3 feed
- Create a local feed
- Use a feed with NuGet
Guides:
- Azure authentication and AWS authentication
- Publish from CI
- Private feeds, including a private feed on AWS with S3, CloudFront, and Lambda@Edge
- S3-compatible storage, web servers and static hosting, CDN and caching, and multiple feeds
- Package retention and backup and migration
Reference and help:
- Commands, configuration, environment variables, and feed settings
- How Sleet works, feed locking, and limitations
- Troubleshooting and FAQ
- Release notes
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. See CONTRIBUTING.md for how to build, test, and preview the documentation.
To build and run the unit tests locally:
# Linux / macOS
./build.sh
# Windows
./build.ps1The functional tests run against Azure Storage and Amazon S3. By default, they run the Azure tests against a local emulator in Docker, so you don't need a cloud account:
# Linux / macOS
./functional-tests.sh
# Windows
./functional-tests.ps1See functional tests to run them against real accounts.
CI 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.