Pakkly Docs
Getting Started
How It WorksInstallingUpdatingUninstalling (Bonus)Folder Structure

How It Works


When someone first visits your Download Hub and clicks "download", they will be presented with an automatically generated installer. This executable is unique to your project and will always point to it.

Internally, we refer to this executable as the Shipper, it's responsible for installing, updating, and running your app. It's a very small binary written in pure Rust to minimize footprint.

Once Shipper is done installing, your app will be executed. Shipper will continue running in the background until your app terminates. It will never interfere with your app's operation or code.

Shipper also creates an OS-appropriate shortcut that will auto-update, more on that in...


During installation, Shipper installed a copy of itself in the runner subdirectory of the install folder.

This copy is what OS shortcuts point to and will on startup check for updates, install the updates, then start your app.

Shipper has a few failsafes to ensure continuity of service to your customers, no matter the conditions:

  • It enforces a timeout of 5 seconds for the update check, and will only check for updates if it hasn't in the last 60 seconds.
  • If an update fails to install for whatever reason, it will seamlessly run the old version.
  • It won't touch files it hasn't created, unless they are provided in the release .zip of the new version
  • It runs a full filesystem-level check to ensure write permissions before actually writing anything
  • In the event of an update failing during a critical segment(the final copy), a reinstall will be done on the next launch.

Uninstalling (Bonus)

Depending on the platform, an uninstaller might be created and will execute Shipper with the flag "--pakkly_uninstall".

You could also do this manually if you so wish. Warning: Shipper uninstallation requires administrator permissions on Windows.

Shipper keeps a record of all the files it installed, so it can remove them during uninstallation. It will not remove files that were not created by Shipper.

Folder Structure

On different platforms Shipper will use different installation methods and create different files.

The root folder is located at:


Your app will generally reside in the subdirectory program, with the Shipper and it's associate files in runner.