Tool
CanLab
PyQt6 desktop workstation and command-line tool for reverse-engineering CAN bus captures offline. It reads SavvyCAN/GVRET CSV, candump, pcap, Vector BLF/ASC, MDF4 and openpilot logs, then suggests counters, checksums and their algorithms, byte roles, flags, multiplexers, entropy-based field boundaries and cross-ID correlations, decodes J1939 and NMEA 2000 PGNs and reassembles multi-frame messages. A cantools-backed DBC builder checks signal definitions against the captured frames and exports DBC, openpilot DBC, CANdb++, ARXML and Wireshark Lua dissectors, and an optional MCP server offers 29 receive-only analysis tools to assistants.
- Targets
- Protocol
- Category
- Protocol analysis tools
- Relationship
- Foundation tool
- Sources reviewed
Requirements & limits
- README calls CanLab a beta, single-author project. The reviewed commit 8aaa6ff (2026-09-23) declares version 2.1.0 in pyproject.toml, while the latest release is v2.0.0 (2026-09-15) with a Linux x86_64 build and demo videos. README stresses that the analysis is heuristic, suggests candidates rather than identifying signals, and has not been validated on many real vehicles.
- Python 3.11+ on Linux, macOS or Windows (developed on 3.12), with optional extras for AI, REST, MCP, hardware adapters, MDF4 (asammdf) and openpilot logs (pycapnp); README asks for 4 GB RAM, 8 GB for the machine-learning features. Live capture uses SocketCAN, a comma.ai Panda, GVRET boards or python-can adapters; README reports one physical adapter used, a CANalyst-II, and the others only on a virtual bus.
- Inputs are the user's own captures. The bundled sample is a synthetic Hyundai-style capture generated by a script, the test fixtures are a few lines each, and the real-data acceptance runs fetch public SavvyCAN, CSS Electronics and comma.ai recordings instead of committing them. The opendbc matcher downloads the commaai/opendbc index on first use, and the optional AI analysis sends the selected ID's frame statistics to the configured Anthropic, OpenAI, Groq or Ollama provider.
- The application also has bench-only transmit functions behind a global ARM TX switch that is off by default and a blocked-ID list; README restricts them to isolated bench setups, and they are not described further here. The MCP tools cannot transmit.
- README's Testing section reports 753 passing pytest tests (its badge still says 578), interoperability tests against can-isotp, udsoncan and can-j1939, and 99 checks over public real-world recordings; diagnostic requests were tested only against scripted responders. MIT; the NMEA 2000 table derives from CANboat (Apache-2.0) and the cereal schema from comma.ai (MIT). This review ran no tests and opened no captures.
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 · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- pyproject.toml GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- tests/real_data/README.md GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- canlab/sample_data/generate_sample.py GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- canlab/core/data/CANBOAT-NOTICE.txt GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- canlab/core/data/cereal/NOTICE.txt GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- LICENSE GitHub · Sherin-SEF-AI/CanLab · Revision 8aaa6ff
- https://github.com/Sherin-SEF-AI/CanLab/releases/tag/v2.0.0
More in Protocols
- Facedancer · Tool
- Mirage · Tool
- Protobuf Decoder · Tool
- gr-lora · Tool
- termshark · Tool
- SigDigger · Tool