- Docs
- RFCs
The RFCs
Every feature of CoHDL exists because a written proposal was accepted for it. These are the accepted texts, verbatim — the problem each one solves, the design, the rejected alternatives, and the decision. Together with the language specification they are the language's complete normative record.
- RFC-001
Units-as-types
Engineering values are typed by unit: a closed set of primitive unit types, zero coercion, bare numbers rejected.
- RFC-002
Pin connection-obligation typing
Every pin carries a connection obligation; required pins must be wired or explicitly declared nc by final assembly.
- RFC-003
Trait-satisfaction-at-impl-time checking
Devices satisfy traits through explicit impl blocks with pin and spec mapping, checked at impl time — never structurally.
- RFC-004
DRC/type-system reclassification pass
Structural mistakes move into the type system; residual DRC shrinks to four genuinely emergent whole-graph rules.
- RFC-005
Collision-free designator allocation
Collision-free designator allocation as a pure function with checked injectivity, held stable across edits by design.lock.
- RFC-006
Nested fn call semantics
Sub-circuit fns compose by nesting; expansion is deterministic, with cycle detection.
- RFC-007
Generics-over-specs and generic trait bounds
Generic devices and fns parameterized over spec values, bounded by traits.
- RFC-008
Exhaustive pattern-matching over structural variants
Exhaustive pattern matching over a device family's structural variants.
- RFC-009
cohdl fmt canonical form
One canonical rendering of every source file; cohdl fmt rewrites, and --check gates.
- RFC-010
cohdl check --json schema
Structured, machine-readable diagnostics: one JSON document per check.
- RFC-011
Error-code registry (formal v2 baseline)
A formal registry of stable diagnostic codes; a code is issued once and never reused.
- RFC-012
#[intent(...)] annotations (pure metadata)
#[intent("...")] attaches one opaque rationale string per declaration, with guaranteed zero effect on compilation.
- RFC-013
Layout-constraint concept (the door)
The door to physical design: layout {} constraints and #[placement_hint], emitted as layout.json.
- RFC-014
Language Server Protocol support
cohdl lsp — the language server: live diagnostics, hover, definitions, references over stdio.
- RFC-015
IPC-2581 codegen backend (Quilter handoff)
The IPC-2581 handoff document emitted by build --emit ipc2581 for layout partners.
- RFC-016
Module system (package::module::submodule::name)
File-tree module paths, use imports, and cross-package pub enforcement.
- RFC-017
Library registry (cohdl source + docs + footprint symbols)
#[doc] reference documents, and footprint as a resolvable declaration kind rather than a string.
- RFC-018
Footprint format — pad/footprint, Cadence-style pad/footprint split
The pad/footprint split: a closed pad vocabulary, footprint bodies, and geometry projected into .kicad_mod and IPC-2581.
- RFC-019
VS Code extension for CoHDL
A real installable VS Code extension: TextMate grammar plus a language client over cohdl lsp.
- RFC-020
Board outline (scoped DXF profile extraction) + oriented placement
Board outlines extracted from a scoped DXF profile, and place gains orientation.
- RFC-021
IPC-7351 as the canonical footprint naming practice
Footprints in a closed six-family set carry IPC-7351-derived names, cross-checked against their own pad geometry.
- RFC-022
Mechanical locating holes in footprints (mount_hole)
Mechanical locating holes in footprints, numbered disjointly from pads.
- RFC-023
Non-circular locating holes (mount_hole shape/size)
mount_hole grows shape and size — rectangular and oval holes reusing the pad shape vocabulary.
- RFC-024
Array-typed instances and indexed references
One array-typed instance declares N fully real elements, addressed NAME[i] everywhere a reference is valid.
- RFC-025
Rotated pad placements in footprints
Pad placements gain rotate ANGLE; KiCad's three-argument (at x y angle), size never swapped.
- RFC-026
Component placement on the board's back side
place gains side top|bottom, with mirror semantics matching pcbnew's flip-then-orient exactly.
- RFC-027
Quilter physics-constraint hints and CSV export
Seven structured physics attributes plus diff_pair brackets, exported as the Quilter CSV set.
- RFC-028
Physics-constraint attributes on fn Pin parameters
Physics attributes on fn Pin and Instance parameters, resolved per call site.
- RFC-029
Package dependency versioning — std becomes a versioned registry library
Exact-version [dependencies], a sha256 content-hash lock file — and std becomes an ordinary package.
- RFC-030
registry.cohdl.org — the package registry service
The external contract of registry.cohdl.org: trust-tiered packages, server-authoritative hashes, and stable package-and-part search.
- RFC-031
Silkscreen graphics for footprints (pin-1 markers, polarity/direction indicators)
Silkscreen primitives plus semantic pin-1 and polarity markers that expand to checked geometry.
- GC-002
Admit layout constraints into the conceptual model
The governance amendment that admitted layout constraints into the conceptual model.