<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 2.5 License

Name       : Moonlight 
Description: A two-column, fixed-width design with dark color scheme.
Version    : 1.0
Released   : 20110815

-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta name="keywords" content="Apache Tcl Webprogramming" />
    <meta name="description" content="Website for the Tcl related projects within the Apache Software Foundation" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Apache Tcl</title>
    <link href="templates/moonlight/style.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<div id="wrapper">
	<div id="header" class="container">
		<div id="logo">
			<h1><a href="/">Apache Tcl</a></h1>
			<p>Tcl and Apache HTTP webserver Integration</p>
		</div>
		<div id="menu">
			<ul>
                <li class="current_page_item">
                    <a href="index.html">Home</a>
                </li>
				<li><a href="http://tcl.apache.org/rivet/">Rivet</a></li>
				<li><a href="http://tcl.apache.org/websh/">Websh</a></li>
				<!-- li><a href="http://tcl.apache.org/mod_tcl/">mod_tcl</a></li -->
				<li>
                    <a href="static/about.html">About Us</a></li>
			</ul>
		</div>
	</div>
	<!-- end #header -->
	<div id="page">
		<div id="content">
			<div class="post">
				<h2 class="title">Introduction</h2>
				<div style="clear: both;">&nbsp;</div>
				<div class="entry">
					<p>
              Apache Tcl is an umbrella for Tcl-Apache integration
              efforts. These projects combine the power of the Apache
              web server with the capabilities of the mature, robust
              and flexible Tcl scripting language.
            </p>

<p>
              New to Tcl?  Curious about its advantages?  Have a look
              at <a href="static/why.html">Why Tcl?</a>
</p>

<h3>Current Projects</h3>

<p>
    <a href="http://tcl.apache.org/rivet/" target="_blank">Apache Rivet</a>

 
                replaces most of the functionalities once in mod_dtcl and neowebscript. 
                We have taken the things we like most about both, fixed things we
                didn't like, and combined efforts in order to come up
                with something we're very pleased with.  
                For Apache 1.3 (Rivet 2.0) and 2.x (Rivet 2.0 and 2.1).
                </p>

<p>
    <a href="http://tcl.apache.org/websh/" target="_blank">Websh</a>

 
                is a rapid development
                environment for building powerful, fast, and reliable
                web applications. Websh is versatile and handles
                everything from HTML generation to data-base driven
                one-to-one page customization.  It has been used for
                years commercially, and is now part of the Apache Tcl
                project. For Apache 1.3, 2.0 and 2.2.
                </p>

<h4>Dismissed Project</h4>

<p>
                
                Support and development for
                <a href="http://tcl.apache.org/mod_tcl/" target="_blank">mod_tcl</a>


                has been dismissed. We recommend
                that new real world projects meant to run on Apache 2.x servers
                be developed with the current actively developed and/or supported sub-projects 
                <a href="http://tcl.apache.org/rivet/" target="_blank">Rivet</a>

 
                and 
                <a href="http://tcl.apache.org/websh/" target="_blank">Websh</a>
</p>


				</div>
			</div>
			<div style="clear: both;">&nbsp;</div>
		</div>
		<!-- end #content -->
		<div id="sidebar">
			<ul>
				<li id="base">
    <h2>Apache Tcl</h2>
    <ul>
        <li class="navitem">
            <a href="static/why.html">Why Tcl?</a>
        </li>
        <li class="navitem">
            <a href="static/contributing.html">Contributing</a>
        </li>
        <li class="navitem">
            <a href="static/tcl.html">Tcl Information</a>
        </li>
        <li class="navitem">
            <a href="static/about.html">About Us - Contact</a>
        </li>
    </ul>
</li>
<li id="projects">
    <h2>Projects</h2>
    <ul>
        <li class="navitem">
            <a href="http://tcl.apache.org/rivet/">Rivet</a>
        </li>
        <li class="navitem">
            <a href="http://tcl.apache.org/websh/">Websh</a>
        </li>
    </ul>
</li>
<li id="acknowledgments">
    <h2>Acknowledgments</h2>
    <ul>
        <li class="navitem">
            <a href="http://http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
        </li>
    </ul>
</li>

			</ul>
		</div>
		<!-- end #sidebar -->
		<div style="clear: both;">&nbsp;</div>
	</div>
	<!-- end #page -->
</div>
<div id="footer">
	<p>Copyright &copy; 2013 Apache Software Foundation. All rights reserved. Design by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>.</p>
</div>
<!-- end #footer -->
</body>
</html>

