Skip to content

JSON Schema

The TDN format includes a JSON Schema that can be used for validation and IDE auto-completion.

Schema File

The schema is available at tdn.schema.json in the repository.

You can reference it in your .tdn files for editor support:

{
  "$schema": "https://raw.githubusercontent.com/dylanroscover/Embody/main/docs/tdn.schema.json",
  "format": "tdn",
  "version": "1.0",
  ...
}

What the Schema Validates

  • Document structure: Required fields (format, version, generator, td_build, exported_at, network_path, options, operators)
  • Operator objects: Name, type, position, size, color, parameters, flags, connections, children
  • Custom parameters: Page-grouped format, template references ($t), all 32 parameter styles
  • Type defaults: Per-type shared properties (parameters, flags, size, color, tags)
  • Parameter templates: Reusable custom parameter page definitions
  • Annotations: Mode, title, text, position, size, color, opacity
  • Value types: Proper typing for constants, expressions (= prefix), and binds (~ prefix)
  • DAT content: Both text and table formats

Using with VS Code

Add this to your VS Code settings.json to get auto-completion and validation for .tdn files:

{
  "json.schemas": [
    {
      "fileMatch": ["*.tdn"],
      "url": "./docs/tdn.schema.json"
    }
  ]
}

Schema Overview

The schema defines these key structures:

Top-Level Document

tdn
├── format: "tdn" (const)
├── version: string
├── build: integer | null
├── generator: string
├── td_build: string
├── exported_at: date-time
├── network_path: string
├── options
│   └── include_dat_content: boolean
├── type_defaults: { type → properties }
├── par_templates: { name → [definitions] }
├── operators: [operator]
└── annotations: [annotation]

Operator Object

operator
├── name: string (required)
├── type: string (required)
├── position: [x, y]
├── size: [width, height]
├── color: [r, g, b]
├── comment: string
├── tags: [string]
├── parameters: { name → value }
├── custom_pars: { page → [definition] | {$t, ...values} }
├── flags: [string]
├── inputs: [string | null]
├── comp_inputs: [string | null]
├── dat_content: string | [[string]]
├── dat_content_format: "text" | "table"
├── children: [operator]
├── annotations: [annotation]
└── palette_clone: boolean

Annotation Object

annotation
├── name: string (required)
├── mode: "annotate" | "comment" | "networkbox" (required)
├── title: string
├── text: string
├── position: [x, y]
├── size: [width, height] (required)
├── color: [r, g, b]
└── opacity: number

For the complete field reference with inclusion conditions and default values, see the Specification.