Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>BLF ViewerNew to Visual Studio Code? Get it now.
BLF Viewer

BLF Viewer

Mohammad Rafatpanah

|
1,915 installs
| (1) | Free
View Binary Logging Format (BLF) CAN bus files
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

BLF Viewer

View and analyze Binary Logging Format (BLF) CAN bus log files directly in VS Code — no external tools required.

BLF is the native recording format of Vector CANalyzer, CANoe, and related automotive diagnostic tools. This extension lets you inspect .blf files as a structured, filterable table without leaving your editor.


Sample Screenshot

Below is a sample viewer screenshot. The left panel shows the message table with filters applied, and the right panel shows the details for a selected CAN frame.

BLF Viewer sample

Features

Automatic file association

Opening any .blf file in VS Code launches the viewer automatically. No commands needed.

Virtual scrolling — handles large files

Files with hundreds of thousands of messages open instantly. The viewer renders only the rows currently visible on screen, keeping memory usage constant regardless of file size.

Stats dashboard

At a glance: total message count, recording duration, messages/sec throughput, unique arbitration IDs, active channels, RX/TX split, and CAN FD frame count.

DBC signal decoding

Click the ⊕ DBC button in the toolbar to import a .dbc file. Once loaded:

  • A badge shows the file name and the number of matched messages
  • The channel selector beside the badge defaults to All Ch; choose Ch N to apply DBC message names and signal decoding only to that channel while leaving matching IDs on other channels raw
  • Every matched row in the table shows a Name column with the DBC message name
  • Selecting a matched row shows a Signals section in the detail panel with each signal's raw hex value, physical value (with unit), and value-table label for enum signals (e.g. Drive, Park)
  • Click ✕ next to the badge to unload the DBC and return to raw data

UDS diagnostics decoding (CDD import)

Click the ⊕ CDD button in the toolbar to import a Vector CANdela Studio (.cdd) diagnostic database (10 MB limit). Once loaded:

  • A badge shows the file name and the number of matched services
  • If the CDD's Request/Response CAN-ID pair is found, matching CAN traffic is reassembled per ISO 15765-2 (CAN-TP): Single Frame, First Frame + Consecutive Frame (with sequence-number validation), and Flow Control are shown as raw transport rows (SF / FF / CF / FC.CTS / FC.WT / FC.OVFLW), padding bytes shown in [brackets]
  • Every completed multi-frame or single-frame UDS message is also shown as its own reassembled row, colored by outcome: req (request), pos (positive response), neg (negative response, labelled with the resolved NRC name, e.g. requestOutOfRange)
  • New Name, Diag ID, Src, Dst, Conn, and Service columns (auto-shown when a CDD is active) surface the matched service name and connection grouping; Src/Dst are filled on every diagnostic frame — raw transport rows included — matching CANoe's Diag view
  • If the CDD has no Request/Response CAN-ID declared, the badge shows "inactive" and the raw CAN-TP traffic is still parsed but no service names are resolved
  • Click ✕ next to the badge to unload the CDD and return to raw CAN rows

Filter and search panels

The viewer has separate Filter and Search panels so you can either reduce the visible dataset or jump to a matching frame without changing what is displayed.

Filter panel

Use Filter when you want to hide messages that do not match your criteria. Filtering is applied on the extension host before paging, so it works across the full BLF file instead of only the currently rendered rows.

Filter by:

  • Arbitration ID — hex substring match, comma-separated list (e.g. 7E0,7E8), or id@channel syntax to pin a segment to a specific channel (e.g. 100@0 matches ID 100 on channel 0 only; 100@0,100@1 matches the same ID on both channels). Segments without @ respect the global channel dropdown.
  • Data bytes — contiguous payload byte sequence match, updated live as you type
  • Direction — RX, TX, or both
  • Type — Standard CAN, CAN FD, or Error frames; with a CDD loaded, also Diag (UDS+TP) (all diagnostic rows, like CANoe's Diag window), UDS (reassembled messages only), or TP frames (raw transport frames only)
  • Channel — individual channel or all

Both the ID filter and the Search ID field have a right-edge resize handle. Drag horizontally to widen them; the chosen width is remembered per field across reloads.

Data byte examples:

Input Meaning
3E 80 Matches frames whose payload contains bytes 3E 80
22 F1 90 Matches UDS ReadDataByIdentifier requests for DID F190
22F190 Same as 22 F1 90; spaces are optional
0x22 0xF1 0x90 Same as 22 F1 90; 0x prefixes are accepted

The data byte filter matches bytes in order and contiguously. For example, 22 F1 90 matches 03 22 F1 90 00, but it does not match 22 00 F1 90 or 90 F1 22.

Search panel

Use Search when you want to locate matching rows without changing the visible dataset. Search uses the current filtered and sorted table as its search space, then scrolls to and selects the matching row.

Search by:

  • Arbitration ID
  • Data bytes
  • Direction
  • Type
  • Channel

Navigation: click ▶ to jump to the next match, ◀ for the previous. A counter (e.g. 3 / 47) shows the current position within all matches. Reaching the last match wraps back to the first, and vice versa. The found row is highlighted with an amber left stripe so it stands out even when scrolled away from the selection. Press ✕ to clear all search fields and remove the highlight.

Search data bytes follow the same matching rules as the data byte filter. For example, entering 22 F1 90 in Search data bytes and pressing ▶ jumps to the first currently visible-table row whose payload contains that sequence. The row count and active filters do not change.

Use Filter when you want a smaller table. Use Search when you want navigation inside the current table.

Sortable columns

Click any column header to sort ascending; click again to reverse. Sorting is applied on the full filtered dataset on the extension host before paging, so the order is always correct across all pages.

The table includes both the original relative Time(s) column and a default-visible UTC column with ISO UTC timestamps.

Resizable and reorderable columns

Drag a column edge to resize it. Drag a column header to a new position to reorder. Use the ⊞ Columns button to show or hide individual columns.

Multi-select

  • Click — single select
  • Ctrl / Cmd + Click — toggle individual rows
  • Shift + Click — select a contiguous range

The selection count is shown in the toolbar.

Right-click context menu

Right-click any row for quick actions:

Action Description
Add to Filter Sets the ID filter to this message's arbitration ID
Show Details Opens the detail panel for this row
Colorize Highlights the row (or selection) in a chosen color
Group by… Groups rows visually by type, direction, channel, or ID
Select all with same ID Multi-selects every visible row sharing the same arbitration ID
Copy row Copies tab-separated values to the clipboard
Copy Arb ID Copies the hex arbitration ID
Copy data bytes Copies the hex byte string
Copy selection as CSV Exports all selected rows as CSV with a header row
Remove color Clears colorization from the row or selection

Detail panel

Select any row to see the full message breakdown: byte grid, hex/decimal/binary table for each byte, and all decoded flags (Extended ID, Remote Frame, BRS, ESI).

Supported frame types

  • CAN 2.0A — 11-bit standard frames
  • CAN 2.0B — 29-bit extended frames
  • CAN FD — with Bit Rate Switch (BRS) and Error State Indicator (ESI)
  • CAN FD Message 64 payloads — decoded with the CAN FD DLC-to-length mapping so 12/16/20/24/32/48/64-byte payloads display correctly
  • Error frames

Theme adaptive

Uses VS Code CSS variables throughout — works correctly with any light or dark color theme.


Requirements

  • VS Code 1.109.0 or later
  • No external dependencies or native modules — pure TypeScript

Usage

  1. Open a .blf file via File → Open File or by double-clicking in the Explorer panel
  2. The BLF Viewer opens automatically as a custom editor
  3. Use the Filter panel to narrow the table by ID, data bytes, direction, type, or channel
  4. Use the Search panel to navigate matching rows (◀ / ▶) without changing the current table
  5. Click any row to inspect its bytes in the detail panel on the right
  6. Click ⊟ Detail in the top bar to show or hide the detail panel
  7. Right-click any row for copy, colorize, filter, and grouping options

Common examples:

Goal Action
Show only tester present frames Enter 3E 80 in Filter → Data bytes
Show only DID F190 read requests Enter 22 F1 90 in Filter → Data bytes
Jump to the first DID F190 request Enter 22 F1 90 in Search → Data bytes, press ▶
Navigate all DID F190 requests Keep pressing ▶ — counter shows position (e.g. 2 / 9)
Show multiple response IDs Enter 7E8,7E9 in Filter → ID
Search only inside channel 1 traffic Set Filter → Ch to Ch 1, then use Search

You can also open a file explicitly from the Command Palette:

BLF: Open File

Extension Settings

This extension does not contribute any configurable settings.


Release Notes

1.4.1

Fixed shifted CAN_FD_MESSAGE payloads and missing frames in multi-container BLF recordings. Parser now matches Vector CAN FD field offsets, applies correct container padding, and carries split objects across container boundaries.

1.4.0

Channel-scoped DBC decoding: keep the default All Ch behavior or select Ch N to decode message names and signals only on one CAN channel, leaving same-ID traffic on other channels raw.

1.3.3

Documentation-only release: README release notes for 1.3.1 and 1.3.2.

1.3.2

Diagnostic type filters (Diag (UDS+TP) / UDS / TP frames) in the Filter and Search Type dropdowns, Src/Dst CAN-IDs on raw ISO-TP transport rows, and the Name column now auto-shown when an active CDD loads.

1.3.1

Fixed the CAN_ERROR_EXT parser reading the arbitration ID and data bytes at wrong struct offsets, so error-frame rows showed a garbage ID and shifted payload.

1.3.0

CDD (Vector CANdela Studio) diagnostic database import, stateful ISO 15765-2 (CAN-TP) transport reconstruction, and UDS diagnostics columns (Diag ID, Src, Dst, Conn, Service) with request/positive/negative response labelling and NRC name resolution.

1.2.0

CAN FD Message 64 payload parsing fix, UTC timestamp column, payload data byte filter, and a Search panel to jump to matching rows without changing the visible table.

1.1.0

id@channel filter syntax to restrict individual ID segments to a specific channel, a wider resizable ID filter field, test infrastructure with 11 unit tests for applyFilter, and lint cleanup for brace-style control-flow warnings.

1.0.0

DBC import and signal decoding, message name column, multi-ID filter (comma-separated), and a pure-TypeScript DBC parser with Intel/Motorola byte order, signed/unsigned signals, value tables, and comments.

0.2.0

Resizable and reorderable columns, column visibility toggle, real host-side sorting, multi-select, right-click context menu with colorize / group / copy actions, and fixes for sort key mismatch, empty-filter ghost rows, and leading-zero ID matching.

0.1.0

Initial release. Virtual scrolling viewer with filtering, stats dashboard, detail panel, and full CAN / CAN FD / error frame support.


About BLF

The Binary Logging Format (.blf) is a binary container format developed by Vector Informatik GmbH. It stores timestamped CAN, CAN FD, LIN, FlexRay, and other bus messages in compressed blocks (LOBJ containers). This extension implements the CAN and CAN FD portions of the format.


License

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft