finds.dev← search

// the find

driftregion/iso14229

★ 343 · C · MIT · updated Feb 2026

ISO 14229 (UDS) server and client for embedded systems

A C implementation of the UDS (ISO 14229) diagnostic protocol used in automotive ECUs — the thing you use to flash firmware, read DTCs, and run diagnostic routines over CAN. Covers both server and client sides, works on bare-metal micros (ARM, PPC, S32K144) as well as Linux and Windows. If you're building bootloader or diagnostic tooling for a vehicle ECU without buying a commercial stack, this is probably the most mature open-source option in C.

Static memory allocation only — no malloc anywhere, which matters on the microcontrollers this targets. Pluggable transport layer means you can swap isotp-c for the Linux kernel ISO-TP socket driver without touching your application code. The fuzz corpus is substantial and the project has been cited in an SAE paper on fuzz-testing UDS implementations — someone actually put it under adversarial load. Amalgamated single-.c/.h distribution makes integration into existing embedded build systems (Bazel, CMake, Make, Arduino) genuinely painless.

API is explicitly unstable (major version zero) and has broken backward compatibility in nearly every minor release — adopting this in a product means you own the upgrade cost on every bump. Client-side coverage is thinner than server-side; the event-based refactor in 0.8.0 is the right direction but the docs for it are sparse. No hardware-in-the-loop CI — tests run in QEMU and on Linux sockets, so subtleties around real CAN bus timing and ECU behavior may not surface until you're on the bench. Security access (0x27) is implemented but the seed/key algorithm is left entirely to the user, with no guidance on common pitfalls like weak key derivation.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →