xdelta vs BPS
BPS and xdelta both handle large files and verify integrity, and both produce compact patches. BPS is easier to work with because it can be created in a browser and applies everywhere. xdelta is the convention for very large files such as GameCube and Wii images, but requires the xdelta3 tool to create.
BPS for cartridge ROMs, xdelta for very large files.
| xdelta / VCDIFF | BPS | |
|---|---|---|
| Verifies integrity | Yes, via checksums in the format | Yes, CRC32 of source and output |
| Practical size limit | None, used on multi-GB images | None in practice |
| Create in a browser | No, needs xdelta3 | Yes |
| Apply in a browser | Yes, with a caveat | Yes |
| Standardised | Yes, RFC 3284 | Community format |
| Typical use | N64, GameCube, Wii, disc images | SNES, GBA, NES, DS cartridges |
The xdelta caveat worth knowing
VCDIFF supports an optional secondary compression layer. Browser-based patchers, including this one, implement the core decoder but not those secondary decompressors. A patch built with one fails with "not implemented: secondary decompressor".
xdelta3 -e -S none -s original.z64 modified.z64 patch.xdeltaIf you distribute xdelta patches, that flag makes them work in every browser patcher without changing anything else.
How to choose
- Patching a cartridge ROM and you get to pick the format: BPS. You can create it here and it applies anywhere.
- Patching a GameCube, Wii or large disc image: xdelta, which is what those communities use.
- You want users to patch on a phone with no install: BPS, or xdelta built with
-S none.
Frequently asked questions
Is xdelta better than BPS?
Neither is better outright. xdelta is a general binary diff standard proven on very large files; BPS is purpose-built for ROMs and can be created in a browser. For cartridge-sized ROMs, BPS is the more convenient choice.
Why do GameCube and Wii hacks use xdelta?
Those images are gigabytes, and xdelta was already the established tool for large binary diffs. The convention stuck.
Can I convert an xdelta patch to BPS?
Not directly. Apply the xdelta patch to the correct base ROM, then create a BPS patch from the original and the patched result.