YAML 1.1 parser and emitter
Andrey Somov
Add example for issue 332 (2016-02-24)
Build SnakeYAML for different JDKs with docker without building images (2016-02-22)
Update plugin versions (2016-02-19)
Use Thread.currentThread.getContextClassLoader in Class.forName instead of default one (2016-02-15)
Add parameters to POM to change distribution server (2016-02-03)
Relax some of the modifiers to make integration easier (2016-02-02)
Make use of private/protected constructors for Scalars and 'immutable' objects.
Added 'src/test/java8' for Java8 specific tests (requires -Pwith-java8-tests) (2016-01-07)
Better support to customise BaseConstructor. Make 'composer' field and constructDocument()
method protected (2015-10-03)
Better UUID support (2015-09-23)
Use Polyglot Maven: add support for YAML POM (2015-09-10)
Provide ability to customize anchor names (2015-08-25)
Provide Docker image for testing under different Java 8 (2015-06-19)
Convert binary byte[] to String when it matches the JavaBean property (2015-05-26)
The source code migrated to Bitbucket. Old commits (older then 6 years) have
been removed. (2015-05-20)
Fix a typo in an error message in ScannerImpl (2015-05-19)
Do not print special characters in the error message (2015-04-16)
Evaluate implementations for duplicate mapping keys.
Apply FindBugs and PMD recommendations (2015-02-16)
Added split lines option to DumperOptions to allow line splitting to be disabled. (2015-02-08)
Use Maven 3 and update plugin versions (2015-02-05)
Add test to clarify iOS emoji character in the surrogate range (2015-02-03)
Fix grammar error in exception message (2014-11-18)
Load JavaBean with fields using custom constructors (2014-08-18)
Drop support for "Value Key Language-Independent Type" and '=' a standard character (2014-05-22)
Improve error message for invalid YAML document (2014-05-21)
Improve error message for invalid YAML document (2014-03-26)
Support Number class (2013-11-07)
Double.POSITIVE_INFINITY applied to float fields (2013-11-07)
OSGi: Specify version for exported packages (2013-06-27)
Improve error report while parsing a JavaBean (2013-05-14)
Arrays of primitives are now fully supported (2013-04-16)
Duplicate anchors in an input document should not be an error (2013-04-03)
Using a locale with minimum number fraction digits breaks anchor generation (2013-03-30)
Use more generic generics in BaseRepresenter (2013-03-30)
The build is using JDK 1.6 (2013-03-02)
Make Constructor.typeDefinitions protected to be more flexible (2013-02-18)
Remove file AUTHORS because it does not reflect the actual situation (2012-11-09)
Improve the error message when a TAB character starts a token (2012-11-06)
Fix issue 158: improve support for 32-bit characters (UTF-16 surrogate pairs) (2012-09-29)
Fix issue 146: empty tags should not force explicit document start (2012-09-29)
Fix issue 156: setSkipMissingProperties fails for non-scalar values (2012-09-05)
Fix issue 155: SnakeYAML must always eat its own food - a YAML document created by itself must
be read without exceptions (2012-09-04)
Fix issue 154: Add option to skip missing properties when deserializing YAML into Java object (2012-07-25)
Add a test for issue 150 (2012-06-17)
Add a test for issue 151 (2012-06-14)
Fix issue 149: Directives are no longer lost between documents (2012-06-10)
Refactor: use Version enum instead of Array of Integers.
This is done to simplify fixing issue 149 (2012-06-09)
Add tests for issue 148 (2012-06-07)
Fix issue 147: Serialized representation of character U+FFFD causes exception on deserialization (2012-06-05)
Fix issue 145: exception.getMessage() must show the line number as exception.toString() does (2012-04-03)
Fix issue 144: improve type inference for Compact Object Notation (2012-03-16)
Improve Android support
Fix issue 141: TimeZone is configurable in DumperOptions (2012-02-03)
Refactor with PMD: minor non-functional improvements (2012-01-28)
Refactor with PMD: Avoid unused method parameter 'index' in
Serializer and Emitter (2012-01-28)
Refactor with PMD: Composer - Avoid unused method parameter 'index' in
'Composer.composeNode(Node parent, Object index)''. It was used
in PyYAML for kind of XPath for YAML, but it was not imported from PyYAML (2012-01-28)
Refactor Emitter: the SPACE mutable static field could be changed by malicious code or by accident.
Boxed value is unboxed and then immediately reboxed (2012-01-28)
Refactor with FindBugs: remove unused ScalarAnalysis.allowDoubleQuoted (2012-01-28)
Refactor with FindBugs: do not rely on default encoding (2012-01-28)
Refactor: apply FindBugs recommendations (2012-01-28)
Fix issue 139: merge should use last key in map (2012-01-24)
Fix issue 136: tabs are allowed in plain scalars. This is a deviation from PyYAML (2012-01-11)
Expose internal data of ReaderException (2012-01-06)
Respect supplementary characters (2012-01-06)
Use http://mercurial.selenic.com/wiki/EolExtension to force LF as line separator
for all operating systems (2011-12-20)
Add a test for issue 136 (2011-12-14)
Deprecate the DumperOptions.calculateScalarStyle() method because it was introduced as a quick
fix for issue 29. Now it should not be required at all (because of the fix for issue 66),
or it should be implemented in the Representer (in RepresentString) (2011-10-10)
Fix issue 66: literal scalar style is used by default for multiline scalars (2011-10-10)
An example added: how to dump multiline literal scalars (2011-10-04)
An example added: how to dump recursive object for issue 133 (2011-09-14)
A test added for issue 132 (2011-09-13)
Finish 1.9 release (2011-08-15)
Add a test to prove that SnakeYAML is not affected by the problem reported for libyaml
at http://pyyaml.org/ticket/196 (2011-07-28)
Since timestamp contains ':' characters it is dumped with single quoted scalar style
in the flow context. The single quoted scalar style causes to dump the explicit tag.
In the block context the plain scalar can be used and the tag is not required. It may cause
unpredictable behaviour if the tag is required. See the comments in JodaTimeExampleTest (2011-07-25)
Fix scientific notation inconsistency in the YAML 1.1 specification:
scalar '8e-06' should be parsed as a Double (2011-07-24)
Do not allow to override BaseRepresenter.representData(Object data) because
users should instead implement Represent interface (2011-07-21)
Deprecate DumperOptions.explicitRoot (2011-07-20)
Add Yaml.dumpAs(Object, Tag.MAP, FlowStyle) and Yaml.dumpAsMap(Object) methods. JavaBeanDumper is marked as deprecated (2011-07-16)
Add example to show how to dump a custom class (2011-07-12)
Add Yaml.serialize(Node) low level method to the public API (2011-07-14)
Add Yaml.represent(Object) low level method to the public API (2011-07-14)
Add support for Maven 3 via 'm3' profile (2011-07-10)
Remove deprecated JavaBeanParser (2011-07-05)
Remove redundant JavaBeanDumper.classTags set (2011-07-03)
Add Yaml.loadAs() methods. JavaBeanLoader is marked as deprecated (2011-07-03)
Remove TypeDescription.root property to prepare issue 124. This is a minor backwards incompatible change.
Now instead of setting as root, the TypeDescription must be passed to the Contructor's constructor
to be taken as the root definition (2011-07-03)
Fix: close files in tests to avoid a possible file handle limit (2011-06-09)
Fix: Improved support for empty JavaBeans (2011-06-09)
Fix: Improved support for parameterised types in collections (2011-05-25)
Fix: parameterised JavaBeans fail to load and dump because they are treated as Maps (2011-05-16)
Fix: Do not remove root tags of JavaBeans when it is not explicitly requested (2011-04-20)
Fix: Long escaped tag URI sequences throw BufferOverflowException (2011-03-03)
Fix: introduce a package for external libraries and move there the 64Coder
and the Google's URL encoder (2011-02-24)
Fix: ancient years must be dumped with leading zeros (2011-02-19)
Remove unused code in Constructor: Modifier.isAbstract() is not needed any more (2011-02-18)
Enum's name property shall be dumped instead of the 'toString()' output (2011-02-16)
Add example to howto Wiki:
How_to_substitute_object_in_YAML_document_with_a_custom_object (2011-01-27)
When the YAML document to be loaded is provided as String parse it directly
without making a Reader first (2011-01-23)
Immutable data structures in StreamReader allow to share the same buffer for all
the Mark instances. It makes 'withMarkContext' setting redundant (2011-01-19)
Merge JavaBean properties when an explicit tag is provided (2011-01-11)
Add an example for escaping line breaks in binary content (2011-01-03)
Propose a solution for JavaBeans to support SortedSet property when it is encoded
as a sequence (2010-11-24)
Simplify the way how the order of JavaBean properties is specified. Introduce
PropertyUtils.createPropertySet() method to be overridden when a specific order
is expected (2010-11-23)
Fix: Loading of generic collections with Array parameter(s). (2010-11-16)
Add ChangeRuntimeClassTest as an example how to change a class for a global tag (2010-11-05)
Inner objects in Constructor become protected to be more flexible when Constructor
is expended (2010-10-03)
Apply www.snakeyaml.org domain name (2010-09-20)
Move Base64Coder into another package to keep a separate copyright statement.
Base64Coder is left unchanged (2010-09-19)
Iterable should not be serialised as sequence (2010-09-16)
Introduce 'fast' Maven profile to quickly build cobertura reports (2010-09-16)
Fix: Specify plugin versions in POM (2010-09-15)
Fix: Custom tag erased when referenced from generic collection (2010-09-15)
Minor refactoring in Emitter to improve performance: save calls to Constant.has() (2010-09-13)
Minor refactorings in Emitter to improve performance: create less Strings [r9185e0b3] (2010-09-10)
Introduce LoaderOptions to be able to specify configuration while loading (2010-09-03)
Representer.representJavaBeanProperty() is given the wrong tag. Instead of the property tag,
the tag for the JavaBean itself is provided. (2010-09-01)
Rename JvmDetector into GenericsBugDetector (2010-08-31)
Fix: Timestamp is not parsed properly when milliseconds start with 0 (2010-08-24)
Context for error reporting consumes a lot of resources (2010-08-21)
Cleanup unused code in deprecated Loader and Dumper (2010-08-13)
Eclipse does not run JUnit 4 tests when they are launched for the whole project (2010-08-11)
Share PropertyUtils if not explicitly set in Constructor or Representer
(BeanAccess.FIELD works properly when JavaBean is identified by a root tag) (2010-08-11)
Create 1.7 Release Candidate 1 (2010-08-11)
Simplify public API: Drop Dumper (2010-08-06)
Simplify public API: Drop Loader (2010-08-05)
Add examples to create scalars that match custom regular expression:
CustomImplicitResolverTest, CustomBeanResolverTest (2010-08-03)
Do not use redundant tags for arrays which are JavaBean properties. (2010-07-21)
RecursiveSetTest proves that it is possible to construct a recursive set (2010-07-20)
Provide sequence support for loading java.util.Set. Also provide an example
to serialise a java.util.Set as a sequence. (2010-07-19)
Support java.util.Collection as a parent for List and Set (2010-07-09)
Allow direct field access bypassing setters and getters. Empty constructor
is required to support 2-step construction (2010-07-02)
Serialise Iterator and Iterable as sequences (2010-06-25)
Change error message when 'No suitable constructor with N arguments found for class' (2010-06-23)
Add JodaTime example (2010-06-04)
Add possibility to create a Tag out of an URI (2010-05-31)
URLDecoder.decode() does not fail when UTF-8 is invalid. Use
CodingErrorAction.REPORT to implement the failure (2010-05-21)
Fix generic collections which contain other collections (2010-05-18)
Fix: java classes containing non-ASCII characters in names are
incorrectly encoded (2010-05-14)
Fix: add checks for null arguments for JavaBeanDumper (2010-04-27)
Add a test to see how stack trace is serialised (2010-04-27)
ClassCastException in Representer when working with ParameterizedType (2010-04-25)
Improve toString() method for Node. Since scalars cannot be recursive
they can be printed (2010-04-15)
Refactor the way arrays are constructed (2010-04-15)
Add examples for dumping custom values for !!bool and !!null (2010-04-13)
Fix: ClassCastException when dumping generic bean (2010-04-11)
Provide an example for changing JavaBean properties order (2010-04-01)
Provide example for skipping null and empty collections (2010-03-29)
JavaBeanDumper.dump throws NullPointerException on list property
with null element (2010-03-23)
Make constructors in SafeConstructor public (2010-03-16)
Releases and snapshots are available in the Sonatype Maven repository.
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
Enhancement for a pretty format that combines BLOCK and FLOW (2010-03-03)
Unable to dump JavaBean that inherits from a protected base class (2010-03-02)
Format source (2010-03-01)
Use Token.ID and Event.ID instead of just ID (2010-03-01)
Issue 50 fails in Eclipse but works with Maven (2010-03-01)
Release Candidate 2 is available (2010-02-24)
Don't dump read-only properties by default. DumperOptions gets a setting to
include read-only JavaBean properties.
This is no backwards compatible change (2010-02-19)
Support GregorianCalendar. Due to Daylight Saving Time parsing the timestamp with
a TimeZone cannot determine the exact time (2010-02-19)
Some Unicode characters are wrongly replaced by \x{fffd} during
double quoted style dump (2010-02-15)
Introduce representJavaBeanProperty() method in Representer. The method
can be overridden to simplify custom JavaBean representation (2010-02-12)
Release Candidate 1 is available (2010-02-01)
Representer.representJavaBean() returns MappingNode (2010-01-26)
Add example of serialising static fields (2010-01-26)
Add example of serialising java.io.File as scalar node for issue 46 (2010-01-25)
Refactor: introduce Chomping to avoid using null as value for Boolean.
Stay in line with Scala port where null is not allowed (2010-01-19)
Refactor: use Event.ID enum instead of classes (2010-01-15)
Refactor: use Token.ID enum instead of classes (2010-01-15)
Refactor: use generic classes for DirectiveToken (2010-01-14)
Refactor: rename Reader to StreamReader to avoid name conflict with java.io.Reader (2010-01-13)
Refactor: use StringBuilder instead of StringBuffer (2010-01-12)
Refactor: introduce Constant class to share String constants (2010-01-12)
Keep Tag.equals(String) to simplify transition to Tag class (2010-01-08)
Refactor: introduce Tag instead of Tags. Nodes use Tag class instead of String (2010-01-05)
BaseConstructor shall give more flexibility to choose a constructor at runtime (2010-01-08)
Refactor: introduce TagTuple instead of String[] (2010-01-04)
Ignore tags when they are compatible with the runtime class (2010-01-04)
Add example to ignore unknown tags (2009-12-08)
Add Ruby example (2009-12-08)
Do not omit the tag for JavaBean properties when the tag is explicitly defined (2009-12-08)
Fix ID format for numbers over 999 (2009-12-05)
Allow separate option in DumperOptions for long strings (2009-11-16)
JavaBeanDumper: add possibility to define a custom Representer (2009-11-25)
Introduce multi contructors (tag prefix). A family of tags may be processed
by a single constructor (2009-11-25)
Refactor BaseConstructor: simplify second step for recursive structures (2009-11-25)
Add FilterPropertyToDumpTest to show how to filter JavaBean properties (2009-11-24)
Add FilterClassesConstructorTest to show how to filter created classes (2009-11-16)
Improve JavaDoc (2009-11-12)
Add Velocity example (2009-11-03)
Refactor: rename Tuple to RecursiveTuple and hide it inside BaseConstructor (2009-11-03)
Extend Resolver to support custom implicit types (2009-10-27)
Performance improvement: use ArrayStack instead of Stack which extends Vector (2009-10-20)
Improve usage of generic collections: while type erase makes no difference between
Class< Foo> and Class< Bar> at runtime, the information about generics is still
accessible via reflection from Method/Field. (2009-10-19)
Fix ConstructYamlObject: support recursive objects. Introduce 'resolved'
property for Nodes. This property supposed to help to distinguish explicit tag
from the resolved tag (2009-10-19)
Refactor: use rootTag instead of rootType (for Class) in BaseConstructor. This is done to
solve the priority problem: normally explicit tag has more priority then runtime class but
for the root tag it is the other way around (2009-10-19)
Line numbers reported in Exceptions are Zero based, should be 1 based (2009-10-12)
Support arrays of reference types as JavaBean properties (2009-09-22)
Respect root tag for sequences (2009-09-04)
SafeRepresenter respects custom tags for standard Java classes where standard tag has
more then one Java implementation available (Long, List, Map, Date etc) (2009-09-03)
Add possibility to define a custom Class Loader. (2009-09-01)
Fixed an obscure scanner error not reported when there is no line break at the end
of the stream. The fix is imported from PyYAML 3.09 {ticket 118} (2009-08-31)
Cache JavaBean class properties. Tests show that the loading has become a few percents faster (2009-08-31)
Introduce ArrayStack to use push() and pop() instead of standard (and too verbose)
'remove(size()-1)' (2009-08-27)
Fix: ArrayList is more efficient than LinkedList (2009-08-26)
Apply Apache License Version 2.0 (2009-08-14)
Provide javadocs link to Sun Java API (2009-08-10)
Build 1.4 Release Candidate 1 (2009-08-07)
Introduce Tags.getGlobalTagForClass() to simplify tag generation in custom constructors (2009-08-06)
Refactor: introduce ImplicitTuple (2009-08-06)
Fix: create a Java instance with the following priority to choose the class:
Explicit tag -> Runtime class (defined in JavaBean) -> implicit tag (2009-08-06)
Fix: Bean with no property cannot be instantiated. This is implemented via better
support for immutable objects. Custom Constructor may be used when there are more
then 1 way to create an instance (2009-08-04)
Deliver possibility to load immutable instances with no global tags. Reflection for
constructor arguments is used to get the runtime classes (2009-08-04)
Use more informative error message when a JavaBean property cannot
be created (2009-08-02)
Refactor: Constructor is rewritten. Do not overwrite methods from BaseConstructor.
Instead introduce ConstructScalar, ConstructSequence, ConstructMapping (2009-07-31)
Change Maven repository path: groupId='org.yaml', artifactId='snakeyaml' (2009-07-31)
Fix: dump omits JavaBean class name when used with an alias (2009-07-28)
Generate sources and Javadoc (2009-07-27)
Node does not have the value. It is delegated to the non-abstract classes (2009-07-27)
Extends JavaBeanDumper to allow skipping global tags inside type-safe collections.
Introduce method setMapTagForBean() (2009-07-22)
Add ConstructEmptyBeanTest to test JavaBean construction with no
properties in the YAML document(2009-07-22)
Refactor: redesign tag management for JavaBeans in Representer.
Drop dynamic root tag concept (2009-07-22)
Remove unused TypeDescription in Representer (2009-07-21)
Use NodeTuple instead of Node[] for mappings (2009-07-21)
Introduce JavaBeanLoader and JavaBeanDumper. Deprecate JavaBeanParser (2009-07-21)
Fix: Representer was keeping state between invocations (2009-07-21)
Fix: values returned by System.identityHashCode() are not guaranteed to be unique (2009-07-14)
Add a simple test for Java Generics (BirdTest). Unfortunately it shows that some JVM
implementations do not recognise classes for JavaBean properties at runtime.
It leads to unnecessary global tags. See http://code.google.com/p/snakeyaml/wiki/Documentation#Generics
for details (2009-07-13)
Fix: set the "cause" field for MarkedYAMLException (2009-07-10)
Fix: Recursive objects are now fully supported (2009-07-09)
Add support for BigDecimal as a JavaBean property (2009-07-07)
Improve test coverage for Constructor. Allow construction of JavaBeans
with only setter without the corresponding getter (2009-07-07)
Add a test to check the proper report for IOException (2009-07-03)
Fix: represent proper tags for JavaBeans when they are not the root of the YAML
document but a member of a collection (2009-07-03)
Refactor: run PMD and apply some of the recommendations (2009-06-18)
Create an issue for Recursive objects to be remembered (2009-06-08)
Migrate project hosting from Assembla to Google code (2009-06-08)
Fix: null as a JavaBean property was not handled properly (2009-06-04)
Validate changes.xml file (2009-05-25)
Fix ticket 40 in Assembla: getting an error when javabean contains java.sql.Timestamp fields (2009-05-25)
Add 'Yaml.parse()' method which return Events to support low level YAML processing (2009-04-20)
Introduce LineBreak.getPlatformLineBreak (ticket 5 in Assembla) (2009-04-18)
Rename LineBreak.LINUX to LineBreak.UNIX (ticket 5 in Assembla) (2009-04-18)
Add 'Yaml.compose()' methods which return Nodes to support YEdit (2009-04-17)
Refactor: rename enums in DumperOptions to make the names consistent (2009-04-07)
Refactor: use Character instead of char primitive for style in Emitter (2009-04-07)
Add possibility to parse all scalars as Strings (2009-03-30)
Merge changeset 347 from PyYAML (2009-03-30)
Respect DumperOptions with a custom Representer (2009-03-18)
Represent TAB as '\t' instead of '(9' in the error message (2009-03-17)
Introduce JavaBeanParser (2009-03-14)
Introduce DumperOptions.Version enum (2009-03-13)
Introduce DumperOptions.LineBreak enum (2009-03-10)
Use byte[] for binary type. (2009-03-09)
Restore Regular Expressions in Resolver. Ragel gives only 5% performance increase.
Fix a bug in Resolver with expanded regular expressions which caused the
performance problem. (2009-03-06)
Better Spring support: it is now possible to create a constructor with a String
as the class name. (2009-03-05)
Throw an exception when the same Loader or Dumper instance is shared between
different Yaml instances. Because they are statefull it is not Thread-safe. (2009-03-05)
Add possibility to set a meaningful name for Yaml instance to be shown in toString(). (2009-03-05)
Refactor: declare classes which are not expected to be extended as final. (2009-03-04)
Refactor: use 'final' keyword to identify immutable fields. (2009-03-04)
Refactor: do not use 'final' keyword for local variables. (2009-03-04)
Fix: respect implicit resolvers with 'null' as a first character. (2009-03-02)
Refactor: use Character instead of String as a key for implicit resolvers. (2009-03-02)
Use Ragel instead of Regular Expressions for implicit types. (2009-03-02)
Fix ticket #4 (in Assembla): java.sql.Date not handled. (2009-02-28)
Introduce DumperOptions.DefaultFlowStyle enum (2009-02-24)
Introduce DumperOptions.DefaultScalarStyle enum (2009-02-24)
Refactor: use 'switch' with Enum instead of multiple 'if' statements to distinguish nodes (2009-02-19)
Refactor: use Enum instead of String as NodeId (2009-02-19)
Do not emit anchors for Enum (2009-02-18)
Enum as a JavaBean property (when the Enum class is implicitly defined) does
not need tags for both loading and dumping (2009-02-17)
Enum is emitted as a scalar node (2009-02-17)
Enum is parsed as a scalar node or as a JavaBean property (2009-02-17)
Refactor: for performance ScannerImpl.stalePossibleSimpleKeys() does not copy key Set (2009-02-10)
By default allowUnicode=true. If it is necessary to escape Unicode use
DumperOptions.setAllowUnicode(false) (2009-02-09)
Implement allowUnicode setting (to escape Unicode characters on non UTF-8 terminals) (2009-02-09)
Add possibility to specify tags for dumping (2009-02-09)
Rename getExpRoot to getExplicitRoot to conform with
standard JavaBean naming convention (2009-02-09)
Rename explictStart and explicitEnd to standard setters to conform with
standard JavaBean naming convention (2009-02-09)
Add possibility to specify a line break (2009-02-09)
Deliver first release (2009-02-06)