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

No major changes in this release.
 
Apache Royale Typedefs 0.9.0
============================

Apache Royale Typedefs 0.9.0 is the first release of libraries that contain 
ActionScript class definitions for popular JavaScript Libraries like Google Closure,
JQuery and more.

The typedefs were previously released by the Apache Flex project as part of the
Apache FlexJS Compiler.  You can see RELEASE_NOTES for earlier releases in the A
pache Flex releases.

Known Issues
_____________

No known issues at this time.



Please report new issues to our bugbase at:

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

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