Apache Royale 0.9.6
===================

- Compiles faster
- Many additional components available.
- Emulations of many other components available.
- For applications targeting JavaScript, you can now incorporate the
  vast resources available in existing, free JavaScript libraries.
- Dozens of bugs reported, investigated, and squashed. For details of
  closed bug reports see https://github.com/apache/royale-asjs/issues?q=is%3Aissue+is%3Aclosed


Apache Royale 0.9.4
===================

This release contains:
-A new component set called Jewel.
-Components that will eventually emulate popular Apache Flex APIs, including RemoteObject.
-A version of Tour De Flex partially migrated to Apache Royale.

Apache Royale 0.9.2
===================

This release contains:

- Virtual item renderer management for fixed row height vertical lists
- Improved Theme support. The compiler will copy all resources in "assets" 
  folder to target
- JSON deserialization to ActionScript objects
- JSON2ASVO utility to generate ActionScript Value Objects from a JSON result

Apache Royale 0.9.1
===================

This release contains:

- Fixes to NPM packaging 
- GitHubCommitsLogViewer example that provides the source code for a tutorial in the documentation
- NestedStringItemRenderer for displaying data from sub-objects in DataGrids

Apache Royale 0.9.0
===================

Apache Royale is an SDK that provides the capability to cross-compile MXML 
and ActionScript applications to HTML/JS/CSS so they can run in a browser
without Flash.

Apache Royale was previously released by the Apache Flex project.  You can
see RELEASE_NOTES for earlier releases in the Apache Flex releases.

This RELEASE_NOTES file is used for the top-level source and binary package.  The
individual folders (royale-compiler, royale-typedefs, royale-asjs) each have their own
RELEASE_NOTES file specific to the contents of those folders.

Please report new issues to our bugbase at:

    https://github.com/apache/royale-asjs/issues

                                          The Apache Royale Project
                                          <http://royale.apache.org/>
