| Crates.io | dbc-rs |
| lib.rs | dbc-rs |
| version | 0.4.1 |
| created_at | 2025-11-25 06:03:35.122022+00 |
| updated_at | 2025-12-29 23:53:05.69798+00 |
| description | Database CAN (DBC) parsing and editing library |
| homepage | https://github.com/reneherrero/dbc-rs |
| repository | https://github.com/reneherrero/dbc-rs |
| max_upload_size | |
| id | 1949235 |
| size | 860,543 |
A lightweight Rust library for seamlessly parsing and editing DBC (CAN Database) files, with robust support for encoding and decoding messages and signals.
alloc) or stack (heapless) allocationforbid(unsafe_code) enforced[dependencies]
dbc-rs = "0.4"
use dbc_rs::Dbc;
// Parse DBC content
let dbc = Dbc::parse(dbc_content)?;
// Decode a CAN frame (ID 0x100, 8 bytes, standard 11-bit ID)
let signals = dbc.decode(0x100, &frame_data, false)?;
for signal in signals {
println!("{}: {:.2} {}", signal.name, signal.value, signal.unit);
}
use dbc_rs::Dbc;
let dbc = Dbc::parse(dbc_content)?;
// Encode signal values into a CAN frame payload (standard 11-bit ID)
let payload = dbc.encode(0x100, &[
("RPM", 2500.0),
("Temperature", 85.0),
], false)?;
no_std)[dependencies]
dbc-rs = { version = "0.4", default-features = false, features = ["heapless"] }
See examples/ for complete working examples:
decode.rs - Signal decoding basicsdecode_frame.rs - Using embedded-can Frame traitencode.rs - Encoding signals to CAN payloadscreate_dbc.rs - Building DBC files programmaticallyparse_std.rs / parse_no_std.rs - Parsing in different environments| Feature | Description | Default |
|---|---|---|
std |
Standard library with builders | Yes |
alloc |
Heap allocation | Via std |
heapless |
Stack-only for no_std |
No |
embedded-can |
embedded-can crate integration |
No |
attributes |
BA_DEF_, BA_DEF_DEF_, BA_ support | Yes |
MIT OR Apache-2.0. See LICENSING.md.