"Matter for aftermarket car parts." An open SDK that lets aftermarket car electronics — head units, digital dashes, dashcams, sensors — discover each other and exchange typed data, plug-and-play.
Status: v0.0.1, early prototype. The protocol is UDP multicast + JSON on a LAN, the reference implementation is Python (stdlib only), and everything except the mission is expected to change.
Keep good cars on the road. People replace vehicles that could run another 100k+ miles just because the car lacks modern electronics. CarConnect lets any older vehicle be retrofitted with modern, connected, upgradeable parts that interoperate out of the box — an open software layer for the aftermarket, ahead of the software-defined-vehicle era.
Today every aftermarket part is a silo: a dash can't ask the head unit for navigation state; a dashcam only talks to its own phone app. CarConnect defines the missing middle:
- Discovery + self-description — devices announce manifests (what they publish/subscribe), no pairing rituals.
- A typed signal tree — VSS-aligned dot-path signals
(
Navigation.Maneuver.DistanceToTurn,Camera.Front.Event.Impact,Vehicle.Speed,Sensor.Tire.FrontLeft.Pressure) with datatypes, units, and quality metadata, extended by an aftermarket overlay. - Read-only safety posture — the vehicle bridge is read-only by construction; nothing in the SDK can write to OEM buses.
Flagship use cases: turn-by-turn nav on the aftermarket digital dash, and dashcam integrated into the head unit (status, impact events, and — in v1 — video stream signaling).
Requires Python 3.9+ (standard library only — no pip installs).
Open three terminals and start the simulated devices in any order:
# terminal 1 — head unit: publishes Navigation.*, shows dashcam events
python3 examples/head_unit.py
# terminal 2 — digital dash: subscribes Navigation.Maneuver.*, ASCII nav dial
python3 examples/dash.py
# terminal 3 — dashcam: publishes Camera.Front.*, fires impact events
python3 examples/dashcam.pyOr all-in-one (backgrounds the three devices, tails their logs, Ctrl-C stops everything):
examples/run_demo.shDevices discover each other within ~2 seconds. Real captured output:
dash (nav dial counting down, live):
[dash] on the bus, waiting for Navigation.* ...
[dash] discovered peer: HeadUnit (head-unit, CarConnect Examples)
[dash] discovered peer: DashCam (dashcam, CarConnect Examples)
+----------------------------------+
| ^ 288 m Main Street |
| ETA 1:20 limit 50 km/h |
+----------------------------------+
+----------------------------------+
| ^ 276 m Main Street |
| ETA 1:19 limit 50 km/h |
+----------------------------------+
head unit (dashcam status + impact event arriving):
[head-unit] discovered peer: DashCam (dashcam, CarConnect Examples)
[head-unit] camera state: Camera.Front.Recording = True (from DashCam)
[head-unit] camera state: Camera.Storage.UsedMB = 5120.0 MB (from DashCam)
[head-unit] camera EVENT: Camera.Front.Event.Impact = high (from DashCam)
dashcam:
[dashcam] discovered peer: DigitalDash (dash, CarConnect Examples)
[dashcam] G-sensor fired: impact (high), clip #43 protected
from carconnect import Device, Schema
schema = Schema.load_dir("schema")
manifest = {
"name": "MyGauge", "type": "gauge",
"vendor": "Acme", "firmware": "1.0",
"publishes": [], "subscribes": ["Navigation.#"],
}
with Device(manifest, schema) as dev:
dev.on_peer_discovered(lambda m: print("peer:", m["name"]))
dev.subscribe("Navigation.Maneuver.*",
lambda sig: print(sig["path"], "=", sig["value"]))
dev.publish("Navigation.Maneuver.Direction", "left") # validated
... # run your loop- Unknown signal paths publish with a warning (forward compatibility); wrong datatypes/enums are refused with an error.
- Subscriptions support wildcards:
*(one segment),#(subtree).
spec/ the specification (00 overview → 05 security)
schema/ signal tree definitions (flat YAML subset, no pyyaml needed)
sdk/python/ reference implementation: signals, device, transport
examples/ three simulated devices + run_demo.sh
conformance/ stub for the future automated conformance harness
- v0.0.1 (this) — UDP multicast + JSON prototype, Python SDK, demo.
- v0.x — video stream descriptors, commissioning flow, conformance harness v1, ESP32/RPi reference hardware (demo kit).
- v1 — IP profile on Ethernet/Wi-Fi, device identity + signed messages, USB Type-C physical link spec, CAN-FD profile for MCU parts.
AGPL-3.0-or-later — OSI-approved open source, with share-alike.
This is fully open source, same family as Matter's Apache license (both are OSI-approved): you can use it, study it, share it, and change it. No fee, no account, public repo.
The difference from Matter's Apache-2.0 is the protect: if you ship a modified version (in a product, a device, or as a network service), you must publish that source under AGPL and we ask you to send the improvements back here as a pull request. You cannot take this private.
See CONTRIBUTING.md.