BeeEmUu v5.0.0 is here Read the release notes →
GPL-3.0 · Rust core · Tauri 2 · Python API

High-Performance BMW Diagnostics.
Powered by Rust & Tauri 2.

An open-source, ultra-fast desktop suite engineered for real-time ECU telemetry, OBD-II logging, and deep module diagnostics. Zero bloat, zero compromise.

Cross-Platform · Win / Mac / Linux Latency <8ms 100% Open Source
beemuu — live session · E90 335i · K+DCAN LINK OK
$ beemuu connect --iface k+dcan --baud 500k
✓ K-Line handshake OK (6.2 ms)
✓ ECU identified: MSD80 · DME 8F3A21
— streaming telemetry @ 42 Hz ———————————
$ beemuu dtc read --module all
29F1Fuel pump relay — shadow · cleared
30FFBoost dev. — intermittent · logged
▮ awaiting input_

// System Architecture

Three layers. One purpose: speed you can trust on a live vehicle.

BeeEmUu is engineered like the cars it diagnoses — every layer has a single, well-defined job, and timing-critical paths never touch a garbage collector or a browser event loop.

LAYER 01

Core — Rust

Hardware abstraction layer driving sub-millisecond OBD-II, K-Line and CAN-BUS communication. Async Tauri commands keep the FTDI latency timer at 1 ms and ISO-TP reassembly per ISO 15765-2 off the UI thread.

let frame = isotp::send(0x22F190).await?;
LAYER 02

Shell — Tauri 2

A lightweight native shell rendering HTML5 web views through the OS webview — roughly 50× lighter than Electron. Multi-window support, native menus, and a memory footprint under 60 MB.

bundle: 9.4 MB · ram: <60 MB
LAYER 03

API — Python

A stdlib-only, read-only API powering community diagnostic scripts, DTC seeds, vehicle profiles and parameter extensions — no runtime dependencies. The public catalog is served as static pages from this site.

GET /v1/dtc/29F1 → 200 OK

// Core Capabilities

Everything a modern BMW workshop needs. Nothing it doesn't.

Ultra-Low Latency Telemetry

Direct hardware polling with no Java or legacy runtime in the data path. Round-trips measured in single-digit milliseconds.

Fault Code Diagnostics

Read, interpret, and clear manufacturer-specific BMW shadow codes across every module — with plain-English descriptions.

Custom Python Scripting

Write your own diagnostic routines and live telemetry processors against a clean, documented Python API.

ECU Parameter Logging

Stream dozens of sensor channels simultaneously into lightweight JSON or CSV logs for post-drive analysis.

Modern Native Shell

Multi-window support, dark-mode interface, and under 60 MB of RAM. It feels like it belongs on your OS.

Transparent & Community-Driven

Fully open source — built with independent shops and BMW enthusiasts, auditable line by line.

// What No Other Tool Does

Every other scanner asks a module a question once. BeeEmUu keeps the answers.

A DME will tell you how many times cylinder 3 misfired. It will never tell you when — and the “when” is the diagnosis. These are the features built around that idea. Read-only, open source, and honest about their confidence.

Misfire Pattern Recognition

Correlates every misfire with the RPM, load, temperature and knock values that were true at that instant — then tells you whether the pattern points at ignition, injection, detonation or a vacuum leak. Under eight events it declines to guess.

v3.0 · read-only

Adaptation Drift Tracker

Long-term fuel trims and idle learnings start moving months before a code is ever set. This trends them across sessions and projects when a value will cross its limit. Two readings are reported as not enough, not as “stable”.

v3.0 · read-only

Tuning Fingerprint Detector

Detects a non-stock calibration from read-only evidence, comparing each engine region against a community-published stock baseline. It reports what deviated and by how many standard deviations — it never names a tuning platform, because that is a claim the data cannot support.

v3.0 · read-only

Flash History Auditor

A flash counter that moved between two of your own snapshots is proof. This reconstructs each module’s programming history from the snapshots you already saved — the most valuable diagnostic data on a used car, and the one nobody shows you.

v3.0 · no live session

Symptom Index

Owners describe symptoms, not codes. Type “it stumbles when it’s cold” and get the shortlist of codes and components that actually cause it, plus what to check first. It shortlists; it does not diagnose.

v3.0 · offline

Cold Start Auto-Logger

The intermittent cold-start fault happens on the drive to work, and by the time the car is on a lift it never happens again. Arm it before you leave; the capture window opens itself and the log is there in the morning.

v3.0 · automatic

Signal Library

Every decodable signal across every supported engine, in one searchable index — with an honest grade for each. Standard OBD-II PIDs are verified by design; anything on an unpublished local identifier is labelled unverified, because trusting it blindly means chasing a fault that isn’t there.

v3.0 · 40+ signals

Vehicle Passport

One portable file per car: profile, DID map, fault data, wiring, service and adaptation history. The VIN is never included, and there is no option to include it — only a salted fingerprint so you can recognise your own car.

v3.0 · privacy-first

Parameter Hunt

No open-source KWP2000 identifier table exists for any E-series DME; every table in existence was built by somebody in a parking lot watching which bytes move. This turns that work into a community sport — and nothing scores unless you say which car it was on.

v3.0 · community

Nothing here writes to your ECU.

Every feature above is read-only analysis. Coding, flashing and calibration writes are not built and are not planned for this release — they are safety-critical and legally sensitive, and a tool that quietly ships them is a tool you cannot trust with the rest.

// Try It In Your Browser

Live gauges, simulated CAN frames.

—
—
—
—
—
—

Demo runs in your browser via frontend/live_gauges.js. Source of truth for the byte patterns is the Rust simulator in src-tauri/src/transport/sim.rs::broadcast_frames_at; the public-site mirror and the desktop-app mirror are pinned to byte-for-byte parity by frontend/live_gauges.test.js. Real-car scales need E46 verification — see docs/validation/can-broadcast.md.

// Screenshots

See it in action.

Real screenshots of BeeEmUu running against the built-in E90 simulator.

BeeEmUu vehicle test showing the DME fault memory with codes 2A82 and 30FF
Vehicle test — fault memory for the DME control unit
BeeEmUu live data view with real-time gauges and peak tracking
Live data — real-time gauges and peak tracking
BeeEmUu logging tab with trigger and math channel configuration
Logging — session triggers and math channels
BeeEmUu diagnostics tab with connection self-test and community data
Diagnostics — self-test, community data, and traffic log
BeeEmUu vehicle info showing VIN, mileage, and suggested profile
Vehicle info — VIN, mileage, and suggested profile
BeeEmUu community plugins catalog with discover and import sections
Plugins — community catalog and import

// Community

What the community says.

★★★★★
"Finally a free alternative to ISTA that actually reads my E90's fault memory without a subscription. The live gauges alone are worth it."
— E90 owner, verified user
★★★★★
"The walkthrough JSON export is a game-changer. I hand a diagnostic session to my indie mechanic and they know exactly what to check."
— N54 owner, verified user
★★★★☆
"Open source, no account, no telemetry. It's the tool I reach for before paying for a dealer scan."
— F30 owner, verified user

Reviews are community-submitted. BeeEmUu is free and open source — share your experience.

// Live Telemetry

Watch the car think — in real time.

Stream high-rate sensor channels into live graphs, decode DTCs the moment they fire, and run flash-protection checks before a single byte is written.

  • Live graphing — multi-channel rendering at 60 fps with per-channel scaling and pause/rewind.
  • Instant DTC decode — community-seeded definitions resolve codes to causes and fixes on read.
  • Flash-protection checks — battery voltage, keep-alive cadence and session state verified before any write path unlocks.
telemetry · boost + rpm · 42 Hz REC
BOOST 1.24 bar RPM 5 842
42 Hz
Sample rate
6.1 ms
K-Line RTT
0
Dropped frames

// Quick Start

From clone to connected in minutes.

# Debian / Ubuntu — Tauri system deps
$ sudo apt-get install -y libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev librsvg2-dev libudev-dev
$ git clone https://github.com/ohgeeceee/beemuu.git && cd beemuu
$ cargo tauri dev
# Windows 10/11 — grab the signed installer
> winget install beemuu
# K+DCAN: install FTDI VCP drivers, set Latency Timer → 1 ms
$ brew install --cask beemuu
# or download the universal .dmg from Releases
# Rust 1.78+ required
$ git clone https://github.com/ohgeeceee/beemuu.git && cd beemuu
$ cd src-tauri && cargo test
$ cargo tauri build

E-series via K+DCAN (FTDI) · F/G/I-series via ENET — DoIP auto-discovery on UDP 13400

// Project Pulse

Live from the repo

APILoading
RepoLoading
ProfilesLoading
BundlesLoading
  • Loading bundles…

Latest release

VersionLoading… Released— Downloads MSI · NSIS

Recent commits

  1. Loading…

Pull requests

Loading…

Ready to upgrade your
diagnostic workflow?

Free forever. Open source forever. Built for the people who actually turn the wrenches.