Maintainer: Dynamicaaa
| Core Capabilities | Advanced Functionality |
|---|---|
| Supports RPA-1.0 - RPA-4.0 Understands ALT-1.0 and ZiX-12A/12B loader-based variants |
Runtime Detection Detects Ren'Py/Python version from archive data |
| Dual Interface CLI + Node.js API integration |
`.rpyc` Auto-Decompiler Powered by @dynamicaaa/unrpyc-js |
| Legacy & Modern Indexing Understands `.rpi` and embedded index formats |
XOR Key Encryption Supports RPA-3.x & RPA-4.x encrypted archives |
| Obfuscated Headers Recognises ZiX-12A, ZiX-12B, and ALT-1.0 signatures |
Index Junk Recovery Scans past junk prefixes to locate the compressed index |
| Cross-Platform Works on Windows, macOS, and Linux |
Pickle Protocols Automatic pickle version detection |
npm install @dynamicaaa/rpx
npx @dynamicaaa/rpx --help
npm install -g @dynamicaaa/rpxrpx extract -i game.rpa -o extracted/
rpx list -i game.rpa
rpx info -i game.rpa --verbose
rpx create -i dist/game -o dist/game.rpa --header ALT-1.0 --key 0x89ABCDEFimport { RPX, extract, list, createArchive } from '@dynamicaaa/rpx';
const archive = new RPX('game.rpa');
await archive.readHeader();
await archive.parseIndex();
console.log('Files:', await archive.listFiles());
await extract('game.rpa', 'extracted');
await createArchive({ input: 'build/game', output: 'dist/game.rpa', version: 'ALT-1.0', key: '0x89ABCDEF' });| Command | Description |
|---|---|
rpx extract | Extract files from an RPA archive. |
rpx list | List archive contents. |
rpx info | Display archive header information. |
rpx create | Package files into .rpa archives (RPA-1.0 - RPA-4.0, plus ALT-1.0 obfuscation support; ZiX extraction only). |
| Option | Description |
|---|---|
input | Source directory or file. |
output | Destination archive path. |
version | Target header (1.0, 2.0, 3.0, 3.2, 4.0, ALT-1.0; default 3.0). ZiX variants are extraction-only. |
key | Optional XOR key for encryption. |
marker | Toggle "Made with Ren'Py" marker. |
includeHidden | Include hidden files. |
force | Overwrite existing archives. |
pickleProtocol | Override pickle version manually. |
RPX automatically infers Ren'Py runtime metadata:
- Detects Ren'Py 6.x / 7.x (Python 2) and Ren'Py 8.x (Python 3).
- Displays pickle protocol version and script metadata.
- Reports confidence levels and diagnostic notes.
RPX ships with a minimal set of runtime dependencies:
@dynamicaaa/pyrunner- bootstraps a portable Python runtime used for decompilation.@dynamicaaa/unrpyc-js- JavaScript wrapper around CensoredUsername/unrpyc for.rpycdecompilation.@dynamicaaa/rpicklex- pure JavaScript pickle reader for archive indexes.- CLI helpers: chalk, gradient-string, cli-progress, ora, yargs.
The first invocation downloads Python via PyRunner into~/.pyrunner; subsequent runs reuse the cached interpreter.
Project Overview | CLI Guide | API Reference | Examples | Troubleshooting
We welcome contributions! Run tests, update docs, and describe edge cases. Open an issue for bugs or requests.
MIT (c) Dynamicaaa
Built with love for the Ren'Py developer community