Vendor-neutral contracts for data transformation semantics — describe what a transformation means without locking you to Spark, SQL, Polars, or any single runtime.
This repository contains:
- SPEC.md — normative DTCS 1.0 draft (26 chapters)
- Reference tools — parse, validate, and analyze contracts in Rust and Python
| Spec status | Draft (1.0.0-draft) |
| Reference implementation | 0.4.0 — validation, analysis, and registries |
Document dtcsVersion |
1.0.0 (accepted for compatible 1.0.x releases) |
| Try it now | pip install dtcs or cargo install dtcs |
What you can do today: validate YAML/JSON contracts, resolve dtcs: identifiers through the embedded registry, compare versions for compatibility, analyze evolution between revisions, and trace dataset lineage — all read-only, no execution engine required.
Quick start · User docs · Examples · Changelog · Roadmap
Requirements: Python 3.9+ (PyPI package); Rust 1.75+ (cargo install or building from source).
pip install dtcs
cargo install dtcs
dtcs version
dtcs validate examples/customer_normalize.dtcs.yamlBoth packages install the dtcs CLI on PATH:
validate · inspect · diagnostics · compat · evolve · lineage · registry · version
Develop from source (requires Rust + maturin): see CONTRIBUTING.md.
# Validate a contract (exit 0 = valid)
dtcs validate examples/customer_normalize.dtcs.yaml
# Human-readable summary
dtcs inspect examples/customer_normalize.dtcs.yaml
# Compare two contract versions
dtcs compat examples/analysis/backward_old.yaml examples/analysis/backward_new.yaml
# Trace lineage impact
dtcs lineage examples/analysis/lineage_multi.yaml --impact customers
# Resolve a standard identifier
dtcs registry resolve dtcs:lowercaseimport dtcs
report = dtcs.parse_and_validate(
open("examples/customer_normalize.dtcs.yaml", "rb").read()
)
assert dtcs.is_valid(report)Read docs/user/getting-started.md for a full walkthrough. For normative definitions, see SPEC.md — start with Chapter 3 (COM) and Chapter 9 (Validation).
The reference implementation through Phase 0.4:
DTCS Document
│
▼
Parser → Canonical Object Model
│
├──────────────────────────────┐
▼ ▼
Validator (0.1–0.4) Analyzer (0.3)
│ │
│ registry::resolve ├─ compatibility::analyze
▼ ├─ analyze_evolution
Diagnostics ├─ versioning::validate
│ └─ lineage::analyze
│ │
│ ▼
│ Analysis reports
▼
(valid contracts only for analysis)
Phase 0.2 adds metadata validation, extended type system checks, expression typing, and I/O interface depth. Phase 0.3 adds compatibility classification, evolution analysis, versioning validation, and dataset-level lineage analysis. Phase 0.4 adds the identifier registry, file/URI loading with offline cache, and registry-aware extension validation.
Execution, backend compilation, and runtime behavior remain out of scope. See docs/implementation/non-goals.md.
| Path | Purpose |
|---|---|
| SPEC.md | Full DTCS 1.0 draft specification (26 chapters) |
| docs/user/ | User guides — getting started, CLI, compatibility |
| docs/adoption/ | Adoption overview for evaluators |
| docs/implementation/ | Reference implementation design guides |
| docs/editorial/ | Specification authoring process |
| examples/ | Sample transformation contracts |
| src/ | Rust crate source (dtcs) |
| python/ | Python package source (dtcs on PyPI) |
| tests/ | Integration tests and fixtures |
| ROADMAP.md | Reference implementation milestones |
See CONTRIBUTING.md for editorial conventions, implementation guidelines, and the review process.
When implementation guidance conflicts with the specification, SPEC.md wins. See docs/implementation/spec-usage.md.
Licensed under the Apache License, Version 2.0. See LICENSE.