pydantic

    pydantic/pydantic

    Data validation using Python type hints

    backend
    hints
    json-schema
    parsing
    pydantic
    python
    python310
    python311
    python312
    python313
    python39
    validation
    Python
    MIT
    26.8K stars
    2.4K forks
    26.8K watching
    Updated 3/14/2026
    View on GitHub
    Backblaze Advertisement

    Loading star history...

    Health Score

    22.48

    Weekly Growth

    +0

    +0.0% this week

    Contributors

    1

    Total contributors

    Open Issues

    548

    Generated Insights

    About pydantic

    Pydantic Validation

    CI Coverage pypi CondaForge downloads versions license Pydantic v2 llms.txt

    Data validation using Python type hints.

    Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.9+; validate it with Pydantic.

    Pydantic Logfire :fire:

    We've recently launched Pydantic Logfire to help you monitor your applications. Learn more

    Pydantic V1.10 vs. V2

    Pydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.

    If you're using Pydantic V1 you may want to look at the pydantic V1.10 Documentation or, 1.10.X-fixes git branch. Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: from pydantic import v1 as pydantic_v1.

    Help

    See documentation for more details.

    Installation

    Install using pip install -U pydantic or conda install pydantic -c conda-forge. For more installation options to make Pydantic even faster, see the Install section in the documentation.

    A Simple Example

    from datetime import datetime
    from typing import Optional
    from pydantic import BaseModel
    
    class User(BaseModel):
        id: int
        name: str = 'John Doe'
        signup_ts: Optional[datetime] = None
        friends: list[int] = []
    
    external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
    user = User(**external_data)
    print(user)
    #> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
    print(user.id)
    #> 123
    

    Contributing

    For guidance on setting up a development environment and how to make a contribution to Pydantic, see Contributing to Pydantic.

    Reporting a Security Vulnerability

    See our security policy.

    Discover Repositories

    Search across tracked repositories by name or description