<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8-dev">
<meta name="Forrest-skin-name" content="pelt">
<title>Welcome to Apache Forrest</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">apache</a> &gt; <a href="http://forrest.apache.org/">forrest</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://www.apache.org/"><img class="logoImage" alt="Apache" src="images/apache-forrest.png" title="The Apache Software Foundation"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://forrest.apache.org/"><img class="logoImage" alt="Forrest" src="images/project-logo.gif" title="Apache Forrest"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="forrest.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li class="current">
<a class="selected" href="index.html">Welcome</a>
</li>
<li>
<a class="unselected" href="contrib.html">Developers</a>
</li>
<li>
<a class="unselected" href="versions/index.html">Versioned Docs</a>
</li>
<li>
<a class="unselected" href="pluginDocs/index.html">Plugins</a>
</li>
<li>
<a class="unselected" href="tools/index.html">Tools</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">About</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menupage">
<div class="menupagetitle">About Forrest</div>
</div>
<div class="menuitem">
<a href="linkmap.html" title="Table of Contents for all Forrest documentation">Documentation ToC</a>
</div>
<div class="menuitem">
<a href="http://forrest.apache.org/mirrors.cgi" title="Download a release from your nearest mirror or get the latest from SVN">Download</a>
</div>
<div class="menuitem">
<a href="mail-lists.html" title="Discussion mail lists are the heart of the project: dev, user, svn">Mail lists and discussion</a>
</div>
<div class="menuitem">
<a href="license.html" title="Notes and FAQs about the licensing">License</a>
</div>
<div class="menuitem">
<a href="forrest-contract.html" title="What each party can expect">Our contract</a>
</div>
<div class="menuitem">
<a href="compliance.html" title="Declare the status of HTML, WAI, CSS compliance">Standards compliance</a>
</div>
<div class="menuitem">
<a href="forrest-issues.html" title="List of currently open issues">Open issues</a>
</div>
<div class="menuitem">
<a href="who.html" title="Explain who is involved">Who we are</a>
</div>
<div class="menuitem">
<a href="flyer.html" title="One-page description">Flyer</a>
</div>
<div class="menuitem">
<a href="live-sites.html" title="Some sites created using Apache Forrest technology">Example sites</a>
</div>
<div class="menuitem">
<a href="thanks.html" title="Acknowledgment to those who have become involved">Thanks</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Related projects</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="http://gump.apache.org/">Apache Gump</a>
</div>
<div class="menuitem">
<a href="http://cocoon.apache.org/">Apache Cocoon</a>
</div>
<div class="menuitem">
<a href="http://lenya.apache.org/">Apache Lenya</a>
</div>
<div class="menuitem">
<a href="http://xml.apache.org/">Apache XML</a>
</div>
<div class="menuitem">
<a href="http://projects.apache.org/">projects.apache.org</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2">
<a href="http://apachecon.com/2007/EU/"><img border="0" title="ApacheCon Europe 2007" alt="ApacheCon Europe 2007 - logo" src="http://apache.org/ads/ApacheCon/2007-europe-125x125.png" style="width: 125px;height: 125px;"></a><a href="http://people.apache.org/calendar.html#200711"><img border="0" title="ApacheCon US 2007" alt="ApacheCon US 2007 - logo" src="http://apache.org/ads/ApacheCon/2007-usa-125x125.png" style="width: 125px;height: 125px;"></a>
</div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="index.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<div class="trail">Font size: 
	          &nbsp;<input value="Reset" class="resetfont" title="Reset text" onclick="ndeSetTextSize('reset'); return false;" type="button">      
	          &nbsp;<input value="-a" class="smallerfont" title="Shrink text" onclick="ndeSetTextSize('decr'); return false;" type="button">
	          &nbsp;<input value="+a" class="biggerfont" title="Enlarge text" onclick="ndeSetTextSize('incr'); return false;" type="button">
</div>
<h1>Welcome to Apache Forrest</h1>
<div class="abstract">
      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.
    </div>
<div id="motd-area">
        23 June 2005 Forrest-0.7 released: Features an architecture for plugins
       (<a href="http://forrest.apache.org/mirrors.cgi">More</a>)</div>
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#Explanation+and+features">Explanation and features</a>
</li>
<li>
<a href="#status">History and project status</a>
</li>
<li>
<a href="#news">News and events</a>
</li>
<li>
<a href="#help">Help Wanted!</a>
</li>
</ul>
</div>
    
<p>
      The Apache Forrest project uses the opensource
      <a href="license.html">Apache License 2.0</a> and adheres to
      <a href="guidelines.html#way">open development</a> ideals.
    </p>
    
<div class="note">
<div class="label">Note</div>
<div class="content">
      Please realise that Forrest is still pre-1.0 release version. It is
      certainly usable for those who are prepared to move with it. See more
      notes about <a href="#status">status</a> below.
    </div>
</div>
    
<a name="N10022"></a><a name="Explanation+and+features"></a>
<h2 class="underlined_10">Explanation and features</h2>
<div class="section">
<p>
        Forrest is designed with the new user in mind. Much effort has gone into
        making the process of generating a new site <strong>easy</strong> and
        <strong>simple</strong>:
      </p>
<ul>
        
<li>
<strong>Step 1</strong>: Do <span class="codefrag">'forrest seed'</span> to populate
          the directory with template site structure and contents.</li>
        
<li>
<strong>Step 2</strong>: Add content by editing docs in
          task-specific, presentation-neutral XML.</li>
        
<li>
<strong>Step 3</strong>: Do <span class="codefrag">'forrest run'</span> then use
          the web browser to immediately review
          changes at <span class="codefrag">http://localhost:8888/</span>
</li>
        
<li>
<strong>Step 4</strong>: Do <span class="codefrag">'forrest'</span> to generate the
          complete website from the XML sources.
          Various styles (known as skins) are available. Custom skins
          can be developed.</li>
        
<li>
<strong>Step 5</strong>: For more information about installation
          and use, see the
          <a href="docs_0_70/your-project.html">Using Forrest</a> guide.
        </li>
      
</ul>
<div class="note">
<div class="label">Note</div>
<div class="content">
        The first time you run Forrest it may attempt to retrieve some plugins
        from the Internet (it depends on which distribution of Forrest you have
        installed). In some cases this will happen whenever a new plugin is
        specified, in other cases, for example when you have installed all
        plugins locally or have checked out the full source tree, the plugins
        will be retrieved from your local installation. In all cases once a
        plugin has been installed locally there is no need for Forrest to access
        the Internet. For more information see the
        <a href="pluginDocs/index.html">plugins documentation</a>.
      </div>
</div>
<p>
        Forrest's focus on low "startup cost" makes it ideal for rapid
        development of small sites, where time and budget constraints do not
        allow time-wasting HTML experiments. Of course, that same methodology
        can scale up to large projects. Your development team does not need Java
        experience, or even XML skills, to use Forrest. The framework lets you
        concentrate on content and design.
      </p>
<p>
        By <strong>separating content from presentation</strong>, providing
        <strong>content templates</strong> and <strong>pre-written
        skins</strong>, Forrest is unequalled at enabling content producers to
        get their message out fast. This separation of concerns makes Forrest
        excellent to publish <strong>project documentation</strong> (notably
        software projects), <strong>intranets</strong>, and <strong>home
        pages</strong>, and anything else you can think of.
      </p>
<p>
        Forrest is far from a quick and dirty solution however. Forrest is built
        on the world's leading XML application framework,
        <a href="http://cocoon.apache.org/2.1/">Apache Cocoon</a>, which provides advanced
        users with extremely powerful publishing capabilities.
      </p>
<ul>
        
<li>Multiple task-specific source XML formats can be used
            (<a href="howto-howto.html">How-To</a>,
          <a href="docs_0_70/faq.html">
          <acronym title="Frequently Asked Questions">FAQ</acronym></a>,
          <a href="docs_0_70/changes.html">changelogs</a> and
          <a href="docs_0_70/todo.html">todo lists</a> supported natively).
          Source formats include: Apache xdocs xml format, plain html
          documents, some Wiki formats, a subset of DocBook, ...
        </li>
        
<li>Multiple output formats supported, for example HTML and PDF (using
          <a href="http://xmlgraphics.apache.org/fop/">Apache FOP</a>).
        </li>
        
<li>SVG to PNG rendering (using <a href="http://xmlgraphics.apache.org/batik/">Apache
            Batik</a>). Simply drop the SVG in the appropriate directory
            and it will be rendered as PNG.</li>
        
<li>
          Transparent inclusion and aggregation of external content, like
          <a href="docs_0_70/changes.rss">RSS feeds</a>.
        </li>
        
<li>
          Anything else possible with the
          <a href="http://cocoon.apache.org/2.1/userdocs/concepts/sitemap.html">Cocoon sitemap</a>.  Using database
          queries, <a href="http://people.apache.org/~vgritsenko/stats/">charting</a>, web services
          integration; the possibilities are constantly growing as Cocoon grows.
          See the <a href="http://cocoon.apache.org/2.1/features.html">Cocoon Features</a> list
          for the full suite of capabilities.
        </li>
        
<li>
          Based on Java and XML standards, Forrest is platform-independent,
          making for a documentation system that is just as portable as the
          XML data that it processes.
        </li>
      
</ul>
<p>
        Unique amongst comparable documentation tools, Forrest generates sites
        that can run both <strong>interactively</strong> as a dynamic web
        application, or as statically rendered pages.
      </p>
<p>
        This provides a path for site growth: start off small and static, and if
        dynamic features (user login, forms processing, runtime data, site
        search etc) are one day needed, these can be accommodated by switching
        to webapp mode.
      </p>
<p>
        Running as a webapp has a major advantage during development: content
        can be written, and then the rendered output viewed almost instantly in
        a web browser. This <a href="docs_0_70/your-project.html#webapp">webapp
        technique</a> enables Forrest's edit/review cycle to be faster than
        command-line transformation tools.
      </p>
</div>
    
<a name="N100D5"></a><a name="status"></a>
<h2 class="underlined_10">History and project status</h2>
<div class="section">
<p>
        Apache Forrest was started in January 2002, with the major use-case
        being to create a consistent and efficient
        <a href="http://xml.apache.org/">xml.apache.org</a> group of
        project websites with a uniform, lightweight, easy-to-navigate layout
        and structure. In addition, Forrest was to be a Sourceforge-like project
        management tool, complementing <a href="http://gump.apache.org/">Apache Gump</a>
        (hence the name 'Forrest').
      </p>
<p>
        The focus shifted for Apache Forrest to primarily be a generic
        documentation tool capable of meeting many needs. Certain relevant
        project management facilities are being added.
      </p>
<p>
        Apache Forrest is currently progressing rapidly through a series of 0.x
        releases. It is certainly usable now (despite not yet being version
        1.x). See the growing list of <a href="live-sites.html">example
        sites</a> including many Apache sites.
      </p>
<p>
        In general, prior to 1.0, ensuring quality of design will be considered
        more important than retaining backwards-compatibility. Users
        (particularly those with custom sitemaps and skins) should be aware that
        this is evolving software, and read the release notes carefully before
        upgrading. That said, we appreciate the commitment in time that adopters
        make, and will not make capricious or undocumented
        backwards-incompatible changes.
      </p>
<p>
        Documentation on the Apache Forrest website exists for various versions
        including the latest release, the current development, and past
        releases. All versions of Forrest include their own copy of the
        documentation. There is also documentation for each plugin and the
        forrest seed site contains further examples and documentation (see
        <a href="docs_0_80/faq.html#docs">FAQ</a>).
      </p>
</div>
    
<a name="N100FB"></a><a name="news"></a>
<h2 class="underlined_10">News and events</h2>
<div class="section">
<p>
        See the <a href="events.html">events</a> list for more detail.
      </p>
<ul>
        
<li>
<!--
         <link href="http://apachecon.com/">
           <img src="http://apache.org/images/ac2005eu_135x50.gif"
             alt="ApacheCon Europe 2005" width="135" height="50"/>
         </link>
         
         <link href="http://apachecon.com/2006/EU/">ApacheCon EU 2006</link>
         - Please make plans to join us for the conference in
         Dublin, Ireland on 26-30 June 2006.-->
<!--
         See our <link href="site:events">events</link> list for the schedule
         of Forrest meetings at ApacheCon.
-->
</li>
        
<li>Apache Forrest 0.7 was released on 2005-06-23.
          An architecture for Plugins which enables a smaller Forrest
          core and the ability to add new features in a modular way.
        </li>
      
</ul>
</div>
    
<a name="N10114"></a><a name="help"></a>
<h2 class="underlined_10">Help Wanted!</h2>
<div class="section">
<p>
        Apache Forrest is fairly new, and is in need of developers. If you know
        (or want to learn) any of XML, Ant, HTML, XSLT, or CSS, then you are
        qualified to help.
      </p>
<p>
        As with all Apache projects, Forrest is a meritocracy; the more you put
        in, the more you get to define the project's future. See the
        <a href="contrib.html">"contributing"</a> page for more
        information.
      </p>
</div>
  
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
         2002-2007 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<div id="logos">
<a href="http://validator.w3.org/check/referer"><img style="height: 31px; width: 88px;" title="Valid HTML 4.01!" alt="Valid HTML 4.01!" src="skin/images/valid-html401.png" class="logoImage"></a><a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="height: 31px; width: 88px;" title="Valid CSS!" alt="Valid CSS!" src="skin/images/vcss.png" class="logoImage"></a><a href="http://forrest.apache.org/"><img border="0" title="Built with Apache Forrest" alt="Built with Apache Forrest - logo" src="skin/images/built-with-forrest-button.png" style="width: 88px;height: 31px;"></a><a href="http://cocoon.apache.org/"><img border="0" title="Built with Apache Cocoon" alt="Built with Apache Cocoon - logo" src="images/built-with-cocoon.gif" style="width: 88px;height: 31px;"></a><a href="http://www.apache.org/foundation/thanks.html"><img border="0" title="thanks to ASF, thanks from ASF" alt="thanks to ASF, thanks from ASF - logo" src="images/icon.png" style="width: 26px;height: 22px;"></a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>
