Drone Delta Update Packager

go get


ddup - Drone Delta Update Packager

What is this?

ddup is a re-packaging tool that uses binary diffs to de-duplicate the gzipped archive files used update the 3DR Solo drone platform. It can either be used as a stand-alone binary or imported as a library into another Go project.

How does it work?


Two types of archives are used to update the 3DR Solo platform:

  • controller_{version}.tar.gz - software for the 3DR Controller
  • solo_{version}.tar.gz - software for the 3DR Solo

These archives average in the order of 70-80MB each in size, meaning a complete update normally requires downloading around 150MB of data.

ddup takes advantage of two key characteristics of these update archives: 1. A Controller and Solo archive for the same version are very similar. 2. An older Contoller archive is similar to a newer Controller archive.

Creating the deltas

Packing or de-duplicating a set of Controller and Solo update archives will result in two delta or diff archives, outlined below:


This archive contains the binary differences between Controller and Solo archive of the same version. From this diff the original Solo update can be built by applying this diff to the Controller update archive of the matching version.


This archive contains the binary differences between an old and a new Controller archive. From this diff the original new Controlelr archive can be built by applying this diff to the older Controller archive.


Smaller, faster, software updates. An Controller and Solo software update packaged by ddup will usually be less than 25% of the original size of the two archives. Since ddup uses binary difference de-duplication, this compression is completely lossless and produces the original files with identical md5 hashes.

Getting ddup

Installing a pre-built binary

The latest pre-built binaries ca be found at

Building from source

First you will need a Go development environment, see this guide on installing and setting up a Go development environment.

Once you have a GOPATH, you can run a go get which will place the sources in $GOPATH/src/ Once in that directory you can run the normal go get go build commands.


To just install the binary run go install.


ddup also has many unit tests, which can be run with go test.

Using ddup

Pack - ddup pack <controller_base> <controller_new> <solo_new> <output_path>

The ddup pack ... command will build a delta update package (and md5sum file) using the input archive files and save that output to output_path

Example usage:

ddup pack controller_1.2.0.tar.gz controller_1.3.0.tar.gz solo_1.3.0.tar.gz ~/ddup-out

This command will produce a delta_update_1.2.0_to_1.3.0.tar.gz and delta_update_1.2.0_to_1.3.0.tar.gz.md5 file in ~/ddup-out

Unpack - ddup unpack <controller_base> <delta_archive> <output_path>

The ddup unpack ... command will build the original update archives from an old Controller archive and a delta update archive and save that output to output_path

Example usage:

ddup unpack controller_1.2.0.tar.gz delta_update_1.2.0_to_1.3.0.tar.gz ~/ddup-out

This command will produce the original controller_1.3.0.tar.gz solo_1.3.0.tar.gz files in ~/ddup-out