Clone wiki

snakeyaml / Changes

SnakeYAML is normally released twice a year: August and February


1.24 (in Mercurial)

  • Fix #431: Customize simple key length when dumping (thanks to @Sergey Leonov)
  • Fix #430: Wrap runtime exceptions into YAMLException. It was reported for snakeyaml-engine (thanks to @Fred Curts)
  • Fix: Null tag constructor not called when parsing top-level null value. It was reported for snakeyaml-engine (thanks to @Fred Curts)
  • Fix #429: Provide "Automatic-Module-Name" entry in MANIFEST (thanks to @Nikita Lipsky)
  • Fix #426: Fix NPE when duplicate keys are not allowed and the key is null (thanks to @Marc O'Morain)
  • Apply pull request #41: Support java.sql classes without the need to depend on java.sql module in java9+ (thanks to @Tomas Langer)
  • Update: Java 7 is required.
  • Fix #423: Date Serialization Fails for TimeZones on Daylight Savings Time (thanks to @Robert Robinson)

1.23 (2018-08-27)

  • Update: run tests under Java 11 (thanks to Docker) This is the last release to support Java 6. As of the next release Java 7 will be required.
  • Fix #412: Restore the Boolean constructors for Events and Nodes for binary compatibility of dependent projects (thanks to Alex Heneveld)
  • Fix #411: System Property "" is not required to be defined (thanks to @Marcus Böhm)
  • Fix #409: Dumping Enum breaks when Enum value is Anonymous inner class (thanks to @Evan Ward)

1.21 (2018-04-13)

  • Update: Scanner.peekToken() and Scanner.getToken() throw exception instead of returning null
  • Update: Enhance output of token IDs (thanks to @Sylvain Baudoin)
  • Update: Mark - expose buffer and pointer (thanks to @Sylvain Baudoin)
  • Update: Improvements in the Bitbucket pipeline (thanks to @Sylwester Lachiewicz)
  • Fix #397: Plain scalars with colons in flow sequences/mappings are valid YAML. This change follows what happens with PyYAML and libyaml (thanks to developers from the YAML community)

1.20 (2018-02-28)

  • Fix #393: Improve reflective access operation to avoid warning under Java 9 (thanks to @Uwe Schindler and @Ian Carroll)
  • Hold #397: because of the inconsistent corner cases the ':' is not yet allowed in a flow context
  • Refactor nodes and events - use enum FlowStyle instead of Boolean (minor backwards-incompatible change)
  • Refactor ScalarToken, ScalarNode and ScalarEvent - use enum ScalarStyle instead of Character (minor backwards-incompatible change)
  • Refactor Mark - remove unused code (minor backwards-incompatible change)
  • Fix #395 and #394: Introduce DuplicateKeyException and report line number for duplicate keys when creating non-Javabeans (thanks to @Alexander Petrossian (PAF) and @Manfredi Giordano)

1.19 (2017-10-14)

1.18 (2017-02-22)

  • Add: create Android artifact with android classifier
  • Fix issue #358: Validate DumperOptions to prevent invalid YAML to be dumped.
  • Fix issue #355: Fix for emitter to split long plain string scalars over multiple lines (thanks to @Oscar Scholten. See pull request #16).
  • Apply pull request #13: Let Mark implement Serializable so that ParserException can be serialized (thanks to Hans Schulz)
  • Fix issue #337: Throw exception in case of duplicate keys when LoaderOptions.allowDuplicateKeys is false (thanks to @rbuckland. See pull request #11).
  • Fix issue #351: Keep same nodes order on merge (preprocess keys for MappingNode and remove duplicates keeping the last one).
  • Fix issue #349: Ignore white spaces for base64 encoded scalar (thanks to Terry Moschou)
  • Fix issue #348: Not removing parent object when composed object is an anchor (thanks to Muhammet YILDIZ)
  • Fix issue #323: Support "Miscellaneous Symbols and Pictographs" (thanks to Pawel Skierczynski [Atlassian]). This fix introduces minor backwards-incompatible changes - some of the methods have been renamed. This fixes also long standing issue with iOS emoji
  • Fix issue #341: Fix NPE in BaseRepresenter.multiRepresenters if it contains 'null' as a key (thanks to Jörg Michelberger)
  • Update plugin versions

1.17 (2016-02-19)

  • Fix issue #318: Use Thread.currentThread.getContextClassLoader in Class.forName instead of default one (thanks to @ronsigal)
  • Fix issue #327: Allow customizing block sequence indentation (thanks to @tareqsha)
  • Fix issue #329: Add parameters to POM to change distribution server
  • Fix issue #326: Relax some of the modifiers to make integration easier (thanks to @Vermut)
  • Fix issue #310: Make use of private/protected constructors for Scalars and 'immutable' objects. This fix allows Bean properties of type java.util.Optional<T> (thanks to Alex)
  • Fix issue #306: Support UUID (thanks to The Alchemist)
  • Apply pull request #3: Add Support for Polyglot Maven. Thanks to Jason van Zyl.
  • Fix issue #314: Ability to customize anchor names (thanks to B. K. Oxley)

1.16 (2015-08-18)

  • Pull request 2: Added a correct URL for the license (thanks to Oliver Fischer)
  • Fix issue 302: Convert byte[] to String when it matches the JavaBean property (thanks to Jalian)
  • Fix issue 212: Fix a typo in an error message in ScannerImpl (thanks to michael koch)
  • Fix issue 209: Do not print special characters in the error message (thanks to joseph.gregory)
  • Investigate issue 199: Duplicate mapping keys

1.15 (2015-02-19)

  • Use Maven 3
  • Added split lines option to DumperOptions to allow line splitting to be disabled. (thanks to Ville Koskela)
  • Fix issue 201: Fix grammar error in exception message (thanks to eric.c.dahl and

1.14 (2014-08-29)

  • Fix issue 197: Improve loading JavaBeans with fields using custom constructors (thanks to dev at
  • Fix issue 192: Do not implement "Value Key Language-Independent Type" to make '=' a standard character (thanks to Marc)
  • Fix issue 188: Improve error message for invalid YAML document (thanks to shtilman)
  • Fix issue 183: Support Number class (thanks to darren.janeczek)
  • Fix issue 182: Double.POSITIVE_INFINITY applied to float fields (thanks to darren.janeczek)

1.13 (2013-09-05)

  • Java 6 is now used to build the package. The source code stays compatible with Java 5
  • Fix issue 178: OSGi - Specify version for exported packages (thanks to Lukasz Dywicki)
  • Fix issue 177: Improve error report while parsing a JavaBean (thanks to Eric Brown)
  • Fix issue 135: Arrays of primitives are now fully supported (thanks to Jordan)
  • Fix issue 174: Duplicate anchors in an input document should not be an error (thanks to llasram)
  • Fix issue 172: Using a locale with minimum number fraction digits breaks anchor generation (thanks to Michael Simons)
  • Fix issue 171: Use more generic generics in BaseRepresenter (thanks to Ash2kk)

1.12 (2013-03-02)

  • Fix issue 169: Make Constructor.typeDefinitions protected to be more flexible (thanks to Alexey)
  • Improve the error message when a TAB is used as indentation (due to enormous amount of misunderstanding). It now says: "found character \t '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)"

1.11 (2012-09-30)

  • Fix issue 158: improve support for 32-bit characters (UTF-16 surrogate pairs) (thanks to Charlie)
  • Fix issue 146: empty tags should not force explicit document start (thanks to Charlie)
  • Fix issue 156: setSkipMissingProperties should not fail for non-scalar values (thanks to Blake Matheny)
  • Fix issue 155: any generated output must be parsed without errors (thanks to Robert Fletcher)
  • Fix issue 154: Add option to skip missing JavaBean properties when deserializing YAML into Java object (thanks to Shawn Lauzon)
  • Fix issue 149: Directives are no longer lost between documents (thanks to robinETmiller)
  • Fix issue 147: Serialized representation of character U+FFFD causes exception on deserialization (thanks to johnkarp)
  • Fix issue 145: exception.getMessage() must show the line number as exception.toString() does (thanks to theaspect)
  • Fix issue 144: improve type inference for Compact Object Notation (thanks to tommy.odom)
  • Better support for Android

1.10 (2012-02-12)

  • Apply some minor FindBugs and PMD recommendations
  • Fix issue 141: TimeZone is configurable in DumperOptions (thanks to Yaroslav)
  • Fix issue 139: merge should favor last key in map (thanks to davidahelder)
  • Fix issue 136: TAB is allowed inside a plain scalar. This is yet another deviation from PyYAML (thanks to Uwe Kubosch)
  • Fix issue 138: Expose internal data of ReaderException (thanks to asari.ruby)
  • Fix issue 137: Respect supplementary characters (thanks to joshhoyt)
  • Fix issue 66: use literal scalar style when the scalar contains multiple lines

1.9 (2011-08-15)

  • Fix issue 130: apply regular expression for !!float from YAML 1.2 specification (thanks to xandey)
  • Fix issue 127: BaseRepresenter.representData(Object data) has been made 'final' to avoid confusion *Update public API issue 124: Introduce Yaml.loadAs(), Yaml.dumpAs() and Yaml.dumpAsMap() methods. JavaBeanLoader and JavaBeanDumper are deprecated (thanks to JordanAngold)
  • Fix issue 129: Provide low level methods from objects to Nodes and Events (represent(Object), serialize(Node))
  • Fix issue 125: Provide Manen 3 support
  • Fix issue 116: Improved support for empty JavaBeans (thanks to Jim Peterson)
  • Fix issue 121: Close files in tests to avoid a possible file handle limit (thanks to Jaromir)
  • Fix issue 112: Improved support for parameterised types in collections (thanks to Lethargish)
  • Fix issue 115: parametrized JavaBeans fail to load and dump because they are treated as Maps (thanks to elkniwt)
  • Fix issue 114: do not remove root tags of JavaBeans when it is not explicitly requested (thanks to gileadis)
  • Fix issue 111: Long escaped tag URI sequences throw BufferOverflowException (thanks to JordanAngold)
  • Fix issue 110: introduce a package for external libraries and move there the 64Coder and the Google's URL encoder (thanks to dmitry.s.mamonov)
  • Fix issue 96: generate OSGi bundle (thanks to thegreendragon and longkerdandy)
  • Fix issue 109: ancient years must be dumped with leading zeros (thanks to cjalmeida)
  • Fix issue 108: Enum's name property shall be dumped instead of the 'toString()' output (thanks to JordanAngold)

1.8 (2011-02-15)

  • Fix issue 104: Expose Mark.index
  • Fix issue 100: !!merge tag properly merges also JavaBeans (thanks to JordanAngold)
  • Issue 99: Add an example for escaping line breaks in binary content
  • Fix issue 59: Simplify the way to dump JavaBean properties in a custom order
  • Issue 97: Add an example to show how to use JavaBean property which is a SortedSet but encoded as a YAML sequence
  • Fix issue 95: Loading of generic collections with Array parameter(s)
  • Issue 87: Implement Compact Object Notation
  • Fix issue 69: Iterable is no longer serialised as sequence
  • Fix issue 88: Custom tag erased when referenced from generic collection
  • Fix issue 82: When object referenced from generic collection dumping may erase tags and prevent future loading
  • Fix issue 79 and 101: Context for error reporting consumes a lot of resources
  • Fix issue 81: Fix minor bug in Representer
  • Fix issue 80: Timestamp is not parsed properly when milliseconds start with 0 (thanks to Sebastien Rainville)
  • Cleanup unused code in deprecated Loader and Dumper

1.7 (2010-08-12)

  • Update public API (issue 77): Loader and Dumper are deprecated. All the functionality was moved to the Yaml class.
  • Fix issue 74: Do not use redundant tags for arrays which are JavaBean properties
  • Add examples to create scalars that match custom regular expression (issue 75): when the runtime class is not defined, and when the runtime class is defined in the JavaBean (thanks to
  • Fix issue 73: Provide support for loading java.util.Set as a sequence. Also provide an example to serialise a java.util.Set as a sequence. (thanks to birnbuazn)
  • Fix issue 72: Support java.util.Collection as a parent for List and Set (thanks to birnbuazn)
  • Fix issue 55: Allow direct field access bypassing setters and getters (thanks to mju and birnbuazn)
  • Fix issue 69: Serialise Iterator and Iterable as sequences
  • Add JodaTime example (thanks to Antony Stubbs)
  • Fix generic collections which contain other collections (thanks to Alex Maslov)
  • Fix issue 67: java classes containing non-ASCII characters in names are incorrectly encoded (thanks to Manuel Sugawara)
  • Fix issue 65: add checks for null arguments for JavaBeanDumper (thanks to lerch.johannes)
  • Fix issue 64: ClassCastException in Representer when working with ParameterizedType (thanks to Maxim)
  • Fix issue 63: Problems with recursive links when included in an array (thanks to Udo and Alex)
  • Add examples for dumping custom values for !!bool and !!null
  • Fix issue 61: ClassCastException when dumping generic bean (thanks to Udo)
  • Fix issue 58: JavaBeanDumper.dump throws NullPointerException on list property with null element (thanks to jeff.caulfiel)
  • Add an example of parsing a YAML document generated by Perl
  • Fix issue 56: Make constructors in SafeConstructor public
  • Releases are available in the central Maven repository (thanks to Sonatype)
  • Fix issue 54: deploy artifacts in the Sonatype repository. (thanks to David Bernard)
  • Fix issue 53: Enhancement for a pretty format that combines BLOCK and FLOW. (thanks to obastard)
  • Fix issue 50: Unable to dump JavaBean that inherits from a protected base class. (thanks to sualeh.fatehi)

1.6 (2010-02-26)

  • Fix issue 47: Don't dump read-only JavaBean properties by default. This is backwards-incompatible change. (thanks to obastard)
  • Fix issue 49: Support GregorianCalendar as regular Timestamp (thanks to obastard)
  • Fix issue 51: do not escape non-ASCII characters in double quoted scalar style (thanks to Johann Werner)
  • Fix issue 48: Introduce representJavaBeanProperty() method in Representer. (thanks to obastard)
  • Representer.representJavaBean() returns MappingNode
  • Add an example of serialising as scalar node for issue 46
  • Refactoring of scanner and parser. Low-level API is not affected.
  • Improve performance: use StringBuilder instead of StringBuffer
  • Introduce String constants in scanner and emitter to improve readability and performance
  • Fix issue 43: introduce Tag class. This is backwards-incompatible change.
  • Fix issue 42: BaseConstructor.getConstructor(Node node) is now 'protected' to get more flexibility at runtime. (thanks to Artem)
  • Fix issue 40: Ignore tags when they are compatible with the JavaBean runtime class (thanks to sitrious)
  • Add an example how to ignore unknown tags (for issue 31 and issue 39)
  • Add an example how to work with Ruby YAML documents
  • Do not omit the tag for JavaBean properties when the tag is explicitly defined
  • Fix issue 38: Fix ID format for numbers over 999 (thanks to gchpaco)
  • Fix issue 29: it is possible to define which scalar style will be used when a scalar is emitted
  • Fix issue 36: process a family of tags which have the same prefix with one constructor
  • Add an example to demonstrate how to restrict classes to be loaded
  • Improve JavaDoc (thanks to Stefan)
  • add examples for flexible YAML dumping using a template engine

1.5 (2009-10-30)

  • Fix issue 27: Extend Resolver to support custom implicit types
  • Fix issue 25: Improve usage of generic collections in JavaBeans (thanks to the Polyglot Maven team and especially to Benjamin Bentmann)
  • Fix issue 26: Parse different Map implementations (SortedMap, Properties) without global tags if they are JavaBean properties (thanks to Benjamin Bentmann)
  • SnakeYAML 1.4 is available in the central Maven repository
  • Fix issue 24: Line numbers reported in Exceptions are Zero based, should be 1 based (thanks to shrode)
  • Fix issue 21: Support arrays of reference types as JavaBean properties (thanks to ashwin.jayaprakash)
  • Fix issue 17: Respect root tag for sequences (thanks to jcucurull)
  • Fix issue 18: SafeRepresenterrespects custom tags for standard Java classes where standard tag has more then one Java implementation available (Long, List, Map, Date etc) (thanks to creiniger)
  • Add possibility to define a custom Class Loader
  • Fix a scanner error not reported when there is no line break at the end of the stream. Import the fix from PyYAML 3.09 {ticket 118}
  • Fix issue 16: Cache JavaBean class properties (thanks to infinity0x)
  • Fix issue 14: ArrayList is more efficient than LinkedList (thanks to infinity0x)

1.4 (2009-08-26)

  • Apache License, Version 2.0 applied
  • Fix issue 13: Provide javadocs link to Sun Java API (thanks to infinity0x)
  • Fix issue 11: create a Java instance with the following priority to choose the class: Explicit tag -> Runtime class (defined in JavaBean) -> implicit tag (thanks to infinity0x)
  • Fix issue 9: Bean with no property cannot be instantiated (thanks to wwagner4)
  • Better support for loading immutable instances
  • Major refactoring: Constructor is completely rewritten to prepare better support for immutable objects
  • Change Maven repository path: groupId=org.yaml, artifactId=snakeyaml
  • Fix issue 10: dump omits JavaBean class name when used with an alias (thanks to derrick.rice)
  • JAR packages with source and Javadoc will also be uploaded to Maven repository
  • Introduce JavaBeanLoader and JavaBeanDumper. Deprecate JavaBeanParser
  • Fix issue 8: Representer was keeping state between invocations (thanks to Alan Gutierrez)

1.3 (2009-07-20)

  • Add guideline about Generic class definitions ( for JavaBeans
  • Fix issue 5: set the "cause" field for MarkedYAMLException (thanks to infinity0x)
  • Fix issue 1: recursive object are now fully supported (thanks to Alexander Maslov)
  • Fix issue 3: does not dump maps of beans correctly (thanks to infinity0x)
  • Project migrated to Google code (thanks to Google for supporting Mercurial)
  • Fix: null as a JavaBean property was not handled properly (thanks to Magne)
  • Fix ticket #40: java.sql.Timestamp was not handled properly (thanks to Magne)

1.2 (2009-04-27)

  • add info for low-level API
  • Add Yaml.parse() method which return Events to support low level YAML processing
  • Add Yaml.compose() methods which return Nodes
  • Rename LineBreak.LINUX to LineBreak.UNIX
  • Refactor: rename enums in DumperOptions to make the names consistent
  • Add possibility to parse all scalars as Strings
  • Respect DumperOptions with a custom Representer
  • Represent TAB as '\t' instead of '(9' in an error message

1.1 (2009-03-14)

  • Test coverage reached 98%
  • byte[] is used for type binary
  • Better Spring support: the root JavaBean class can be specified as a String
  • Performance: fix a bug with expanding Regular Expressions (thanks to Christophe Desguez)
  • Fix ticket #4: java.sql.Date was not handled properly (thanks to Christophe Desguez)
  • Introduce Enums in DumperOptions
  • Minor refactoring and bug fixes
  • Add Threads and Spring sections to the wiki documentation

1.0.1 (2009-02-18)

  • Proper Enum support (thanks to James Nissel)
  • The mailing list is renamed to snakeyaml-core to avoid a name conflict in Google AppEngine
  • Provide possibility to define/eliminate the root tag for JavaBeans
  • Arrays as JavaBens properties are properly supported
  • Do not emit redundant tags for JavaBeans
  • Respect public fields in JavaBeans
  • Import changes from PyYAML 3.07/3.08
  • Use global tags (with !!) to load/dump Java custom classes
  • Fix parsing Long.MIN_VALUE
  • When constructing integers try to create the first in the following order: Integer -> Long -> BigInteger
  • Add possibility to define an implicit resolver
  • Add possibility to define an explicit constructor
  • Java objects can be constructed from mapping (javabean), from sequence (constructor), from scalar (constructor)
  • fix omap and pairs tags
  • Implement possibility to define a custom List or Map implementation
  • Implement possibility to define a custom Representer
  • Support arrays of reference types
  • Import latest changes from PyYAML (after 3.06 was released)
  • Fix Node identity to avoid aliases for simple types - [1, 1]
  • Recursive objects can be represented (but not yet constructed)