
                    A  P  A  C  H  E        L  E  N  Y  A

  About Apache Lenya
  ------------------

  Apache Lenya is a Java-based Open-Source Content Management System.
  It is based on open standards such as XML and XSLT. One of its core
  components is Cocoon from the Apache Software Foundation.

  Apache Lenya supports inline WYSIWYG editors. Your site editors do not
  have to learn XML. This is possible thanks to the support of XML,
  XSLT and XML Schema on the client side. An administration interface
  allows advanced users to monitor the CMS, and perform configuration
  tasks.


  Installation Instructions and Documentation
  -------------------------------------------

  For the binary distribution read INSTALL-BIN.txt.

  For the source distribution read INSTALL-SRC.txt.

  The documentation available as of the date of this release is included
  in this directory.

  If you are updating from a previous release of Lenya, make sure
  that you read the installation instructions on updating first.

  Look for the most updated documentation on the Apache Lenya web site
  (http://lenya.apache.org/).



  Licensing and legal issues
  --------------------------

  Apache Lenya is licensed under the Apache Software License, a license of the BSD
  family, and contains software which is compatible with the BSD licensing
  style.

  For more information, please read the LICENSE files in the /legal directory.



  Credits
  -------

  For more information on credits and due reference to included software,
  please read the CREDITS.txt file in this directory.


  Known issues
  ------------

  The Apache issue tracker is available at
  http://issues.apache.org/bugzilla/ .



  Thanks for your interest in Apache Lenya.



                                               The Apache Lenya Project
                                             http://lenya.apache.org/
