CLI tool
uholeschak/ediabaslib avatar
uholeschak/ediabaslib

EdiabasLib: a .NET interpreter for BMW and VAG diagnostic jobs

.NET BMW and VAG Ediabas interpreter library

935 stars226 forksC#GPL-3.0

At a glance

What is it?
EdiabasLib is a C# library that reads and interprets the .GRP and .PRG job files used by the BMW and VAG EDIABAS toolset, so a diagnostic application can talk to a car without the original Windows-only stack. It ships a binary compatible api32.dll, a console test application, and a Mono for Android build behind the Deep OBD app.
Who is it for?
EdiabasLib fits developers building cross-platform diagnostics for BMW and VAG vehicles, especially Android work where the original EDIABAS stack does not run, and for anyone who wants to replace api32.dll in place rather than rewrite an application. It does not fit a general OBD toolchain, because it targets one vendor job format, and the author is explicit that these are expert tools with no detailed support.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A replacement for the EDIABAS toolset, not another OBD app

EdiabasLib is described as a .NET assembly that is a small and fast replacement for the BMW and VAG Ediabas toolset. The problem it solves is specific and technical: EDIABAS is a Windows toolchain for talking to BMW and VAG control units through job files, and the original stack is awkward to embed, hard to port, and awkward to call from a phone. This library provides the same job semantics as a managed .NET component. The README states that it runs on all platforms that support .NET, listing Windows, Windows CE and Mono, and that the code is speed optimized but improved for multiple calls of the same job, which means the first job call is slow and subsequent ones are faster. That caching behaviour is a deliberate design choice for diagnostic workflows, where a single session asks the same controller the same questions repeatedly. The audience is therefore not a hobbyist with a generic ELM327 cable but a developer who already knows the EDIABAS job model and wants to reimplement it on a platform the original never supported.

The library parses .GRP and .PRG files directly

The mechanism that makes the library useful is that it reads the diagnostic job files itself. The README states that it can directly read and interpret `.GRP` and `.PRG` files, with an internal interface similar to the EDIABAS API or the Tool32.exe GUI interface. Those files are the actual diagnostic programs for each controller and job, which is why a reimplementation that understands their format can talk to a car without shipping the original binaries. The public surface is therefore a scripting and execution layer over files rather than a database of hardcoded routines. On top of that, the project maintains its own job implementations for the BEST/1 command family, and the README notes that most BEST/1 commands are implemented while a few remain missing, which the author believes are not required by the current ECU files. The implemented commands are automatically tested and compared with EDIABAS output, so the correctness bar is set by differential comparison against the original implementation rather than by hand-written expectations.

Bus concepts decide whether your car is reachable

Support is defined at the level of the bus concept, and the README lists them plainly: D-CAN, BMW-FAST, KWP-2000, KWP-2000 BMW, DS2, DS1, Concept 3, ISO9141 (Concept 2) and Concept 1. The author adds that EDIABAS log files from other concepts could be added if supplied. The VAG variant works differently and has a hard prerequisite: it requires an adapter with the replacement firmware for ELM327, and in that mode the supported protocols are KWP2000, KWP1281 and TP2.0, covering cars up to 4.2012. That date is the boundary for the VAG path, and it is worth checking against your vehicle before anything else, because the protocol support and the era of the cars are tied together here. The concept list is also why the library is not a general OBD implementation: it speaks the vendor job language over specific bus concepts, and it does not attempt to cover every diagnostic protocol an ELM327 can speak.

Drop it in as api32.dll and existing tools keep working

The compatibility story is the reason many people would look at this project. A binary compatible `api32.dll` wrapper is included, and the README says it is possible to replace the existing EDIABAS `api32.dll` with the EdiabasLib `api32.dll` and have the applications still work. That has been tested with Tool32, INPA and Rheingold. There is a configuration wrinkle: since EdiabasNet ignores the `EDIABAS.INI` file, you have to supply your own `EdiabasLib.config` file in the `api32.dll` directory. A compatible `apiNET32.dll` is also available, which the README says should make porting existing .NET applications that use the original EDIABAS library straightforward. The runtime requirements are spelled out as well: the DLL needs the .NET Framework 4.8.1 Runtime or higher, or the .NET 10.0 Desktop Runtime, plus the 64 bit or 32 bit VS C++ Runtime. For a team with an existing Windows diagnostic toolchain, this is the difference between a rewrite and a file swap.

EdiabasTest is where you verify a job works

For testing, the repository includes a console application called EdiabasTest with command line parameters. The README does not reproduce those parameters in the overview, and points instead to a dedicated document, `docs/EdiabasTest_parameters.md`, so that file is the reference for how to invoke it. There is no install recipe in the README, which is consistent with the project's nature: the deliverable is a .NET assembly plus its native wrapper, so you get the source and the built binaries from the repository and drop them where your application expects the original EDIABAS components. The top-level layout shows the shape of the deliverable, with an `EdiabasLib/` directory for the library, `Tools/` for the console utilities, `BmwDeepObd/` for the Android application, `docs/` for the documentation set including `Documentation.md` and `AdapterTypes.md`, and `license.md` for the licence text. Two Git submodules are declared in `.gitmodules`, which matters if you clone with a shallow or partial checkout and find parts of the tree empty.

Deep OBD carries the library onto Android

The Android story is the part with the widest reach. The repository includes a library that works with Mono for Android, using either FTDI USB or Bluetooth Serial Port Protocol for communication, and the Deep OBD application is configurable through XML, with an integrated configuration generator to simplify producing that XML. The README describes the adapters the app supports, and the spread is informative: standard FTDI based USB INPA compatible D-CAN and K-Line adapters covering all protocols; ELM327 Bluetooth and WiFi adapters based on the PIC18F2480, limited to the D-CAN protocol, with versions 1.4b, 1.5 and origin 2.1 recommended; and ELM327 Bluetooth adapters based on the PIC18F25K80 running the replacement firmware, which cover D-CAN and K-Line including the VAG protocols KWP2000, KWP1281 and TP2.0. Custom Bluetooth D-CAN and K-Line adapters and ENET WiFi adapters for BMW F-series cars are documented as separate guides. The app is published on Google Play and Android Auto support is available in the release version.

Expert tooling, uneven support, and a GPL default

The limitations are stated by the author rather than hidden. These are expert tools, and the README says plainly that there is no time for detailed support, pointing readers to search for EDIABAS, Tool32, INPA, ISTA-D or ISTA-P, or to use forums. That is a real adoption cost for a team without an in-house diagnostics specialist. Support is also uneven: some BEST/1 commands are still missing, VAG work stops at cars built up to 4.2012 in that mode, and adapter support varies by protocol, so the hardware you own decides what you can test. The licence field on the repository says GPL-3.0, with `license.md` at the root, which matters for anyone planning to ship the library inside a commercial tool, and that question needs a qualified reviewer rather than an inference from the source. On maintenance the signals are healthy but unconventional: there are no version releases of the library itself, instead a run of tagged binary drops, `binaries_20260227`, `binaries_20260313` and `binaries_20260607`, and the last push was on 2026-10-20, so the tree is changing faster than the release names suggest.

Editorial conclusion

EdiabasLib fits developers building cross-platform diagnostics for BMW and VAG vehicles, especially Android work where the original EDIABAS stack does not run, and for anyone who wants to replace api32.dll in place rather than rewrite an application. It does not fit a general OBD toolchain, because it targets one vendor job format, and the author is explicit that these are expert tools with no detailed support. Before adopting it, confirm your vehicle and bus concept are in the supported list, check the .NET Framework 4.8.1 or .NET 10 runtime and VS C++ runtime prerequisites for the DLL, and read docs/EdiabasTest_parameters.md, since the repository ships binaries releases and the last push was on 2026-10-20.

Frequently asked questions

What is EdiabasLib and what does it replace?

EdiabasLib is a .NET assembly that acts as a small and fast replacement for the BMW and VAG Ediabas toolset. It reads .GRP and .PRG job files directly and exposes an interface similar to the EDIABAS API or the Tool32.exe GUI.

Can existing EDIABAS applications use EdiabasLib unchanged?

A binary compatible api32.dll wrapper is included, so replacing the existing EDIABAS api32.dll with the EdiabasLib one leaves applications working, and this has been tested with Tool32, INPA and Rheingold. Because EdiabasNet ignores EDIABAS.INI, you must provide your own EdiabasLib.config next to the DLL.

Which VAG vehicles and protocols does EdiabasLib cover?

The VAG variant requires an ELM327 adapter with the replacement firmware, and in that mode supports KWP2000, KWP1281 and TP2.0, covering cars up to 4.2012.

How do I test that a diagnostic job works with EdiabasLib?

The repository ships a console application, EdiabasTest, with command line parameters, and the README links to docs/EdiabasTest_parameters.md for them. The implemented commands are also automatically tested and compared against EDIABAS output.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. uholeschak/ediabaslib on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/uholeschak-ediabaslib.svg)](https://hysenlabs.com/projects/uholeschak-ediabaslib)

Was this useful?