<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<tocitems>
<tocitem level="1" href="#Introduction" title="Introduction"></tocitem>
<tocitem level="1" href="#User-friendly" title="User-friendly"></tocitem>
<tocitem level="1" href="#Powerful" title="Powerful">
<tocitem level="2" href="#Static+or+Dynamic" title="Static or Dynamic"></tocitem>
</tocitem>
<tocitem level="1" href="#History" title="History"></tocitem>
<tocitem level="1" href="#status" title="Project status and website status"></tocitem>
<tocitem level="1" href="#news" title="News and events"></tocitem>
<tocitem level="1" href="#help" title="Help Wanted!"></tocitem>
</tocitems>
<!--
  Copyright 2002-2005 The Apache Software Foundation or its licensors,
  as applicable.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
--><meta-data></meta-data><div id="content">
<div id="skinconf-printlink"></div>
<div id="skinconf-xmllink"></div>
<div id="skinconf-podlink"></div>
<div id="skinconf-txtlink"></div>
<div id="skinconf-pdflink"></div>
<div id="disable-font-script"></div>
<h1>Welcome to Apache Forrest</h1>
<div id="skinconf-toc-page"></div>
    
<a name="N1000D"></a><a name="Introduction"></a>
<div class="skinconf-heading-1">
<h1>Introduction</h1>
</div>
<div class="section">
<p>
        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.
      </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>
</div>

    
<a name="N1001E"></a><a name="User-friendly"></a>
<div class="skinconf-heading-1">
<h1>User-friendly</h1>
</div>
<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 will attempt to retrieve some plugins
        from the Internet. This will happen whenever a new plugin is specified. 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>
</div>
    
<a name="N1007B"></a><a name="Powerful"></a>
<div class="skinconf-heading-1">
<h1>Powerful</h1>
</div>
<div class="section">
<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="docs_0_70/howto/">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://xml.apache.org/fop/">Apache FOP</a>).
        </li>
        
<li>SVG to PNG rendering (using <a href="http://xml.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>
<a name="N100C7"></a><a name="Static+or+Dynamic"></a>
<div class="skinconf-heading-2">
<h2>Static or Dynamic</h2>
</div>
<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="N100DF"></a><a name="History"></a>
<div class="skinconf-heading-1">
<h1>History</h1>
</div>
<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>
</div>

    
<a name="N100F4"></a><a name="status"></a>
<div class="skinconf-heading-1">
<h1>Project status and website status</h1>
</div>
<div class="section">
<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.
        To view it, do 'cd site-author; forrest run' and visit
        http://localhost:8888/ in your browser.
        The <a href="http://forrest.apache.org/">Apache Forrest website</a> is updated
        manually as needed, while we develop the
        <a href="proposal-asf-forrestbot.html">forrestbot</a> deployment facility.
      </p>
</div>
    
<a name="N10110"></a><a name="news"></a>
<div class="skinconf-heading-1">
<h1>News and events</h1>
</div>
<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>
         -->
         
<a href="http://apachecon.com/">ApacheCon US 2005</a>
         - Please make plans to join us for the conference in
         San Diego, California, USA on 10-14 December 2005.
         See our <a href="events.html">events</a> 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="N10131"></a><a name="help"></a>
<div class="skinconf-heading-1">
<h1>Help Wanted!</h1>
</div>
<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>
