v1.0 SocketCAN Native ImGui · C++20

Professional
CAN Bus Analysis
for engineers.

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.

Compatible with SocketCAN PEAK PCANBasic Vector XL Kvaser CANlib
Raw Trace — Ch1: 500 kbit/s · VW_GOLF_GTE.dbc
● CONNECTED
CLEAR
UNIQUE-ID
Timestamp Ch ID DLC Data Message
0.00123410x18FF50E5801 0F A2 3B 00 FF FF FFBMS_Status
0.00210010x0CF0040087F 00 00 00 00 FF FF FFEEC1
0.00450010x18FEEE008FF 00 D0 07 FF FF FF FFEFL/P1
0.00500010x7DF802 01 0C 00 00 00 00 00OBD2_Req
0.00512010x7E8804 41 0C 0B B8 00 00 00OBD2_Rsp
0.00890010x18FEF1008FF FF FF 00 00 FF FF FFETC2
0.01023410x18FF50E5801 0F A3 3C 00 FF FF FFBMS_Status
0.01241010x0CF003008A0 3C 00 00 FA FF FF FFEEC2
0.01402010x18FEF200812 00 FF FF FF FF FF FFETC1
0.01650010x18FECA00802 00 00 00 FF FF FF FFDM1
0.00123410x18FF50E5801 0F A2 3B 00 FF FF FFBMS_Status
0.00210010x0CF0040087F 00 00 00 00 FF FF FFEEC1
0.00450010x18FEEE008FF 00 D0 07 FF FF FF FFEFL/P1
0.00500010x7DF802 01 0C 00 00 00 00 00OBD2_Req
0.00512010x7E8804 41 0C 0B B8 00 00 00OBD2_Rsp
0.00890010x18FEF1008FF FF FF 00 00 FF FF FFETC2
0.01023410x18FF50E5801 0F A3 3C 00 FF FF FFBMS_Status
0.01241010x0CF003008A0 3C 00 00 FA FF FF FFEEC2
0.01402010x18FEF200812 00 FF FF FF FF FF FFETC1
0.01650010x18FECA00802 00 00 00 FF FF FF FFDM1
Frames: 2,847 Rate: 312 fps Ch1: 500 kbit/s Errors: 0
Hardware adapters supported
SocketCAN (Linux)
PEAK PCANBasic
Vector XL Driver
Kvaser CANlib
DBC files
SYM files
ASC / TRC / BLF logs

Everything you need
to work with CAN bus

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.

Bus Configuration

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.

Multi-channel ASC · TRC · BLF DBC / SYM
Raw Trace

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.

2000-frame buffer Unique-ID view Live filter TX highlight
Signal Table DBC/SYM

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.

Physical values Filterable Freezable
Signal Plot SignalPlot

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.

N×M grid layout Drag & drop signals Shared Y-axis Replay cursor NaN gaps on seek
CAN Transmit

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.

Periodic TX Signal waveforms DBC encoding
Log-file Replay Replay

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.

0.1× – 16× speed Scrubbar ASC · TRC · BLF Loop mode
J1939 Network J1939

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.

Node discovery Manufacturer DB Live timestamps
DTC Panel DTC

J1939 Diagnostic Trouble Code reader. Shows PGN name, source address, SPN, FMI, occurrence count, human-readable descriptions, and timestamp for each active fault code.

SPN / FMI Occurrence count J1939 DM1
Freeze Frame FreezeFrame

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.

DTC-triggered Signal snapshot SPN / FMI context
Database Browser

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.

DBC browser SYM browser Signal tree
decoder_chain.cpp
// 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);

Built for
real-time performance

High-throughput CAN buses can push thousands of frames per second. CanLover is designed so the UI thread is never the bottleneck.

Lock-free SPSC queues

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.

🔗
Modular decoder chain

DBC → SYM → J1939 → Passthrough — each decoder tries in order, first match wins. New protocol decoders plug in without touching existing code paths.

📝
Dedicated logger thread

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 as a first-class citizen

Replay drives the same ICanBus interface as real hardware. The rest of the stack is completely unaware of whether data is live or replayed.

Works where you work

Native integrations for each platform — no shims, no compatibility layers where it counts.

🐧
Linux

SocketCAN via native kernel interface. Zero third-party SDK required — just bring up your can0 interface and connect.

✓ Available AppImage
🪟
Windows

Runtime-selectable backend: PEAK PCANBasic, Vector XL Driver, or Kvaser CANlib. All three can coexist in one binary — no recompile needed to switch adapters.

✓ Available Installer (planned)
🍎
macOS

Adapter-based stub in progress. Community feedback on preferred hardware backends welcome.

⚙ In progress

Pay only for
what you use

Hardware-fingerprint-based license keys. Each feature module is licensed independently — start with the free Raw Trace and add capabilities as your project grows.

Raw Trace
Always available, no license required
Free
DBC/SYM Decoder
Signal Table + Database Browser
DbcDecoder
Signal Plot
Multi-canvas time-series plotting
SignalPlot
Log-file Replay
ASC / TRC / BLF replay with scrubbar
Replay
J1939 Decoder
Network view + DTC Panel + Freeze Frame
J1939Decoder
CAN Transmit
Periodic TX + waveform generators
CanTx

Get up and running in minutes

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.

1
Download & launch

Run the AppImage (Linux) or installer (Windows). The app works immediately in basic mode with Raw Trace — no license needed to get started.

2
Share your machine fingerprint

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.

3
Receive your license key

We generate a signed key that unlocks exactly the features you purchased. Paste it into the License field — features activate immediately, no restart required.

4
Work offline, forever

No call-home, no subscription. The expiry date (if any) is displayed in the About panel. Perpetual licenses available — ask us.

Get a License Key

How CanLover stacks up

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

Ready to take control
of your CAN bus?

Download CanLover for free. Raw Trace is always available — no license, no signup, no credit card. Unlock additional modules when you need them.

Free Raw Trace, forever
No internet required after activation
Perpetual licenses available
Linux-native, no SDK dependencies