Open Hardware Protocol

CONDUYT

Control any microcontroller from any language. One protocol, every transport.

01
Binary, not text

Fixed 8-byte header with CRC8. No string parsing on a 16MHz chip.

02
Self-describing

Device declares its capabilities on connect. Host never hardcodes pin maps.

03
Any transport

Serial, BLE, MQTT, WebSocket, TCP. Same packet format. Swap the wire, keep the code.

04
Module system

Servo, NeoPixel, DHT, OLED, Stepper. Firmware opts in. Host discovers automatically.

Five lines to blink an LED

Same protocol, any language. Pick your SDK.

import { ConduytDevice } from 'conduyt-js'
import { SerialTransport } from 'conduyt-js/transports/serial'

const device = await ConduytDevice.connect(
  new SerialTransport({ path: '/dev/ttyUSB0' })
)

await device.pin(13).mode('output')
await device.pin(13).write(1)

const value = await device.pin(0).read('analog')
console.log('sensor:', value)

8-byte binary header

Fixed overhead. CRC8 integrity. COBS framing for serial and BLE. Message-oriented transports (MQTT, WebSocket) skip framing entirely.

No JSON. No text parsing on the MCU. A complete PIN_WRITE command is 10 bytes.

MAGIC
43 44
VER
01
TYPE
11
SEQ
00
LEN
00 02
CRC
XX
PAYLOAD
0D 01
pin=13, value=1

How Conduyt compares

Firmata2006
MIDI encoding, serial-only
Conduyt: Binary packets, any transport
Johnny-Five2012
Node.js only, tied to Firmata
Conduyt: Five SDKs, native binary protocol
Blynk 2.02021
Cloud-dependent architecture
Conduyt: Self-hostable, no cloud required
CircuitPython2017
On-device runtime, not a control protocol
Conduyt: Structured host-device protocol

SDKs

One firmware library. Five host SDKs. Same wire format everywhere.