datamodel-code-generator
Datamodel Code Generator
Rank: #1080Downloads: 12,051,135 (30 days)Stars: 3,787Forks: 427
Description
datamodel-code-generator
🚀 Generate Python data models from schema definitions in seconds.
✨ What it does
- 📄 Converts OpenAPI 3, JSON Schema, GraphQL, and raw data (JSON/YAML/CSV) into Python models
- 🐍 Generates from existing Python types (Pydantic, dataclass, TypedDict) via
--input-model - 🎯 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
📖 Documentation
👉 datamodel-code-generator.koxudaxi.dev
- 🖥️ 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
📦 Installation
uv tool install datamodel-code-generator
<details>
<summary>Other installation methods</summary>
pip:
pip install datamodel-code-generator
uv (add to project):
uv add datamodel-code-generator
conda:
conda install -c conda-forge datamodel-code-generator
With 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-generator
</details>
🏃 Quick Start
datamodel-codegen --input schema.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py
<details>
<summary>📄 schema.json (input)</summary>
{
"$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
}
}
}
</details>
<details>
<summary>🐍 model.py (output)</summary>
# 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
</details>
📥 Supported Input
- OpenAPI 3 (YAML/JSON)
- JSON Schema
- JSON / YAML / CSV data
- GraphQL schema
- Python types (Pydantic, dataclass, TypedDict) via
--input-model - Python dictionary
📤 Supported Output
- pydantic v1 BaseModel
- pydantic v2 BaseModel
- pydantic v2 dataclass
- dataclasses
- TypedDict
- msgspec Struct
🍳 Common Recipes
🤖 Get CLI Help from LLMs
Generate a prompt to ask LLMs about CLI options:
datamodel-codegen --generate-prompt "Best options for Pydantic v2?" | claude -p
See LLM Integration for more examples.
🌐 Generate from URL
pip install 'datamodel-code-generator[http]'
datamodel-codegen --url https://example.com/api/openapi.yaml --output model.py
⚙️ Use with pyproject.toml
[tool.datamodel-codegen]
input = "schema.yaml"
output = "src/models.py"
output-model-type = "pydantic_v2.BaseModel"
Then simply run:
datamodel-codegen
See pyproject.toml Configuration for more options.
🔄 CI/CD Integration
Validate generated models in your CI pipeline:
- uses: koxudaxi/datamodel-code-generator@0.44.0
with:
input: schemas/api.yaml
output: src/models/api.py
See CI/CD Integration for more options.
💖 Sponsors
<table> <tr> <td valign="top" align="center"> <a href="https://github.com/astral-sh"> <img src="https://avatars.githubusercontent.com/u/115962839?s=200&v=4" alt="Astral Logo" style="width: 100px;"> <p>Astral</p> </a> </td> </tr> </table>🏢 Projects that use datamodel-code-generator
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
🔗 Related Projects
- fastapi-code-generator - Generate FastAPI app from OpenAPI
- pydantic-pycharm-plugin - PyCharm plugin for Pydantic
🤝 Contributing
See Development & Contributing for how to get started!
📄 License
MIT License - see LICENSE for details.