Squirrel is both a set of tools and a library, to completely manage both installation and updating your desktop application.
Feel free to join our discord to recieve updates or to ask questions:
Apps should be as fast easy to install. Update should be seamless like Google Chrome. From a developer's side, it should be really straightforward to create an installer for my app, and publish updates to it, without having to jump through insane hoops.
- Integrating an app to use Squirrel should be extremely easy, provide a client API, and be developer friendly.
- Packaging is really easy, can be automated, and supports delta update packages.
- Distributing should be straightforward, use simple HTTP updates, and provide multiple "channels" (a-la Chrome Dev/Beta/Release).
- Installing is Wizard-Free™, with no UAC dialogs, does not require reboot, and is .NET Framework friendly.
- Updating is in the background, doesn't interrupt the user, and does not require a reboot.
This guide contains everything you need to know to publish your first app. I know, it's short and sweet. Squirrel can do lots more than what you see here, so once you've tried the instructions here, check out some of our other docs!
These are required to build packages with Squirrel, but are not required for applications using Squirrel.
- Install dotnet 6.0 runtime
- Install Squirrel Tool (csq)
dotnet tool install -g csq
- Install the Clowd.Squirrel NuGet package
- IMPORTANT: Add
SquirrelAwareApp.HandleEvents();
to the beginning ofMain()
Instructions may vary by OS. Consult csq -h
on your target platform for more info.
> dotnet publish YourApp.csproj -o ./publish
> csq pack -u YourApp -v 1.0.1 -p ./publish -e YourApp.exe
You can host releases in a directory/file share, online on any static web/file server, Amazon S3, BackBlaze B2, or even via GitHub Releases.
private static async Task UpdateMyApp()
{
using var mgr = new UpdateManager("https://the.place/you-host/releases");
var newVersion = await mgr.UpdateApp();
// You must restart to complete the update.
// This can be done later / at any time.
if (newVersion != null) UpdateManager.RestartApp();
}