super_cereal
Serial port proxy over RustDDS. Expose a UART on one machine and use it as a local virtual serial device on another over the LAN.
Install the super_cereal system binary from crates.io:
Requirements
- macOS or Linux
- Two machines on the same LAN segment (RustDDS multicast discovery)
- Rust toolchain (edition 2021) — only needed to build from source
Docker-on-Mac and Tailscale are not supported in v1 because RustDDS discovery relies on multicast. A unicast transport is planned for a future release.
Install
From crates.io (recommended):
From source:
The installed binary is ~/.cargo/bin/super_cereal.
Usage
Serve (machine with the physical serial device)
Reads from the UART and publishes bytes on DDS topic super_cereal/dev1/up. Writes client bytes from super_cereal/dev1/down back to the port.
Attach (consumer machine)
Creates a PTY and symlinks it to /tmp/ttyVIRT0. Open that path with minicom, pyserial, or any tool that expects a serial device.
List discovered channels
Waits for DDS discovery (default 3 seconds), then prints channel names seen on the LAN.
Two-machine validation
-
Machine A (device attached):
-
Machine B:
-
On machine B, open the virtual port:
Or with Python:
= -
Confirm bidirectional traffic matches the real device on machine A. An MCU echo firmware or a TX–RX loopback jumper makes this easy to verify.
Logging
Set RUST_LOG to control verbosity:
RUST_LOG=debug
Background service templates
Shipped in the repository under contrib/:
- Linux:
contrib/systemd/super_cereal@.service - macOS:
contrib/launchd/com.vfp.super_cereal.plist
Edit the port, baud, and channel before installing.
Architecture
/dev/ttyACM0 <--> serve --DDS--> attach <--> /tmp/ttyVIRT0 (PTY symlink) <--> your app
Topics per channel:
super_cereal/<channel>/up— device → clientsuper_cereal/<channel>/down— client → device
Limitations (v1)
- Multicast LAN only; no Docker Desktop or Tailscale without phase-2 unicast support
- PTY baud/termios changes are not forwarded to the remote UART
- One attach client per channel is the expected use case
License
GPL-3.0-or-later. See LICENSE.