NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #299 most downloaded on PyPI
A lightweight library for converting complex datatypes to and from native Python datatypes.
Last release 1 months ago
08 Aug 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
201 releases · first in 2013
A Schema's error_handler--if defined--will execute if Schema.validate returns validation errors (121).
Bug fixes:
A Schema's error_handler--if defined--will execute if Schema.validate returns validation errors (121).
Deserializing None returns None rather than raising an AttributeError (123). Thanks RealSalmon for the catch and patch.
The validator functions in the validate module are deprecated in favor of the class-based validators (85).
Features:
Add QuerySelect and QuerySelectList fields (84).
Convert validators in marshmallow.validate into class-based callables to make them easier to use when declaring fields (85).
Add Decimal field which is safe to use when dealing with precise numbers (86).
Thanks philtay for these contributions.
Bug fixes:
Date fields correctly deserializes to a datetime.date object when python-dateutil is not installed (79). Thanks malexer for the catch and patch.
Fix bug that raised an AttributeError when using a class-based validator.
Fix as_string behavior of Number fields when serializing to default value.
Deserializing None or the empty string with either a DateTime, Date, Time or TimeDelta results in the correct unmarshalling errors (96). Thanks svenstaro for reporting and helping with this.
Fix error handling when deserializing invalid UUIDs (106). Thanks vesauimonen for the catch and patch.
Schema.loads correctly defaults to use the value of self.many rather than defaulting to False (108). Thanks davidism for the catch and patch.
Validators, data handlers, and preprocessors are no longer shared between schema subclasses (88). Thanks amikholap for reporting.
Fix error handling when passing a dict or list to a ValidationError (110). Thanks ksesong for reporting.
Deprecation:
The validator functions in the validate module are deprecated in favor of the class-based validators (85).
The Arbitrary, Price, and Fixed fields are deprecated in favor of the Decimal field (86).
Support:
Update docs theme.
Update contributing docs (77).
Fix namespacing example in "Extending Schema" docs. Thanks Ch00k.
Exclude virtualenv directories from syntax checking (99). Thanks svenstaro.
One column per quarter.
Add Schema.validate method which validates input data against a schema. Similar to Schema.load, but does not call make_object and only returns the err
Features:
Add Schema.validate method which validates input data against a schema. Similar to Schema.load, but does not call make_object and only returns the errors dictionary.
Add several validation functions to the validate module. Thanks philtay.
Store field name and instance on exceptions raised in strict mode.
Bug fixes:
Fix serializing dictionaries when field names are methods of dict (e.g. "items"). Thanks rozenm for reporting.
If a Nested field is passed many=True, None serializes to an empty list. Thanks nickretallack for reporting.
Fix behavior of many argument passed to dump and load. Thanks svenstaro for reporting and helping with this.
Fix skip_missing behavior for String and List fields. Thanks malexer for reporting.
Fix compatibility with python-dateutil 2.3.
More consistent error messages across DateTime, TimeDelta, Date, and Time fields.
Support:
Update Flask and Peewee examples.
Ensure that errors dictionary is correctly cleared on each call to Schema.dump and Schema.load.
Hotfix release.
Ensure that errors dictionary is correctly cleared on each call to Schema.dump and Schema.load.
*Backwards-incompatible*: error parameter of the Field constructor is deprecated. Raise a ValidationError instead.
Adds new features, speed improvements, better error handling, and updated documentation.
Add skip_missing class Meta option.
A field's default may be a callable.
Allow accessor function to be configured via the Schema.accessor decorator or the __accessor__ class member.
URL and Email fields are validated upon serialization.
dump and load can receive the many argument.
Move a number of utility functions from fields.py to utils.py.
More useful repr for Field classes.
If a field's default is fields.missing and its serialized value is None, it will not be included in the final serialized result.
Schema.dumps no longer coerces its result to a binary string on Python 3.
Backwards-incompatible: Schema output is no longer an OrderedDict by default. If you want ordered field output, you must explicitly set the ordered option to True.
Backwards-incompatible: error parameter of the Field constructor is deprecated. Raise a ValidationError instead.
Expanded test coverage.
Updated docs.
Major reworking and simplification of the public API, centered around support for deserialization, improved validation, and a less stateful Schema cla
Major reworking and simplification of the public API, centered around support for deserialization, improved validation, and a less stateful Schema class.
Rename Serializer to Schema.
Support for deserialization.
Use the Schema.dump and Schema.load methods for serializing and deserializing, respectively.
Backwards-incompatible: Remove Serializer.json and Serializer.to_json. Use Schema.dumps instead.
Reworked fields interface.
Backwards-incompatible: Field classes implement _serialize and _deserialize methods. serialize and deserialize comprise the public API for a Field. Field.format and Field.output have been removed.
Add exceptions.ForcedError which allows errors to be raised during serialization (instead of storing errors in the errors dict).
Backwards-incompatible: DateTime field serializes to ISO8601 format by default (instead of RFC822).
Backwards-incompatible: Remove Serializer.factory method. It is no longer necessary with the dump method.
Backwards-incompatible: Allow nesting a serializer within itself recursively. Use exclude or only to prevent infinite recursion.
Backwards-incompatible: Multiple errors can be stored for a single field. The errors dictionary returned by load and dump have lists of error messages keyed by field name.
Remove validated decorator. Validation occurs within Field methods.
Function field raises a ValueError if an uncallable object is passed to its constructor.
Nested fields inherit context from their parent.
Add Schema.preprocessor and Schema.validator decorators for registering preprocessing and schema-level validation functions respectively.
Custom error messages can be specified by raising a ValidationError within a validation function.
Extra keyword arguments passed to a Field are stored as metadata.
Fix ordering of field output.
Fix behavior of the required parameter on Nested fields.
Fix serializing keyed tuple types (e.g. namedtuple) with class Meta options.
Fix default value for Fixed and Price fields.
Fix serialization of binary strings.
Schemas can inherit fields from non-Schema base classes (e.g. mixins). Also, fields are inherited according to the MRO (rather than recursing over base classes). Thanks jmcarp.
Add Str, Bool, and Int field class aliases.
*Backwards-incompatible*: process_data method is deprecated. Use the data_handler decorator instead.
Add Serializer.error_handler decorator that registers a custom error handler.
Add Serializer.data_handler decorator that registers data post-processing callbacks.
Backwards-incompatible: process_data method is deprecated. Use the data_handler decorator instead.
Fix bug that raised error when passing extra data together with many=True. Thanks buttsicles for reporting.
If required=True validation is violated for a given Field, it will raise an error message that is different from the message specified by the error argument. Thanks asteinlein.
More generic error message raised when required field is missing.
validated decorator should only wrap a Field class's output method.
Fix bug in serializing keyed tuple types, e.g. namedtuple and KeyedTuple.
Fix bug in serializing keyed tuple types, e.g. namedtuple and KeyedTuple.
Nested field can load a serializer by its class name as a string. This makes it easier to implement 2-way nesting.
Make Serializer.data override-able.
Add Serializer.factory for creating a factory function that returns a Serializer instance.
Add Serializer.factory for creating a factory function that returns a Serializer instance.
MarshallingError stores its underlying exception as an instance variable. This is useful for inspecting errors.
fields.Select is aliased to fields.Enum.
Add fields.__all__ and marshmallow.__all__ so that the modules can be more easily extended.
Expose Serializer.OPTIONS_CLASS as a class variable so that options defaults can be overridden.
Add Serializer.process_data hook that allows subclasses to manipulate the final output data.
Add json_module class Meta option.
Add json_module class Meta option.
Add required option to fields . Thanks DeaconDesperado.
Tested on Python 3.4 and PyPy.
Add json_module class Meta option.
Add required option to fields . Thanks @DeaconDesperado .
Tested on Python 3.4 and PyPy.
Fix Integer field default. It is now 0 instead of 0.0. Thanks kalasjocke.
Fix Integer field default. It is now 0 instead of 0.0. Thanks kalasjocke.
Add context param to Serializer. Allows accessing arbitrary objects in Function and Method fields.
Function and Method fields raise MarshallingError if their argument is uncallable.
Enable custom field validation via the validate parameter.
Enable custom field validation via the validate parameter.
Add utils.from_rfc for parsing RFC datestring to Python datetime object.
Avoid unnecessary attribute access in utils.to_marshallable_type for improved performance.
Avoid unnecessary attribute access in utils.to_marshallable_type for improved performance.
Fix RFC822 formatting for localized datetimes.
Can customize validation error messages by passing the error parameter to a field.
Can customize validation error messages by passing the error parameter to a field.
Backwards-incompatible: Rename fields.NumberField -> fields.Number.
Add fields.Select. Thanks ecarreras.
Support nesting a Serializer within itself by passing "self" into fields.Nested (only up to depth=1).
Backwards-incompatible: No implicit serializing of collections. Must set many=True if serializing to a list. This ensures that marshmallow handles singular objects correctly, even if they are iterable.
If Nested field only parameter is a field name, only return a single value for the nested object (instead of a dict) or a flat list of values.
Improved performance and stability.
An object's __marshallable__ method, if defined, takes precedence over __getitem__.
An object's __marshallable__ method, if defined, takes precedence over __getitem__.
Generator expressions can be passed to a serializer.
Better support for serializing list-like collections (e.g. ORM querysets).
Other minor bugfixes.
Add additional class Meta option.
Add additional class Meta option.
Add dateformat class Meta option.
Support for serializing UUID, date, time, and timedelta objects.
Remove Serializer.to_data method. Just use Serialize.data property.
String field defaults to empty string instead of None.
Backwards-incompatible: isoformat and rfcformat functions moved to utils.py.
Backwards-incompatible: Validation functions moved to validate.py.
Backwards-incompatible: Remove types.py.
Reorder parameters to DateTime field (first parameter is dateformat).
Ensure that to_json returns bytestrings.
Fix bug with including an object property in fields Meta option.
Fix bug with passing None to a serializer.
Fix bug with serializing dictionaries.
Fix bug with serializing dictionaries.
Fix error raised when serializing empty list.
Add only and exclude parameters to Serializer constructor.
Add strict parameter and option: causes Serializer to raise an error if invalid data are passed in, rather than storing errors.
Updated Flask + SQLA example in docs.
Declaring Serializers just got easier. The class Meta paradigm allows you to specify fields more concisely. Can specify fields and exclude options.
Declaring Serializers just got easier. The class Meta paradigm allows you to specify fields more concisely. Can specify fields and exclude options.
Allow date formats to be changed by passing format parameter to DateTime field constructor. Can either be "rfc" (default), "iso", or a date format string.
More useful error message when declaring fields as classes (instead of an instance, which is the correct usage).
Rename MarshallingException -> MarshallingError.
Rename marshmallow.core -> marshmallow.serializer.
Fix storing errors on Nested Serializers.
Allow prefixing field names.
Fix storing errors on Nested Serializers.
Python 2.6 support.
Allow binding of extra data to a serialized object by passing the extra param when initializing a Serializer.
Field-level validation.
Add fields.Method.
Add fields.Function.
Allow binding of extra data to a serialized object by passing the extra param when initializing a Serializer.
Add relative parameter to fields.Url that allows for relative URLs.
* First release.
First release.
First release.
On this page
Changelog
4.4.0 (unreleased)
4.3.1 (2026-08-08)
4.3.0 (2026-04-03)
4.2.4 (2026-04-02)
4.2.3 (2026-03-25)
4.2.2 (2026-02-04)
4.2.1 (2026-01-23)
4.2.0 (2026-01-04)
4.1.2 (2025-12-19)
4.1.1 (2025-11-05)
4.1.0 (2025-11-01)
4.0.1 (2025-08-28)
4.0.0 (2025-04-16)
3.26.2 (2025-12-19)
3.26.1 (2025-02-03)
3.26.0 (2025-01-22)
3.25.1 (2025-01-11)
3.25.0 (2025-01-09)
3.24.2 (2025-01-08)
3.24.1 (2025-01-06)
3.24.0 (2025-01-06)
3.23.3 (2025-01-03)
3.23.2 (2024-12-18)
3.23.1 (2024-11-01)
3.23.0 (2024-10-17)
3.22.0 (2024-08-20)
3.21.3 (2024-06-05)
3.21.2 (2024-05-01)
3.21.1 (2024-03-04)
3.21.0 (2024-02-26)
3.20.2 (2024-01-09)
3.20.1 (2023-07-20)
3.20.0 (2023-07-20)
3.19.0 (2022-11-11)
3.18.0 (2022-09-15)
3.17.1 (2022-08-22)
3.17.0 (2022-06-26)
3.16.0 (2022-05-29)
3.15.0 (2022-03-12)
3.14.1 (2021-11-13)
3.14.0 (2021-10-17)
3.13.0 (2021-07-21)
3.12.2 (2021-07-06)
3.12.1 (2021-05-10)
3.12.0 (2021-05-09)
3.11.1 (2021-03-29)
3.11.0 (2021-03-28)
3.10.0 (2020-12-19)
3.9.1 (2020-11-07)
3.9.0 (2020-10-31)
3.8.0 (2020-09-16)
3.7.1 (2020-07-20)
3.7.0 (2020-07-08)
3.6.1 (2020-06-02)
3.6.0 (2020-05-08)
3.5.2 (2020-04-30)
3.5.1 (2020-03-05)
3.5.0 (2020-02-19)
3.4.0 (2020-02-02)
3.3.0 (2019-12-05)
3.2.2 (2019-11-04)
3.2.1 (2019-09-30)
3.2.0 (2019-09-17)
3.1.1 (2019-09-16)
3.1.0 (2019-09-15)
3.0.5 (2019-09-12)
3.0.4 (2019-09-11)
3.0.3 (2019-09-04)
3.0.2 (2019-09-04)
3.0.1 (2019-08-21)
3.0.0 (2019-08-18)
3.0.0rc9 (2019-07-31)
3.0.0rc8 (2019-07-04)
3.0.0rc7 (2019-06-15)
3.0.0rc6 (2019-05-05)
3.0.0rc5 (2019-03-30)
3.0.0rc4 (2019-02-08)
3.0.0rc3 (2019-01-13)
3.0.0rc2 (2019-01-03)
3.0.0rc1 (2018-11-29)
3.0.0b20 (2018-11-01)
3.0.0b19 (2018-10-24)
3.0.0b18 (2018-10-15)
3.0.0b17 (2018-10-13)
3.0.0b16 (2018-09-20)
3.0.0b15 (2018-09-18)
3.0.0b14 (2018-09-15)
3.0.0b13 (2018-08-04)
3.0.0b12 (2018-07-04)
3.0.0b11 (2018-05-20)
3.0.0b10 (2018-05-10)
3.0.0b9 (2018-04-25)
3.0.0b8 (2018-03-24)
3.0.0b7 (2018-02-03)
3.0.0b6 (2018-01-02)
3.0.0b5 (2017-12-30)
3.0.0b4 (2017-10-23)
3.0.0b3 (2017-08-20)
3.0.0b2 (2017-03-19)
3.0.0b1 (2017-03-10)
3.0.0a1 (2017-02-26)
2.21.0 (2020-03-05)
2.20.5 (2019-09-15)
2.20.4 (2019-09-11)
2.20.3 (2019-09-04)
2.20.2 (2019-08-20)
2.20.1 (2019-08-13)
2.20.0 (2019-08-10)
2.19.5 (2019-06-18)
2.19.4 (2019-06-16)
2.19.3 (2019-06-15)
2.19.2 (2019-03-30)
2.19.1 (2019-03-16)
2.19.0 (2019-03-07)
2.18.1 (2019-02-15)
2.18.0 (2019-01-13)
2.17.0 (2018-12-26)
2.16.3 (2018-11-01)
2.16.2 (2018-10-30)
2.16.1 (2018-10-17)
2.16.0 (2018-10-10)
2.15.6 (2018-09-20)
2.15.5 (2018-09-15)
2.15.4 (2018-08-04)
2.15.3 (2018-05-20)
2.15.2 (2018-05-10)
2.15.1 (2018-04-25)
2.15.0 (2017-12-02)
2.14.0 (2017-10-23)
2.13.6 (2017-08-16)
2.13.5 (2017-04-12)
2.13.4 (2017-03-19)
2.13.3 (2017-03-11)
2.13.2 (2017-03-10)
2.13.1 (2017-03-04)
2.13.0 (2017-02-18)
2.12.2 (2017-01-30)
2.12.1 (2017-01-23)
2.12.0 (2017-01-22)
2.11.1 (2017-01-08)
2.11.0 (2017-01-08)
2.10.5 (2016-12-19)
2.10.4 (2016-11-18)
2.10.3 (2016-10-02)
2.10.2 (2016-09-25)
2.10.1 (2016-09-14)
2.10.0 (2016-09-05)
2.9.1 (2016-07-21)
2.9.0 (2016-07-06)
2.8.0 (2016-06-23)
2.7.3 (2016-05-05)
2.7.2 (2016-04-27)
2.7.1 (2016-04-08)
2.7.0 (2016-04-04)
2.6.1 (2016-03-17)
2.6.0 (2016-02-01)
2.5.0 (2016-01-16)
2.4.2 (2015-12-08)
2.4.1 (2015-12-07)
2.4.0 (2015-12-06)
2.3.0 (2015-11-22)
2.2.1 (2015-11-11)
2.2.0 (2015-10-26)
2.1.3 (2015-10-18)
2.1.2 (2015-10-14)
2.1.1 (2015-10-07)
2.1.0 (2015-09-30)
2.0.0 (2015-09-25)
2.0.0rc2 (2015-09-16)
2.0.0rc1 (2015-09-13)
2.0.0b5 (2015-08-23)
2.0.0b4 (2015-07-07)
2.0.0b3 (2015-06-14)
2.0.0b2 (2015-05-03)
2.0.0b1 (2015-04-26)
2.0.0a1 (2015-04-25)
1.2.6 (2015-05-03)
1.2.5 (2015-04-25)
1.2.4 (2015-03-22)
1.2.3 (2015-03-15)
1.2.2 (2015-02-23)
1.2.1 (2015-01-11)
1.2.0 (2014-12-22)
1.1.0 (2014-12-02)
1.0.1 (2014-11-18)
1.0.0 (2014-11-16)
1.0.0-a (2014-10-19)
0.7.0 (2014-06-22)
0.6.0 (2014-06-03)
0.5.5 (2014-05-02)
0.5.4 (2014-04-17)
0.5.3 (2014-03-02)
0.5.2 (2014-02-10)
0.5.1 (2014-02-02)
0.5.0 (2013-12-29)
0.4.1 (2013-12-01)
0.4.0 (2013-11-24)
0.3.1 (2013-11-16)
0.3.0 (2013-11-14)
0.2.1 (2013-11-12)
0.2.0 (2013-11-11)
0.1.0 (2013-11-10)
Your coding agent can read these notes before it upgrades. Set up the MCP server →