What is Apache Forrest
----------------------
Apache Forrest is a publishing framework that transforms
input from various sources into a unified presentation
in one or more output formats. The modular and extensible
plugin architecture is based on Apache Cocoon and relevant
standards, which separates presentation from content.
Forrest can generate static documents, or be used as a
dynamic server, or be deployed by its automated facility.

Requirements
------------
Forrest is implemented both as a Java servlet and a Java command line
application. The following requirements exist for installing it:

  * A Java 1.4 or later compatible virtual machine for your operating system.

Installation Instructions and Documentation
-------------------------------------------
Read the index.html file in this directory for the installation instructions.
The documentation relevant for your version is included with Forrest.
The Forrest website has documentation for the current development version.

Licensing and legal issues and credits
--------------------------------------
Forrest is licensed under the Apache Software License, version 2.0
See the files in the top-level of the Forrest distribution called
LICENSE.txt and NOTICE.txt and see licenses for accompanying products
in the "lib" directory.

Thanks for using Apache Forrest ... http://forrest.apache.org/
