Offline schema packs

Small schema packs shipped with the site. Each lists its version, date, license, what it checks and what it does not. Installing a pack never certifies that a real service will accept your file.

GitHub Actions workflow (subset)

Pack id
github-actions-workflow-subset
Version
0.1.0 — 2026-10-30
Dialect
JSON Schema 2020-12
License
MIT — self-authored by ValidateYAML (no third-party schema text copied)
Provenance
Self-authored from public GitHub Actions workflow-syntax documentation, Oct 2026. Not the SchemaStore schema.
Checks
Top-level workflow keys (name, on, permissions, env, concurrency, jobs); job runs-on/needs/if/steps/strategy/timeout; steps must use exactly one of uses/run; action references must be owner/repo@ref, ./path or docker://.
Does not check
  • Event filter details (branches, paths, types) beyond basic shapes
  • Expression syntax inside ${{ }}
  • Reusable-workflow inputs/secrets types
  • Whether an action, runner label or secret exists
  • GitHub-side acceptance of the workflow
Size
6,906 characters, bundled with the site (no download, works offline)
View schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://validateyaml.com/packs/github-actions-workflow-subset/0.1.0",
  "title": "GitHub Actions workflow (ValidateYAML subset)",
  "type": "object",
  "required": [
    "on",
    "jobs"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "run-name": {
      "type": "string"
    },
    "on": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1
        },
        {
          "type": "object",
          "minProperties": 1
        }
      ]
    },
    "permissions": {
      "anyOf": [
        {
          "enum": [
            "read-all",
            "write-all"
          ]
        },
        {
          "type": "object",
          "additionalProperties": {
            "enum": [
              "read",
              "write",
              "none"
            ]
          }
        }
      ]
    },
    "env": {
      "$ref": "#/$defs/env"
    },
    "defaults": {
      "type": "object"
    },
    "concurrency": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "required": [
            "group"
          ],
          "properties": {
            "group": {
              "type": "string"
            },
            "cancel-in-progress": {
              "type": [
                "boolean",
                "string"
              ]
            }
          }
        }
      ]
    },
    "jobs": {
      "type": "object",
      "minProperties": 1,
      "propertyNames": {
        "pattern": "^[A-Za-z_][A-Za-z0-9_-]*$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/job"
      }
    }
  },
  "additionalProperties": false,
  "$defs": {
    "env": {
      "type": "object",
      "additionalProperties": {
        "type": [
          "string",
          "number",
          "boolean"
        ]
      }
    },
    "job": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "runs-on": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              },
              "minItems": 1
            },
            {
              "type": "object"
            }
          ]
        },
        "needs": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              },
              "uniqueItems": true
            }
          ]
        },
        "if": {
          "type": [
            "string",
            "boolean"
          ]
        },
        "permissions": {
          "type": [
            "string",
            "object"
          ]
        },
        "environment": {
          "type": [
            "string",
            "object"
          ]
        },
        "env": {
          "$ref": "#/$defs/env"
        },
        "strategy": {
          "type": "object",
          "properties": {
            "matrix": {
              "type": [
                "object",
                "string"
              ]
            },
            "fail-fast": {
              "type": [
                "boolean",
                "string"
              ]
            },
            "max-parallel": {
              "type": [
                "integer",
                "string"
              ]
            }
          }
        },
        "timeout-minutes": {
          "type": [
            "number",
            "string"
          ]
        },
        "continue-on-error": {
          "type": [
            "boolean",
            "string"
          ]
        },
        "container": {
          "type": [
            "string",
            "object"
          ]
        },
        "services": {
          "type": "object"
        },
        "outputs": {
          "type": "object"
        },
        "defaults": {
          "type": "object"
        },
        "concurrency": {
          "type": [
            "string",
            "object"
          ]
        },
        "uses": {
          "type": "string"
        },
        "with": {
          "type": "object"
        },
        "secrets": {
          "type": [
            "string",
            "object"
          ]
        },
        "steps": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[A-Za-z_][A-Za-z0-9_-]*$"
              },
              "name": {
                "type": "string"
              },
              "if": {
                "type": [
                  "string",
                  "boolean"
                ]
              },
              "uses": {
                "type": "string",
                "pattern": "^(\\./|docker://|[^/@\\s]+/[^@\\s]+@[^\\s]+$)"
              },
              "run": {
                "type": "string",
                "minLength": 1
              },
              "shell": {
                "type": "string"
              },
              "with": {
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean"
                  ]
                }
              },
              "env": {
                "$ref": "#/$defs/env"
              },
              "working-directory": {
                "type": "string"
              },
              "continue-on-error": {
                "type": [
                  "boolean",
                  "string"
                ]
              },
              "timeout-minutes": {
                "type": [
                  "number",
                  "string"
                ]
              }
            },
            "oneOf": [
              {
                "required": [
                  "uses"
                ],
                "not": {
                  "required": [
                    "run"
                  ]
                }
              },
              {
                "required": [
                  "run"
                ],
                "not": {
                  "required": [
                    "uses"
                  ]
                }
              }
            ],
            "additionalProperties": false
          }
        }
      },
      "anyOf": [
        {
          "required": [
            "runs-on",
            "steps"
          ]
        },
        {
          "required": [
            "uses"
          ]
        }
      ],
      "additionalProperties": false
    }
  }
}

Docker Compose file (subset)

Pack id
docker-compose-subset
Version
0.1.0 — 2026-10-30
Dialect
JSON Schema 2020-12
License
MIT — self-authored by ValidateYAML (no third-party schema text copied)
Provenance
Self-authored from the public Compose specification documentation, Oct 2026. Not the official compose-spec JSON schema.
Checks
services (required) with image/build, ports, environment, depends_on, restart policy, volumes, command, healthcheck, networks; top-level volumes/networks/secrets/configs as mappings; obsolete "version" allowed.
Does not check
  • Interpolation (${VAR}) and .env resolution
  • Extension fields beyond x-* at top level
  • Profiles, deploy, and long-form volume options in depth
  • Whether images exist or ports are free
  • Docker Engine acceptance
Size
7,309 characters, bundled with the site (no download, works offline)
View schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://validateyaml.com/packs/docker-compose-subset/0.1.0",
  "title": "Compose file (ValidateYAML subset)",
  "type": "object",
  "required": [
    "services"
  ],
  "properties": {
    "version": {
      "type": "string",
      "description": "Obsolete in the Compose specification; ignored by current Compose."
    },
    "name": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9_-]*$"
    },
    "services": {
      "type": "object",
      "minProperties": 1,
      "propertyNames": {
        "pattern": "^[a-zA-Z0-9._-]+$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/service"
      }
    },
    "volumes": {
      "type": "object"
    },
    "networks": {
      "type": "object"
    },
    "secrets": {
      "type": "object"
    },
    "configs": {
      "type": "object"
    }
  },
  "patternProperties": {
    "^x-": {}
  },
  "additionalProperties": false,
  "$defs": {
    "listOrDict": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "number",
              "boolean",
              "null"
            ]
          }
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        }
      ]
    },
    "service": {
      "type": "object",
      "properties": {
        "image": {
          "type": "string",
          "minLength": 1
        },
        "build": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "context": {
                  "type": "string"
                },
                "dockerfile": {
                  "type": "string"
                },
                "args": {
                  "$ref": "#/$defs/listOrDict"
                },
                "target": {
                  "type": "string"
                }
              }
            }
          ]
        },
        "container_name": {
          "type": "string"
        },
        "command": {
          "type": [
            "string",
            "array",
            "null"
          ]
        },
        "entrypoint": {
          "type": [
            "string",
            "array",
            "null"
          ]
        },
        "environment": {
          "$ref": "#/$defs/listOrDict"
        },
        "env_file": {
          "type": [
            "string",
            "array"
          ]
        },
        "ports": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9.:\\[\\]a-fA-F-]+(/(tcp|udp|sctp))?$"
              },
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535
              },
              {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "integer"
                  },
                  "published": {
                    "type": [
                      "string",
                      "integer"
                    ]
                  },
                  "protocol": {
                    "enum": [
                      "tcp",
                      "udp",
                      "sctp"
                    ]
                  },
                  "mode": {
                    "enum": [
                      "host",
                      "ingress"
                    ]
                  }
                },
                "required": [
                  "target"
                ]
              }
            ]
          }
        },
        "expose": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "integer"
            ]
          }
        },
        "depends_on": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              },
              "uniqueItems": true
            },
            {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "condition": {
                    "enum": [
                      "service_started",
                      "service_healthy",
                      "service_completed_successfully"
                    ]
                  },
                  "restart": {
                    "type": "boolean"
                  },
                  "required": {
                    "type": "boolean"
                  }
                }
              }
            }
          ]
        },
        "restart": {
          "type": "string",
          "pattern": "^(no|always|unless-stopped|on-failure(:[0-9]+)?)$"
        },
        "volumes": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "object"
            ]
          }
        },
        "networks": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "object"
            }
          ]
        },
        "healthcheck": {
          "type": "object",
          "properties": {
            "test": {
              "type": [
                "string",
                "array"
              ]
            },
            "interval": {
              "type": "string"
            },
            "timeout": {
              "type": "string"
            },
            "retries": {
              "type": "integer",
              "minimum": 0
            },
            "start_period": {
              "type": "string"
            },
            "disable": {
              "type": "boolean"
            }
          }
        },
        "labels": {
          "$ref": "#/$defs/listOrDict"
        },
        "working_dir": {
          "type": "string"
        },
        "user": {
          "type": "string"
        },
        "profiles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "deploy": {
          "type": "object"
        },
        "logging": {
          "type": "object"
        },
        "secrets": {
          "type": "array"
        },
        "configs": {
          "type": "array"
        },
        "extends": {
          "type": [
            "string",
            "object"
          ]
        },
        "platform": {
          "type": "string"
        },
        "privileged": {
          "type": "boolean"
        },
        "stdin_open": {
          "type": "boolean"
        },
        "tty": {
          "type": "boolean"
        }
      },
      "patternProperties": {
        "^x-": {}
      },
      "anyOf": [
        {
          "required": [
            "image"
          ]
        },
        {
          "required": [
            "build"
          ]
        },
        {
          "required": [
            "extends"
          ]
        }
      ],
      "additionalProperties": false
    }
  }
}

Kubernetes Deployment apps/v1 (subset)

Pack id
k8s-deployment-apps-v1-subset
Version
0.1.0 — 2026-10-30
Dialect
JSON Schema 2020-12
License
MIT — self-authored by ValidateYAML (no third-party schema text copied)
Provenance
Self-authored from the public Kubernetes API reference, Oct 2026. Not generated from the OpenAPI spec.
Checks
apiVersion apps/v1, kind Deployment, metadata.name (DNS-1123 subdomain), spec.selector.matchLabels, spec.template with labels and at least one container (name + image), container ports 1–65535, replicas ≥ 0.
Does not check
  • All other kinds and API versions
  • Resource quantity syntax, probes in depth, volumes
  • Selector/label consistency (use a custom rule)
  • Admission control, RBAC, CRDs, cluster version skew
  • Kubernetes API-server acceptance — this pack does not imply deployment validity
Size
4,454 characters, bundled with the site (no download, works offline)
View schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://validateyaml.com/packs/k8s-deployment-apps-v1-subset/0.1.0",
  "title": "Deployment apps/v1 (ValidateYAML subset)",
  "type": "object",
  "required": [
    "apiVersion",
    "kind",
    "metadata",
    "spec"
  ],
  "properties": {
    "apiVersion": {
      "const": "apps/v1"
    },
    "kind": {
      "const": "Deployment"
    },
    "metadata": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 253,
          "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"
        },
        "namespace": {
          "type": "string",
          "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
          "maxLength": 63
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "spec": {
      "type": "object",
      "required": [
        "selector",
        "template"
      ],
      "properties": {
        "replicas": {
          "type": "integer",
          "minimum": 0
        },
        "selector": {
          "type": "object",
          "properties": {
            "matchLabels": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        },
        "template": {
          "type": "object",
          "required": [
            "spec"
          ],
          "properties": {
            "metadata": {
              "type": "object",
              "properties": {
                "labels": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            },
            "spec": {
              "type": "object",
              "required": [
                "containers"
              ],
              "properties": {
                "containers": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "$ref": "#/$defs/container"
                  }
                },
                "initContainers": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/container"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "$defs": {
    "container": {
      "type": "object",
      "required": [
        "name",
        "image"
      ],
      "properties": {
        "name": {
          "type": "string",
          "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
          "maxLength": 63
        },
        "image": {
          "type": "string",
          "minLength": 1
        },
        "imagePullPolicy": {
          "enum": [
            "Always",
            "IfNotPresent",
            "Never"
          ]
        },
        "ports": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "containerPort"
            ],
            "properties": {
              "containerPort": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535
              },
              "protocol": {
                "enum": [
                  "TCP",
                  "UDP",
                  "SCTP"
                ]
              },
              "name": {
                "type": "string",
                "maxLength": 15
              }
            }
          }
        },
        "env": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            }
          }
        },
        "args": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "command": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  }
}

Built-in rule pack

validateyaml-core v1.0.0, 2026-10-30. Lint, portability, hygiene and heuristic secret rules — see Rules.

Use a pack from the Schema selector in any validator. Passing a pack means “consistent with this subset”, never “accepted by GitHub, Docker or Kubernetes”.

Questions

Are these the official schemas?

No. They are deliberately small subsets written for ValidateYAML from public documentation, so their behaviour is fully known and testable. Use your own official schema via “Open schema” when you need full coverage.

Do they work offline?

Yes. They are part of the site bundle. After one visit, the service worker caches the app shell so the workspace and packs keep working without a connection.