This document describes the development toolchain for ERDL and the tooling roadmap. The tooling is open to the community — contributions here are welcome and encouraged.
| Tool | Command | Purpose |
|---|---|---|
TypeScript (tsc) |
npm run build |
Compile src/ to dist/ |
TypeScript (tsc --noEmit) |
npm run typecheck |
Type-check without emitting |
| Vitest | npm test |
Unit and regression tests |
The reference implementation is pure TypeScript with ESM ("type": "module"),
strict mode, and no runtime framework dependencies beyond yaml and
json-canonicalize.
The following items would strengthen the ERDL ecosystem. Each is a concrete, scoped piece of work; contributions are welcome — open an issue or PR to take one on.
Independent conformance runner — an independent verifier, in a language/stack of your choice, that loads the spec’s test vectors and verifies byte-for-byte output (see spec §10.2). This is the highest-value tooling contribution: it proves cross-implementation determinism.
Decision-table loader — parseErdlDocument currently rejects the §5.4
matrix form; implement its compilation to RuleDefinition[].
Test-vector generator — emit the expression-layer vectors (34 nodes × 4 scenarios, E1–E12, Simple 30 compile mapping) from the spec.
CI/CD — GitHub Actions running typecheck + test on every push and PR.
Linter — an ESLint config encoding the coding standards in
CONTRIBUTING.md (no @ts-ignore, no as any, etc.).
Benchmarks — evaluation performance and determinism benchmarks.
Language tooling — editor support (syntax highlighting, LSP) for
*.erdl.yaml files.
If you are building tooling on top of ERDL (editors, runners, integrations),
the single source of truth is the specification (erdl-spec.md /
erdl-spec.en.md); the reference implementation in src/ is one conforming
implementation, not the definition.