2. code
  3. beat



beat is the canonical tool for working with beat-protocol files.


beat v1 (source code)
beat v1 (Windows binary)

Supported Operating Systems

Windows 7+
macOS 10.7+
Linux 3.2+
FreeBSD 10.0+


beat is licensed under the GNU GPLv3 license.


BPS files are binary difference patches. BPS patches are created by comparing an original file to a modified file, and encoding the differences, which can then be distributed.

When the BPS file is applied to the original file, it will output the modified file.

Why use BPS instead of IPS?

BPS is meant as a successor to the IPS file format.

BPS patches support files of any size, unlike IPS which is limited to files that are 16 MB or less.

BPS patches encode checksums of the original file, the modified file, and the patch itself. This allows patchers to alert users when the wrong original file is used to apply a patch, unlike IPS that will silently produce a corrupted file with no warning.

BPS patches can encode deltas, which represent data that has been inserted into or removed from the original file. IPS files can only store linear changes, and when encountering a delta, it degrades to storing the entire file, creating a patch that is often larger than the modified file was to begin with.

BPS patches have adaptive length and offset pairs, and support a more sophisticated form of block-level RLE, which means that even without deltas, BPS patches are smaller than their equivalent IPS patches, usually substantially so.

BPS patches can store an unlimited amount of optional metadata, which can include patch authorship information, user documentation, or anything else.

Like IPS files, it is possible to apply multiple BPS files to the same target file.

Like IPS files, BPS files can be automatically soft-patched onto game ROMs in most popular emulators.

Like IPS files, applying a BPS patch or creating a linear BPS patch ala IPS is trivial, requiring only a few simple lines of code.

Creating BPS delta patches is of course more involved. beat currently accomplishes this by using induced-sorted suffix arrays. BPS patches only have to be created once, and the canonical beat application produces delta patches.

Unlike IPS files, there is only one canonical BPS standard. The format does not contain multiple third-party extensions (such as IPS CLIP), because the original standard covers all use cases for a binary patcher.