All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.1.0 - 2026-03-23

Added

  • AshZoi.to_schema/2 for converting Ash types to Zoi validation schemas
  • Support for all built-in Ash types: String, CiString, Integer, Float, Boolean, Atom, Decimal, Date, Time, DateTime, NaiveDatetime, UtcDatetime, UtcDatetimeUsec, UUID, UUIDv7, Binary, Map, Struct, Module, and Union
  • Automatic constraint mapping from Ash to Zoi (min/max → gte/lte, min_length/max_length, match → regex, one_of → enum)
  • Ash Resource introspection — pass a resource module to generate a Zoi map schema from its public attributes
  • :only and :except options for filtering resource attributes
  • Embedded resource support — nested resources are converted recursively
  • Ash.Type.Struct support with instance_of and fields constraints
  • Ash.Type.Union support via Zoi.discriminated_union/3 using Ash's _union_type/_union_value input format
  • Ash.TypedStruct support — typed structs are introspected and converted to Zoi map schemas
  • Ash.Type.NewType support — NewTypes are automatically unwrapped to their underlying type with merged constraints
  • Array type support ({:array, type}) with element-level and array-level constraints
  • Depth-limited NewType unwrapping to prevent infinite recursion