Real-time Embedded Link Abstraction Yoke
RELAY is the shared specification and library for the SoundMatt embedded network protocol ecosystem. CAN, DDS, LIN, MQTT, RCP, and SOME/IP implementations in Go, C, C++, and Rust build against RELAY to share canonical types, interface contracts, error semantics, and a common application API.
| Protocol | Go | C | C++ | Rust |
|---|---|---|---|---|
| CAN | go-CAN | — | cpp-CAN | rust-CAN |
| DDS | go-DDS | — | cpp-DDS | rust-DDS |
| LIN | go-LIN | — | cpp-LIN | rust-LIN |
| MQTT | go-MQTT | — | cpp-MQTT | rust-MQTT |
| RCP | go-RCP | c-RCP | cpp-RCP | rust-RCP |
| SOME/IP | go-SOMEIP | — | — | — |
Full specification: spec/relay-spec.md
Machine-readable version: spec/version.json
Change history: spec/CHANGELOG.md
Current: v2.9 (stable)
go get github.com/SoundMatt/RELAY/v2@latest
Install the CLI:
go install github.com/SoundMatt/RELAY/v2/cmd/relay@latest
import relay "github.com/SoundMatt/RELAY/v2"
// All protocol adapters satisfy relay.Node
var node relay.Node = can.Adapt(bus)
// Send — identical regardless of underlying protocol
err := node.Send(ctx, relay.Message{
Protocol: relay.CAN,
ID: "256", // CAN frame 0x100; DDS topic; MQTT topic; RCP ByteBusID…
Payload: data,
})
// Subscribe
ch, err := node.Subscribe(
relay.WithChannelDepth(128),
relay.WithBackPressure(relay.DropOldest),
)
for msg := range ch {
fmt.Printf("%s %s %x\n", msg.Protocol, msg.ID, msg.Payload)
}
// Request/response (RCP, SOME/IP)
if caller, ok := node.(relay.Caller); ok {
resp, err := caller.Call(ctx, relay.Message{
Protocol: relay.RCP,
ID: "9", // decimal ByteBusID
Payload: data,
})
}Usage: relay <command> [flags]
| Command | Description |
|---|---|
version [--format text|json] |
Print tool and spec version |
capabilities |
Print RELAY tooling capabilities document |
status |
Print RELAY tooling status document |
conform <bin> |
Verify that <bin> conforms to the RELAY spec |
convert |
Reference canonical-value → relay.Message conversion (stdin→stdout) |
interop <bin>... |
Check implementations are behaviourally interchangeable |
crossbar |
Route relay.Messages between protocol spokes (--config) |
probe |
Discover RELAY-conformant binaries |
trace |
Capture or replay a relay.Message stream |
report |
Cross-implementation conformance report |
sbom |
Print the software bill of materials |
safety-case |
Summarise the safety evidence set |
audit-pack |
Bundle all safety evidence into a zip |
compare |
Compare two implementations for interchangeability |
versions |
List implementations and their spec alignment |
serve |
Serve a web dashboard, JSON API, and status badge |
relay conform <binary>
See ROADMAP.md.
Sign-off required on every commit (DCO):
git commit -s -m "feat: description"
Mozilla Public License 2.0 — see LICENSE.