Rpfd
Read and write RAGE Package Format archives
- Transport
- Not stated
- Package
- —
- Registry id
- io.github.molchalih/rpfd
No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.
A dependency-light Rust toolchain for reading, editing and rebuilding RPF7
archives — the dlc.rpf files RAGE Multiplayer and FiveM servers hand to their
clients, and the archives Grand Theft Auto V ships. One command-line binary with
no runtime prerequisite, and the same code behind a JSON-RPC daemon and a VS
Code extension.
Formats
| Version | Variant | Used by | Support |
|---|---|---|---|
| RPF7 | OPEN, unencrypted |
RAGE MP and FiveM server packs | Read, write |
| RPF7 | AES-256, 0x0FFFFFF9 |
GTA V, nested archives such as des_* and script_* |
Read, write — key from the game executable |
| RPF7 | AES-256, 0x0FFFFFF7 |
Rockstar Games Launcher | Read, write — key from Launcher.exe |
| RPF7 | NG, 0x0FEFFFFF |
GTA V Legacy and Enhanced, every top-level archive | Read, write — both need a memory image |
| RPF8 | — | Red Dead Redemption 2 | Not supported |
| RPF6 | — | Red Dead Redemption, 2010 and 2023 | Not supported |
| RPF4 | — | Max Payne 3 | Not supported |
| RPF3 | — | GTA IV audio, Midnight Club: LA | Not supported |
| RPF2 | — | GTA IV, main archives | Not supported |
| RPF0 | — | Table Tennis | Not supported |
Pre-RPF7 attributions are read from other implementations, not measured here;
docs/rpf-format.md records them and where they disagree. Every non-RPF7
version is recognised by its magic word and refused by number.
Encryption is per entry as well as per archive: the tag covers the table of contents and the names blob, and each entry's row says whether its payload is under the transform.
Installing
INSTALL.md is the page for this, and it answers three separate questions: how
to install the editor extension from a .vsix, how to register the MCP server
with an editor or an agent, and where to put the binary if that is all you want.
Prebuilt binaries for macOS, Windows and Linux are attached to each release.
To build from source instead — the toolchain is pinned in rust-toolchain.toml:
git clone <this repository> && cd rpf
cargo build --release # target/release/rpf
Encrypted archives need key material, extracted from your own installation:
$ rpf keys extract GTA5.exe # the AES key and the hash lookup table
$ rpf keys extract Launcher.exe # the second AES key, carried by no game executable
$ rpf keys extract <memory image> # the NG expanded keys and decrypt tables
No key material is bundled here, and none ever will be. Each source is cached
under the hash of its own bytes in ./keys, which every command consults
without a flag; --cache-dir selects another cache, the one way to keep several
installations apart, and rpf keys invalidate empties one. No command prints a
key — only offsets, lengths, counts and paths. NG material stands in the clear
only in a memory image of a running game, so that is the sole route to an NG
archive; obtaining one is out of scope here. An archive whose material is absent
fails rather than guessing.
Usage
List an archive, descending into the archives inside it:
$ rpf ls -R dlc.rpf
binary xml 2199 content.xml
directory - 3 data
binary xml 5100 data/vehicles.meta
directory - 2 x64
directory - 1 x64/vehiclemods
binary - 2544128 x64/vehiclemods/meringls63amg24_mods.rpf
resource - 262144 x64/vehiclemods/meringls63amg24_mods.rpf/meringls63amg24_brabus_diffuser_1.yft
...
The second column says what an entry holds; pso, rbf and meta have an XML
view:
$ rpf cat --as xml des_hosp_ceil2.rpf des_hosp_ceil2.ytyp
<?xml version="1.0" encoding="UTF-8"?>
<hash_D98BB561 pso:struct="hash_D98BB561">
<hash_018A3B1B pso:array="atarray">
<pso:item pso:struct="hash_82D6FC83">
<hash_BF74DFA7 pso:float="100.0"/>
<hash_D9EF8236 pso:float3="-2.80584, -2.95097, 0.0"/>
...
rpf put --as xml writes an edited document back in the entry's own encoding.
Ask what a write costs, then make it:
From the project's README.