A display connection stack in Rust — HDMI 2.1 first.
Ashlar takes a display link from raw capability bytes to a trained link: parse what the sink can do, negotiate the best mode the source, sink and cable can all carry, describe it in InfoFrames, and bring up the link over SCDC with FRL training. Each layer is its own crate — use one, or use them all.
Website: ashlar-display.org · Getting started
Integration layer compositor glue · DRM/KMS · source capability query (planned)
Driver-adjacent layer FRL link training plumbob · plumbob-async
Protocol layer CEC · eARC (planned)
Signaling layer InfoFrames · SCDC cartouche · culvert · culvert-async
Negotiation layer enumeration · validation · ranking concordance
Parsing layer EDID · DisplayID piaf
Shared types display vocabulary display-types
Hardware abstraction SCDC transport · PHY hdmi-hal · hdmi-hal-async · hdmi-hal-i2c-dev
| Crate | Layer | What it does | |
|---|---|---|---|
| display-types | Shared types | Display capability vocabulary shared across the stack | |
| piaf | Parsing | EDID and DisplayID parser | |
| concordance | Negotiation | HDMI 2.1 mode negotiation with a full reasoning trace | |
| cartouche | Signaling | InfoFrame encoding and decoding (AVI, Audio, HDR Static, HDMI Forum VSI, Dynamic HDR) | |
| culvert | Signaling | Typed SCDC register access | |
| culvert-async | Signaling | Async companion to culvert | |
| plumbob | Driver-adjacent | FRL link training state machine | |
| plumbob-async | Driver-adjacent | Async companion to plumbob | |
| hdmi-hal | Hardware abstraction | ScdcTransport and HdmiPhy traits |
|
| hdmi-hal-async | Hardware abstraction | Async companion to hdmi-hal | |
| hdmi-hal-i2c-dev | Hardware abstraction | Linux userspace backend over /dev/i2c-N, for development and validation |
- Hardware behind traits. SCDC transport and PHY control are injected, so all protocol logic is testable without hardware.
- Diagnostics are first-class. Structured reasoning traces and typed warnings instead of logs. Rejected candidates are explained; nothing fails silently.
- Spec-complete, judgment-free lower layers. Parsing and protocol crates implement the spec in full; policy lives in the negotiation layer, and you can override it.
no_stdwhere it matters, async companions where they help.- No unsafe code.
#![forbid(unsafe_code)]across the stack. - Verifiable releases. Trusted publishing only, with SLSA provenance.
EDID and DisplayID parsing, the shared display types, and CTA-861 InfoFrame payloads are not HDMI-specific. DisplayPort (and USB-C DisplayPort Alt Mode) support is a direction the stack is designed to grow into.
Licensed under MPL-2.0.