Oven logo

Oven

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.

Changelog

v2.12.3 (2025-10-17)

GitHub release

What's Changed

This is the third 2.13 patch release, fixing issues related to the FieldInfo class, and reverting a change to the supported after model validator function signatures.

  • Raise a warning when an invalid after model validator function signature is raised by @Viicos in #12414. Starting in 2.12.0, using class methods for after model validators raised an error, but the error wasn't raised concistently. We decided to emit a deprecation warning instead.
  • Add FieldInfo.asdict() method, improve documentation around FieldInfo by @Viicos in #12411. This also add back support for mutations on FieldInfo classes, that are reused as Annotated metadata. However, note that this is still not a supported pattern. Instead, please refer to the added example in the documentation.

The blog post section on changes was also updated to document the changes related to serialize_as_any.

Fixes

  • Release a new pydantic-core version, as a corrupted CPython 3.10 manylinux2014_aarch64 wheel got uploaded (pydantic-core#1843).
  • Fix issue with recursive generic models with a parent model class by @Viicos in #12398

v2.12.2 (2025-10-14)

GitHub release

What's Changed

Fixes

  • Release a new pydantic-core version, as a corrupted CPython 3.10 manylinux2014_aarch64 wheel got uploaded (pydantic-core#1843).
  • Fix issue with recursive generic models with a parent model class by @Viicos in #12398

v2.12.1 (2025-10-13)

GitHub release

What's Changed

This is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.

Fixes

New Contributors

v2.12.0 (2025-10-07)

GitHub release

What's Changed

This is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support. Several minor changes (considered non-breaking changes according to our versioning policy) are also included in this release. Make sure to look into them before upgrading.

Note that Pydantic V1 is not compatible with Python 3.14 and greater.

Changes (see the alpha and beta releases for additional changes since 2.11):

Packaging

New Features

  • Add extra parameter to the validate functions by @anvilpete in #12233
  • Add exclude_computed_fields serialization option by @Viicos in #12334
  • Add preverse_empty_path URL options by @Viicos in #12336
  • Add union_format parameter to JSON Schema generation by @Viicos in #12147
  • Add __qualname__ parameter for create_model by @Atry in #12001

Fixes

  • Do not try to infer name from lambda definitions in pipelines API by @Viicos in #12289
  • Use proper namespace for functions in TypeAdapter by @Viicos in #12324
  • Use Any for context type annotation in TypeAdapter by @inducer in #12279
  • Expose FieldInfo in pydantic.fields.__all__ by @Viicos in #12339
  • Respect validation_alias in @validate_call by @Viicos in #12340
  • Use Any as context annotation in plugin API by @Viicos in #12341
  • Use proper stacklevel in warnings when possible by @Viicos in #12342

New Contributors

v2.12.0b1 (2025-10-03)

GitHub release

This is the first beta release of the upcoming 2.12 release.

What's Changed

Packaging

New Features

Changes

  • Raise error if an incompatible pydantic-core version is installed by @Viicos in #12196
  • Remove runtime warning for experimental features by @Viicos in #12265
  • Warn if registering virtual subclasses on Pydantic models by @Viicos in #11669

Fixes

  • Fix __getattr__() behavior on Pydantic models when a property raised an AttributeError and extra values are present by @raspuchin in #12106
  • Add test to prevent regression with Pydantic models used as annotated metadata by @Viicos in #12133
  • Allow to use property setters on Pydantic dataclasses with validate_assignment set by @Viicos in #12173
  • Fix mypy v2 plugin for upcoming mypy release by @cdce8p in #12209
  • Respect custom title in functions JSON Schema by @Viicos in #11892
  • Fix ImportString JSON serialization for objects with a name attribute by @chr1sj0nes in #12219
  • Do not error on fields overridden by methods in the mypy plugin by @Viicos in #12290

New Contributors

v2.12.0a1 (2025-07-26)

GitHub release

This is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.

What's Changed

New Features

  • Add __pydantic_on_complete__() hook that is called once model is fully ready to be used by @DouweM in #11762
  • Add initial support for Python 3.14 by @Viicos in #11991
  • Add regex patterns to JSON schema for Decimal type by @Dima-Bulavenko in #11987
  • Add support for doc attribute on dataclass fields by @Viicos in #12077
  • Add experimental MISSING sentinel by @Viicos in #11883

Changes

  • Allow config and bases to be specified together in create_model() by @Viicos in #11714
  • Move some field logic out of the GenerateSchema class by @Viicos in #11733
  • Always make use of inspect.getsourcelines() for docstring extraction on Python 3.13 and greater by @Viicos in #11829
  • Only support the latest Mypy version by @Viicos in #11832
  • Do not implicitly convert after model validators to class methods by @Viicos in #11957
  • Refactor FieldInfo creation implementation by @Viicos in #11898
  • Make Secret covariant by @bluenote10 in #12008
  • Emit warning when field-specific metadata is used in invalid contexts by @Viicos in #12028

Fixes

  • Properly fetch plain serializer function when serializing default value in JSON Schema by @Viicos in #11721
  • Remove generics cache workaround by @Viicos in #11755
  • Remove coercion of decimal constraints by @Viicos in #11772
  • Fix crash when expanding root type in the mypy plugin by @Viicos in #11735
  • Only mark model as complete once all fields are complete by @DouweM in #11759
  • Do not provide field_name in validator core schemas by @DouweM in #11761
  • Fix issue with recursive generic models by @Viicos in #11775
  • Fix qualified name comparison of private attributes during namespace inspection by @karta9821 in #11803
  • Make sure Pydantic dataclasses with slots and validate_assignment can be unpickled by @Viicos in #11769
  • Traverse function-before schemas during schema gathering by @Viicos in #11801
  • Fix check for stdlib dataclasses by @Viicos in #11822
  • Check if FieldInfo is complete after applying type variable map by @Viicos in #11855
  • Do not delete mock validator/serializer in model_rebuild() by @Viicos in #11890
  • Rebuild dataclass fields before schema generation by @Viicos in #11949
  • Always store the original field assignment on FieldInfo by @Viicos in #11946
  • Do not use deprecated methods as default field values by @Viicos in #11914
  • Allow callable discriminator to be applied on PEP 695 type aliases by @Viicos in #11941
  • Suppress core schema generation warning when using SkipValidation by @ygsh0816 in #12002
  • Do not emit typechecking error for invalid Field() default with validate_default set to True by @Viicos in #11988
  • Refactor logic to support Pydantic's Field() function in dataclasses by @Viicos in #12051

Packaging

New Contributors

v2.11.7 (2025-06-14)

GitHub release

What's Changed

Fixes

  • Copy FieldInfo instance if necessary during FieldInfo build by @Viicos in #11898

v2.11.6 (2025-06-13)

GitHub release

What's Changed

Fixes

  • Rebuild dataclass fields before schema generation by @Viicos in #11949
  • Always store the original field assignment on FieldInfo by @Viicos in #11946

v2.11.5 (2025-05-22)

GitHub release

What's Changed

Fixes

  • Check if FieldInfo is complete after applying type variable map by @Viicos in #11855
  • Do not delete mock validator/serializer in model_rebuild() by @Viicos in #11890
  • Do not duplicate metadata on model rebuild by @Viicos in #11902

v2.11.4 (2025-04-29)

GitHub release

What's Changed

Packaging

Changes

  • Allow config and bases to be specified together in create_model() by @Viicos in #11714. This change was backported as it was previously possible (although not meant to be supported) to provide model_config as a field, which would make it possible to provide both configuration and bases.

Fixes

  • Remove generics cache workaround by @Viicos in #11755
  • Remove coercion of decimal constraints by @Viicos in #11772
  • Fix crash when expanding root type in the mypy plugin by @Viicos in #11735
  • Fix issue with recursive generic models by @Viicos in #11775
  • Traverse function-before schemas during schema gathering by @Viicos in #11801

v2.11.3 (2025-04-08)

GitHub release

What's Changed

Packaging

Fixes

  • Preserve field description when rebuilding model fields by @Viicos in #11698

v2.11.2 (2025-04-03)

GitHub release

What's Changed

Fixes

  • Bump pydantic-core to v2.33.1 by @Viicos in #11678
  • Make sure __pydantic_private__ exists before setting private attributes by @Viicos in #11666
  • Do not override FieldInfo._complete when using field from parent class by @Viicos in #11668
  • Provide the available definitions when applying discriminated unions by @Viicos in #11670
  • Do not expand root type in the mypy plugin for variables by @Viicos in #11676
  • Mention the attribute name in model fields deprecation message by @Viicos in #11674
  • Properly validate parameterized mappings by @Viicos in #11658

v2.11.1 (2025-03-28)

GitHub release

What's Changed

Fixes

  • Do not override 'definitions-ref' schemas containing serialization schemas or metadata by @Viicos in #11644

v2.11.0 (2025-03-27)

GitHub release

What's Changed

Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). See the blog post for more details.

Packaging

New Features

  • Add encoded_string() method to the URL types by @YassinNouh21 in #11580
  • Add support for defer_build with @validate_call decorator by @Viicos in #11584
  • Allow @with_config decorator to be used with keyword arguments by @Viicos in #11608
  • Simplify customization of default value inclusion in JSON Schema generation by @Viicos in #11634
  • Add generate_arguments_schema() function by @Viicos in #11572

Fixes

  • Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by @Viicos in #11571
  • Fix runtime error when computing model string representation involving cached properties and self-referenced models by @Viicos in #11579
  • Preserve other steps when using the ellipsis in the pipeline API by @Viicos in #11626
  • Fix deferred discriminator application logic by @Viicos in #11591

New Contributors

v2.11.0b2 (2025-03-17)

GitHub release

What's Changed

Packaging

New Features

  • Add experimental support for free threading by @Viicos in #11516

Fixes

  • Fix NotRequired qualifier not taken into account in stringified annotation by @Viicos in #11559

New Contributors

v2.11.0b1 (2025-03-06)

GitHub release

What's Changed

Packaging

New Features

Changes

Performance

Fixes

New Contributors

v2.11.0a2 (2025-02-10)

GitHub release

What's Changed

Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). This is another early alpha release, meant to collect early feedback from users having issues with core schema builds.

Packaging

Performance

Fixes

  • Use the correct JSON Schema mode when handling function schemas by @Viicos in #11367
  • Fix JSON Schema reference logic with examples keys by @Viicos in #11366
  • Improve exception message when encountering recursion errors during type evaluation by @Viicos in #11356
  • Always include additionalProperties: True for arbitrary dictionary schemas by @austinyu in #11392
  • Expose fallback parameter in serialization methods by @Viicos in #11398
  • Fix path serialization behavior by @sydney-runkle in #11416

New Contributors

v2.11.0a1 (2025-01-30)

GitHub release

What's Changed

Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). This is an early alpha release, meant to collect early feedback from users having issues with core schema builds.

Packaging

New Features

  • Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in #10789
  • Add a default_factory_takes_validated_data property to FieldInfo by @Viicos in #11034
  • Raise a better error when a generic alias is used inside type[] by @Viicos in #11088
  • Properly support PEP 695 generics syntax by @Viicos in #11189
  • Properly support type variable defaults by @Viicos in #11332

Changes

  • Rework create_model field definitions format by @Viicos in #11032
  • Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in #11168
  • Deprecate accessing model_fields and model_computed_fields on instances by @Viicos in #11169
  • Move core schema generation logic for path types inside the GenerateSchema class by @sydney-runkle in #10846
  • Move deque schema gen to GenerateSchema class by @sydney-runkle in #11239
  • Move Mapping schema gen to GenerateSchema to complete removal of prepare_annotations_for_known_type workaround by @sydney-runkle in #11247
  • Remove Python 3.8 Support by @sydney-runkle in #11258
  • Disable pydantic-core core schema validation by @sydney-runkle in #11271

Performance

Fixes

  • Add validation tests for _internal/_validators.py by @tkasuz in #10763
  • Improve TypeAdapter instance repr by @sydney-runkle in #10872
  • Revert "ci: use locally built pydantic-core with debug symbols by @sydney-runkle in #10942
  • Re-enable all FastAPI tests by @tamird in #10948
  • Fix typo in HISTORY.md. by @felixxm in #11077
  • Infer final fields with a default value as class variables in the mypy plugin by @Viicos in #11121
  • Recursively unpack Literal values if using PEP 695 type aliases by @Viicos in #11114
  • Override __subclasscheck__ on ModelMetaclass to avoid memory leak and performance issues by @Viicos in #11116
  • Remove unused _extract_get_pydantic_json_schema() parameter by @Viicos in #11155
  • Add FastAPI and SQLModel to third-party tests by @sydney-runkle in #11044
  • Fix conditional expressions syntax for third-party tests by @Viicos in #11162
  • Move FastAPI tests to third-party workflow by @Viicos in #11164
  • Improve discriminated union error message for invalid union variants by @Viicos in #11161
  • Unpack PEP 695 type aliases if using the Annotated form by @Viicos in #11109
  • Include openapi-python-client check in issue creation for third-party failures, use main branch by @sydney-runkle in #11182
  • Add pandera third-party tests by @Viicos in #11193
  • Add ODMantic third-party tests by @sydney-runkle in #11197
  • Add missing stacklevel in deprecated_instance_property warning by @Viicos in #11200
  • Copy WithJsonSchema schema to avoid sharing mutated data by @thejcannon in #11014
  • Do not cache parametrized models when in the process of parametrizing another model by @Viicos in #10704
  • Re-enable Beanie third-party tests by @Viicos in #11214
  • Add discriminated union related metadata entries to the CoreMetadata definition by @Viicos in #11216
  • Consolidate schema definitions logic in the _Definitions class by @Viicos in #11208
  • Support initializing root model fields with values of the root type in the mypy plugin by @Viicos in #11212
  • Fix various issues with dataclasses and use_attribute_docstrings by @Viicos in #11246
  • Only compute normalized decimal places if necessary in decimal_places_validator by @misrasaurabh1 in #11281
  • Fix two misplaced sentences in validation errors documentation by @ananiavito in #11302
  • Fix mkdocstrings inventory example in documentation by @pawamoy in #11311
  • Add support for validation_alias in the mypy plugin by @Viicos in #11295
  • Do not transform model serializer functions as class methods in the mypy plugin by @Viicos in #11298
  • Simplify GenerateJsonSchema.literal_schema() implementation by @misrasaurabh1 in #11321
  • Add additional allowed schemes for ClickHouseDsn by @Maze21127 in #11319
  • Coerce decimal constraints to Decimal instances by @Viicos in #11350
  • Fix ValueError on year zero by @davidhewitt in pydantic-core#1583

New Contributors

v2.10.6 (2025-01-23)

GitHub release

What's Changed

Fixes

v2.10.5 (2025-01-08)

GitHub release

What's Changed

Fixes

v2.10.4 (2024-12-18)

GitHub release

What's Changed

Packaging

Fixes

  • Fix for comparison of AnyUrl objects by @alexprabhat99 in #11082
  • Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by @Viicos in #11093
  • Include JSON Schema input core schema in function schemas by @Viicos in #11085
  • Add len to _BaseUrl to avoid TypeError by @Kharianne in #11111
  • Make sure the type reference is removed from the seen references by @Viicos in #11143

New Contributors

v2.10.3 (2024-12-03)

GitHub release

What's Changed

Fixes

  • Set fields when defer_build is set on Pydantic dataclasses by @Viicos in #10984
  • Do not resolve the JSON Schema reference for dict core schema keys by @Viicos in #10989
  • Use the globals of the function when evaluating the return type for PlainSerializer and WrapSerializer functions by @Viicos in #11008
  • Fix host required enforcement for urls to be compatible with v2.9 behavior by @sydney-runkle in #11027
  • Add a default_factory_takes_validated_data property to FieldInfo by @Viicos in #11034
  • Fix url json schema in serialization mode by @sydney-runkle in #11035

v2.10.2 (2024-11-25)

GitHub release

What's Changed

Fixes

  • Only evaluate FieldInfo annotations if required during schema building by @Viicos in #10769
  • Do not evaluate annotations for private fields by @Viicos in #10962
  • Support serialization as any for Secret types and Url types by @sydney-runkle in #10947
  • Fix type hint of Field.default to be compatible with Python 3.8 and 3.9 by @Viicos in #10972
  • Add hashing support for URL types by @sydney-runkle in #10975
  • Hide BaseModel.__replace__ definition from type checkers by @Viicos in #10979

v2.10.1 (2024-11-21)

GitHub release

What's Changed

Packaging

Fixes

New Contributors

v2.10.0 (2024-11-20)

The code released in v2.10.0 is practically identical to that of v2.10.0b2.

GitHub release

See the v2.10 release blog post for the highlights!

What's Changed

Packaging

New Features

Changes

Performance

  • Schema cleaning: skip unnecessary copies during schema walking by @Viicos in #10286
  • Refactor namespace logic for annotations evaluation by @Viicos in #10530
  • Improve email regexp on edge cases by @AlekseyLobanov in #10601
  • CoreMetadata refactor with an emphasis on documentation, schema build time performance, and reducing complexity by @sydney-runkle in #10675

Fixes

New Contributors

v2.10.0b2 (2024-11-13)

Pre-release, see the GitHub release for details.

v2.10.0b1 (2024-11-06)

Pre-release, see the GitHub release for details.

... see here for earlier changes.