Fetching contributors…
Cannot retrieve contributors at this time
209 lines (162 sloc) 9.38 KB


  • Fix bug introduced in 1.1.8 (#402).


  • Improved errors for multimethods.


  • Remove unnecessarily relative marker in ::schema.spec.collection/ keywords to fix compatibility with latest Clojure 1.9 alpha.


  • Add exclusions to workaround ->MapEntry warnings with latest cljs.


  • Add float type to JVM coercers.


  • Highlights schema validation errors
  • Fix an issue with isa? and the global hierarchy
  • Fix an issue with coercion and map entries


  • Make fn validation customizable by addition of fn-validator function


  • Exclude clojure.core/Inst to avoid warnings in Clojure 1.9 alphas


  • Fix (at least some) AOT issues around PSimpleCell/SimpleVCell, by replacing with atom/AtomicReference.


  • *Deprecate schema.experimental.generators and schema.experimental.complete. Find them in their new home in the separate schema-generators project.
  • BREAKING change the internal details of collection specs (should only be an issue for custom collection schemas that don't rely on helpers one-element or all-elements).
  • Fix generation for sequence schemas containing a non-trailing s/optional element.


  • Install a pprint method that uses the explain, in addition to an ordinary print-method. Should fix large prints and stack overflows while pprinting schemas, or with plugins such as pretty.


  • Fix completion through non-map collections


  • Attempt to resolve issues with AOT compilation by moving typehint on use-fn-validation var to callsites.
  • Update generators, bump minimum version of test.check to 0.9.0. Generators will only work under Clojure 1.7.0+.
  • Better performance for anonymous schematized functions, via lazy checker creation


  • Fix warning about overriding atom under Clojure 1.7
  • Fix behavior of constrained with some schemas (e.g. maps).


  • Extend keyword enum coercion to keyword eq coercion
  • Add s/atom schema for atoms
  • Add coercer! which throws on error
  • Add leaf generators for UUIDs
  • Make s/defn compatible with with-test
  • Add constrained schema for postconditions (replaces (both x (s/pred ...)))


  • Catch and report exceptions in guards the same as preconditions, rather than allowing them to propagate out.


  • New schema backend, which is faster, simpler, and more declarative, enabling more applications and simplifying tooling. Users of built-in schema types should experience very little or no breakage, but tooling or custom schema types will need to be updated. As a concrete example of an application that's enabled, schema now experimentally supports test-check style generation from schemas, as well as completion of partial inputs.
  • BREAKING Changes to the core Schema protocol will break existing third-party schema tooling and schema types.
  • BREAKING Records coerced to an ordinary (non-record) map schema are now converted to maps, rather than retaining their record type.
  • Deprecate s/either in favor of s/cond-pre, s/conditional, or schema.experimental.abstract-map-schema. As of this release, either no longer works with coercion.
  • Deprecate s/both in favor of improved s/conditional.
  • Deprecate schema.core/defrecord+; moved to new schema.potemkin namespace.
  • s/pred can more intelligently guess the predicate name
  • record schemas can now coerce values to corresponding record types.
  • New experimental abstract-map-schema that models super/subclasses as maps.
  • Improved explains explains for leaf schemas, especially in Clojurescript.


  • Fix ClojureScript warnings about map->Record constructors being redefined.
  • Add queue schemas
  • Configurable maximum length for values in error messages
  • Fix potential memory leaks after many redefinitions of s/defn or s/defrecord.


  • Fix longstanding AOT compilation issue when used with Clojure 1.7.0-RC1 and later.


  • Add recursive schema support for ClojureScript
  • Add ns metadata to defschema


  • Fix some harmless warnings when using Schema with the latest version of ClojureScript (due to the addition of positional constructors for deftype).


  • BREAKING Remove support for old ^{:schema ..} style annotations. :- schema is the preferred way, but metadata-style schemas are still allowed for valid Clojure typehints.
  • BREAKING Remove support for bare :- Protocol annotations (use :- (s/protocol Protocol) instead).
  • BREAKING Remove deprecated macros (defn, defrecord, etc) from schema.macros. The identical versions in schema.core remain.
  • BREAKING Remove potemkin as a dependency, and the *use-potemkin* flag. To get the old behavior of potemkin defrecords, you can still bring your own potemkin and use schema.core/defrecord+ in place of schema.core/defrecord.


  • Add coercion handler for s/Uuid from string input


  • Support java.util.List instances as valid data for sequence schemas


  • Make primitive schemas work better in some cases under partial AOT compilation


  • Fix bug in defschema which clobbered metadata, breaking s/protocol in Clojure in 0.3.2.


  • Fix s/protocol in Clojure (didn't work properly with extends created later)
  • Fix ClojureScript (Closure) warning about reference to global RegExp object.
  • Add set-compile-fn-validation! function to turn off emission of validation globally, and turn off emission of validation code for non- ^:always-validate functions when assert is false.


  • Fix Clojurescript compilation warnings/errors from accidental references to and class inside error messages.


  • BREAKING increase minimum clojurescript version 2120 to support :include-macros
  • Deprecate direct use of schema.macros in client code -- prefer canonical versions in schema.core in both Clojure and ClojureScript, using :include-macros true in cljs.
  • Deprecate old ^{:s schema} syntax for providing schemas.
  • Deprecate *use-potemkin* flag and behavior to default to potemkin s/defrecords in Clojure; in future releases, you will have to provide your own potemkin and explicitly opt-in to this behavior.
  • (Hopefully) fix issues with AOT compilation, by removing dependence on potemkin/import-vars.
  • Add isa schema for Clojure hierarchies.
  • Preserve the types of maps (including Records) when coercing with map schemas.
  • Smarter code generation in s/defrecord to avoid dead code warnings
  • Fix printed form of s/Str in ClojureScript
  • Make some internal fns public to simplify third-part schema extensions
  • Walking records with map schemas preserves the record type
  • Proper explain for s/Str


  • Memoize walker computation, providing much faster checker compilation for graph-structured schemas


  • Add normalized-defn-args helper fn for defining s/defn-like macros.
  • Map schemas correctly validate against struct-maps


  • Fixed an issue that could cause ClojureScript compilation to fail
  • Generalize s/recursive to work on artibrary refs
  • Add s/Symbol as a cross-platfor primitive


  • Improved explains for primitives & primitive arrays
  • More robust double coercions
  • Fix cljs warning about extending js/Function
  • Import schema.macros/defmulti in schema.core


  • Add validated s/def.
  • Add validated s/defmethod.
  • Add Bool coercions.


  • Add Bool to cross-platform primitives
  • Fix several minor bugs
  • Replace cljs-test with headless clojurescript.test.


  • breaking change: Cross-platform leaves String and Number are now Str and Num (the former caused warnings and broke AOT).
  • Replaced core Schema protocol method check with walker, for increased speed and versatility
  • Support for schema-driven transformations/coercion
  • Schemas for primitive arrays (longs, etc)
  • Schematized letfn


  • Remove non-dev dependency on cljx


  • Support for pre/postcondition maps in s/defn
  • Support for recursive schemas in Clojure
  • Fixes for sm/defn and sm/defrecord with cljs advanced compilation


  • Works with advanced compilation in cljs (at least sometimes)


  • More small bugfixes
  • Better validation error messages in cljs


  • Minor bugfixes (thanks various contributors)
  • Extend schema protocol to regex (thanks AlexBaranosky).
  • Add :never-validate meta option


  • Fix regression in primitive handling introduced in 0.1.4


  • Added Regex, Inst, and Uuid as primitive schema types (thanks jwhitlark)
  • Add annotated arglists to functions defined with s/defn (thanks danielneal)
  • Add set-fn-validation! to schema.core, to globally turn validation on or off.
  • Add :always-validate metadata on fn/defn name to unconditionally use validation.


  • Fix compatibility with Clojurescript 1889 (removal of format)


  • Validate returns the value on success
  • Sequence schemas only match sequential? things, to match map and set
  • Implementation of defschema puts name in metadata, rather than generating named schema
  • Improved error messages and stack traces for s/defn


  • Bugfix: with-fn-validation persisting after Exception


  • Initial release