diff --git a/CHANGES.html b/CHANGES.html
new file mode 100644
index 0000000..9bf27be
--- /dev/null
+++ b/CHANGES.html
@@ -0,0 +1,529 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0.5.0
+
+
Breaking changes
+
As many people have been using D:YAML from git master since the 0.4 release, each change
+is prefixed by the year the change was introduced.
+
+
+
+
API improvements
+
+- Loader is now, by default, constructed from a non-const buffer containing YAML
+data instead of a std.stream.Stream. D:YAML reuses and overwrites this buffer to
+minimize memory allocations during parsing. Convenience API such as the Loader
+constructor from a filename is unchanged although it loads the file to a buffer
+internally.
+- Node.contains() method to check if a YAML sequence/mapping contains specified
+value (as opposed to a key).
+- Node.containsKey() method to check if a YAML mapping contains specified key.
+- Node.isNull() property.
+- Node operator in analogous to associative array in.
+- Loader.fromString() method as a quick wrapper to parse YAML from a string.
+- dyaml.hacks module for potentially useful things YAML specification doesn't allow.
+- Most of the API is @safe or at least @trusted. Also pure and nothrow
+where possible.
+- User-defined constructors can now also construct builtin YAML types.
+- Input is now validated at Loader construction to detect invalid UTF sequences early
+and to minimize internal exception handling during parsing.
+
+
+
+
Other improvements
+
+- D:YAML now works with a UTF-8 buffer internally. This decreases memory usage for UTF-8
+input, and UTF-32 inputs can be encoded into UTF-8 in-place without allocating.
+UTF-16 inputs still need an allocation. This also gets rid of all dchar[]->char[]
+conversions which were a significant source of GC allocations.
+- Less GC usage during YAML node construction.
+- The Scanner subsystems is now mostly @nogc; it never allocates memory for
+token values, using slices into the input buffer instead.
+- Custom, @nogc UTF decoding/encoding code based on std.utf to enable more use
+of @nogc in D:YAML internals and to improve performance.
+- Replaced std.stream.EndianStream with custom endian-fixing code.
+- D:YAML is now a DUB package.
+- Removed static data structures such as default Constructor and Resolver.
+- Compile-time checks for size of data structures that should be small.
+- Better error messages.
+- Various refactoring changes, using more 'modern' D features, better tests.
+- Updated documentation, examples.
+
+
+
+
Bugfixes
+
+- Fixed mappings longer than 65535 lines.
+- Removed a lot of in parameters that were used due to a misunderstanding of what
+in is supposed to do.
+- Fixed real emitting.
+- Fixed 32bit compilation (again).
+- Various small bugfixes.
+
+
+
+
+
0.4.0
+
+
Features/improvements
+
+- API BREAKING: All structs and classes stored directly in YAML nodes
+(aka custom YAML data types) now need to define the opCmp operator.
+This is used for duplicate detection instead of AAs (which are broken)
+and will allow efficient access to data in unordered maps.
+- API BREAKING: Simplified the Constructor API. Constructor functions now
+don't need to get Marks through parameters - any exceptions thrown by
+the constructor functions are caught and wrapped along with Mark info.
+- Various small improvements in the API documentation.
+- Updated API documentation, tutorials and examples to match the changes.
+- Small CDC (build script) improvements.
+
+
+
+
Bugfixes
+
+- Fixed compilation with DMD 2.057.
+- Fixed a bug caused by std.regex changes that broke null value parsing.
+- Fixed compilation on 32bit.
+- Various small bugfixes.
+
+
+
+
+
0.3.0
+
+
Features/improvements
+
+- API BREAKING: Removed Node.getToVar as it turned out to be a premature
+optimization.
+- API BREAKING: Constructor API for constructing custom YAML data types has
+been improved to make it easier to load custom classes/structs. See the
+custom types tutorial and Constructor API documentation.
+- Node.opIndex now returns a reference to a node.
+- Added a shortcut alias Node.as for Node.get . Node.as might eventually
+replace Node.get (in a 1.0 release).
+- User can now access a string representation of tag of a node.
+- Nodes now remember their scalar and collection styles between loading and
+dumping. These are not accessible to user. User can set output styles in
+Representer.
+- Updated API documentation to reflect the new changes, added more examples
+and overall made the documentation more readable.
+- Improved error messages of exceptions.
+- Drastically optimized scanning and parsing, decreasing parsing time to about
+10% (no precise benchmark comparison with 0.2 at the moment).
+- Eliminated most GC usage, improving speed and memory usage.
+- Optimized Dumper for speed, especially when dumping many small files.
+- Reader has been reimplemented to improve performance.
+- Many other speed and memory optimizations.
+- Added a profiling build target and a parsing/dumping benchmark.
+- Added a random YAML file generator and a YAML file analyzer, as example
+applications and for benchmarking.
+- Added a "clean" target to example Makefiles.
+- Got rid of all global state.
+
+
+
+
Bugfixes
+
+- Fixed compatibility issues with DMD 2.056.
+- Fixed an Emitter bug which caused tags to always be emitted in full format.
+- Fixed a bug that caused errors when loading documents with YAML version
+directives.
+- Fixed many const-correctness bugs.
+- Minor bugfixes all over the code.
+- Fixed many documentation bugs.
+
+
+
+
+
0.2.0
+
+
Features/improvements
+
+- Implemented YAML emitter, and related unittests/documentation.
+- Tags are now stored in nodes, allowing D:YAML to be closer to the
+specification.
+- Loader API has been broken to make it more extensible in future -
+Representer and Constructor are no more specified in the constructor,
+and the load() shortcut functions have been removed, as all that's needed to
+load a YAML document now is Loader("file.yaml").load() .
+
+
+
+
Bugfixes
+
+
+- Fixed many bugs in the parser, scanner, composer and constructor.
+
+
+
+
+
+
+
diff --git a/CHANGES.rst b/CHANGES.rst
new file mode 100644
index 0000000..4c3567c
--- /dev/null
+++ b/CHANGES.rst
@@ -0,0 +1,179 @@
+-----
+0.5.0
+-----
+
+^^^^^^^^^^^^^^^^
+Breaking changes
+^^^^^^^^^^^^^^^^
+
+As many people have been using D:YAML from git master since the 0.4 release, each change
+is prefixed by the year the change was introduced.
+
+- ``2014`` Broke compatibility with all DMD versions before 2.066
+- ``2014`` ``Loader`` API depending on ``std.stream`` is now deprecated and will be
+ removed in the next release.
+- ``2014`` ``Loader.fromString(string)`` is now deprecated and replaced by
+ ``Loader.fromString(char[])``, which will reuse and overwrite the input during
+ parsing. The string overload will be removed in the next release.
+- ``2012`` Values in D:YAML are less 'dynamic-typed'. E.g. removing ``"42"`` won't
+ also remove ``42``. Such automatic conversion still happens e.g. in a foreach
+ over a mapping with a string key. The ``Node.as()`` method has a template
+ parameter to disable automatic conversion from strings to other types.
+
+^^^^^^^^^^^^^^^^
+API improvements
+^^^^^^^^^^^^^^^^
+
+- ``Loader`` is now, by default, constructed from a non-const buffer containing YAML
+ data instead of a ``std.stream.Stream``. D:YAML reuses and overwrites this buffer to
+ minimize memory allocations during parsing. Convenience API such as the ``Loader``
+ constructor from a filename is unchanged although it loads the file to a buffer
+ internally.
+- ``Node.contains()`` method to check if a YAML sequence/mapping contains specified
+ value (as opposed to a key).
+- ``Node.containsKey()`` method to check if a YAML mapping contains specified key.
+- ``Node.isNull()`` property.
+- ``Node operator in`` analogous to associative array ``in``.
+- ``Loader.fromString()`` method as a quick wrapper to parse YAML from a string.
+- ``dyaml.hacks`` module for potentially useful things YAML specification doesn't allow.
+- Most of the API is ``@safe`` or at least ``@trusted``. Also ``pure`` and ``nothrow``
+ where possible.
+- User-defined constructors can now also construct builtin YAML types.
+- Input is now validated at Loader construction to detect invalid UTF sequences early
+ and to minimize internal exception handling during parsing.
+
+^^^^^^^^^^^^^^^^^^
+Other improvements
+^^^^^^^^^^^^^^^^^^
+
+- D:YAML now works with a UTF-8 buffer internally. This decreases memory usage for UTF-8
+ input, and UTF-32 inputs can be encoded into UTF-8 in-place without allocating.
+ UTF-16 inputs still need an allocation. This also gets rid of all dchar[]->char[]
+ conversions which were a significant source of GC allocations.
+- Less GC usage during YAML node construction.
+- The ``Scanner`` subsystems is now mostly ``@nogc``; it never allocates memory for
+ token values, using slices into the input buffer instead.
+- Custom, ``@nogc`` UTF decoding/encoding code based on ``std.utf`` to enable more use
+ of ``@nogc`` in D:YAML internals and to improve performance.
+- Replaced ``std.stream.EndianStream`` with custom endian-fixing code.
+- D:YAML is now a DUB package.
+- Removed static data structures such as default Constructor and Resolver.
+- Compile-time checks for size of data structures that should be small.
+- Better error messages.
+- Various refactoring changes, using more 'modern' D features, better tests.
+- Updated documentation, examples.
+
+
+^^^^^^^^
+Bugfixes
+^^^^^^^^
+
+- Fixed mappings longer than 65535 lines.
+- Removed a lot of ``in`` parameters that were used due to a misunderstanding of what
+ ``in`` is supposed to do.
+- Fixed ``real`` emitting.
+- Fixed 32bit compilation (again).
+- Various small bugfixes.
+
+
+
+-----
+0.4.0
+-----
+
+^^^^^^^^^^^^^^^^^^^^^
+Features/improvements
+^^^^^^^^^^^^^^^^^^^^^
+
+- **API BREAKING**: All structs and classes stored directly in YAML nodes
+ (aka custom YAML data types) now need to define the opCmp operator.
+ This is used for duplicate detection instead of AAs (which are broken)
+ and will allow efficient access to data in unordered maps.
+- **API BREAKING**: Simplified the Constructor API. Constructor functions now
+ don't need to get Marks through parameters - any exceptions thrown by
+ the constructor functions are caught and wrapped along with Mark info.
+- Various small improvements in the API documentation.
+- Updated API documentation, tutorials and examples to match the changes.
+- Small CDC (build script) improvements.
+
+^^^^^^^^
+Bugfixes
+^^^^^^^^
+
+- Fixed compilation with DMD 2.057.
+- Fixed a bug caused by std.regex changes that broke null value parsing.
+- Fixed compilation on 32bit.
+- Various small bugfixes.
+
+
+
+-----
+0.3.0
+-----
+
+^^^^^^^^^^^^^^^^^^^^^
+Features/improvements
+^^^^^^^^^^^^^^^^^^^^^
+
+- **API BREAKING**: Removed Node.getToVar as it turned out to be a premature
+ optimization.
+- **API BREAKING**: Constructor API for constructing custom YAML data types has
+ been improved to make it easier to load custom classes/structs. See the
+ custom types tutorial and Constructor API documentation.
+- Node.opIndex now returns a reference to a node.
+- Added a shortcut alias Node.as for Node.get . Node.as might eventually
+ replace Node.get (in a 1.0 release).
+- User can now access a string representation of tag of a node.
+- Nodes now remember their scalar and collection styles between loading and
+ dumping. These are not accessible to user. User can set output styles in
+ Representer.
+- Updated API documentation to reflect the new changes, added more examples
+ and overall made the documentation more readable.
+- Improved error messages of exceptions.
+- Drastically optimized scanning and parsing, decreasing parsing time to about
+ 10% (no precise benchmark comparison with 0.2 at the moment).
+- Eliminated most GC usage, improving speed and memory usage.
+- Optimized Dumper for speed, especially when dumping many small files.
+- Reader has been reimplemented to improve performance.
+- Many other speed and memory optimizations.
+- Added a profiling build target and a parsing/dumping benchmark.
+- Added a random YAML file generator and a YAML file analyzer, as example
+ applications and for benchmarking.
+- Added a "clean" target to example Makefiles.
+- Got rid of all global state.
+
+^^^^^^^^
+Bugfixes
+^^^^^^^^
+
+- Fixed compatibility issues with DMD 2.056.
+- Fixed an Emitter bug which caused tags to always be emitted in full format.
+- Fixed a bug that caused errors when loading documents with YAML version
+ directives.
+- Fixed many const-correctness bugs.
+- Minor bugfixes all over the code.
+- Fixed many documentation bugs.
+
+
+
+-----
+0.2.0
+-----
+
+^^^^^^^^^^^^^^^^^^^^^
+Features/improvements
+^^^^^^^^^^^^^^^^^^^^^
+
+- Implemented YAML emitter, and related unittests/documentation.
+- Tags are now stored in nodes, allowing D:YAML to be closer to the
+ specification.
+- Loader API has been broken to make it more extensible in future -
+ Representer and Constructor are no more specified in the constructor,
+ and the load() shortcut functions have been removed, as all that's needed to
+ load a YAML document now is Loader("file.yaml").load() .
+
+^^^^^^^^
+Bugfixes
+^^^^^^^^
+
+ - Fixed many bugs in the parser, scanner, composer and constructor.
diff --git a/CHANGES.txt b/CHANGES.txt
deleted file mode 100644
index fb271bf..0000000
--- a/CHANGES.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-0.4.0:
-
-
-- FEATURES/IMPROVEMENTS:
-
- - API BREAKING: All structs and classes stored directly in YAML nodes
- (aka custom YAML data types) now need to define the opCmp operator.
- This is used for duplicate detection instead of AAs (which are broken)
- and will allow efficient access to data in unordered maps.
-
- - API BREAKING: Simplified the Constructor API. Constructor functions now
- don't need to get Marks through parameters - any exceptions thrown by
- the constructor functions are caught and wrapped along with Mark info.
-
- - Various small improvements in the API documentation.
-
- - Updated API documentation, tutorials and examples to match the changes.
-
- - Small CDC (build script) improvements.
-
-
-- BUGFIXES:
-
- - Fixed compilation with DMD 2.057.
-
- - Fixed a bug caused by std.regex changes that broke null value parsing.
-
- - Fixed compilation on 32bit.
-
- - Various small bugfixes.
-
-
-
-0.3.0:
-
-
-- FEATURES/IMPROVEMENTS:
-
- - API BREAKING: Removed Node.getToVar as it turned out to be a premature
- optimization.
-
- - API BREAKING: Constructor API for constructing custom YAML data types has
- been improved to make it easier to load custom classes/structs. See the
- custom types tutorial and Constructor API documentation.
-
- - Node.opIndex now returns a reference to a node.
-
- - Added a shortcut alias Node.as for Node.get . Node.as might eventually
- replace Node.get (in a 1.0 release).
-
- - User can now access a string representation of tag of a node.
-
- - Nodes now remember their scalar and collection styles between loading and
- dumping. These are not accessible to user. User can set output styles in
- Representer.
-
- - Updated API documentation to reflect the new changes, added more examples
- and overall made the documentation more readable.
-
- - Improved error messages of exceptions.
-
- - Drastically optimized scanning and parsing, decreasing parsing time to about
- 10% (no precise benchmark comparison with 0.2 at the moment).
-
- - Eliminated most GC usage, improving speed and memory usage.
-
- - Optimized Dumper for speed, especially when dumping many small files.
-
- - Reader has been reimplemented to improve performance.
-
- - Many other speed and memory optimizations.
-
- - Added a profiling build target and a parsing/dumping benchmark.
-
- - Added a random YAML file generator and a YAML file analyzer, as example
- applications and for benchmarking.
-
- - Added a "clean" target to example Makefiles.
-
- - Got rid of all global state.
-
-
-- BUGFIXES:
-
- - Fixed compatibility issues with DMD 2.056.
-
- - Fixed an Emitter bug which caused tags to always be emitted in full format.
-
- - Fixed a bug that caused errors when loading documents with YAML version
- directives.
-
- - Fixed many const-correctness bugs.
-
- - Minor bugfixes all over the code.
-
- - Fixed many documentation bugs.
-
-
-
-0.2.0:
-
-
-- FEATURES/IMPROVEMENTS:
-
- - Implemented YAML emitter, and related unittests/documentation.
-
- - Tags are now stored in nodes, allowing D:YAML to be closer to the
- specification.
-
- - Loader API has been broken to make it more extensible in future -
- Representer and Constructor are no more specified in the constructor,
- and the load() shortcut functions have been removed, as all that's needed to
- load a YAML document now is Loader("file.yaml").load() .
-
-
-- BUGFIXES:
-
- - Fixed many bugs in the parser, scanner, composer and constructor.