Build on the bus.
The same primitives that power Nexus and Prometheus, documented and open for you to build on.
Four lines to a live vehicle.
Connect, subscribe to typed signals, and send mapped commands. The SDK handles BLE, framing and decoding so you work with meaning, not raw bytes.
import { connect } from '@canopener/sdk'
// Pair with the adapter over BLE
const vehicle = await connect()
// Subscribe to live, typed signals
vehicle.on('speed', (kmh) => render(kmh))
vehicle.on('fuel', (pct) => render(pct))
// Send a mapped command
await vehicle.command('doors.unlock')How we build.
Open by default
The decoders, message maps and SDK live in the open. Your car should not be a black box.
Typed signals
Every supported PID and CAN frame is described as a typed signal you can subscribe to.
Local-first
Data flows phone-to-adapter over BLE. No cloud round-trip required to read your own vehicle.
Write once. Run across supported vehicles.
A widget, script, or automation built for one supported vehicle should run on other supported vehicles too. We are building this on top of standardized data models, informed by the Vehicle Information Service Specification (VISS). We will publish the full specification as we get closer to launch, with the Lua-based HAL shipping in a phased rollout starting late 2026.
Build your own, or install one from the community.
Every CAN Opener ships unlocked, so you can write and run your own software on the device. Diagnostics, security tools, custom dashboards, and entirely new features are just a widget away — build your own, or install ones other developers have already shared.