The brand-neutral catalog
Every signal name the host's v2 bridge exposes — read by name, write by actionId. Filter, search, and copy into a `client.car.read(...)` call.
The catalog is the brand-neutral name set the host's v2 bridge
exposes to every mini-app. Each entry is a single car-data
signal — a door state, an AC fan level, a tyre pressure — keyed by
a stable name like ac_cabin_temp or door_lf. The catalog below
is the literal payload client.car.list() returns at runtime, plus
the same name set you pass to client.car.read([...]) and
client.car.subscribe({names}). One source of truth.
This page is generated from
byd_catalog.dart —
the single source of truth in car-i99dash. Each entry pairs a
brand-neutral name with its underlying BYD framework name (host-
side only) and the UI metadata you see in the table below.
Two regen paths land the data into this site, both producing the
identical public/data/catalog.json:
dart run tool/dump_catalog.dartfromcar-i99dash— calls the sameBydPublicCatalog.build()the host runs at boot, so the JSON matchesclient.car.list()byte-for-byte.node scripts/import-byd-catalog.mjsfrom this repo — Dart-free fallback that parsesbyd_catalog.dartwith a tolerant regex. CI uses this; nothing to install beyond Node.
Other brands (Tesla, NIO, Geely) will live alongside BYD here once their host adapters ship; the controller surface is brand-agnostic already.
The framework integer feature ids (BYD's BYDAutoFeatureIds
constants) are deliberately not carried across the bridge and
not surfaced here. They drift across DiLink ROM revisions and
between brands. The catalog name is the stable contract; the host
adapts each name to the right framework key per car at boot.
Use it
import { MiniAppClient } from 'i99dash';
const client = MiniAppClient.fromWindow();
// One-shot snapshot — up to 64 names per call.
const { values } = await client.car.read(['ac_power', 'ac_cabin_temp']);
// Push stream — host fans out on actual change, not on every poll.
const off = await client.car.subscribe({
names: ['speed_kmh', 'door_lf', 'door_rf'],
onEvent: (e) => console.log(e.name, '=', e.value, 'at', e.at),
});To write, use the writeActionId shown in the table —
client.car.command(actionId, args?) routes through the host's
CarCommandRouter (rate limit, stationary-speed gate, integrity
chain). The same row tells you whether the host has wired a write
action at all.
The catalog now ships with 1,036 entries across 14 categories. New names land when the host adapter onboards a new signal; existing names never drop. If you depend on a name not in the list, file an issue and the next docs build will include it.
Categories
| Category | What it covers | Use it for |
|---|---|---|
climate | AC, defrost, fan modes, recirc, vents, scheduled pre-heat / pre-cool, cabin air quality | Climate-control mini-apps, comfort presets, scheduler integrations |
adas | LDW / AEB / ACC / LKA / BSD / 360 cam / FCW / front + rear cross-traffic | Driver-assistance dashboards, ADAS settings panels, ride-quality apps |
propulsion | Battery SoC, EV / fuel range, motor RPM + torque, engine speed, energy state, regen, gearbox | Range estimators, efficiency coaches, gauge clusters, the Battery Analyzer sample |
doors | All 4 doors / windows / locks / child locks, sunroof + position, hood, trunk, fuel cap, mirrors | Lock state mini-apps, walk-away auto-lock, 3D car-model viewers |
safety | TPMS pressure + temperature, seat belts, wipers + washer, radar obstacle distances, airbag, hazard | Pre-drive checks, walk-around inspection, parking aids |
lights | Headlights, fog, DRL, turn signals, ambient zones, foot / dome / reading lights, hazard, reverse | Theatre / welcome modes, light-show experiences, 3D viewers |
charging | Charger state, AC + DC port detection, target SoC, ETA, fault codes, scheduled appointments | Charge schedulers, energy dashboards, the Battery Analyzer sample |
media | Volume, source, BT state, EQ, surround, 3D-audio cue | Audio dashboards, music apps, voice integrations |
statistics | Lifetime + trip + instant energy / fuel / mileage, cell V/T spread, BMS health | Trip summaries, eco-driving coaches, fleet telematics |
system | OTA state, 12V health, screen brightness, time, HUD, GB cellular | Health-check mini-apps, OTA banners, diagnostic widgets |
cabin | Massage, ambient lighting, fragrance, seat memory positions, rear refrigerator | Comfort presets, "movie mode", driver-profile recall |
dynamics | Speed, accelerator / brake position, cruise, AVH, steering angle, yaw, slope | Performance widgets, dyno-style gauges, telemetry recorders |
sensors | PM2.5 (in + out), CO₂, AQS, humidity, light, slope, rain detection | Air-quality widgets, weather-aware automation |
settings | Units, language, screen brightness, sound | Profile import / export, theming, accessibility apps |
Browse
Use the table below to search, filter by category, or restrict to
the 3D-friendly subset (signals useful as animation drivers for a
3D car-model viewer). Click a name to copy it into a
client.car.read([…]) call.
BYD API
How i99dash reaches the BYD automotive framework — the ~21k feature catalog, the live subset that's actually bound on your car, and the push-driven SDK surface that exposes both.
3D mini-apps
How to build a real-time 3D mini-app of the active car — load the GLB via `client.car.asset`, animate it with the catalog signals, and switch paint/wheels/glass variants.