Files
archify-vscode-ext/schemas/architecture.schema.json
root-at-skic ebf320a023 Architecture decisions: files, diagram references, views and panels
- *.archify-decision files: id (unique, words), title, status, date,
  elements, diagrams, supersedes, and prose; parsed, merged and link-checked
  in the model index; diagnostics on the file
- diagrams point at decisions with decisions: [...] on the diagram, nodes
  and edges; stripped before Archify, unknown ids reported, completion,
  hover and go-to-definition for the ids and for elements/diagrams/
  supersedes in decision files
- Decisions panel on the main.archify page; Decisions rail panel under a
  diagram (hover lights up the node or connection); decisions on element
  cards and in the element dialog; decision view for the file, with a
  lost-model note outside a model
- Archify | New Decision… command and template; editor schemas; the three
  New Model examples carry decisions; docs, changelog, 0.8.0
2026-10-19 23:13:05 +03:00

393 lines
10 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Archify Architecture Diagram",
"type": "object",
"additionalProperties": false,
"required": [
"schema_version",
"diagram_type",
"meta",
"components"
],
"properties": {
"schema_version": {
"const": 1
},
"diagram_type": {
"const": "architecture"
},
"meta": {
"type": "object",
"additionalProperties": false,
"required": [
"title",
"output"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"locale": {
"$ref": "common.schema.json#/$defs/locale"
},
"translations": {
"$ref": "common.schema.json#/$defs/translations"
},
"subtitle": {
"type": "string"
},
"output": {
"$ref": "common.schema.json#/$defs/portableOutputPath"
},
"animation": {
"$ref": "common.schema.json#/$defs/animation"
},
"visual_preset": {
"$ref": "common.schema.json#/$defs/visualPreset"
},
"quality_profile": {
"$ref": "common.schema.json#/$defs/qualityProfile"
},
"engineering_profile": {
"enum": [
"deployment-ownership"
]
},
"repository": {
"$ref": "common.schema.json#/$defs/repository"
},
"views": {
"$ref": "common.schema.json#/$defs/guidedViews"
},
"legend": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"$ref": "common.schema.json#/$defs/legendMode"
},
"entries": {
"type": "object",
"additionalProperties": false,
"properties": {
"frontend": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"backend": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"database": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"cloud": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"security": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"messagebus": {
"$ref": "common.schema.json#/$defs/legendEntry"
},
"external": {
"$ref": "common.schema.json#/$defs/legendEntry"
}
}
}
}
},
"viewBox": {
"type": "array",
"prefixItems": [
{
"type": "number",
"minimum": 320
},
{
"type": "number",
"minimum": 240
}
],
"items": false,
"minItems": 2,
"maxItems": 2
}
}
},
"layout": {
"type": "object",
"additionalProperties": false,
"required": [
"mode"
],
"properties": {
"mode": {
"enum": [
"grid"
]
},
"origin": {
"$ref": "common.schema.json#/$defs/point"
},
"cols": {
"type": "integer",
"minimum": 1,
"maximum": 12
},
"gapX": {
"type": "number",
"minimum": 0
},
"gapY": {
"type": "number",
"minimum": 0
},
"cellW": {
"type": "number",
"minimum": 40
},
"cellH": {
"type": "number",
"minimum": 24
}
}
},
"components": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "common.schema.json#/$defs/id"
},
"type": {
"$ref": "common.schema.json#/$defs/componentType"
},
"label": {
"type": "string",
"minLength": 1
},
"sublabel": {
"type": "string"
},
"tag": {
"type": "string"
},
"icon": {
"$ref": "common.schema.json#/$defs/nodeIcon"
},
"brand": {
"$ref": "common.schema.json#/$defs/brandMark"
},
"sources": {
"$ref": "common.schema.json#/$defs/sourceReferences"
},
"row": {
"type": "integer",
"minimum": 0
},
"col": {
"type": "integer",
"minimum": 0
},
"pos": {
"$ref": "common.schema.json#/$defs/point"
},
"size": {
"type": "array",
"prefixItems": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "number",
"exclusiveMinimum": 0
}
],
"items": false,
"minItems": 2,
"maxItems": 2
},
"ref": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]*$",
"description": "A shared element from the model’s registry (*.archify-registry). Its type, label, sublabel, brand and sources come from there; the diagram adds pos/size and may override label, sublabel and tag."
},
"diagram": {
"type": "string",
"description": "Diagram that explains this element, relative to the model root (main.archify). Double-click the node to open it."
},
"decisions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Ids of architecture decisions (*.archify-decision files of the model) this is about. Shown in the Decisions panel under the diagram."
}
},
"anyOf": [
{
"required": [
"ref"
]
},
{
"required": [
"id",
"type",
"label"
]
}
]
}
},
"boundaries": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"kind",
"label",
"wraps"
],
"properties": {
"kind": {
"enum": [
"region",
"security-group"
]
},
"label": {
"type": "string",
"minLength": 1
},
"wraps": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "common.schema.json#/$defs/id"
}
},
"pad": {
"type": "number",
"minimum": 0
}
}
}
},
"connections": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"from",
"to"
],
"properties": {
"id": {
"$ref": "common.schema.json#/$defs/id"
},
"from": {
"$ref": "common.schema.json#/$defs/id"
},
"to": {
"$ref": "common.schema.json#/$defs/id"
},
"label": {
"type": "string"
},
"variant": {
"$ref": "common.schema.json#/$defs/variant"
},
"fromSide": {
"$ref": "common.schema.json#/$defs/side"
},
"toSide": {
"$ref": "common.schema.json#/$defs/side"
},
"route": {
"enum": [
"auto",
"straight",
"orthogonal-h",
"orthogonal-v"
]
},
"via": {
"type": "array",
"items": {
"$ref": "common.schema.json#/$defs/point"
}
},
"labelAt": {
"$ref": "common.schema.json#/$defs/point"
},
"labelDx": {
"type": "number"
},
"labelDy": {
"type": "number"
},
"labelSegment": {
"type": "integer",
"minimum": 0
},
"width": {
"$ref": "common.schema.json#/$defs/relationshipWidth"
},
"decisions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Ids of architecture decisions (*.archify-decision files of the model) this is about. Shown in the Decisions panel under the diagram."
}
}
}
},
"cards": {
"$ref": "common.schema.json#/$defs/cards"
},
"model": {
"type": "object",
"description": "Only in main.archify: the entry point of a model (a folder of diagrams that belong together).",
"additionalProperties": false,
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]*$",
"description": "Stable id of the model."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Name shown on the model page."
},
"description": {
"type": "string",
"description": "What the model covers; shown on the model page."
}
}
},
"decisions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Ids of architecture decisions (*.archify-decision files of the model) this is about. Shown in the Decisions panel under the diagram."
}
}
}