Skip to content

Releases: jcrist/msgspec

Version 0.21.1

12 Apr 21:33
10c9ac4

Choose a tag to compare

  • Fix ValidationError and DecodeError raised in dec_hook being incorrectly wrapped in another ValidationError (#1013).
  • Fix a potential NULL dereference in structmeta_get_module_ns (#1016).
  • Fix a reference leak in ms_passes_big_int_constraints (#1017).
  • Fix missing ref_template parameter in msgspec.json.schema type stub (#1002).
  • Clarify order='deterministic' encoder docstrings (#1011).
  • Add a porting guide for users migrating from orjson (#1007).

Version 0.21.0

08 Apr 19:47
f99dca7

Choose a tag to compare

  • Fix a segfault on Python 3.13+ that could occur when creating structs that contained a __dict__, instead of only using __slots__ (#960).
  • Improve type annotations for msgspec.UNSET (#975).
  • Fix hashing of decoded tuples on Python 3.14 (#980).
  • Add ref_template arg to msgspec.json.schema (#983).
  • Add missing libm linkage to some architectures (#993).
  • Fix memory leak when decoding sets (#991).
  • Add uniqueItems annotation to set/frozenset JSON schemas (#984).
  • BREAKING: Call __post_init__ from msgspec.structs.replace/copy.replace (#1000).

Version 0.20.0

24 Nov 03:44
a46a2c6

Choose a tag to compare

  • Support Python 3.14, including freethreaded mode (#852, #877).
  • Expose the StructMeta metaclass (#890, #927, #928, #940, #945).
  • Add msgspec.inspect.is_struct and msgspec.inspect.is_struct_type functions for checking whether an object is a msgspec.Struct-like instance or class (#950).
  • Support Windows arm64 builds (#943).
  • Enable ThinLTO on macOS aarch64 builds (#937).
  • Fix leaks of re.Pattern objects when using pattern constraints of msgspec.Meta (#899).
  • Fixed memoryview support for msgspec.msgpack (#836).
  • Fix crash when typing.TypedDict contains incorrect metadata (#853, #947).
  • Add setuptools-scm as a build dependency instead of vendoring versioneer (#905).
  • Remove support for legacy packaging builds (#907).
  • Improved the developer experience by adding the just command runner and Dev Container support (#918).

Version 0.19.0

27 Dec 17:07

Choose a tag to compare

  • Improve JSON encoding performance by up to 40% (#647).
  • Ensure tuple and frozenset default values are treated identically whether specified by value or default_factory (#653).
  • Fix memory leak of match_args in StructConfig object (#684).
  • Fix memory leak in Raw.copy() (#709).
  • Update decode signatures for PEP 688 (#740).
  • Generate __replace__ method on Struct types, for use with copy.replace (#747).
  • Fix incorrect decoding of certain > 64 bit integers (#751).
  • Call __post_init__ when converting from an object to a Struct (#752).
  • BREAKING: Expand buffer when encode_into is passed a buffer smaller than offset (#753).
  • Support Raw objects as inputs to convert (#754).
  • Error nicely when a dataclass type (instead of an instance) is passed to encode (#755).
  • Drop support for Python 3.8 (#756, #763).
  • Add support for Python 3.13 (#711).
  • Remove deprecated from_builtins (#761).
  • Support encoding any Enum type whose .value is a supported type (#757).
  • Don't fail eagerly when processing generic types with unsupported __parameters__ (#772).
  • Use eval_type_backport to backport type annotations to Python 3.9 (#773).

Version 0.18.6

22 Jan 04:00
0.18.6

Choose a tag to compare

  • Support coercing integral floats to ints when strict=False (#619).
  • Preserve leading _ when renaming fields to camel or pascal case (#620).
  • Support zero-copy decoding binary fields to a memoryview (#624).
  • Fix a bug when inheriting from the same Generic base class multiple times (#626).
  • Add an order option to all encoders for enforcing deterministic/sorted ordering when encoding. This can help provide a more consistent or human readable output (#627).
  • Support inheriting from any slots-class when defining a new Struct type with gc=False (#635).
  • Automatically infer the input field naming convention when converting non-dict mappings or arbitrary objects to Struct types in msgspec.convert (#636).

Version 0.18.5

13 Dec 04:03

Choose a tag to compare

  • Support unhashable Annotated metadata in msgspec.inspect.type_info (#566).
  • Fix bug preventing decoding dataclasses/attrs types with default values and slots=True, frozen=True (#569).
  • Support passing parametrized generic struct types to msgspec.structs.fields (#571).
  • Validate str constraints on dict keys when decoding msgpack (#577).
  • Support UUID subclasses as inputs to msgspec.convert (#592).
  • Call __eq__ from generated __ne__ if user defines manual __eq__ method on a Struct type (#593).
  • Include the Struct type in the generated hash (#595).
  • Add a cache_hash struct option (#596).
  • Fix a bug around caching of dataclass type info when dealing with subclasses of dataclasses (#599).
  • Add msgspec.structs.force_setattr (#600).
  • Support custom dict key types in JSON encoder and decoder (#602).
  • Include dict key constraints in generated JSON schema via the propertyNames field (#604).
  • Add a schema_hook for generating JSON schemas for custom types (#605).
  • Add support for Python 3.12's type aliases (#606).

Version 0.18.4

05 Oct 04:29

Choose a tag to compare

  • Resolve an issue leading to periodic segfaults when importing msgspec on CPython 3.12 (#561)

Version 0.18.3

03 Oct 07:10

Choose a tag to compare

  • Improve type annotation for Struct.__rich_repr__ (#557)
  • Add pre-built wheels for Python 3.12 (#558)

Version 0.18.2

26 Aug 21:00

Choose a tag to compare

  • Support Enum._missing_ hooks for handling unknown enum values (#532).
  • Fix JSON encoding of datetime.datetime objects with zoneinfo.ZoneInfo timezone components (#534).
  • Add support for attrs validators (#538).
  • Relax datetime/time parsing format to allow some RFC3339 extensions from ISO8601 (#539).

Version 0.18.1

16 Aug 05:19

Choose a tag to compare

  • Support custom builtin_types in msgspec.to_builtins (#517).
  • Try getattr before getitem when converting with from_attributes=True (#519).
  • More efficient module state access in top-level functions (#521).