Independent, diagnostics-first client and device-management suite for Proxmark5.
The current Proxmark ecosystem is evolving quickly. Much of the established software and documentation lives in the RfidResearchGroup proxmark3 repository, while Proxmark5 introduces additional hardware and an ESP32/BWM subsystem. This can make it difficult to determine what is actually supported by a particular physical device, firmware build, hardware revision, or transport.
This project exists to provide a simple, explicit and hardware-aware client for Proxmark5 without requiring the user to know command-line syntax.
The first objective is not to recreate every RFID command. The first objective is to make the device understandable, diagnosable and safely manageable.
- Detect a connected Proxmark5 automatically.
- Identify the actual hardware and hardware revision.
- Read and report ARM/FPGA/ESP32/BWM firmware information.
- Inspect available capabilities and transports.
- Inspect memory and other hardware properties where the protocol permits reliable verification.
- Distinguish DETECTED, REPORTED, EXPECTED, HYPOTHESIS, SIMULATED and UNKNOWN information instead of guessing.
- Calculate an explicit confidence level for important diagnostic results.
- Check hardware/firmware/client compatibility.
- Provide diagnostics without requiring CMD/terminal commands from the user.
- Create complete, versioned diagnostic reports suitable for humans and AI assistants.
- Provide safe backup workflows before firmware changes.
- Manage USB, Wi-Fi/TCP and Bluetooth/BLE connectivity where supported by the actual device.
- Provide a modern Windows GUI and later an Android application using shared protocol/core code.
- Eventually expose the normal supported Proxmark functionality through a graphical interface and automation layer.
- Keep compatibility information tied to exact firmware versions, commits and dates.
- Explain PM5 versus PM3/reference hardware differences in human-readable terms before firmware selection.
- Do not assume Proxmark3 and Proxmark5 are identical.
- Do not assume that every function in the RRG
proxmark3tree works on Proxmark5. - Do not silently flash or replace firmware.
- Do not overwrite an original backup.
- Do not invent hardware information when it cannot be verified.
- Prefer documented protocols/APIs over parsing terminal screen output.
- Do not modify the Proxmark firmware merely to make this client work.
- Keep legacy PM3 protocol support separate from PM5/BWM-specific support.
- Every compatibility claim should record the exact source version/commit/date when possible.
- Firmware update actions must be explicit and require confirmation.
For important values the client should show the source of the information:
| State | Meaning |
|---|---|
DETECTED |
Directly detected or verified by a reliable hardware/protocol operation. |
REPORTED |
Reported by the connected firmware/device. |
EXPECTED |
Expected from a known hardware/firmware compatibility definition. |
HYPOTHESIS |
Proposed behaviour not yet verified. |
SIMULATED |
Behaviour represented by the offline simulator only. |
UNKNOWN |
Not currently determinable with sufficient confidence. |
The client must never silently convert EXPECTED, HYPOTHESIS or SIMULATED into DETECTED.
The application should not force the user to interpret VID/PID values or repository names. It should explain:
- which hardware family is connected;
- exact hardware revision when detectable;
- current ARM/FPGA/BWM versions;
- which PM3-compatible components are reusable;
- which functions are PM5-specific;
- why a firmware candidate is compatible, incompatible or unknown.
Firmware selection must follow:
Detect device
↓
Identify family + exact revision
↓
Identify current firmware/subsystems
↓
Compare compatibility definitions
↓
Explain result to human
↓
Offer only established firmware candidates
See docs/HARDWARE_COMPARISON.md, docs/CLI_COMMAND_REFERENCE.md, compatibility/hardware.json and compatibility/firmware.json.
The repository now contains src/PM5Control.Desktop, a native Windows Forms PM5 Control Center application. It is a WinExe targeting Windows and is intended to be launched by double-click rather than through dotnet run or a terminal.
The first desktop build provides:
- automatic Windows serial-port detection;
- PM5 Inspector-style hardware status view;
- explicit
UNKNOWNstates where PM5 protocol evidence is not yet available; - read-only connection/selection UI;
- diagnostic log;
- no firmware flashing, reset or destructive hardware operation.
GitHub Actions publishes a self-contained, single-file win-x64 Windows package as the PM5Control-Windows artifact after a successful Core test run. The desktop UI deliberately does not pretend that a COM port alone proves PM5 protocol compatibility.
The project keeps a separate evidence-labelled reference of the established PM3 command surface and the still-unverified PM5 command surface:
docs/CLI_COMMAND_REFERENCE.md
This distinction is important: a documented PM3 command such as hw version is not automatically a PM5 command, and BWM command IDs are protocol-level identifiers rather than user-facing CLI commands.
The first executable milestone is a real client foundation called PM5 Inspector. It is not a disposable script. It is the first component of the final PM5 Control Center.
The desktop UI should ultimately provide, at minimum:
- Connect / Disconnect
- Automatic device detection
- Hardware identity
- USB identity (VID/PID and transport information where available)
- ARM firmware information
- FPGA information
- ESP32/BWM information
- Memory information
- Wi-Fi/BLE/TCP capability status where available
- Power/battery information where the device exposes it
- Human-readable PM3/PM5 hardware comparison
- Compatibility result
- Diagnostic log
- Export full diagnostic report
- Backup workflow entry point
The user should be able to obtain these details by clicking buttons. The user must not need to type Proxmark CLI commands into CMD.
PM5 Control Center
|
+-- UI (Windows / Android)
|
+-- Device Inspector
|
+-- Compatibility Engine
|
+-- Diagnostic / Report Engine
|
+-- Backup / Firmware Manager
|
+-- Connection Manager
| +-- USB
| +-- Serial/transport as applicable
| +-- Wi-Fi/TCP
| +-- Bluetooth/BLE
|
+-- Protocol Abstraction
+-- Legacy PM3-compatible protocol
+-- PM5-specific protocol
+-- ESP32/BWM API
|
+-- Proxmark5
The protocol layer is deliberately separated from the UI so that the same core can later be used by Windows, Ubuntu CLI and Android.
- hardware model/revision
- serial/device identifiers where available
- USB VID/PID
- CPU/ARM firmware
- FPGA firmware/image
- memory and addressable regions where safely verifiable
- RF subsystem capabilities
Treat the ESP32/BWM subsystem as a first-class component, not as a footnote. Track where supported:
- ESP32 model
- BWM firmware version/build
- MAC address
- Wi-Fi state/configuration
- BLE state/configuration
- TCP/UDP capability/configuration
- MQTT capability/configuration
- OTA capability/status
- free heap/RAM
- uptime/timestamp
- NVS/system information
- BWM logs and readiness state
A capability must be marked unsupported/unknown if the connected firmware does not expose a reliable way to verify it.
Track power information separately. Depending on the actual Proxmark5 hardware and exposed telemetry, this may include external power, battery presence, voltage, current/charge state, charging state, temperature, percentage and warnings. Report UNKNOWN when telemetry cannot be verified.
Before any firmware update is attempted, the client should identify the current device state and create or verify a backup when the hardware/protocol provides a supported backup mechanism.
Do not implement a guessed firmware-dump command. The backup implementation must be based on verified PM5-compatible mechanisms.
compatibility/
hardware.json
firmware.json
bwm.json
protocols.json
known-issues.json
Compatibility definitions must remain explicit and evidence-backed.
The project uses a progressive engineering model rather than stopping after the first visible task:
Task A — requested change
↓
Task B — deep engineering of affected layers
↓
Tests / evidence
↓
Compatibility update
↓
Next blocker
↓
Real hardware verification when required
See:
AI_CONTEXT.mddocs/AI_TASKS.mddocs/SIMULATOR_CONTRACT.mddocs/RESEARCH_LOG.mddocs/RESEARCH_QUEUE.mddocs/SIMULATOR_TEST_PLAN.md
The RfidResearchGroup Proxmark3 repository is an upstream reference and an important source of protocol/client knowledge. It is not the sole definition of Proxmark5 support.
Because upstream changes frequently, compatibility claims should record repository, branch/tag, exact commit when possible, date checked and relevant files/components.
For the BWM/ESP32 subsystem, the latest inspected upstream baseline is recorded in docs/UPSTREAM_BWM_SNAPSHOT_2026-09-13.md. It records the exact upstream commit, DEV.md capability baseline and CI result separately from physical hardware verification.
Stage: Windows PM5 Inspector shell added / real-hardware protocol validation pending.
The desktop application sends only the fixed PM3 NG command whitelist
CMD_VERSION, CMD_CAPABILITIES, CMD_STATUS, and CMD_PING. It is not a
general command terminal and button labels do not alter the on-wire command.
Developer mode exposes raw responses, including interleaved diagnostic frames,
but never enables user-entered commands. CMD_CAPABILITIES is decoded only for
the documented upstream capabilities_t schema version 8; unknown schema
versions are retained as raw data and reported as unknown rather than guessed.
The desktop executable shell is now in the repository and CI is configured to produce a self-contained Windows package. The physical PM5 session remains read-only: identify USB/serial transport, inspect device/firmware versions, determine available PM5/BWM interfaces, and preserve the original state before any firmware update.
First make the device observable and trustworthy. Then make it easy to control.
- Consolidated master plan — current implementation status, priorities, upstream changes, hardware-verification gates and next actions.
- Roadmap — milestone overview.
- AI continuation tasks and AI context — instructions for future coding assistants.
- BWM synchronization mini-plan — fast-moving BLE/Wi-Fi/ESP32-C2 work.
The BWM ESP32 firmware has optional mDNS/DNS-SD support whose lifecycle follows Wi-Fi state; discovery can disappear during Wi-Fi stop and return after restart. Whether it is enabled in a particular installed image remains to be detected. The upstream default TCP port is now 18888 (previously 7777); explicit host/port overrides remain supported.
The Core also supports optional DNS-SD discovery of BWM-enabled PM5 devices via _proxmark5._tcp.local; manual IP/port remains available when mDNS is disabled or filtered by the network.