Full Changelog: v0.2.4...v0.3.0
CANviz v0.3.0 - J1939 Decoder + Light Mode
pip install --upgrade canviz
What's in this release
J1939 passive decoder
If you work with trucks, agricultural equipment, marine systems, or any heavy-duty vehicle network then this release is for you.
CANviz now decodes J1939 protocol traffic with zero configuration. Plug in at 250 kbps, enable the decoder, and every frame on the bus immediately shows you what it is and who sent it - no DBC file required to get started.
Auto-detection - CANviz watches for 29-bit extended-ID traffic and shows an amber indicator on the J1939 tab as soon as it sees activity. You can enable the decoder before or after connecting.
CAN ID decomposition - every extended-ID frame is decomposed into Priority, PGN (Parameter Group Number), Source Address, and Destination Address. The message table gains four new columns that appear automatically when the decoder is on.
54 PGN definitions built-in - EEC1, CCVS, DM1, ET1, AMB, VEP1, LFE, TP.CM, TP.DT, and 45 more. Unknown PGNs show their raw hex value - all traffic is still visible.
101 SA address names - every ECU on the bus is identified by name. Engine #1, Brakes - System Controller, Diesel Particulate Filter Controller, Cab Controller - Primary, and 97 more from the J1939 standard address table.
BAM transport protocol reassembly - CAN frames are limited to 8 bytes. J1939 sends longer messages (Vehicle Identification Number, software version strings) across multiple frames using the BAM protocol. CANviz reassembles them automatically and shows the complete payload in the BAM Log tab.
DM1 active fault decode - DM1 (Diagnostic Message 1) is how J1939 ECUs broadcast active fault codes. CANviz decodes every DM1 frame and shows: SPN number, component name (e.g. "Engine Oil Pressure"), Failure Mode Identifier with plain-English description (e.g. "FMI 1 - Below normal operating range"), occurrence count, and which dashboard warning lamps are active (MIL, Red Stop Lamp, Amber Warning Lamp, Protect Lamp).
J1939 tab - dedicated panel in the bottom bar with three sub-views:
- Nodes - live table of every ECU actively transmitting, with SA hex, name, frame count, and last-seen time
- BAM Log - completed multi-packet messages, deduplicated by PGN
- DM1 Faults - active fault codes with full field explanations inline
CLI support - canviz monitor --j1939 adds PGN and SA columns to the terminal table and enriches pipe-mode JSON output with pgn, pgn_name, sa, sa_name fields. canviz j1939 status queries a running server and prints nodes, BAM log, and DM1 faults as Rich tables in the terminal.
For full signal decode (RPM values, speed in km/h, temperatures) load a J1939 DBC file via the existing DBC panel - cantools handles J1939 DBCs natively and signals appear in the message table and plot tab as normal.
See the J1939 Guide for full documentation, FMI code reference, bitrate guidance, and CLI usage.
Light / dark mode
As requested by many of you, top bar now has a theme toggle (sun / moon icon). Light mode uses a warm #eef2f7 base with high-contrast #0f1824 text - readable outdoors and under bright workshop lighting.
The signal plot (uPlot canvas) re-renders with correct axis and grid colours on theme switch.
What's next
v0.3.x - CANopen CiA 301 + CiA 402 decoder. Zero-config COB-ID decode, NMT state tracking, heartbeat monitor, EMCY decode, SDO transaction pairing, and CiA 402 drive state panel. EDS file support for PDO signal names.
Full roadmap: OBD-II over raw CAN (no ELM327), UDS diagnostics, reverse engineering toolkit, plugin API.
Contributors
Thanks to everyone for the support, tested hardware combinations, and sent feedback since v0.2.0. 213 GitHub stars and 4K+ downloads off Phase 4 functionality - the J1939 community was clearly waiting for this.
If CANviz saves you time on a project, a ⭐ on GitHub goes a long way.