Today we’ll talk about the program that updates files on the client side — the updater — how these programs work, what algorithms they use, and how ours works.
Preparing and Packing Files
First, the updater needs to know which files it’ll be working with — that’s what a second program, for building update files, is for.

This program doesn’t just compress files as much as possible using Zip libraries — it also records checksums and file sizes. CRC32 is used to calculate the checksums, which we’ll cover in more detail in future posts. An XML file map is generated for the files so the updater knows exactly what it needs to download.
The result of the file build is a root folder with all the files packed into archives, plus an UpdateInfo.xml file with a detailed file map for the updater. That’s exactly what gets uploaded to hosting, which is where our updater later reads from.

Downloading and Processing Files
Every time it updates, the updater gets the file map and starts comparing the files it already has against that reference. First our updater checks whether the file exists, then checks its size — and if the size matches, the longer checksum calculation kicks in. This is how we guarantee the files get brought in line with the reference specified in the update file.
We now have data on which files failed the check — what next?
We back up, download, and unpack — all at the same time.

Downloading and unpacking run through two pipeline queues. They wait for items like conveyor belts on a factory floor. As soon as a file’s archive finishes downloading, it immediately moves into the unpack queue — so we don’t have to wait for the downloaded file to unpack before starting the next download.
Downloads happen over plain HTTP, so hosting just needs public access open to the folder with the prepared update files.
After downloading, we always verify the files’ checksums, because we’re responsible for reliability and for delivering only correct files — otherwise we retry the download.
Summary
So, to sum up what an updater is in 3 points:
- Gathering file information
- Verifying files across three levels
- Downloading and unpacking files that failed the check
Is it complicated? I don’t think so, but even here there are plenty of gotchas.
That’s all for now, thanks for reading!
For any questions, welcome to reach out via our contact form.