What are Meta-Schemas?
A meta-schema is a JSON Schema that describes the structure and syntax of other JSON schemas. Meta-schemas serve several critical purposes:- Define valid schema syntax - Specify which keywords are allowed and their value constraints
- Validate schemas - Ensure schemas conform to the specification’s requirements
- Declare vocabularies - Identify which sets of keywords are available
- Establish dialects - Define specific combinations of vocabularies for different use cases
Every JSON Schema has a meta-schema, which can be explicitly declared using the
$schema keyword.Core Meta-Schema Structure
The JSON Schema v1/2026 meta-schema is located at:Basic Structure
Key Meta-Schema Properties
Key Meta-Schema Properties
$schema: Self-identifies the meta-schema’s own dialect$id: Establishes the canonical identifier$dynamicAnchor: Enables dynamic reference resolution for extensibilitytitle: Human-readable descriptiontype: Allows schemas to be objects or booleans
Meta-Schema Keywords
The meta-schema defines constraints for all standard JSON Schema keywords:Identifier Keywords
Validation Keywords
Type and Constant Keywords
Type and Constant Keywords
Numeric Keywords
Numeric Keywords
String Keywords
String Keywords
Array Keywords
Array Keywords
Object Keywords
Object Keywords
Applicator Keywords
Metadata Keywords
Content Keywords
Reusable Definitions
The meta-schema defines reusable components in$defs:
Extension Mechanism
The meta-schema includes patterns for allowing extensions:Custom Extension Keywords
x- are automatically treated as annotations.
Property Name Restrictions
- Non-core keywords cannot start with
$ - Only recognized
$keywords are allowed
Dynamic Extension Point
Vocabulary-Based Meta-Schema
The draft-next specification uses a vocabulary-based approach:Vocabulary Breakdown
Core Vocabulary
Core Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/coreKeywords:$schema,$id,$ref,$anchor$dynamicRef,$dynamicAnchor$defs,$comment
Applicator Vocabulary
Applicator Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/applicatorKeywords:prefixItems,items,containsproperties,patternProperties,additionalPropertiespropertyNames,dependentSchemasallOf,anyOf,oneOf,notif,then,else
Unevaluated Vocabulary
Unevaluated Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/unevaluatedKeywords:unevaluatedItemsunevaluatedProperties
Validation Vocabulary
Validation Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/validationKeywords:- Type:
type,enum,const - Numeric:
multipleOf,maximum,exclusiveMaximum,minimum,exclusiveMinimum - String:
maxLength,minLength,pattern - Array:
maxItems,minItems,uniqueItems,maxContains,minContains - Object:
maxProperties,minProperties,required,dependentRequired
Meta-Data Vocabulary
Meta-Data Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/meta-dataKeywords:title,descriptiondefault,deprecatedreadOnly,writeOnlyexamples
Format Annotation Vocabulary
Format Annotation Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/format-annotationKeywords:format
Content Vocabulary
Content Vocabulary
IRI:
https://json-schema.org/draft/next/vocab/contentKeywords:contentEncodingcontentMediaTypecontentSchema
Deprecated Keywords
The meta-schema maintains backward compatibility by including deprecated keywords:Publication URLs
Meta-schemas are published at official URLs:Current Version (v1/2026)
- Canonical:
https://json-schema.org/v1/2026 - Version alias:
https://json-schema.org/v1(latest within v1)
Draft Versions
- Draft-next:
https://json-schema.org/draft/next/schema
Implementations SHOULD include a bundled copy of the meta-schema rather than fetching it from the network.
Using Meta-Schemas
Validating a Schema
To validate that a schema is well-formed:Creating Custom Meta-Schemas
You can extend the standard meta-schema for custom dialects:Dialect Determination
Implementations determine the dialect using:$schemakeyword (highest priority)- Parent schema dialect (for embedded resources)
- External context (media type parameters, embedding specifications)
- User configuration
If the dialect cannot be determined, implementations MUST refuse to process the schema.
Best Practices
- Always declare
$schemain root schemas to ensure correct interpretation - Validate your schemas against their meta-schema before publishing
- Use vocabulary-based meta-schemas for modular dialect design
- Bundle meta-schemas in your implementation rather than fetching from URLs
- Document custom extensions clearly when creating custom meta-schemas
For more information about meta-schemas and vocabularies, visit json-schema.org