BMWebDocs
BMWeb / Documentation

BMWeb documentation

BMWeb is a free BMW diagnostic tool that runs in the browser. It reads fault memory, live values and coding from BMWs of the INPA era, E31 to early F series, through a K+DCAN cable, drives components for testing, flashes and tunes the MS45 engine computer and the GS20 gearbox, and carries BMW's fault codes, wiring diagrams, repair manual and parts catalogue for use without a car. This page covers connecting, what each part does, and what it will and will not write to a car.

Runs in
Chrome or Edge
Cable
K+DCAN USB
Diagnostics
26 chassis
Fault codes
51,484
Price
Free, open source

Getting connected

Before you plug anything in

Put the ignition in position 2 with the engine off, and make sure the battery is healthy. Most "the ECU rejected the request" errors are really a car that is not in the right state, or a battery sagging under load.

The app talks to the cable through Web Serial, which only Chrome and Edge on a computer have. Safari and Firefox do not, so on a Mac use Chrome or Edge.

  1. Plug the cable in directly, into the car's diagnostic port and into the computer. Avoid USB hubs.
  2. Click the cable chip in the top bar. The browser only opens its port picker after a click, so the first connect is always yours.
  3. Choose your port. On macOS it starts with cu.usbserial, cu.usbmodem, cu.SLAB or cu.wchusbserial; on Linux, ttyUSB or ttyACM. The browser remembers it, and the app reopens the cable on every load after that.
  4. Pick the car, then a module. Each chassis lists its modules by system. Opening one brings up the module's own menu, with the F-keys along the bottom.

Settings

Settings switches between the classic text layout and a modern one with the same keys and screens, picks one of six skins, shows English or BMW's original job names, and decides whether activations ask first.

The cable

One kind is supported: the standard K+DCAN USB cable. An ELM327 is not it. The app sets the line up for each module by itself:

ModulesLine
DS2 and KWP20009600 8E1
BMW-FAST and D-CAN115200 8N1
Older modules that sleep until addressedThe 5-baud wake-up first

FTDI latency

If your cable has an FTDI chip, set its latency timer to 1 ms. The app cannot change it; it tells you when the symptoms look like a slow timer. On macOS the driver's default can be high enough that the cable misses its own echo, which shows as IFH-0003.

Where it works

WhereWhat works
Chrome or Edge on Windows, macOS, Linux or ChromeOSEverything, with the cable
Safari, Firefox, phones and tabletsEverything that needs no car: fault lookup, wiring, parts, tuning files. A phone cannot reach a USB cable from the browser.

On the car

Every module screen is BMW's own INPA screen, decompiled and drawn as the dealer tool drew it. A module BMW never drew a screen for says so instead of guessing.

FeatureWhat it does
Fault memoryStored faults in the module's own wording with their status flags, the conditions recorded when each was set, and clearing.
Live valuesSwitch positions, sensor readings and measurement blocks, refreshed while the screen is open, with the module's own scales and limits.
ActivationsDrive injectors, fans, pumps and valves from the keyboard. Each one names the exact job before it is sent.
CodingRead a module's coding, change functions by name and write them back through the car's own coding scripts. See Coding below.
Vehicle identityThe build record as each module stores it, side by side: VIN, odometer, order date, paint, trim and the option codes in words. Copies that disagree stand out.
Whole-car fault reportEvery module's fault memory in one pass, as a clean sheet to print or save as PDF.
ISTA viewThe workshop tool's tabs over the app's own reads: the control unit tree, per-module functions, fault detail, BMW's fault patterns, the repair manual and a search of the service data.
GarageSave a car once and every scan of it is kept with it, with notes. Two reads side by side show what is new, what was cleared and what is still there.
Remote sessionsShare your cabled car with someone who can help, read-only or read and write. You get a short code, admit them, and approve every write before it goes to the car.
Guided tourA short walk through the interface and how it all works, from the Apps hub.

Without a car

The reference material from the dealer software, in the Apps hub. None of it needs a cable.

AppWhat it does
Fault codes and diagnostic plansSearch 51,484 fault codes by code or words across every chassis and module, with BMW's service data and test procedures where they exist.
Job searchEvery screen and key in every module script, searchable by what it does, in English or German. Screens that write are marked.
Wiring and documentsBMW's wiring diagrams as vectors, component locations, pin assignments, technical data and repair steps. Scroll to zoom, drag to pan.
Parts cataloguePart numbers, exploded diagrams with a magnifier, supersessions and a VIN decoder. Pick your exact build to see only its parts.
Tool32Run any job of any module definition by name, with an argument, and read the raw results. Jobs that write are marked.
Script runnerRun your own INPA script: a compiled .IPO, or .IPS / .SRC source compiled in the browser. It goes through the same write checks as the shipped scripts.

Flashing, tuning and logging

One app in the hub for the Siemens MS45 engine computer and the GS20 automatic gearbox. It is a beta and says so before it opens.

Flashing

ModuleReadsWrites
MS45 DMEThe tune, the full module, the installed mapsA tune or a whole program. A program can be built with EWS delete, and with a map switch that carries two tunes.
GS20 gearboxThe calibration; the full 512 KB module once its read patch is installedThe calibration, with remove auto upshift as an option, or a program

Checksums are corrected for you, and every write is logged in the module's own programming history, as the dealer tool does.

Tuning

Open a firmware image with an XDF definition and edit named constants and tables in real units, with the raw hex beside them. Tables can be set, scaled, interpolated and smoothed, and shown as a 2D graph or a 3D surface. Comfort mode lists the common MS45 values under plain names. Saving writes a file on your computer, never the car.

Live tuning

On an MS45 running the live-tune program, LIVE ON puts every edit onto the running engine as you make it, and a live cursor marks the cells the engine is reading. Beside the editor you can open the fault memory, the learned adaptations (each clearable on its own), a rev gauge and live values. Tick Save to ECU and the DME keeps the tune at key-off.

Logging

Comfort lists the readings that matter under plain names; Expert offers every read-only job of every module. Each reading gets a chart while you drive, and runs are kept in History and export as CSV. A replay scrubs through a run, and Map mode paints the path the engine took across a table from your tune. A DME reset during a run is kept as a black box.

Supported cars

PartCovers
Diagnostics26 chassis: E31, E34, E36, E38, E39, E46, E52, E53, E60, E65, E70, E83, E85, E87, E89, E90, F01, F07, F10, F25, F30, K25, K40, R50, R56 and RR1
Wiring diagrams15 chassis: E38, E39, E46, E52, E53, E60, E63, E65, E70, E83, E85, E87, E89, E90 and F01
Parts catalogue246 chassis, from the E3, E9, E12 and E21 through the current G series, plus the i models, the K series motorcycles and Rolls-Royce
Flashing and tuningThe Siemens MS45 DME and the GS20 automatic gearbox

How much each chassis covers depends on how many modules it has: an E65 carries 96 module definitions, an E60 91, an E90 61, an E46 55, an F30 19. A parts lookup needs no car, so it reaches far beyond the diagnostics.

Writing and safety

Reading is open. Anything that changes the car asks first, and a refused write sends nothing at all.

Every job is checked before it runs

A job the app does not recognise is treated as a write, not as safe, and a blocked write is stopped before a single byte reaches the car. A permanent write (an EEPROM change, a service reset) always asks, whatever the setting. In a remote session, the car's owner approves each write.

Activations

Activations ask first by default and say which kind they are: a test that holds until you change it back or leave the screen, or a permanent write that stays. Leaving an activation screen releases anything still held.

Coding

A coding write is an EEPROM write, and on a module that controls the immobiliser or the airbags a mistake can stop the car starting. So every coding write:

  1. lists every change and waits for you to choose Write to car;
  2. is refused unless the app has proved which variant and coding index the module is;
  3. saves the module's current coding before anything is sent;
  4. re-reads the module afterwards and reports any byte that did not land.

Your changes are laid over what was just read from the module, never over a blank image. Modules that are coded in numbered blocks rather than by address are refused for now.

Flashing

Take a full read first

Flashing erases and rewrites the program and calibration in the module. Before you write anything, take a full read and keep the files somewhere safe: it is the only guaranteed way back. Keep a battery charger on, the ignition on and the engine off, and do not unplug or close the page until it reports success.

Flash only files meant for exactly this module and program version. Options such as EWS delete change what the car protects against; know what they do before you tick them.

Working offline

The app installs to the home screen or the dock and keeps working without a connection. Everything it reads is a static file, so once it is cached there is no server to be unreachable.

For a copy that never touches the network, every release has self-contained builds: unzip one and open index.html.

BuildSizeHas
offlineabout 1 GBDiagnostics, coding, the fault lookup with its service data, the ISTA view, tuning definitions and the wiring diagrams
offline-no-wiringabout 850 MBThe same without the diagrams
offline-completeabout 9 GBAdds the parts catalogue and the repair manual for every chassis. Too large for a GitHub release, so it is on Hugging Face, linked from each release's notes.

Troubleshooting

The errors people actually hit, and what each one means.

MessageCodeWhat it means
No cable connectedPlug the cable directly into the computer rather than through a USB hub, and check the car end is fully seated.
Security access deniedEngine off, ignition in position 2, healthy battery. The security seed is random, so a retry sometimes works where the first attempt did not.
The ECU rejected the requestconditions_not_correctThe module refuses because the car is not in the state the job needs. Ignition position 2, engine off.
The cable is not hearing itselfIFH-0003The K line is half duplex, so the cable should hear an echo of what it sends. Either a connection is loose or the FTDI latency timer is too high. Reseat both ends, then check the latency is 1 ms.
No response from the ECUIFH-0009, IFH-0018Nothing answered. Usually the module is not fitted to this car, is not powered in this ignition position, or is on a bus this cable does not reach.
Damaged answerIFH-0019Something replied, but the reply did not survive the wire. Nearly always electrical: a marginal cable, a bad ground or a low battery.
App error, not the carNothing needs checking on the vehicle. The fault is in the software.

Limitations

  • Flashing covers two modules: the MS45 DME and the GS20 gearbox. Other modules can be read and coded, not flashed.
  • Coding refuses block-coded modules, such as the E46 body module (GM5) and light module (LSZ), until the way the factory tool addresses their blocks is confirmed.
  • A phone cannot use the cable. Everything that needs no car still works there.
  • If the wrong coding keyword table is matched, it returns plausible but wrong keywords instead of failing loudly. Treat unexpected coding readouts with suspicion.
Something wrong or missing? Open an issue. How the units work: the wiki →