BPS format

BPS Patcher Guide: Applying .bps Files

BPS is the format IPS should have been: no 16MB ceiling, checksums on the input, the output and the patch itself, and delta encoding that keeps patches small. It’s the default for modern SNES and N64 hacks, and applying one takes about thirty seconds once you have the right tool.

  • Updated
  • Checked against Delta Patcher 3.1.6
  • 4 min read
  • Verified against primary sources · how we check

In short

  • Use Floating IPS — despite the name, it applies BPS as well as IPS, on Windows, macOS and Linux.
  • beat (by byuu) is the reference BPS patcher and creator.
  • BPS patches verify checksums automatically: a wrong base ROM is refused, not silently mangled.
  • No size limit, no header tricks — BPS just works once the base ROM is right.

Why BPS replaced IPS

BPS (Binary Patching System) was designed by byuu as a clean break from IPS. Where IPS stores raw “write bytes here” records with no safety net, BPS stores delta-encoded differences plus CRC32 checksums of three things: the expected source file, the expected result, and the patch itself. Apply a BPS patch and the tool checks all three — a wrong ROM, a corrupted download or a truncated patch is caught before any damage is done, which is precisely the class of mistake IPS lets through silently.

There’s no 16MB addressing limit either, which is why BPS became the standard for N64 hacks and larger SNES projects. If you’re choosing a format for a new hack today, BPS is the sensible default unless the files are huge enough to want XDelta. The checksums also make BPS patches self-documenting: years later, anyone can verify exactly which base file a patch was built against, which is a quiet superpower for preservation.

BPS patchers

BPS patcher options
ToolPlatformsCreates BPS too?Notes
Floating IPSWindows, macOS, LinuxYesThe default choice; community forks keep it current
beatWindowsYesbyuu’s reference implementation
RomPatcher.jsAny browserYesNo install; good for one-off patches
UniPatcherAndroidYesOn-device patching

Applying a BPS patch with Floating IPS

  1. Confirm the base ROM

    Read the hack’s readme for the exact game, region and revision. BPS will verify this itself, but knowing it upfront saves a round trip. How to verify a source file.

  2. Open Floating IPS → Apply Patch

    Despite the IPS in its name, Floating IPS has applied BPS for years. Choose Apply Patch.

  3. Select the .bps file, then the ROM

    The order matters: patch first, then the base ROM when prompted. Floating IPS checks the ROM’s checksum against the patch’s expectation immediately.

  4. Read any warning as a stop sign

    A checksum warning means the base ROM is wrong — region, revision or byte order. Get the right file; don’t look for an override.

  5. Name the output and test

    Save under a new filename with the system’s usual extension (.sfc, .z64, .gba…) and test in an emulator.

Format-specific notes

  • SNES: the headered-vs-unheadered question still applies — BPS checksums are computed over a specific flavour, so match the readme. The SNES header guide.
  • N64: patches expect .z64 byte order; convert first if your dump is .n64/.v64. The N64 byte-order guide.
  • Creating BPS: beat’s “create” mode takes the original and modified files and emits the .bps; Floating IPS can create them too. Distribute the patch, never the ROM.

BPS problems and fixes

Common BPS problems
ProblemLikely causeFix
Checksum error on applyWrong base ROM (region/revision/byte order)Match the readme exactly, then re-verify
“Not a BPS patch”Wrong extension or corrupted downloadRe-download; check it’s actually .bps
Works in emulator A, not BEmulator quirk, not a patch problemTest in the reference emulator for the system first

BPS FAQ

Is BPS better than UPS?

For applying patches, they’re equivalent in practice — both are checksum-aware and size-unlimited. BPS has wider tool support (Floating IPS reads it natively); UPS is entrenched in the GBA Pokémon scene. Follow the hack’s format.

Can I convert an IPS patch to BPS?

Not directly — but you don’t need to. Apply the IPS to get the modified ROM, then create a fresh BPS from the original and modified files with beat or Floating IPS.

Does BPS work on every system?

Yes — BPS is system-agnostic. It’s popular for SNES and N64 because those ROMs exceed IPS limits, but the same flow works for GBA, Genesis and anything else.

Floating IPS shows a “checksum mismatch” — is my download broken?

Not necessarily. The checksum that failed is almost always the source ROM’s, meaning your base dump differs from what the patch expects. Re-check the readme’s required game, region and revision before re-downloading the patch.

Creating BPS patches with beat

beat is the reference BPS creator as well as applier. The flow mirrors applying in reverse: open beat, choose the create/build mode, select the original clean file and your modified file, and save the .bps. Floating IPS can also create BPS patches. Because the format embeds checksums of both ends, anyone applying your patch gets wrong-ROM protection for free — a strong reason to prefer BPS over IPS for new hacks.

Advanced: delta patches and large files

BPS uses delta encoding, so patches stay small even when the underlying changes are scattered across a large ROM — one reason N64 hackers adopted it. There’s no 16MB ceiling like IPS, and no practical upper bound you’ll hit with retro systems. For truly huge files (PS1/PSP-era disc images and beyond), creators typically switch to XDelta, which is built for that scale.

Auto-patching in emulators

Several emulators apply patches on the fly without modifying any file: place the .bps next to the ROM with the same filename and the emulator patches in memory at load. Snes9x does this for IPS; for BPS, check your emulator’s documentation — support varies by core. Auto-patching is perfect for trying translations, but for a permanent collection, apply the patch once with Floating IPS and keep the patched file.

Continue learning