Apache Flex (Flex)
==================

    Apache Flex SDK is an application development framework for easily building
    Flash-based applications for mobile devices, web browsers, and desktops.
   
    For detailed information about Apache Flex SDK and other Apache Flex projects
    please visit:
    http://flex.apache.org/


Contributing
============

    Apache Flex is for the community and we would like to see more
    community involvement.

    The community can help the Apache Flex project by helping out in the
    following areas.
      - Testing / Fixing bugs. Providing patches.
      - Assisting other users with their requests for help.
      - Helping out with release candidates.
      - Wiki / Documentation.
      - Translations into other languages.
      - Public relations.
      - Examples of code and components.
      
    All contributions are welcome. Continued involvement in the project may
    warrant you being selected as a committer by the Apache Flex PMC.
    
    For more details information please visit:
    https://cwiki.apache.org/confluence/display/FLEX/Helping+Out
    
Mailing Lists
=============

    The two main mailing list are the user list for discussing how to code in
    Flex and any issues you run into and the dev list for discussing ongoing
    development of the SDK.
    
    You can subscribe to the mailing lists by sending an email to:
    users-subscribe@flex.apache.org
    dev-subscribe@flex.apache.org
    
    Note that both mailing lists have are mid-high volume lists.
    
    For those who prefer forums:
    http://s.apache.org/flex-users-forum
    http://s.apache.org/flex-dev-forum
    
Reporting Bugs
==============
   
    The bug base for Apache Flex can be found here:
    https://issues.apache.org/jira/browse/FLEX
    
    You need to set up a JIRA account to submit a bug report but can browse
    and search the bug base without an account.
    https://cwiki.apache.org/confluence/display/FLEX/3.1+JIRA+Account
    
    When reporting an issue the follow information is helpful:
    - OS, browser and Flash Player version or AIR version
    - Screen shots
    - Small sample application showing the issue
    - Steps on how to reproduce the issue
         
    Please search through JIRA before submitting new bugs. It may be that the
    bug you've found has already been reported.

Getting the code
================

    The Apache FLex SDK code is stored in a git repository.
    https://cwiki.apache.org/confluence/display/FLEX/1.+Setting+up+the+SDK

    To check out:
    git clone https://git-wip-us.apache.org/repos/asf/flex-sdk.git sdk
    cd sdk
    git checkout develop

    You will also need:
    git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git tlf

    See the RELEASE_NOTE for how to set up and build the SDK.
    
    You can also see a GitHub mirror here:
    https://github.com/apache/flex-sdk

Contributing Code
=================
    
    If you have a bug fix, new component or other code you which to give to
    Apache Flex please open a JIRA ticket and attach the code to it.
    
    A committer will take a look, review and test it and help you get the code
    into the SDK.
    
    If the code is a significant size we may ask you to sign an license
    agreement (ICLA) or software grant.
    

Thanks for using Apache Flex.  Enjoy!

The Apache Flex Project
<http://flex.apache.org>
