Inspect, decode, record, and replay CAN bus traffic with a modern, lightweight, cross-platform tool. Built from the ground up for automotive, EV, and embedded systems engineers.
From raw frame capture to J1939 diagnostics — all in one professional tool with a modular licensing model so you only pay for what you use.
Add multiple CAN channels — physical hardware or virtual. Set bitrate per channel, attach DBC/SYM databases, and connect or disconnect with one click. Logs to ASC, TRC, and BLF simultaneously.
Live scrolling frame trace with a 2000-frame ring buffer. Switch between scrolling and unique-ID view. Real-time text filter, cycle-time tracking, TX-frame highlighting, and timestamp/DLC/hex columns.
Live decoded signal values from your DBC or SYM database. Columns show message name, signal name, physical value with unit, type, and last-update time. Filterable and freezable.
Multi-canvas time-series plotter with a configurable N×M grid. Drag signals from the signal tree onto any canvas. Stacked subplots or shared Y-axis per canvas, adaptive markers that appear when zoomed in, and cursor dots that follow the replay scrubbar position via binary search. Data is never discarded — time regressions appear as NaN gaps so all history stays intact.
Compose and send raw frames manually or via DBC-decoded message definitions. Schedule periodic TX at any interval. Built-in signal waveform generators: Fixed, Ramp Up, Triangle, and Sine — continuously re-encodes and pushes to the TX scheduler.
Open recorded log files and replay them at 0.1× to 16× speed. Pause, resume, loop. Drag the scrubbar to any position — Signal Plot cursors update in real time. On seek, Raw Trace rebuilds from scratch while Signal Plot retains history with visual NaN gaps.
Automatically discovers J1939 nodes on the bus and displays their address, manufacturer name, function, and last-seen time. The indispensable view for truck, bus, and heavy equipment CAN networks.
J1939 Diagnostic Trouble Code reader. Shows PGN name, source address, SPN, FMI, occurrence count, human-readable descriptions, and timestamp for each active fault code.
Captures J1939 freeze-frame snapshots at the exact moment a DTC fires. Displays the trigger SPN/FMI alongside all signal values recorded at the instant of the fault — invaluable for root-cause analysis.
Browse all loaded DBC and SYM files through a hierarchical message and signal tree. Inspect attributes, value tables, and signal scaling without leaving the application.
// First-match modular decoder chain std::optional<DecodedFrame> DecodeChain::decode(const CanFrame& frame) { for (auto& dec : decoders_) { if (auto r = dec.tryDecode(frame)) return r; // first match wins } return PassthroughDecoder{}.decode(frame); } // Lock-free SPSC hot path void DriverThread::run() { while (running_) { CanFrame f = hw_.read(); // blocking spsc_.push(f); // zero mutex } } // Replay drives same ICanBus interface ICanBus* bus = useReplay ? new ReplayBus(logFile) : new HardwareBus(adapter);
High-throughput CAN buses can push thousands of frames per second. CanLover is designed so the UI thread is never the bottleneck.
Driver, decoder, and UI threads communicate through single-producer single-consumer queues — zero mutexes in the hot path, no priority inversion, no frame drops under load.
DBC → SYM → J1939 → Passthrough — each decoder tries in order, first match wins. New protocol decoders plug in without touching existing code paths.
ASC, TRC, and BLF are written concurrently on their own thread. Log overruns can never stall the decoding pipeline or lose frames in the trace.
Replay drives the same ICanBus interface as real hardware. The rest of the stack is completely unaware of whether data is live or replayed.
Native integrations for each platform — no shims, no compatibility layers where it counts.
SocketCAN via native kernel interface. Zero third-party SDK required — just bring up your can0 interface and connect.
Runtime-selectable backend: PEAK PCANBasic, Vector XL Driver, or Kvaser CANlib. All three can coexist in one binary — no recompile needed to switch adapters.
Adapter-based stub in progress. Community feedback on preferred hardware backends welcome.
Hardware-fingerprint-based license keys. Each feature module is licensed independently — start with the free Raw Trace and add capabilities as your project grows.
No dongle, no internet connection required. Your license key is tied to your machine hardware — copy it to any machine you own with the same fingerprint.
Run the AppImage (Linux) or installer (Windows). The app works immediately in basic mode with Raw Trace — no license needed to get started.
Open the About panel. CanLover shows a fingerprint derived from your CPU ID and machine ID. Copy it and send it to us along with the feature modules you need.
We generate a signed key that unlocks exactly the features you purchased. Paste it into the License field — features activate immediately, no restart required.
No call-home, no subscription. The expiry date (if any) is displayed in the About panel. Perpetual licenses available — ask us.
A clear-eyed look at how CanLover compares to the established names in the industry.
| Feature | CanLover | Vector CANalyzer | PEAK PCAN Explorer | Kvaser CanKing |
|---|---|---|---|---|
| Linux (SocketCAN) | ✓ Native kernel | ✕ Windows only | ✕ Windows only | ✕ Windows only |
| Windows | ✓ PEAK · Vector · Kvaser | ✓ | ✓ PEAK only | ✓ Kvaser only |
| DBC/SYM decoding | ✓ | ✓ | ✓ via plugin | ✕ |
| Signal plot (time-series) | ✓ Multi-canvas | ✓ | ✓ via plugin | ✕ |
| Log replay (ASC/TRC/BLF) | ✓ Scrubbar + speed ctrl | ✓ | ✓ | ✕ |
| J1939 + DTC + Freeze Frame | ✓ | ✓ | Partial plugin | ✕ |
| Per-feature licensing | ✓ Pay only what you need | ✕ Monolithic tiers | ✓ Plugin model | ✕ Free only |
| Distribution | AppImage · Installer | Installer (Windows) | Installer (Windows) | Installer (Windows) |
| GPU-accelerated UI | ✓ ImGui + SDL3 + OpenGL | ✕ Legacy MFC | ✕ | ✕ |
| Price | Free core + modular | $$$$ Enterprise | Free + paid plugins | Free |
Download CanLover for free. Raw Trace is always available — no license, no signup, no credit card. Unlock additional modules when you need them.