Firmata sysex feature registry

September 24, 2025 ยท View on GitHub

The feature registry defines allocated and proposed Firmata feature IDs. The feature ID is the 2nd byte in the sysex message. An extended set of IDs is also available by setting the initial ID byte to 00H and then following with a 2 byte ID. All bytes between START_SYSEX and END_SYSEX must have the most significant bit set to 0.

byte 0byte 1bytes 2 - N-1byte N
START_SYSEXID (01H-7DH)PAYLOADEND_SYSEX
START_SYSEXID (00H)EXTENDED_ID (00H 00H - 7FH 7FH) + PAYLOADEND_SYSEX

Proposing a new feature

There are two different feature sets: Core features and optional features. See the descriptions for each type of feature set below. To propose a new core feature, open an issue to start a discussion. To propose a new optional feature, open an issue/and or a pull request adding a markdown file for the proposed feature. Also edit the optional feature set table to reserve an ID for the proposed feature and enter the status as "proposed". If the proposed feature exposes a very specific device or device driver (a NeoPixel light strip for example), assign an ID in the extended ID set (00H nnH nnH).

Core feature set

Core features are related to functionality such as digital and analog I/O, querying information about the state and capabilities of the microcontroller board and the firmware running on the board. The core features are documented in the protocol.md file and the full set of core features is versioned together using semver notation. The current protocol version is 2.5.1.

Firmata firmware should report the current protocol version (using the protocol version command: 0xF9) and implement the full set of current core features defined for that version (with the exception of very limited hardware which can implement a subset of the core feature set).

The range 01H - 0FH is reserved for user-defined features that are not added to this registry.

Feature IDFeature name / link to documentationStatus
00HEXTENDED_IDproposed
01H - 0FHReserved for user featuresn/a
63HREPORT_DIGTIAL_PIN - proposalproposed
64HEXTENDED_REPORT_ANALOGcurrent
65HREPORT_FEATURES - proposalproposed
66HSYSTEM_VARIABLEScurrent
69HANALOG_MAPPING_QUERYcurrent
6AHANALOG_MAPPING_RESPONSEcurrent
6BHCAPABILITY_QUERYcurrent
6CHCAPABILITY_RESPONSEcurrent
6DHPIN_STATE_QUERYcurrent
6EHPIN_STATE_RESPONSEcurrent
6FHEXTENDED_ANALOGcurrent
71HSTRING_DATAcurrent
79HREPORT_FIRMWAREcurrent
7AHSAMPLING_INTERVALcurrent
7CHANALOG_CONFIG - proposalproposed
7EHSYSEX_NON_REALTIME*n/a
7FHSYSEX_REALTIME*n/a

*7EH and 7FH are reserved because they have a special meaning to midi parsers.

Optional feature set

Optional features extend the hardware capabilities beyond basic digital I/O and analog I/O (eg: I2C, Serial/UART, etc). Optional features also provide APIs to interface with general components (eg: servo, stepper, rotary encoder, etc) as well as specific components (eg: DHT11, NeoPixel, etc). The optional feature set also encompass functionality such as a general purpose scheduler API and a standardized device interface API. General features should use the single byte feature ID (allocating new IDs in descending order). However, any feature that wraps a specific driver, specific sensor, one-off custom component, etc should use the extended feature ID (00H nnH nnH) or should use the DEVICE_QUERY/RESPONSE API.

Each feature should be documented in a markdown file and versioned independently using semver notation. In the case where a feature spans multiple IDs (I2C for example), that entire set is documented in a single file and versioned together.

Feature IDFeature nameLink to documentationStatus
5CHRCOUTPUT_DATArcswitch-proposal.mdproposed
5DHRCINPUT_DATArcswitch-proposal.mdproposed
5EHDEVICE_QUERYproposalproposed
5FHDEVICE_RESPONSEproposalproposed
60HSERIAL_DATA (1.0)serial-1.0.mdcurrent
61HENCODER_DATAencoder.mdcurrent
62HACCELSTEPPER_DATAaccelStepperFirmata.mdcurrent
67HSERIAL_DATA (2.0)proposalproposed
68HSPI_DATAspi.mdbeta
70HSERVO_CONFIGservos.mdcurrent
72HSTEPPER_DATAstepper-legacy.mddeprecated
73HONEWIRE_DATAonewire.mdcurrent
74HDHTSENSOR_DATAdhtsensor.mdbeta
75HSHIFT_DATAshift-proposal.mdproposed
76HI2C_REQUESTi2c.mdcurrent
77HI2C_REPLYi2c.mdcurrent
78HI2C_CONFIGi2c.mdcurrent
7BHSCHEDULER_DATAscheduler.mdcurrent
7DHFREQUENCY_COMMANDfrequency.mdbeta
00H nnH nnH(start of extended feature ID set)