How to Validate a JSON Diagram Against Its Schema Using Archify
Archify provides a self-contained CLI that validates any supported diagram JSON against its type-specific schema and returns a machine-readable JSON receipt indicating success or detailed validation errors.
The tt-a1i/archify repository ships with a schema-driven validation system designed to ensure diagram files conform to strict structural contracts before rendering. By leveraging ahead-of-time compiled validators, Archify checks your JSON against formal JSON Schema definitions stored in the source tree, providing immediate feedback on schema violations.
How Archify Validates JSON Diagrams
Validation in Archify follows a deterministic pipeline that begins at the CLI entry point and ends with a structured diagnostic report. The system uses pre-generated validators to eliminate runtime dependencies while maintaining strict adherence to the schemas defined in archify/schemas/.
The CLI Entry Point
The validation flow starts in archify/bin/archify.mjs, which parses command-line arguments through its internal usage() function. When you invoke the validate command, the CLI:
- Reads the input file using
fs.readFileSyncand captures any I/O errors asinputDiagnosticmessages. - Sets the environment variable
ARCHIFY_DIAGNOSTIC_FORMAT=jsonto instruct renderers to emit structured output rather than human-readable text. - Dispatches to the type-specific renderer (e.g.,
render-architecture.mjs), which imports the generated validator and executesvalidator.validate(data).
The rendererFailure() function in the CLI normalizes any unexpected process failures into the standard diagnostic shape, ensuring consistent error handling across all diagram types.
Pre-Generated Validator Architecture
Validators are not interpreted at runtime; they are compiled ahead of time by archify/scripts/generate-validators.mjs. This build-time script uses Ajv 2020 to parse every schema in archify/schemas/ and generate a pure-ESM module at archify/renderers/shared/generated-validators.mjs. Because the script produces deterministic, self-contained code without external require calls, validation executes rapidly using only the core Node.js runtime.
Schema Definitions and Supported Types
Archify recognizes five distinct diagram types, each with its own JSON Schema file:
- architecture —
archify/schemas/architecture.schema.json - workflow
- sequence
- dataflow
- lifecycle
These schemas enforce required fields such as schema_version, diagram_type, meta, and type-specific structures. For example, the architecture schema requires that component id values match the regular expression pattern ^[A-Za-z_][A-Za-z0-9_-]*$.
Running Schema Validation from the Command Line
You can validate any supported diagram JSON using the Archify CLI. The command syntax requires specifying the diagram type and the path to your JSON file.
Installation and Basic Usage
If you have not installed Archify globally, add it to your environment:
npx skills add tt-a1i/archify -g
Run validation with the JSON receipt flag:
archify validate architecture my-diagram.json --json
Without the --json flag, the CLI prints human-readable validation errors to stderr. With the flag, it returns a structured JSON object to stdout.
Validating Different Diagram Types
The CLI accepts any of the five supported types as the first positional argument:
# Validate a workflow diagram
archify validate workflow examples/web-app.workflow.json --json
# Validate a dataflow diagram and save the receipt
archify validate dataflow examples/rag-pipeline.dataflow.json --json > receipt.json
Interpreting Validation Results
When you pass the --json flag, Archify prints a validation receipt containing an ok boolean and, on failure, a diagnostics array. The diagnostic() function in archify/bin/archify.mjs formats each schema violation into a consistent structure:
{
"ok": false,
"error": "validation failed",
"diagnostics": [
{
"code": "components/0/id",
"severity": "error",
"message": "must match pattern \"^[A-Za-z_][A-Za-z0-9_-]*$\"",
"subject": { "input": "my-diagram.json", "component": 0 },
"evidence": { "value": "1InvalidId" }
}
]
}
Each diagnostic includes:
- code — The JSON path to the invalid property
- severity — The error level (e.g., "error")
- message — The human-readable schema constraint description
- subject — Contextual metadata about the location in the input file
- evidence — The actual value that violated the constraint
If the diagram is valid, the receipt contains "ok": true and an empty diagnostics array.
Summary
- Archify validates JSON diagrams against type-specific JSON Schemas stored in
archify/schemas/. - The CLI entry point at
archify/bin/archify.mjsorchestrates validation by settingARCHIFY_DIAGNOSTIC_FORMAT=jsonand invoking type-specific renderers. - Validators are pre-generated using Ajv 2020 via
archify/scripts/generate-validators.mjsand stored inarchify/renderers/shared/generated-validators.mjsfor fast, dependency-free execution. - The
validatecommand accepts five diagram types:architecture,workflow,sequence,dataflow, andlifecycle. - Use the
--jsonflag to receive a machine-readable receipt with detailed diagnostics pinpointing every schema violation.
Frequently Asked Questions
What diagram types does Archify support for validation?
Archify supports five diagram types: architecture, workflow, sequence, dataflow, and lifecycle. Each type has a dedicated JSON Schema file located in the archify/schemas/ directory, ensuring that validators and renderers remain synchronized for every supported format.
How does Archify generate its validators?
Archify uses the script archify/scripts/generate-validators.mjs to compile JSON Schemas into pure-ESM JavaScript modules. This script leverages Ajv 2020 to create deterministic validator functions that are bundled into archify/renderers/shared/generated-validators.mjs, eliminating runtime schema compilation and external dependencies.
Can I validate diagrams without installing the CLI globally?
Yes. You can run validation using npx without a global installation, or install Archify locally within a project. The CLI operates locally regardless of installation method, requiring only a Node.js runtime to execute the pre-generated validators.
What information is included in a validation error diagnostic?
Each diagnostic object contains a code field indicating the JSON path of the error, a severity level, a descriptive message explaining the constraint violation, a subject object identifying the location in the input file, and an evidence object showing the actual invalid value. This structure allows automated tools to pinpoint and report schema violations precisely.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →