nUpdate 5 release candidate · MIT licensed · .NET Standard 2.0

Signed updates for .NET apps on Windows, Linux and macOS.

Publish packages from nUpdate Administration to your own server. A few lines of C# find, verify and install them, and the installer needs no .NET on the machine.

Updating Aurora
Updating Aurora Copying Aurora.exe...
64 %

Installer from nUpdate.Installer/win-x64/, self-contained, with your app's icon, or no window at all.

How it works

From your build to your users in three steps.

  1. 1

    Publish

    nUpdate Administration builds one zip per platform, signs it with your project's key and uploads it with nupdate.json over SFTP, FTPS or FTP.

  2. 2

    Check

    UpdateManager reads the feed, picks the zip for its runtime identifier and checks size, SHA-512, the RSA-PSS signature and the manifest before anything runs.

  3. 3

    Install

    The installer waits for your app to close, runs your operations, replaces the files and restarts it, with a small window or, on a server, without one.

One version, a build per platform

Every client takes the file that fits it best.

A client looks for its runtime identifier, then its operating system, then any. A version without a fitting file is simply not offered. Pick a client to see which file of version 2.2.0 it installs.

packages/2.2.0/nupdate.json
  • win-x64.zip48.1 MB
  • win.zip31.7 MB
  • linux.zip29.4 MB
  • osx-arm64.zip52.9 MB
  • any.zip17.5 MB

win-x64 takes win-x64.zip: the exact runtime identifier.

What you get

Built for apps that run for years on machines you never see.

Nothing runs before it is verified

Every package is checked against the feed and your key before the installer starts. The signed manifest must also name your project, the version and the platform, so a feed cannot hand out a relabelled package.

  • Size matches the feed
  • SHA-512 hash matches
  • RSA-PSS signature, PEM key
  • Manifest names project, version, platform

An installer without .NET

Self-contained single files for win, linux and osx on x64 and arm64. A small window that follows light and dark mode, or none at all for services and servers. Every run writes install.log.

macOS bundles in one step

The installer builds MyApp.app.new next to your app and swaps the two atomically, so the bundle is never half there and its signature stays intact.

Channels and staged rollouts

Offer betas to the users who want them, ship to one ring or region first and mark updates that must not be skipped. A beta channel also receives release candidates and releases.

manager.MinimumStability = Stability.Beta;
manager.RolloutConditions["Ring"] = "early";

Your look, or ours

Update dialogs for Windows Forms, WPF and Avalonia, or your own on the same update flow. Even the installer window can be your own executable.

Operations during the update

Delete and rename files, start and stop processes everywhere. Registry keys and services on Windows. Wait for a migration tool and fail the update if it fails.

Your server, your data

Packages and the feed are plain files on any web server. Download statistics are optional, through a small PHP and MySQL endpoint you host yourself.

Get started

Add two packages. Write a few lines.

The library targets .NET Standard 2.0, so it runs in .NET Framework 4.6.2 apps as well as on .NET 10. The installer package copies the right installer next to your app on build.

Browse the API · Read the guide on GitHub

dotnet add package nUpdate --version 5.0.0-rc.1
dotnet add package nUpdate.UpdateInstaller.UI.Avalonia --version 5.0.0-rc.1
[assembly: ApplicationVersion("1.0.0")]

var manager = new UpdateManager(
    new Uri("https://example.com/updates/nupdate.json"),
    publicKey);

if (await manager.CheckForUpdatesAsync())
{
    await manager.DownloadAsync(progress);
    if (await manager.VerifyAsync())
        manager.StartInstaller(); // installs and restarts the app
}

nUpdate Administration

Build, sign and publish from Windows, Linux or macOS.

A project is a folder you can copy to any machine. Secrets are encrypted with a project password, servers are trusted by fingerprint, and download statistics come from a small PHP and MySQL endpoint. Published packages stay editable: change their files or operations, and nUpdate Administration builds the changed platforms again and replaces them on the server. It follows the light or dark mode of your system.

Coming from nUpdate 4?

Move over while both versions keep running.

  • The migration assistant converts projects of nUpdate 3 and 4, and the old feed stays online for clients that have not updated yet.
  • Versions get one canonical spelling: 1.2.0.0b1 becomes 1.2.0-beta.1.
  • x86 and x64 packages become win-x86 and win-x64; ready for Linux and macOS builds next to them.

Keep nUpdate going.

nUpdate is free and MIT licensed, built and maintained in spare time. If it keeps your users up to date, a donation helps it keep going.

Donate with PayPal