Viewing Decoded Signals
Raw hex bytes only tell you so much. Load a database and CANoli decodes each message into named signals with real engineering values and units.
Loading a database
A database describes which messages live on the bus and how to interpret their bytes. CANoli reads two formats:
- DBC (
.dbc) — the Vector database format used across the industry. - SYM (
.sym) — the PEAK Systems symbol format.
To load one, use File > Open Database, or open the Database panel and click
Open…. Pick your .dbc or .sym file. See
Working with Databases to create or edit one from scratch.
Signals in the Trace window
Once a database is loaded, return to the Trace window. Messages the database recognizes now show their Name and gain a disclosure triangle. Expand a message to reveal its signals as child rows:
- The signal name appears in the Name column.
- The decoded value appears in the Data column — a number with its unit (for
example,
42.5 mph) or, for enumerated signals, the text label with its raw number (for example,Off (0)).
Values update live as new frames arrive, so you can watch a signal change in real time.

What gets decoded
Each signal in the database carries everything CANoli needs to turn bits into a value:
- Start bit and bit length — where the signal lives in the payload.
- Byte order — little-endian (Intel) or big-endian (Motorola).
- Value type — unsigned, signed, or float.
- Factor and offset — the linear scaling applied to the raw value
(
value = raw * factor + offset). - Unit — shown next to the value.
- Value table / enum — maps raw numbers to text labels.
If a message isn’t in the database, it still appears in the trace by ID — you just won’t get named signals until you describe it. The AI Auto-Decode feature can help reverse-engineer unknown IDs.
Decoding elsewhere
Decoded signals also feed the rest of CANoli: they’re what you
chart over time, and they’re available to an
AI agent through the MCP decode_frame and
get_message_info tools.
Next: Transmitting Messages.