Use when creating or editing Nullstone IaC YAML files under `.nullstone/` — adding or wiring apps, datastores, networks, domains, subdomains, ingresses, clusters, cluster-namespaces; setting `vars`, `environment`, `connections`, or `capabilities`; configuring `events`. Triggers on file paths `.nullstone/config.yml`, `.nullstone/{env}.yml`, `.nullstone/previews.yml`, and anything under `.nullstone/stacks/{stack}/`.
80
100%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://nullstone.io/.nullstone/config.yml",
"title": "Nullstone configuration specification",
"description": "The Nullstone configuration file is a YAML file defining a platform-agnostic architecture",
"type": "object",
"properties": {
"version": {
"const": "0.1"
},
"apps": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/app" }
},
"additionalProperties": false
},
"blocks": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/block" }
},
"additionalProperties": false
},
"cluster_namespaces": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/cluster_namespace" }
},
"additionalProperties": false
},
"clusters": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/cluster" }
},
"additionalProperties": false
},
"datastores": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/datastore" }
},
"additionalProperties": false
},
"domains": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/domain" }
},
"additionalProperties": false
},
"ingresses": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/ingress" }
},
"additionalProperties": false
},
"networks": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/network" }
},
"additionalProperties": false
},
"subdomains": {
"type": "object",
"patternProperties": {
"^[a-z0-9\\-]+$": { "$ref": "#/definitions/subdomain" }
},
"additionalProperties": false
}
},
"required": ["version"],
"additionalProperties": false,
"definitions": {
"block": {
"id": "#/definitions/block",
"type": "object",
"properties": {
"module": {
"type": "string",
"description": ""
},
"module_version": {
"type": "string",
"description": ""
},
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" },
"is_shared": {
"type": "boolean",
"description": ""
}
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"app": {
"id": "#/definitions/app",
"type": "object",
"properties": {
"module": {
"type": "string",
"description": ""
},
"module_version": {
"type": "string",
"description": ""
},
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" },
"is_shared": {
"type": "boolean",
"description": ""
},
"framework": {
"type": "string",
"description": ""
},
"environment": {
"type": "object",
"patternProperties": {
"^[A-Za-z0-9_]+$": { "type": "string" }
}
},
"capabilities": {
"oneOf": [
{ "$ref": "#/definitions/capabilities" },
{ "$ref": "#/definitions/capabilitiesArray" }
]
}
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"cluster_namespace": {
"allOf": [
{ "$ref": "#/definitions/block" }
]
},
"cluster": {
"allOf": [
{ "$ref": "#/definitions/block" }
]
},
"datastore": {
"allOf": [
{ "$ref": "#/definitions/block" }
]
},
"domain": {
"id": "#/definitions/subdomain",
"type": "object",
"properties": {
"module": {
"type": "string",
"description": ""
},
"module_version": {
"type": "string",
"description": ""
},
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" },
"dns": { "$ref": "#/definitions/domain_dns" }
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"domain_dns": {
"id": "#/definitions/domain_dns",
"type": "object",
"properties": {
"template": {
"type": "string",
"description": "A templated string for configuration the domain name. This interpolates {{ NULLSTONE_ORG }}"
}
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"ingress": {
"allOf": [
{ "$ref": "#/definitions/block" }
]
},
"network": {
"allOf": [
{ "$ref": "#/definitions/block" }
]
},
"subdomain": {
"id": "#/definitions/subdomain",
"type": "object",
"properties": {
"module": {
"type": "string",
"description": ""
},
"module_version": {
"type": "string",
"description": ""
},
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" },
"is_shared": {
"type": "boolean",
"description": ""
},
"dns": { "$ref": "#/definitions/subdomain_dns" }
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"subdomain_dns": {
"id": "#/definitions/subdomain_dns",
"type": "object",
"properties": {
"template": {
"type": "string",
"description": "A templated string for configuration the subdomain name. This interpolates {{ random() }}, {{ NULLSTONE_ORG }}, {{ NULLSTONE_STACK }}, {{ NULLSTONE_ENV }}"
}
},
"patternProperties": {"^x-": {}},
"additionalProperties": false
},
"capabilities": {
"type": "object",
"additionalProperties": { "$ref": "#/definitions/capability" }
},
"capabilitiesArray": {
"type": "array",
"items": { "$ref": "#/definitions/namedCapability" }
},
"capability": {
"type": "object",
"properties": {
"namespace": { "type": "string" },
"module": { "type": "string" },
"module_version": { "type": "string" },
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" }
}
},
"namedCapability": {
"type": "object",
"properties": {
"name": { "type": "string" },
"namespace": { "type": "string" },
"module": { "type": "string" },
"module_version": { "type": "string" },
"vars": { "$ref": "#/definitions/variables" },
"connections": { "$ref": "#/definitions/connection_targets" }
}
},
"variables": {
"type": "object",
"patternProperties": {
"^[A-Za-z_][A-Za-z0-9_\\-]*$": {
"anyOf": [
{ "type": "boolean" },
{ "type": "string" },
{ "type": "integer" },
{ "type": "number" },
{ "type": "object" },
{ "type": "array" }
]
}
}
},
"connection_targets": {
"type": "object",
"patternProperties": {
"^[_a-z0-9\\-]+$": {
"oneOf": [
{
"type": "string",
"pattern": "^(?:([a-zA-Z0-9\\-]+)\\.)?(?:([a-zA-Z0-9\\-]+)\\.)?([a-zA-Z0-9\\-]+)$"
},
{ "$ref": "#/definitions/connection_target" }
]
}
}
},
"connection_target": {
"type": "object",
"properties": {
"stack_name": {
"type": "string"
},
"env_name": {
"type": "string"
},
"block_name": {
"type": "string"
}
},
"required": ["block_name"]
}
}
}