# llvm-dsdl User Manual > Compiler and language tooling for OpenCyphal DSDL Generated from the navigation in mkdocs.yml by tools/docs/build_llms_index.py. Every page of the manual is listed below with a summary taken from the page itself. The full text of every page, concatenated into one document, is at https://opencyphal-garage.github.io/llvm-dsdl/llms-full.txt. ## Home - [Home](https://opencyphal-garage.github.io/llvm-dsdl/): Compiler tooling for OpenCyphal DSDL, built on MLIR and LLVM. ## Get Started - [Install](https://opencyphal-garage.github.io/llvm-dsdl/start/install/): Two ways to get dsdlc, dsdl-opt, and dsdld onto a machine: download a release build, or build from source. Take the release binaries unless you intend to work on the compiler itself — they carry the LLVM runtime they… - [Quick Start](https://opencyphal-garage.github.io/llvm-dsdl/start/quickstart/): Compile a DSDL namespace into generated code. Each block below is a complete command; run them against a root namespace directory of your own, or against the lanyard namespace in the Showroom if you do not have one yet. ## Reference - [Overview](https://opencyphal-garage.github.io/llvm-dsdl/reference/): Everything the tools promise, arranged for lookup rather than for reading through. - [Commands: dsdlc](https://opencyphal-garage.github.io/llvm-dsdl/reference/commands/dsdlc/): dsdlc is the primary compiler/codegen driver. Run dsdlc --help for languages, target syntax, and the full option set. - [Commands: dsdl-opt](https://opencyphal-garage.github.io/llvm-dsdl/reference/commands/dsdl-opt/): dsdl-opt is the pass-driver for the dsdl MLIR dialect. - [Commands: dsdld](https://opencyphal-garage.github.io/llvm-dsdl/reference/commands/dsdld/): dsdld is the DSDL language server (LSP over stdio JSON-RPC). - [Code Generation: Backends](https://opencyphal-garage.github.io/llvm-dsdl/reference/codegen/backends/): dsdlc shares one frontend/semantic pipeline and dispatches to multiple backend emitters. - [Code Generation: Object Backend](https://opencyphal-garage.github.io/llvm-dsdl/reference/codegen/object/): The object backend compiles generated sources into static objects and optional archives. - [Code Generation: Emit Order](https://opencyphal-garage.github.io/llvm-dsdl/reference/codegen/emit-order/): The reference abstract serialize/deserialize step order that every string backend (Rust, Go, C++, TypeScript, Python) follows. This is a live contract, not a historical plan: the shared render template produces this… - [Language Server: Lint Rules](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/lint-rules/): The dsdld lint engine runs deterministic rule checks over parsed DSDL ASTs and emits diagnostics with optional autofix edits. - [Language Server: Index Schema](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/index-schema/): dsdld persists per-file index shards for warm-start workspace indexing and workspace/symbol queries. - [Language Server: Ranking Model](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/ranking-model/): How dsdld orders the results it returns — which completion comes first, which symbol match wins — and which signals feed that ordering. - [Language Server: Logging](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/logging/): dsdld emits structured, level-gated records so an operator can reconstruct what the server was doing after the fact — "which request was in flight when the editor stopped responding?" - [Language Server: AI Operation](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/ai-operation/): This guide describes how to operate AI-assisted features in dsdld safely. - [Language Server: AI Data Flow](https://opencyphal-garage.github.io/llvm-dsdl/reference/lsp/ai-data-flow/): What data enters the dsdld AI surface, what happens to it, what leaves, and what is retained. This is the data-flow companion to ai-operation.md (which covers modes, configuration, and playbooks); read this one to… - [Guarantees: Cross-Language Parity](https://opencyphal-garage.github.io/llvm-dsdl/reference/guarantees/parity-matrix/): Which serialization behaviours are covered by tests in every target language, and which are not. A cell is a (backend, behaviour) pair. - [Guarantees: Malformed Input](https://opencyphal-garage.github.io/llvm-dsdl/reference/guarantees/malformed-input/): What each backend is required to do with input it must reject, and which of those requirements are covered by tests. - [Guarantees: Determinism](https://opencyphal-garage.github.io/llvm-dsdl/reference/guarantees/determinism/): Which axes of generated output are required to be byte-reproducible — across repeated runs, hosts, and toolchains — and which of those requirements are covered by tests. - [Guarantees: Supply Chain](https://opencyphal-garage.github.io/llvm-dsdl/reference/guarantees/supply-chain/): Two related release-mechanics concerns: what a release artifact is made of (the SBOM), and why the LLVM/MLIR major version it links against is pinned (the version lock). - [Showroom: Types](https://opencyphal-garage.github.io/llvm-dsdl/showroom/): One namespace of plausible vendor-specific datatypes for an aerial drone system, and everything dsdlc does with it -- generated into every language and profile the compiler supports, and then built by thirteen real… - [Showroom: Build Recipes](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/): The showroom shows you what dsdlc produces from the lanyard namespace. This is the other half: the build wiring that turns that output into a compiled library. ## Development - [Contributing](https://opencyphal-garage.github.io/llvm-dsdl/development/contributing/): How to build the compiler, run its gates, and get a change accepted. This page is the short form; CONTRIBUTING.md in the repository is the long one and takes precedence where they differ. - [Testing and CI](https://opencyphal-garage.github.io/llvm-dsdl/development/testing/): llvm-dsdl uses layered test gates: - [Architecture](https://opencyphal-garage.github.io/llvm-dsdl/development/architecture/): llvm-dsdl compiles DSDL through a shared semantic core and a custom MLIR dialect. - [Authoring Lint Rules](https://opencyphal-garage.github.io/llvm-dsdl/development/lint-rule-authoring/): This guide explains how to add, test, and ship lint rules for dsdld. For baseline rule catalog and suppression schema, see docs/reference/lsp/lint-rules.md. - [Project: Review & Release Roadmap](https://opencyphal-garage.github.io/llvm-dsdl/development/roadmap/): Generated 2026-06-28 against commit c18867a. Source references are written as path:line for the tree at review time; line numbers will drift as the code evolves. This document is intended to be committed and iterated on… - [Project: Release Packaging](https://opencyphal-garage.github.io/llvm-dsdl/development/release-packaging/): How dsdlc / dsdl-opt / dsdld get from a git tag to a user's machine. This documents the pipeline as it is built today; distribution channels that do not exist yet (Homebrew, an apt repository, other platforms) are… - [Project: Distribution Channels (backlog)](https://opencyphal-garage.github.io/llvm-dsdl/development/distribution-channels/): Distribution channels that do not exist yet, and the decisions still open about them. - [Project: Consistency Lint](https://opencyphal-garage.github.io/llvm-dsdl/development/convergence-scorecard/): What this is. A static lint that verifies each backend emitter references the shared planning/lowering helpers and gates (field-step ordering, union-tag validation, lowered-contract validation, and so on). A shared mark… ## For Agents - [Agent Guide](https://opencyphal-garage.github.io/llvm-dsdl/agents/): Written for coding agents and documentation indexers rather than for people. Facts are stated flatly and without narrative; everything here is also reachable from the human navigation. - [Documentation Index](https://opencyphal-garage.github.io/llvm-dsdl/agents/index-format/): Two machine-readable views of this manual are published at the site root. ## Showroom Types - [embedded-catalog-targets](https://opencyphal-garage.github.io/llvm-dsdl/development/embedded-catalog-targets/): dsdlc compiles the standard uavcan namespace into the binary as an MLIR catalog, but there is no way to name it on the command line. This note specifies the + target sigil that closes that gap, and the depfile… - [c-bazel](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/c-bazel/): Bazel through rules_dsdl, which offers two ways to get generated code into a build: generate at fetch time as an external repository, or generate as build actions. They trade against each other rather than one… - [c-cmake-ninja-multi](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/c-cmake-ninja-multi/): The recipe for a project that has outgrown one namespace. Two root namespaces share one output tree, one runtime header, and one standard type, built in Debug and Release from a single Ninja Multi-Config tree -- which… - [c-cmake](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/c-cmake/): find_package(llvm-dsdl) provides dsdlc_generate(), which queries dsdlc for the exact input and output lists at configure time and produces a static library to link. Four lines of build file, and adding a definition… - [c-make](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/c-make/): The same integration with no helpers -- the dsdlc command line and GNU Make. It is the recipe that shows dsdlc's own decomposition: --generate-support splits runtime scaffolding from generated types, and the + sigil… - [go-modules](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/go-modules/): Go tooling only, with no third-party build system: a //go:generate directive beside the code that consumes the output, and a replace directive pointing the module path at the generated tree. dsdlc writes… - [py-flit](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/py-flit/): The awkward one, and the recipe that found a real defect. flit has no setting for where the package lives, so generation has to target a layout flit already recognises. - [py-hatchling](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/py-hatchling/): The host owns pyproject.toml and points hatchling at the generated package with [tool.hatch.build.targets.wheel] packages. - [py-poetry](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/py-poetry/): The host owns pyproject.toml and points poetry-core at the generated package with packages = [{include = ..., from = ...}]. - [py-setuptools](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/py-setuptools/): The one Python recipe that needs no pyproject.toml of its own. dsdlc writes one declaring setuptools, so the generated tree is already an installable package and the host just installs it. - [py-uv-build](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/py-uv-build/): The host owns pyproject.toml and points uv's own build backend at the generated package with module-root and module-name. - [rust-cargo](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/rust-cargo/): dsdlc writes a complete crate -- Cargo.toml, feature flags, and the runtime inside it -- so consuming it is a one-line path dependency. - [ts-npm](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/ts-npm/): dsdlc emits TypeScript source: point tsconfig.json at the generated tree and compile it with everything else. npm installs the compiler and runs the scripts. - [ts-pnpm](https://opencyphal-garage.github.io/llvm-dsdl/showroom/recipes/ts-pnpm/): Identical to the npm recipe in every file -- same package.json, same tsconfig.json -- so the only difference is the package manager. pnpm's content-addressed store and strict node_modules layout change nothing about how… - [lanyard_flight_ControlSurfaces_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_ControlSurfaces_1_0/): Post-mixer actuator commands, discriminated by airframe class. - [lanyard_flight_FixedWingSurfaces_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_FixedWingSurfaces_1_0/): Post-mixer actuator commands for a fixed-wing airframe. - [lanyard_flight_FlightMode_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_FlightMode_1_0/): The commanded flight mode of the vehicle. - [lanyard_flight_MultirotorMix_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_MultirotorMix_1_0/): Post-mixer actuator commands for a multirotor airframe. - [lanyard_flight_VehicleState_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_VehicleState_1_0/): Consolidated vehicle state, published by the flight controller at 50 Hz. - [lanyard_flight_VehicleState_1_1](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_VehicleState_1_1/): Consolidated vehicle state, published by the flight controller at 50 Hz. - [lanyard_flight_VehicleState_2_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_flight_VehicleState_2_0/): Consolidated vehicle state, published by the flight controller at 50 Hz. - [lanyard_health_BatteryStatus_2_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_health_BatteryStatus_2_0/): State of one battery pack, published at 2 Hz by the smart battery or power module. - [lanyard_health_LegacyBatteryPoll_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_health_LegacyBatteryPoll_1_0/): Read the state of one battery pack. DEPRECATED -- use the BatteryStatus.2.0 message instead. - [lanyard_health_SubsystemReport_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_health_SubsystemReport_1_0/): Health of one subsystem, as reported by the node that owns it. - [lanyard_health_SystemHealth_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_health_SystemHealth_1_0/): Vehicle-level health summary, published at 1 Hz by the flight controller. - [lanyard_link_RcInput_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_link_RcInput_1_0/): Decoded pilot control input from the radio receiver, published at 50 Hz. - [lanyard_link_TelemetryLinkStats_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_link_TelemetryLinkStats_1_0/): Health of the air-to-ground telemetry link, published at 1 Hz by the radio modem node. - [lanyard_nav_GlobalPosition_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_nav_GlobalPosition_1_0/): Fused navigation solution published by the GNSS/INS estimator at 10 Hz. - [lanyard_nav_MissionPlan_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_nav_MissionPlan_1_0/): A complete stored mission, published once after upload and on request. - [lanyard_nav_UploadMission_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_nav_UploadMission_1_0/): Upload a mission to the vehicle one chunk at a time. - [lanyard_nav_Waypoint_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_nav_Waypoint_1_0/): A single mission item. - [lanyard_payload_CameraFrameMetadata_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_payload_CameraFrameMetadata_1_0/): Per-frame metadata emitted by the imaging payload alongside the video stream. - [lanyard_payload_CapturePhoto_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_payload_CapturePhoto_1_0/): Command the payload to capture one or more still images. - [lanyard_payload_GimbalStatus_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_payload_GimbalStatus_1_0/): Attitude and mode of the camera gimbal, published at 20 Hz. - [lanyard_propulsion_EscStatus_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_propulsion_EscStatus_1_0/): High-rate telemetry from a single electronic speed controller (ESC). - [lanyard_propulsion_EscStatus_2_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_propulsion_EscStatus_2_0/): High-rate telemetry from a single electronic speed controller (ESC), extensible revision. - [lanyard_propulsion_ThrottleCommand_0_1](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_propulsion_ThrottleCommand_0_1/): Group throttle setpoint for the propulsion array -- PRE-RELEASE, DO NOT DEPLOY. - [lanyard_propulsion_ThrottleCommand_1_0](https://opencyphal-garage.github.io/llvm-dsdl/showroom/types/lanyard_propulsion_ThrottleCommand_1_0/): Group throttle setpoint for the propulsion array.