Tool
rabbitizer
MIPS instruction decoder written in C that never allocates on the heap, with Python, C++ and Rust bindings in the same repository and the stated aim of producing matching assembly. It decodes one instruction word at a time, focusing on MIPS I to III with partial MIPS IV support, and also handles the N64 RSP, the PlayStation's R3000 GTE, the PSP's R4000 Allegrex and the PS2's R5900; it offers validation checks, instruction-grouping queries, configurable pseudo-instructions and register names, and small helpers for building pointer and symbol detection. Matching-decompilation tooling builds on it: splat and spimdisasm both list it as a Python dependency.
- Targets
- Binary · Game
- Category
- Binary analysis libraries
- Relationship
- Foundation tool
- Sources reviewed
Requirements & limits
- Latest stable release at review: 1.16.2, published 2026-05-29 on GitHub, PyPI and crates.io, which matches the reviewed 1.x commit. A 2.0.0 alpha series (2.0.0-alpha.9, 2026-05-20) is published from a separate Rust branch that was not reviewed; splat and spimdisasm both pin versions below 2.0.0.
- Install with pip install rabbitizer or cargo add rabbitizer. The README gives Python 3.9 as the minimum, although pyproject.toml still declares >=3.4, and building the Python bindings from source needs the Python development headers. The C and C++ libraries build with make and clang (C11 and C++17), and the Rust crate declares Rust 1.66.0. Instruction tables for every binding are generated from templates in tables/, and CI checks that the generated files are current.
- Input is raw 32-bit instruction words, so callers must take code from their own binaries, choose the CPU variant and handle addresses and symbols themselves. Pseudo-instructions that expand to more than one instruction are deliberately unsupported; the README says output should match, reports that RSP output reassembles to matching code with armips, and calls MIPS IV support partial.
- GitHub Actions build the C code with warnings as errors on Ubuntu 22.04 and run build-info, logic and instruction checks, and Python unit tests run on Linux, macOS and Windows; tests/asm holds assembly samples for the GTE, Allegrex and R5900. Nothing was built or run in this review. The README's reference list points to third-party CPU manuals and documentation hosted elsewhere, which are not part of this record.
- MIT. The reviewed sources establish no REA connection.
About this entry
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- README.md GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- CHANGELOG.md GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- pyproject.toml GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- Cargo.toml GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- Makefile GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- .github/workflows/make.yml GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- .github/workflows/unit_tests_py.yml GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- .github/workflows/check_tables.yml GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- LICENSE GitHub · Decompollaborate/rabbitizer · Revision 724a49a
- https://github.com/Decompollaborate/rabbitizer/releases/tag/1.16.2
- https://pypi.org/project/rabbitizer/1.16.2/
- https://crates.io/crates/rabbitizer/1.16.2
- pyproject.toml GitHub · ethteck/splat · Revision 7548b97
- requirements.txt GitHub · Decompollaborate/spimdisasm · Revision 4b5d4c6