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. The free alternative to Vector CANalyzer and PEAK PCAN-View — built from the ground up for automotive, EV, and embedded systems engineers.

Compatible with SocketCAN PEAK PCANBasic Vector XL Kvaser CANlib
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 ConfigurationFree

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 TraceFree

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 DbcDecoder⚙ In progress

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
Node Logic NodeLogic ⚙ Beta: In progress

A visual scripting canvas built directly into CanLover. Drop event nodes that fire on incoming CAN frames, signal conditions, or timers — then wire logic, data, and action nodes to build automated CAN behaviours without writing a line of code. Send frames, start periodic tasks, set variables, and log values, all driven by live bus traffic.

Event-driven CAN frame triggers Signal conditions Periodic timers Automated TX
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 TransmitFree

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 Free

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 Decoder⚙ In progress

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 J1939 Decoder⚙ In progress

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 J1939 Decoder⚙ In progress

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 BrowserDbcDecoder

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
Bus StatisticsFree

Per-channel live counters for bus load (current, average, peak), RX/TX frame and byte totals, and a full error-frame breakdown by kind — bit, form, stuff, CRC, ACK, bus-off, and more. Error counts shift from green to red as the risk of bus-off increases.

Bus load % TEC / REC Error breakdown Reset counters
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
🍎
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
Bus Statistics
Always available, no license required
Free
CAN Transmit
Periodic TX + waveform generators
Free
Log-file Replay
ASC / TRC / BLF replay with scrubbar
Free
Read/Write/Monitor DBC/SYM
Signal Table + Database Browser
DbcDecoder
Signal Plot
Multi-canvas time-series plotting
SignalPlot
Node Logic
Visual scripting canvas — automate CAN without code
NodeLogic
J1939 Decoder
Network view + DTC Panel + Freeze Frame
J1939Decoder

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 Vector only PEAK only Kvaser only
DBC/SYM decoding DBC Only SYM and DBC via plugin
Signal plot (time-series) Multi-canvas via plugin
Log replay (ASC/TRC/BLF) Scrubbar + speed ctrl ASC and BLF only TRC only
J1939 + DTC + Freeze Frame Partial plugin
Per-feature licensing Pay only what you need Monolithic tiers Plugin model Free only
Distribution AppImage(Linux) · Installer(Windows) Installer (Windows) Installer (Windows) Installer (Windows)
GPU-accelerated UI ImGui + SDL3 + OpenGL Legacy MFC
Price Free core + modular $$$$ Enterprise Free + paid plugins Free

Releases

Every release is published on GitHub (private). All Releases go through a thorough test process, more than 240 tests. Beta release can be accessed in the button bellow

Loading releases…

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