Skip to main content

Quick Start

Your First Check​

Create a simple JSON Schema file:

{
"type": "object",
"additionalProperties": false,
"properties": {
"name": { "type": "string" },
"age": { "type": "number" }
},
"required": ["name", "age"]
}

Run schemalint against OpenAI's profile:

schemalint check --profile openai.so.2026-04-30 schema.json

This schema is clean for OpenAI. Now introduce a problem — add a forbidden keyword:

{
"type": "object",
"allOf": [{ "properties": { "x": { "type": "string" } } }],
"additionalProperties": false,
"properties": {
"name": { "type": "string" }
},
"required": ["name"]
}

Run again:

$ schemalint check --profile openai.so.2026-04-30 schema.json
error[OAI-K-allOf]: keyword 'allOf' is not supported by openai.so.2026-04-30
--> schema.json

Output Formats​

# JSON output (useful for tooling)
schemalint check --format json --profile openai.so.2026-04-30 schema.json

# GitHub Actions annotations
schemalint check --format gha --profile openai.so.2026-04-30 schema.json

# SARIF (VS Code, GitHub Code Scanning)
schemalint check --format sarif --profile openai.so.2026-04-30 schema.json

JSON output uses schema version 1.1. In addition to the stable 1.0 fields, the report.coverage object records attempted, excluded, discovered, checked, and failed targets plus a status of complete, empty, partial, or failed.

Strict Completeness​

Exit 0 means every discovered in-scope schema was evaluated and checked and there were no error diagnostics. An import/evaluation/conversion failure, or partially checked batch exits 1. An empty match (nothing discovered, nothing checked) exits 3. --continue-on-discovery-error only controls whether later sources are attempted; it never hides incomplete coverage.

Check All JSON Schemas in a Directory​

schemalint check --profile openai.so.2026-04-30 schemas/

Check with Multiple Profiles​

schemalint check --profile openai.so.2026-04-30 --profile anthropic.so.2026-04-30 schema.json