A small Windows tool I use to package and ship game updates for MegaVolts.
I point it at the game build folder, it splits every file into fixed-size chunks, builds a signed manifest, and uploads everything to my web host. The launcher on the client side reads the manifest and only downloads the chunks that actually changed, so patches stay small.
- Scans the game folder and lists every file (with a search box to filter and checkboxes to exclude files you don't want shipped).
- Splits each file into 4 MB chunks and names each chunk by its SHA-1 hash. Identical chunks are stored once, so unchanged files cost nothing to re-ship.
- Writes a
manifest.jsondescribing every file and the chunks it's made of. - Signs the manifest with RSA so the client can verify it wasn't tampered with.
- Deploys the chunks and manifest to a remote with
rclone.
Output lands in Output/:
Output/
chunks/ content-addressed chunk files (aa/bb/aabb....chunk)
manifests/ manifest.json + manifest.json.sig
signing/ RSA keypair (private.key stays local)
The idea is borrowed from how Steam ships updates. Instead of downloading a whole new build every patch, the game is broken into small content-addressed pieces. A chunk only exists once no matter how many files or builds contain it, and the client only pulls the pieces it's missing. A one-line code change means the player downloads a few kilobytes, not the whole game.
- Build the solution in Visual Studio (x64).
- Run the tool from the root of your game build folder.
- Uncheck anything you don't want shipped, then hit Generate.
- Set up an
rcloneremote (rclone config) and editdeploy.cfgso the remote name matches, then hit Deploy.
Excluded files are remembered in exclude_list.cfg between runs.
Native Windows desktop app. Plain Win32 for the UI and modern C++ for the rest
— std::filesystem, threads, and atomics for the parallel chunking, and the
Windows CNG API (bcrypt) for SHA-1 hashing and RSA signing. No external
runtime and no dependencies beyond rclone for the upload step.