/velopack

Quick and easy installer and automatic updates for cross-platform dotnet applications

Primary LanguageC#MIT LicenseMIT

Velopack Logo

Nuget Discord Build Codecov License

Velopack is a setup / installation framework for cross-platform dotnet applications. Great out-of-the-box development experience, with zero configuration or setup needed. Lightning fast to use, and lightning fast for your users, too.

Features

  • 😍 Zero config – Velopack takes your dotnet build output (eg. dotnet publish), and generates an installer, and update package in a single command.
  • 🎯 Cross platform – Velopack supports building packages for Windows and OSX, with Linux on the way. No matter your target, Velopack can create a release in just one command.
  • 🚀 Automatic migrations - If you are coming from Squirrel.Windows or Clowd.Squirrel, Velopack will automatically migrate your application. Just build your Velopack release and deploy! Read more.
  • ⚡️ Lightning fast – Velopack is written in Rust for native performance. Creating releases is multi-threaded, and produces delta packages for fast app updates. Applying update packages is highly optimised, and often can be done in the background.

Getting Started

This is a very simple example of the steps you would take to generate an installer and update packages for your application. Be sure to read the documentation for an overview of more features!

  1. Install the command line tool vpk:
    dotnet tool install -g vpk
  2. Install the Velopack NuGet Package in your main project:
    dotnet add package Velopack
  3. Configure your Velopack app at the beginning of Program.Main:
    static void Main(string[] args)
    {
        VelopackApp.Build().Run();
    }
  4. Publish dotnet and build your first Velopack release! 🎉
    dotnet publish -c Release --self-contained -r win-x64 -o .\publish
    vpk pack -u YourAppId -v 1.0.0 -p .\publish
  5. Add automatic updating to your app:
    private static async Task UpdateMyApp()
    {
        var mgr = new UpdateManager("https://the.place/you-host/updates");
    
        // check for new version
        var newVersion = await mgr.CheckForUpdatesAsync();
        if (newVersion == null)
            return; // no update available
    
        // download new version
        await mgr.DownloadUpdatesAsync(newVersion);
    
        // install new version and restart app
        mgr.ApplyUpdatesAndRestart();
    }

Documentation

Community

Contributing