<?xml version="1.0"?>
<!--
   Copyright 2004 The Apache Software Foundation
  
   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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
<document>

 <header>
  <title>Jakarta Tapestry - Welcome!</title>
 </header>

<body>

<section>
		<title>Introduction</title>
		
<p>
Tapestry is a powerful, open-source, all-Java framework
for creating leading edge web applications in Java.
</p>

<p>
Tapestry reconceptualizes web application development 
in terms of objects, methods and properties
instead of URLs and query parameters.
</p>

<p>
Tapestry is an alternative to scripting environments such as
JavaServer Pages or Velocity.  Tapestry goes far further,
providing a complete framework for creating extremely dynamic applications
with minimal amounts of coding.
</p>

<p>
Tapestry's approach, using a component object model similar to a
traditional GUI, provides the following benefits:
</p>

<ul>
<li>Very high level of reuse, within and between projects<br/><i>Everything in Tapestry is a reusable component</i></li>
<li>Frees developers from writing boring, buggy code<br/><i>Code in terms of objects, methods and properties, not URLs and query parameters</i></li>
<li>Allows applications' complexity to scale well<br/><i>Framework does all the URL building and message dispatching, transparently</i></li>
<li>Easy Internationalization/Localization<br/><i>Framework selects localized version of text, templates and images</i></li>
<li>Extremely robust applications<br/><i>Less code is less bugs<br/>Sophisticated built-in exception reporting<br/><link href="faq.html#lineprecise">Line precise error reporting</link></i></li>
<li>Easy team integration<br/><i>Graphic designers and Java developers can work together without having to know each other's jobs</i></li>
</ul>
<p>
Tapestry is distributed under the terms of the Apache Software License.
</p>

<p>Tapestry exploits the dynamic nature of the Java language, leveraging 
the JavaBeans API, as well as servlets and other J2EE technology.
Tapestry applications are fast, scalable, robust and powerful.
</p>

<p>
Tapestry components are a combination of a specification file (in XML),
an HTML template and a Java class (extending a framework class,
with simple additions). Tapestry components are combined together
 to form larger components or complete Tapestry pages.
</p>

</section>

<section>
  <title>Status</title>
  
<p>
This release is Tapestry 3.0.3, the final bug fix release for Tapestry 3.0.
</p>

<p>Current development efforts are focused on Tapestry 3.1,
which rebuilds Tapestry on top of the
<link href="http://jakarta.apache.org/hivemind/">HiveMind</link> microkernel, simplifies code and development,
and ads a boat load of new features.</p>

<p>
<a href="http://jakarta.apache.org/tapestry/current/">
A preview of the Tapestry 3.1 documentation is available</a>.
</p>

</section>

<section>
		<title>Tapestry in Print</title>


<figure src="images/tapestry-in-action.png" alt="Tapestry in Action Cover"/> 
<p>
<link href="http://www.manning.com/lewisship/index.html">Tapestry in Action</link>
is now available from
Manning Publications. It is the
definitive introduction to Tapestry written by Howard Lewis Ship, the creator of Tapestry.
</p>

<figure src="images/tapestry-german-cover.gif" alt="Tapestry Webanwendungen mit dem Apache Framework"/>

<p>
<link href="http://entwickler.com/sus/sus_buch/psecom,id,60,nodeid,8,_language,uk.html">Tapestry Webanwendungen mit dem Apache Framework</link> is a fast-paced guide to using
Tapestry, focusing on combining Tapestry with other open-source frameworks, as well as developing Tapestry applications using
<a href="http://spindle.sourceforge.net/">Spindle</a>. The book is written in German, and authored by
Stefan Edlich and Patrick Kunert.
</p>

<p>Tapestry has also  been described in the print journal 
<em>The Java Report</em> in the September 2001 issue.  Other articles
includes the on-line journal
<link href="http://www.onjava.com/pub/a/onjava/2001/11/21/tapestry.html">OnJava</link>,
in November 2001.
</p>

</section>

<section>
		<title>Tapestry Community</title>


<p>
Tapestry has a very active 
<link href="mailto:tapestry-user-subscribe@jakarta.apache.org">User</link> mailing list, with
<link href="http://news.gmane.org/thread.php?group=gmane.comp.java.tapestry.user">archives</link>.
This is the list for getting help with using the framework.
</p>

<p>
The <link href="mailto:tapestry-dev-subscribe@jakarta.apache.org">Developer</link>
mailing list is for Tapestry committers and other power users to discuss
enhancements to the framework.  It also has 
<link href="http://news.gmane.org/thread.php?group=gmane.comp.jakarta.tapestry.devel">archives</link>.

</p>

<p>
A <link href="site:wiki">Wiki</link> has been set 
up to discuss Tapestry and plan new features.
</p>

</section>

</body>
</document>
