Skip to main content

Datamodel Code Generator

Project description

datamodel-code-generator

๐Ÿš€ Generate Python data models from schema definitions in seconds.

๐Ÿงช Try it in your browser: Playground

[!NOTE] Playground privacy: generation runs locally in your browser with Pyodide. Schemas and options are not sent to a backend. Shared repro URLs encode them in the URL fragment (#state=...), which browsers do not send to the server; the full URL can still be stored in your browser history or wherever you share it.

PyPI version Conda-forge Downloads PyPI - Python Version codecov license Pydantic v2

๐Ÿ“ฃ ๐Ÿ’ผ Maintainer update: Open to opportunities. ๐Ÿ”— koxudaxi.dev

โœจ What it does

  • ๐Ÿ“„ Converts OpenAPI 3, AsyncAPI, JSON Schema, Apache Avro, XML Schema, Protocol Buffers/gRPC, GraphQL, MCP tool schemas, and raw data (JSON/YAML/CSV) into Python models
  • ๐Ÿ Generates from existing Python types (Pydantic, dataclass, TypedDict) via --input-model
  • ๐ŸŽฏ Generates Pydantic v2, Pydantic v2 dataclass, 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


๐Ÿ“ฆ Installation

Recommended for standalone CLI use:

uv tool install datamodel-code-generator

For projects that should pin the generator version, add it as a development dependency instead:

uv add --dev datamodel-code-generator
Other installation methods

pip:

pip install datamodel-code-generator

uv (run without adding to project):

uv run --with datamodel-code-generator datamodel-codegen --help

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]'

With Protocol Buffers support:

pip install 'datamodel-code-generator[protobuf]'

Docker:

docker pull koxudaxi/datamodel-code-generator

๐Ÿƒ Quick Start

datamodel-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

๐Ÿ“ฅ Supported Input

  • OpenAPI 3 (YAML/JSON)
  • AsyncAPI (YAML/JSON)
  • JSON Schema
  • Apache Avro schema (AVSC)
  • XML Schema (XSD)
  • Protocol Buffers / gRPC (.proto)
  • MCP tool schemas
  • JSON / YAML / CSV data
  • GraphQL schema
  • Python types (Pydantic, dataclass, TypedDict) via --input-model
  • Python dictionary

๐Ÿ“ค Supported Output


๐Ÿณ 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

Astral Logo

Astral


๐Ÿข Projects that use datamodel-code-generator

These projects use datamodel-code-generator. See the linked examples for real-world usage.

See all dependents โ†’


๐Ÿ”— Related Projects


๐Ÿค Contributing

See Development & Contributing for how to get started!

๐Ÿ“„ License

MIT License - see LICENSE for details.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datamodel_code_generator-0.59.1.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

datamodel_code_generator-0.59.1-py3-none-any.whl (333.5 kB view details)

Uploaded Python 3

File details

Details for the file datamodel_code_generator-0.59.1.tar.gz.

File metadata

File hashes

Hashes for datamodel_code_generator-0.59.1.tar.gz
Algorithm Hash digest
SHA256 aef5794f58d2e85b7a603862a922985417d6610458a8f927b1660bd0d3955df1
MD5 5603f502b243a95c584b15b515931fa0
BLAKE2b-256 e55acee8c4d30de3e9b561b677d22929d7b3485d7888b0425b9611310826554d

See more details on using hashes here.

Provenance

The following attestation bundles were made for datamodel_code_generator-0.59.1.tar.gz:

Publisher: publish.yaml on koxudaxi/datamodel-code-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file datamodel_code_generator-0.59.1-py3-none-any.whl.

File metadata

File hashes

Hashes for datamodel_code_generator-0.59.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8b9391a14986a853c4b129ca3e3fd8b905fac26d1801f82f2f79a46e3e29d75f
MD5 ee879d7b813a46650e3002b8a09f6e8f
BLAKE2b-256 c170546f4c655614bb48fb9a7b4bc8a138f3c90c17f53797c9840d6a8bc57d7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for datamodel_code_generator-0.59.1-py3-none-any.whl:

Publisher: publish.yaml on koxudaxi/datamodel-code-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page