What is the BPS file format?
.bps is a binary delta patch format used in the retro gaming community to distribute ROM hacks and fan translations without distributing copyrighted ROM data. The format was created by byuu (Near), author of the bsnes SNES emulator, around 2012, and its specification was released into the public domain.
A .bps file begins with the four-byte ASCII header BPS1 at offset zero - the 1 is a format version number - followed by variable-length integers encoding the source file size, target file size, and an optional metadata block (UTF-8 text). The patch body uses four command types: SourceRead (copy unchanged bytes from source), TargetRead (write new bytes), SourceCopy (copy from an arbitrary source offset), and TargetCopy (copy from the already-written output). The file ends with three CRC32 checksums (4 bytes each, little-endian): one for the source ROM, one for the expected output ROM, and one covering the patch file itself. A patcher refuses to apply if the source checksum does not match, preventing corrupt output.
BPS succeeded the older IPS format by removing its 16 MB file-size ceiling and adding embedded integrity verification. It is widely used for SNES, GBA, and NDS ROM hacks.
Common tools include flips (Floating IPS, Windows/Linux), MultiPatch (macOS), UniPatcher (Android), and browser-based patchers such as RomPatcher.js.
Security & safety
RISK: MEDIUMBPS files themselves are just patch data and cannot execute code - they require a separate patcher tool and a ROM. Risk comes from downloading patching tools from unofficial sources (some bundled with adware) and from the legality of ROM distribution in your jurisdiction. Recommended patchers (Floating IPS, RomPatcher.js) are clean open-source tools.
Format details
in a nutshell- Microsoft Works Backup File - Older entries on some file-info sites claim .bps = Microsoft Works document backup; this is a misidentification - no evidence this association is real or widely used.
Programs that open BPS files
Technical details
deep spec| Magic bytes | `42 50 53 31` (`BPS1`) at offset 0 - `1` denotes format version |
| Byte order | Little-endian (variable-length integers and CRC32 checksums) |
| Container | Custom linear binary format (no standard wrapper) |
| Encoding | Binary |
| Integer encoding | Variable-length unsigned integers (7 bits per byte, MSB as continuation flag) |
| Patch commands | SourceRead, TargetRead, SourceCopy, TargetCopy |
| Checksum scheme | Three CRC32 checksums (source ROM, target ROM, patch file) - 4 bytes each, little-endian |
| Source validation | Patcher aborts if source CRC32 does not match embedded checksum - prevents applying to wrong ROM |
| Typical file size | A few KB to several MB (proportional to ROM diff size) |
| Specification | Public domain (published by byuu/Near, circa 2012); single version BPS1 |
| Target platforms | SNES, GBA, NDS, and other retro ROM hack targets |
| Predecessor formats | IPS (no checksums, 16 MB size limit), UPS |
| Released | circa 2012 (byuu/beat tool) |
| Latest version | BPS1 (single version in spec) |
| Open standard | Yes · royalty-free |
| Specification | github.com |
BPS conversions
Community Q&A
asked by usersNo questions yet - be the first to ask about BPS files.