OpenRemap
🌐 openremap.com — the project site: what OpenRemap is, how to install it, and the latest news.
📚 docs.openremap.com — the wiki: concepts, every command, and per-family references.
🐙 openremap-docs — the open-source repo behind the docs/wiki — suggestions and contributions welcome.
The open-source ECU binary intelligence layer — identify firmware, health-check it, verify its checksums, diff a tune into a portable recipe, and apply it to another binary of the same family.
Offline-first. No accounts, no telemetry, no data leaves your machine.
OpenRemap began as a final-semester thesis project, presented at SAEK Orestiadas (v0.4.5), and has been actively developed since (current release line: 0.7.x).
Where the project is going (short-term roadmap)
0.7.x (current): stabilise the 0.7.0 release — fix bugs that surface in real use, and integrate third-party open-source libraries (ported with credit — never copy-paste, see THIRD_PARTY.md). A stability cycle for the engine, not a feature cycle — the tooling that grows here is the tooling for contributing (see Contributing below).
Upcoming milestones:
- 0.8.0 — cross-firmware experiment: learn a tune from one software revision and relocate it to another by structural map matching, plus community plugin tooling.
- 0.9.0 — a refined, modern TUI.
- 1.0.0 — OpenRemap Harness: a desktop app for Windows / macOS / Linux.
Quick start
pip install openremap # or: uv tool install openremap
openremap identify stock.bin # what is this ECU? (family, SW, confidence)
openremap health stock.bin # is the file sane? (checksums, maps, VINs)
openremap cook stock.bin tuned.bin --output stage1.remap # diff → recipe
openremap cook-volatile stockA.bin stage1.bin --output portable.remap # car-portable recipe
openremap tune target.bin stage1.remap --output tuned.bin # apply → verify
openremap synth --output demo.bin # an ECU-like file, no ECU needed
Runs entirely offline. .bin, .ori, and .hex files are all accepted.
What it is
- Identify — 38 extractors across 6 OEMs (Bosch, Siemens, Delphi, Magneti Marelli, Denso, Hitachi), each result with a confidence tier and the evidence behind it
- Health-check — one command: checksums, axis sanity, map-count envelope, erased blocks, VIN duplication (CI-gateable)
- Checksums — verifies ME7, IronFelix, NefMoto, MS43, GS20/SMG2 and Denso Subaru schemes (detection only, no correction)
- Cook / tune — diff stock vs tuned into a portable
.remaprecipe (schema 4.5, map-annotated;cook-volatileexcludes VIN/checksum-store bytes with evidence for cross-car portability), apply with validate-before → apply → verify-after; merge recipes; audit the receipt - Map tooling — structural map discovery, map-level diffing, CSV export, probabilistic labels
- Synthetic fixtures —
openremap synthgenerates ECU-like binaries from scratch (deterministic, no ECU data involved), so you can try the tooling, build tests, or file a reproducible bug report without owning a dump. Generated files identify as Unknown by design. - Contribute an ECU family —
openremap contributemeasures your own dump for a signature that is stable in that family and absent from every family the engine already recognises, then writes the fixture, an extractor skeleton, a test and a PR description. Your dump never leaves your machine. - Library-first — every service is importable Python (identity, patching, map scanning) with a mandatory Rust core for the hot loops
Supported ECUs
6 manufacturers, 38 extractors — from LH-Jetronic (1982) to EDC17 and Denso/Hitachi Subaru (2020s). → Per-family reference
Own an ECU that is not listed? You can add support for it without sharing your
dump — openremap contribute extractor my.bin --measure-only runs offline and
tells you what the engine makes of the file.
Decoders & CPU coverage
To extract code references and read routines, OpenRemap decodes the ECU's
CPU directly — no manufacturer lookup needed. Decoders power the
code-reference signal, CPU auto-detection, and the routine command's
pseudo-decompiler. Two backends cover the supported families:
- Rust-native decoders — written from scratch for CPUs that the capstone
disassembly library does not support (C166/ST10, 8051, MCS-96), each
verified against an independent oracle: Ghidra's SLEIGH spec (C166), the
at51disassembler (8051 — 100% agreement on ~312k real instruction boundaries), and MAME's opcode tables + Ghidra (MCS-96). - Capstone-backed decoders — the mature disassembly library, used for TriCore, SuperH, x86, M680X, 68K and PowerPC.
| CPU | Decoder | ECU families |
|---|---|---|
| C166 / ST10 | Rust | ME7, ME9, EDC15, MS43, PPD, SID801/803, EMS2000, M5.x, ME1.5.5 |
| 8051 (MCS-51) | Rust | M1.8, M2.x, MP9, M4.x, Mono-Motronic, SIMOS, Simtec56 |
| MCS-96 (8096) | Rust | EDC1, EDC3 |
| TriCore | capstone | EDC16, EDC17, MED9, MED17 |
| SuperH | capstone | SH7055, SH7058, SH72546 |
| M680X (68HC11 / 6800) | capstone | M1.3, M1.7, M3.x, MP3.x, MP7.2, LH-Jetronic |
| 68K (68000 / CPU32) | capstone | M1.5.5, M1.55, IAW 4LV |
| PowerPC | capstone | MJD 6JF |
| x86 | capstone | (generic code — bootloaders etc.) |
Every mapping above is evidence-backed: an internal audit established each family's CPU from reset-vector header bytes and independent decoder evidence, and corrected several extractor docstrings along the way (M2.x / MP9 / M4.x are 8051, not 68xxx; EDC16 / MED9 are TriCore, not C166). The 16-bit Denso Subaru units are Motorola 68HC16 (CPU16) — capstone has no HC16 support, so they are not disassembled. Denso EE20 is believed to be SuperH per community docs, but there is no corpus binary to verify against yet.
Documentation
The wiki is live at docs.openremap.com —
its content lives in the open-source
v-arapidis/openremap-docs
repo. This repository keeps only repo-internal docs
(docs/internal/ — dated audits and version audits).
- Getting started — install, quick start, CLI, TUI
- Concepts — how it works, decoders, confidence, evidence, recipe format
- Commands — every command, simple + advanced
- Manufacturers — per-OEM, per-family pages
Contributing
See CONTRIBUTING.md — extractor guides, code style, PR process.
Changes are tracked per version in changelog/.
Have an ECU that is not supported? You can add it without sharing your dump — and without knowing what the family is called:
# what is this file? (no repository needed, no family name)
openremap contribute extractor stock.bin --also tuned.bin --measure-only
# from a clone: write the contribution
openremap contribute extractor stock.bin --also tuned.bin --brand X --family Y --write
The wizard measures a signature that is stable in your family and absent from
every family the engine already recognises, then writes the fixture recipe (a few
hundred bytes — never your ROM), an extractor skeleton that already passes the
review bar, a test, and a PR description. It executes the generated extractor
against every known-family fixture before calling it verified. Details:
contributing/extractors.md.
License
Metadata
Release files for openremap 0.7.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| openremap-0.7.7-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| openremap-0.7.7-cp310-abi3-musllinux_1_2_x86_64.whl | CPython 3.10 | abi3 | Linux musl 1.2+ x86-64 | Details |
| openremap-0.7.7-cp310-abi3-manylinux_2_34_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.34+ x86-64 | Details |
| openremap-0.7.7-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 4.1 MB
Release files / openremap-0.7.7-cp310-abi3-win_amd64.whl
| Download URL | openremap-0.7.7-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 924.1 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e33d8abc64c19a7c437ef5306cb908e23b519c34fb29797cb032762149e6891c
|
|
BLAKE2b-256 checksum How to use checksums |
49c6bca27d4f1e2ccf88967d653cee295e04fba3a7c348df7558536658f06ef9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logRelease files / openremap-0.7.7-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | openremap-0.7.7-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
aa10827c571a247f67e1c76c9a6b5f8b1becd3f0c9c93c9354494049cee88580
|
|
BLAKE2b-256 checksum How to use checksums |
3fad3d9611ec4ce293a7223e484efb3918f97fa3e703537bea47b1f49f5a24ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logRelease files / openremap-0.7.7-cp310-abi3-manylinux_2_34_x86_64.whl
| Download URL | openremap-0.7.7-cp310-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
6377d38e5316fad23841a695e7deae449fb8b221def832089fe1d118f3e5758e
|
|
BLAKE2b-256 checksum How to use checksums |
a4a45487ddda8c27b9cc55b0eacb909eec69cd7aeed850fb3eff11b196a6d37d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logRelease files / openremap-0.7.7-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | openremap-0.7.7-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 998.1 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bf54322bcccfbae2d2147a371e5d5a4cbf629805ecca483c8e825683d32c6ccd
|
|
BLAKE2b-256 checksum How to use checksums |
e44a6e2aa4cc6f41b4b0e6a28aea0f88ca81b3525fd0597cdaed9d5f84eb5dd1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logSecurity for openremap 0.7.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 4 files in this release have been uploaded with provenance metadata.
Attestation for openremap-0.7.7-cp310-abi3-win_amd64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.