π Generate Python data models from schema definitions in seconds.
- π Converts OpenAPI 3, JSON Schema, GraphQL, and raw data (JSON/YAML/CSV) into Python models
- π― Generates Pydantic v1/v2, dataclasses, TypedDict, or msgspec output
- π Handles complex schemas:
$ref,allOf,oneOf,anyOf, enums, and nested types - β Produces type-safe, validated code ready for your IDE and type checker
π koxudaxi.github.io/datamodel-code-generator
- π₯οΈ CLI Reference - All command-line options
- βοΈ pyproject.toml - Configuration file
- π CI/CD Integration - GitHub Actions, pre-commit hooks
- π One-liner Usage - uvx, pipx, clipboard integration
- β FAQ - Common questions
uv tool install datamodel-code-generatorOther installation methods
pip:
pip install datamodel-code-generatoruv (add to project):
uv add datamodel-code-generatorconda:
conda install -c conda-forge datamodel-code-generatorWith HTTP support (for resolving remote $ref):
pip install 'datamodel-code-generator[http]'With GraphQL support:
pip install 'datamodel-code-generator[graphql]'Docker:
docker pull koxudaxi/datamodel-code-generatordatamodel-codegen --input schema.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.pyπ schema.json (input)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pet",
"type": "object",
"required": ["name", "species"],
"properties": {
"name": {
"type": "string",
"description": "The pet's name"
},
"species": {
"type": "string",
"enum": ["dog", "cat", "bird", "fish"]
},
"age": {
"type": "integer",
"minimum": 0,
"description": "Age in years"
},
"vaccinated": {
"type": "boolean",
"default": false
}
}
}π model.py (output)
# generated by datamodel-codegen:
# filename: schema.json
from __future__ import annotations
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
class Species(Enum):
dog = 'dog'
cat = 'cat'
bird = 'bird'
fish = 'fish'
class Pet(BaseModel):
name: str = Field(..., description="The pet's name")
species: Species
age: Optional[int] = Field(None, description='Age in years', ge=0)
vaccinated: Optional[bool] = False- OpenAPI 3 (YAML/JSON)
- JSON Schema
- JSON / YAML / CSV data
- GraphQL schema
- Python dictionary
- pydantic v1 BaseModel
- pydantic v2 BaseModel
- dataclasses
- TypedDict
- msgspec Struct
datamodel-codegen --input schema.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.pypip install 'datamodel-code-generator[http]'
datamodel-codegen --url https://example.com/api/openapi.yaml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output model.py[tool.datamodel-codegen]
input = "schema.yaml"
input-file-type = "openapi"
output = "src/models.py"
output-model-type = "pydantic_v2.BaseModel"See pyproject.toml Configuration for more options.
datamodel-codegen --checkVerify generated code stays in sync with schemas. See CI/CD Integration for GitHub Actions and pre-commit hooks.
|
Astral |
These projects use datamodel-code-generator. See the linked examples for real-world usage.
- PostHog/posthog - Generate models via npm run
- airbytehq/airbyte - Generate Python, Java/Kotlin, and Typescript protocol models
- apache/iceberg - Generate Python code
- open-metadata/OpenMetadata - datamodel_generation.py
- awslabs/aws-lambda-powertools-python - Recommended for advanced-use-cases
- Netflix/consoleme - Generate models from Swagger
- DataDog/integrations-core - Config models
- argoproj-labs/hera - Makefile
- SeldonIO/MLServer - generate-types.sh
- geojupyter/jupytergis - Python type generation from JSONSchema
- Nike-Inc/brickflow - Code generate tools
- cloudcoil/cloudcoil - Model generation
- IBM/compliance-trestle - Building models from OSCAL schemas
- hashintel/hash - codegen.sh
- fastapi-code-generator - Generate FastAPI app from OpenAPI
- pydantic-pycharm-plugin - PyCharm plugin for Pydantic
See Development & Contributing for how to get started!
MIT License - see LICENSE for details.