Comparison

XDelta vs IPS, UPS, BPS and PPF Patch Formats

Patch files come in several formats, and a patcher for one usually can’t open another. Here’s how XDelta differs from the other formats you’ll run into, which to choose when making a patch, and which tool opens what.

  • Updated
  • Checked against Delta Patcher 3.1.6
  • 3 min read

In short

  • Delta Patcher only opens XDelta (.xdelta / VCDIFF) patches. Other formats need a different tool; renaming the file won’t help.
  • IPS is simple and old: no checksums, and it can’t address data beyond 16 MB.
  • UPS and BPS add CRC32 checksums; BPS also handles inserted and moved data.
  • PPF is aimed at CD images. XDelta handles very large files and shifted data, with per-window checksums.

Patch formats at a glance

Common binary patch formats compared
FormatExtensionSize limitChecksumsInserted or moved dataTypical useDelta Patcher
IPS.ips16 MB addressableNoneNo, overwrites at fixed offsetsOlder cartridge ROM hacksNo
UPS.upsNo practical limitCRC32 of source, target and patchNo, byte-for-byte differencesCartridge ROM hacksNo
BPS.bpsNo practical limitCRC32 of source, target and patchYes, copy instructionsModern cartridge ROM hacksNo
PPF.ppfLarge files in PPF3Optional validation blockNo, overwrites at fixed offsetsCD images, especially PlayStationNo
XDelta (VCDIFF).xdelta, .vcdiffVery large files (over 4 GB in Delta Patcher 3.1.5+)Adler-32 per windowYes, copy instructionsDisc images, large files, general binariesYes

IPS (International Patching System)

IPS is one of the oldest and simplest formats. A patch is a list of records, each saying “write these bytes at this offset.” Offsets are stored in 3 bytes, so it can’t modify data beyond about 16 MB, and there are no checksums. An IPS patch applied to the wrong file silently produces a broken result. It’s still common for older cartridge-era ROM hacks, where files are small.

UPS

UPS was designed as a successor to IPS. It removes the size limit and stores CRC32 checksums of the source file, the result and the patch itself, so a wrong source is detected. It records byte-level differences at fixed positions, so data that shifts produces larger patches. A UPS patch can also be applied in reverse to recover the original.

BPS

BPS, created by the same author as UPS, keeps the CRC32 checksums and adds copy instructions that reference data anywhere in the source or in the output built so far. That lets it handle inserted, removed and moved data efficiently, much like XDelta. It can also carry metadata. BPS is widely used for modern ROM hacks.

PPF (PlayStation Patch Format)

PPF was created for CD images, especially PlayStation games. Like IPS, it overwrites data at fixed offsets. Later versions added support for large images, an optional validation block that checks part of the source image, and optional undo data. It’s associated with the PPF-O-MATIC tools.

XDelta (VCDIFF)

XDelta patches use VCDIFF, a published standard (RFC 3284), as implemented by xdelta3. Copy instructions can reference any part of the source, so shifted data costs little. Output is built in windows with an Adler-32 checksum each, and the format streams through very large files, which is why it’s popular for disc images. It works with any file type. More about XDelta.

Which tool opens which format?

Popular patchers and the formats they support
ToolFormatsPlatforms
Delta PatcherXDelta (apply and create)Windows, macOS, Linux
xdelta3 command lineXDelta (apply and create)Windows, macOS, Linux
Rom Patcher JS (opens external site)IPS, UPS, APS, BPS, RUP, PPF, EBP, BSDiff, VCDIFF/XDelta and more (apply; creates some formats)Any modern web browser
Floating IPS (Flips)IPS and BPS (apply and create)Windows, Linux
PPF-O-MATICPPFWindows

Always check a tool’s own documentation for its current feature list, since support changes between versions.

How to tell which format a patch is

The extension is the first clue, but files do get renamed. The first bytes are reliable, and any hex editor shows them:

Patch file signatures
Starts withFormat
PATCH (text)IPS
UPS1 (text)UPS
BPS1 (text)BPS
PPF (text)PPF
D6 C3 C4 00 (bytes)XDelta / VCDIFF

Which format should you use for your own patch?

  • Large files, disc images, or changes that shift data: XDelta. It handles size and movement well and is easy for users to apply with Delta Patcher. How to create an XDelta patch.
  • Cartridge ROM hacks: BPS is a popular choice in many ROM hacking communities, with built-in CRC32 checks.
  • Avoid IPS for anything new unless your community specifically expects it. Missing checksums mean users can’t tell when they’ve used the wrong file.
  • Follow your community’s convention. The best format is often the one your users already have a tool for.

Can you convert a patch to another format?

Not directly: one format can’t simply be rewritten as another. The reliable method is to rebuild the patch:

  1. Apply the existing patch to the correct original file to get the modified file.
  2. Create a new patch in the format you want from the original and modified files. For XDelta, use Delta Patcher’s creation mode.
  3. Test the new patch on a fresh copy of the original.

Only redistribute converted patches if the original author allows it.

Continue learning

Sources and references