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
  • 6 min read
  • Verified against primary sources · how we check

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.

APS (N64/GBA)

APS is a niche format with separate variants for Nintendo 64 and Game Boy Advance ROMs. It’s far less common than IPS, BPS or XDelta, and you’ll mostly meet it in older patches for those two systems. If a patch you downloaded is .aps, use a multi-format tool such as Rom Patcher JS or UniPatcher rather than hunting for an APS-only patcher.

Using xdelta3 from the command line

Delta Patcher is a graphical front-end for the xdelta3 engine. The command-line version does the same job and is useful for scripts, servers, or systems without a desktop. The two essential commands are:

Apply a patch
xdelta3 -d -s original.bin patch.xdelta patched.bin
Create a patch
xdelta3 -e -s original.bin modified.bin patch.xdelta

In the apply command, -d means decode (apply), -s original.bin names the source file, then the patch, then the output file. In the create command, -e means encode, with the original and modified files producing the patch. Unlike Delta Patcher’s GUI, the command line lets you choose the output path freely.

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
Lunar IPSIPS (apply and create)Windows
beatBPS (apply and create)Windows, Linux
UniPatcher (opens external site)IPS, UPS, BPS, PPF, XDelta3 and more (apply and create)Android
PPF-O-MATICPPFWindows

Always check a tool’s own documentation for its current feature list, since support changes between versions. For which format each console’s hacks tend to use, see the ROM hack patcher guide.

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?

  • Nintendo DS hacks: XDelta is the community default, for the reasons set out in the NDS patching guide.
  • 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.

Patch format FAQ

Can Delta Patcher open an IPS or BPS patch?

No. Delta Patcher only reads XDelta (VCDIFF) patches; renaming the file won’t help. Use Floating IPS for IPS/BPS, beat for BPS, or a multi-format tool like Rom Patcher JS. The alternatives page matches every format to its tool.

How can I tell which format a patch file is?

Check the extension first, then the file signature: IPS files start with the text PATCH, UPS with UPS1, BPS with BPS1, and XDelta with the bytes D6 C3 C4 00. Any hex editor shows the first bytes. See the signature table.

Someone sent me a patch with no extension. What do I do?

Don’t guess — applying with the wrong tool just fails. Open the first bytes in a hex editor and match them against the signature table above, or ask the sender which format they used.

Which format should I choose when making my own patch?

For large files or data that shifts, XDelta. For cartridge ROM hacks where the community expects it, BPS. Avoid IPS for anything new — it has no checksums, so users can’t tell when they’ve used the wrong file. And follow your community’s convention: the best format is the one your users already have a tool for.

Continue learning

Sources and references